так во времени же это не совпадает, и так плавную коррекцию проще делать, даже для непостоянной и непредсказуемой длины кадра
во всяком случае, на практике длина очереди в сэмплах иногда бывает даже нечётная, а не то что кратная "круглым" числам
Вид для печати
Посмотрел, какие режимы синхронизации в ZXMAK2 самые 'плавные'.
Режим синхронизации по звуку и по таймеру выглядят похоже.
Режим синхронизации по видео - дергается больше. Примерно так же неприятно, как и Spectaculator, хотя визуально немного иначе.
В твоем эмуляторе 1.0 (который в первом посту) дергается примерно так же, как и в Spectaculator'е. Т.е. самым заметным образом.
что значит "точную"? эмуляция любая будет с задержкой даже для осей реального времени
но хотя бы накопления ошибки избежать можно, а человеческому уху без разницы периодически плюс-минус десяток сэмплов
естьтакая партиятакой тест!
https://zx-pk.ru/threads/27710-zx-ulax.html
f2, f3 - переключение скорости на ходу
Десяток? Что ты с ними делаешь? Выкидываешь?
Это очень много и на слух слышно.
- - - Добавлено - - -
На моем компьютере (Win8.1) примерно раз в несколько секунд слышен щелчок. Видимо, как раз твое несхождение аудиобуфера корректируется.
в Win7 прекрасно приходят нотификации проигрываемой позиции. В ZXMAK2 они используются для подкидывания новой порции данных в циркулярный буфер. Правда верить им нельзя, видимо на нижнем уровне у системы есть своя буферизация, поэтому нотификации могут приходить по две штуки сразу не равномерно во времени.
Зачем отслеживать текущую позицию до байта не совсем понятно, т.к. произвести синхронизацию потоков с достатой скоростью (1/44100 = 0.0000226 сек) не получится.
- - - Добавлено - - -
многие хорошие жк дисплеи могут работать с развёрткой 75 Гц. В этом режиме 50 Гц скролы гораздо лучше работают, чем с 60 Гц или 85 Гц. У меня например работает 75 Гц. Правда режим 75 Гц виден только если выключить галку "не показывать режимы, которые не поддерживаются дисплеем".
С частотой дисплея есть ещё такой прикол, что в системе может быть несколько дисплеев, с разной частотой развёртки. Например одна область рабочего стола обновляется с частотой 100 Гц, вторая с частотой 75 Гц, а третья с частотой 60 Гц. И окошко можно прямо во время работы перемещать по пространству рабочего стола.
Т.е. часть окна эмулятора может обновляться с частотой 60 Гц, а другая часть с частотой 75 Гц, при этом много подводных камней возникает. Если интересно, можете глянуть как эти вещи ZXMAK2 обрабатывает. Смотреть с включенным логом, там будут сообщения появляться о переключении на другой дисплей/частоту развёртки во время перемещения окна по пространству рабочего стола :)
85 Гц - это очень неудачная частота для 50 Гц развёртки
проблема там в том, что видеокарта и звуковая карта тактируются от разных кварцев, которые не синхронизированы между собой и у них плавают частота и фаза от температуры, у каждого по своему (да и температура у видеокарты и звуковухи разная). Поэтому ошибка со временем всегда будет набегать.
Тут уж надо выбирать что пропускать при критическом набегании ошибки - либо звуковой, либо видеокадр. Поэтому в ZXMAK2 сделан выбор источника синхронизации. При синхре от звука пропускаются видеокадры, а звук поддерживается стабильным. При синхре от видео наоборот. При синхре от времени выпадает и то и другое, в зависимости от того где частота больше уходит от системного таймера.
- - - Добавлено - - -
кратность не имеет смысла. Железо проигрывает циркулярный буфер, писать в него можно порции любого размера (в пределах размера буфера разумеется). Главное помнить, что при наложении записи на текущую позицию воспроизведения, будут возникать артефакты воспроизведения. Поэтому некоторый участок, где сейчас примерно идёт воспроизведение лучше не трогать.