монитор не засыпал это точно.
у меня ASUS VG27AQ
Вид для печати
монитор не засыпал это точно.
у меня ASUS VG27AQ
Тогда хорошо бы выяснить, при каких условиях вдруг теряется столько кадров (когда в консоли пишет, что 1000 frames lost).
- - - Добавлено - - -
Интересно, что больше 10 лет назад, когда я тестил совместную синхронизацию видео и аудио, я считал, что начиная с Win7 из-за большой дискретности буфера синхронизация будет невозможна. А в итоге она оказалась не только возможна, но все остальное качественно удалось перевести на новый уровень.
- - - Добавлено - - -
И вот люди соглашались со мной.
А оказалось, что методика синхронизации есть, хотя и весьма сложная.
Запускаю EmuStudio v0.9 test 1 (50Hz, AudioBuf 3.5 frame, DWM(Win7)).exe
получаю расколбас :confused:
версия EmuStudio v0.9 test 1 (50Hz, AudioBuf 3.5 frame).exe на первый взгляд нормально
https://i.imgur.com/tSk2zvA.png
откидывание одного сэмпла - это по сути децимация x2, чтобы изменения не были заметны на слух, перед такой операцией нужно наложить ФНЧ, обрезав верхнюю 1/2 полосы спектра сигнала. Если откидывается 2 сэмпла, то соответственно - это уже децимация x3 и перед этой операцией нужно наложить ФНЧ обрезав верхние 2/3 спектра. Чтобы откинуть 3 байта - нужно уже выкинуть 3/4 полосы сигнала.
Грубо говоря, чтобы без существенного вреда для сигнала откинуть 3 сэмпла нужно сжать полосу сигнала с 20 кГц до 5 кГц. Если этого не делать, то откидывание даже одного сэмпла добавит алиасинг, т.е. приведет к появлению новых частот в спектре сигнала, которых в нем изначально не было.
Соответственно, чем больше сэмплов откидывается, тем быстрее спектр сигнала скукоживается превращаясь в прямую, альтернатива без ФНЧ - получаем шумы, свисты и искажения, которых в исходном сигнале не было.
Если откидывание происходит редко, то и искажения звука будут происходить реже и их сложнее будет заметить, но практически всегда можно подобрать звуковой паттерн, который позволит разборчиво слышать добавленные артефакты и искажения звука.
Все собственно также как и с изображением - выпадание одного кадра изображения из видео обычно не заметно, но всегда можно подобрать такую анимацию, которая позволит разборчиво видеть артефакты вызванные выпаданием даже одного кадра - те-же плавные скроллы.
На мой взгляд задача одновременной синхронизации от двух асинхронных клоков без заметного ущерба для видеосигнала или аудиосигнала, без недостатков практически не решаема. Уровень искажений можно было бы уменьшить увеличив частоту дискретизации звука до нескольких мегагерц, но на практике это нереально, т.к. потребует делать апсэмплинг, обработку с выборочным прореживанием на высокой частоте дискретизации и затем даунсэмплинг, а это будет довольно затратно в плане вычислительных ресурсов, т.к. и то и другое требует наложения фильтров, а аудиопоток получается довольно увесистый, что скажется на загрузке процессора и эмуляции в целом.
Titus, возможно такие потери фреймов были изза моего жёсткого диска (они периодически уходят в сон - запускаются).
сколько сейчас не пробовал запускать при 100 гц на мониторе EmuStudio v0.9 test 1 (100Hz, AudioBuf 3.5 frame) - потери 1 фрейм.
Ты не понял сути)
Никакой один, тем более два и три семпла не откидывается.
Откидывается или прибавляется 1/256 семпла. И то один раз в кадр.
- - - Добавлено - - -
На мой взгляд тоже была не решаема, пока не решил.
Как говорится в детской считалочке - а если вы не верите, возьмите и проверите)
Говоря еще проще, делается так:
Каждый кадр вычисляется, приближается позиция записи к позозиции воспроизведения или отдаляется.
Если приближается, то в следующий кадр будет сгенерировано условно не 1920 семплов, а 1919.999.
Если удаляется, то будет сгенерировано 1920.001.
И то эта регуляция происходит очень плавно.
Сперва делал ее специально грубой, чтобы понять, колебания частоты в каком знаке все еще будет заметно на слух.
Потом уменьшил это значение примерно в 1000 раз.
- - - Добавлено - - -
Тоже странно, ведь эмулятор не лазает на жесткий диск в процессе работы. Если только в него не кинуть снапшотом. Но в логи нет надписи, что ты кинул снапшот в этот момент.
В общем, хорошо бы понять, почему это происходило. Это не то, чтобы плохо, но если такое у кого-то происходит, надо понимать, почему, и надо это корректировать.
ну, и у меня так же, разве что разницу иначе замеряю, но при достаточной стабильности системы это неважно
а при недостаточной - в строгом смысле никакой высокой точности "до надцатого знака" и не получишь, где-то да вылезет
а вот здесь пжалста поподробней, каким чудом получается "отправить" дробную часть по определению дискретной величины :v2_crazy:
подозреваю, ты несколько другое имел в виду, а именно - плавную корректировку частоты дискретизации звука
при которой, есс-но, кол-во сэмплов на порцию остаётся целым, как и положено
как по мне, оно и в третьем знаке незаметно, тем более на спековском звуке
- - - Добавлено - - -
не откидывание, а плавный сдвиг позиций на графике
- - - Добавлено - - -
да не нужно никаких альтернативных режимов, звук синхронизировать всегда надо только с частотой эмуляции
а уж как там эмуль на монитор выводит - повторяет кадры, пропускает или интерполирует - вообще неважно
главное, что между двух любых опорных точек (совпадения эмуляции и монитора) - звук не меняется
Полезное содержимое мгновенно улетает куда-то далеко, в видимой зоне только однотипные сообщения про потерянные фреймы.
При попытке вывода консольных сообщений в файл - создаётся пустой (оно и логично, потому что другое окно открывается).
Композицию включать не планировал.