User Tag List

Страница 66 из 73 ПерваяПервая ... 626364656667686970 ... ПоследняяПоследняя
Показано с 651 по 660 из 727

Тема: EmuStudio-ZX

  1. #651

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,403
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,223
    Поблагодарили
    875 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    И вот главный вопрос - откуда брать недостающую муку или куда девать лишний сахар?
    Растягивать и недосыпать)
    Если у тебя монитор на компьютере дает 50.1Гц, а спектрум 49.9Гц (для примеру), то придется растянуть времянки спектрума до 50.1Гц.
    Тоже самое и со звуком.

    - - - Добавлено - - -

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    Второй момент - точность измерения частоты видео и звука. Любой пропуск кадра может вносить значительные ошибки, особенно при высокой нагрузке системы. Также, по моим тестам, некоторые драйверы звуковых карт ведут себя нестабильно - уведомления о позиции воспроизведения могут приходить нерегулярными порциями (например, сначала 1 сэмпл, затем 1024, потом 7 сэмплов, потом 1600 и т. д.), а иногда обновления могут даже группироваться в серии без задержек. Все эти факторы значительно снижают точность определения реальной частоты дискретизации звука, поскольку затрудняют точное измерение объёма аппаратного буфера и частоты его обновления в процессе воспроизведения.
    Совершенно, верно. Точность измерения частоты кадров и семплов - это самое сложное, над чем я долго работал.
    Твои тесты драйверов звуковых карт, как я понял, опираются на DirectSound. А это очень старая технология, которая эмулируется через WASAPI уже сто лет как.
    Что же касается WASAPI, то даже в кооперативном (обычном) режиме, забор данных идет плюс-минус равномерно. Но даже с теми звуковухами, которые имеют внутренние дополнительные буфера-прослойки (у меня есть такая карта), все равно получается стабильно с моим алгоритмом, приходится только несколько побольше сделать зазор звукового буфера (лишние 10мс, в худшем случае 20мс). А в целом основная часть звуковух работает стабильно с зазором 5мс. Впрочем, можно ставить 2-3мс, но это такие мелочи, которые можно округлить до 5мс для надежности.
    Я гонял эту систему стабилизации на совершенно разных и даже очень тормозных компах, пока что прекрасно справляется.
    Впрочем, вполне возможно, что найдутся какие-то экзотические случаи, но пока что не встретились.
    Система на столько универсальна, что любые большие биения и нестабильности лечатся одним и тем же алгоритмом, просто требуют несколько большего зазора звукового буфера, вот и все.

    - - - Добавлено - - -

    Приведу такую аналогию.
    В комнате болтается маятник подвешенный под потолком (трения нет, он качается не затухая). Если маятник хороший, стандартный, то он качается равномерно, и если зазор от крайних положений маятника до стен 1 метр, маятник с большой долей вероятности будет всегда качаться одинаково, не доставая до стен (не вызывая переполнения буфера, пересинхронизации и требования новой раскачки). Частоту качаний маятника тоже легко измерить на достаточно коротком окне.
    Но предположим, что на маятник действуют дополнительные силы, например, крюк, на котором он качается, ездит туда-сюда с какой-то периодичностью. А этот крюк ездит еще по одним рельсам со своей периодичностью. Теперь, чтобы маятник не касался стен, стены надо немного раздвинуть. Иногда много. Но всегда есть такое положение стен, когда даже такой сложно предсказуемый на коротком отрезке времени маятник будет качаться не доставая до стен. Что же касается вычисления частоты качания маятника, то тут становится сложнее, но на более большом окне она вычисляется стабильно. И чем больше проходит времени с момента запуска эмулятора, тем стабильность выше.

    - - - Добавлено - - -

    Если ты посмотришь на графики работы аудиосистемы, которые тут выкладывали, то фиолетовый график - это и есть диаграмма качания маятника.
    Он то приближается к одной стене, то к другой, качается у всех по разному (в зависимости от интерференции частоты семплов и кадров на конкретной машине), но все время удерживается в стабильном коридоре. Если же качнется за пределы, то наступит пересинхронизация (установка маятника в середину коридора). Но при оптимальном зазоре сверху и снизу пересинхронизация не наступит никогда.

  2. #652

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Растягивать и недосыпать)
    Если у тебя монитор на компьютере дает 50.1Гц, а спектрум 49.9Гц (для примеру), то придется растянуть времянки спектрума до 50.1Гц.
    Тоже самое и со звуком.
    Регулировать скорость эмуляции не проблема, но вот беда - если нам не хватает скорости обновления видео и мы увеличиваем скорость эмуляции, то это приводит к увеличению скорости поступления сэмплов со звуком, а скорость забора звуковых сэмплов мы регулировать не можем.

    Если-же отбрасывать сэмплы или вставлять копии - это приведет к искажению звука или видео. В этом собственно и вопрос - как это решать?

    Насколько понимаю, задача точной синхронизации трёх независимых осцилляторов с медленно дрейфующими частотами и случайным начальным отклонением частот в общем случае не имеет точного решения. Поправьте, если ошибаюсь.


    Например, можно взять два генератора, смешать их сигналы на смесителе и наблюдать результат на осциллографе. Плавно регулируя частоту одного из генераторов, можно добиться стабилизации биений. Однако, если генераторы тактируются от асинхронных источников, то после настройки на стабильные биения система довольно быстро выходит из этого состояния в одну или другую случайную сторону, требуя непрерывной подстройки частоты для удержания стабильного состояния.

    Если же добавить третий генератор с независимым тактированием, то добиться устойчивой стабилизации биений, регулируя частоту только одного из генераторов, уже не получится. В этом случае фаза и частота биений будут постоянно дрейфовать, так как система имеет три независимых осциллятора с несвязанными дрейфующими частотами.

    Это по сути модель нашей системы с эмулятором и приёмниками видео и аудио фреймов на ПК. Где мы можем регулировать частоту только одного осциллятора (скорость эмуляции). Мы можем подстроить скорость эмуляции под стабилизацию к частоте видеокарты или под стабилизацию к частоте звуковой карты, но не к обоим одновременно.

    Поэтому в ZXMAK2 сделан выбор источника синхронизации, позволяющий выбрать под что именно подстраиваться.

    Цитата Сообщение от Titus Посмотреть сообщение
    Твои тесты драйверов звуковых карт, как я понял, опираются на DirectSound. А это очень старая технология, которая эмулируется через WASAPI уже сто лет как.
    Нет, я тестировал на Linux используя Pipewire, который появился только в 2017 году и используя свежие обновления 2024 года. Такие результаты я получал на USB звуковой карте, чип которой появился примерно в 2021 году. Насколько помню, проблема там именно в драйвере,т.к. с другими бекэндами результаты были аналогичными. А вот на другой звуковой карте все было красиво - достаточно быстрые уведомления и более менее стабильно, хотя всеравно иногда наблюдались отклонения в размере нотификации и нотификации также иногда приходили пачками.

    При использовании OpenAL можно задавать число сэмплов через которое драйвер будет обновлять позицию воспроизведения, но у звуковых карт есть нижний лимит, если задать ниже - уведомления будут приходить просто с минимально возможным для данной звуковой карты периодом. И гарантии, что уведомления будут приходит с фиксированным интервалом нет, два уведомления могут приходить без задержки вообще и тогда следующая задержка будет в два раза больше обычной.
    Последний раз редактировалось ZXMAK; 10.03.2025 в 03:48.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  3. #653

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,403
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,223
    Поблагодарили
    875 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    Регулировать скорость эмуляции не проблема, но вот беда - если нам не хватает скорости обновления видео и мы увеличиваем скорость эмуляции, то это приводит к увеличению скорости поступления сэмплов со звуком, а скорость забора звуковых сэмплов мы регулировать не можем.

    Если-же отбрасывать сэмплы или вставлять копии - это приведет к искажению звука или видео. В этом собственно и вопрос - как это решать?
    Что значит как решать? Я просто вписываю нужное число тактов процессора Z80, отработанное за кадр в необходимую длину аудиокадра.
    Если у меня в этом кадре по расчетам должно быть проиграно 960.001 семпла, то ровно во столько семплов я и сгенерю звук от текущего кадра Z80.

    - - - Добавлено - - -

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    Нет, я тестировал на Linux используя Pipewire,
    Линукс меня не интересует в принципе)
    Равно как и OpenAL.

    У меня есть стандартный PC со стандартной Виндой, и это моя область разработки.

  4. #654

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Что значит как решать? Я просто вписываю нужное число тактов процессора Z80, отработанное за кадр в необходимую длину аудиокадра.
    Если у меня в этом кадре по расчетам должно быть проиграно 960.001 семпла, то ровно во столько семплов я и сгенерю звук от текущего кадра Z80.
    Тоесть ты по сути точно также выкидываешь или добавляешь сэмплы, только с апсэмплиногом до 3.5 МГц?
    Да, так влияение искажений будет ослаблено за счет апсэмплинга, который в данном случае составит порядка 3.5М/48k=x73.

    А как происходит децимация с частоты Fclk Z80 до Fs аудиопотока? Как понимаю, от реализации этой части и будет зависеть уровень искажений. Частота Z80 не делится кратно на стандартные частоты звуковых карт (48 кГц или 44.1 кГц). Какой подход тут применяется?
    Последний раз редактировалось ZXMAK; 10.03.2025 в 04:11.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  5. #655

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,970
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    320
    Спасибо Благодарностей получено 
    316
    Поблагодарили
    239 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Легко. Генерирую дробное, например, 1920.0001, а отправляю целое 1920, а 0.0001 перенесется на следующую посылку. Так за 10 тысяч итераций набежит еще один байт.
    так в том кадре, на котором набежал уже целый сэмпл (почему "байт", кстати? у тебя что, звук восьмибитный?) будут те же самые "доли процента", как у меня

    - - - Добавлено - - -

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    Если использовать аналогию с конвейером, то у нас две линии – для муки и сахара. На входе строго синхронно, каждую секунду, подаётся ровно по 1 литру муки и 1 литру сахара. Но на выходе муку забирают ложкой объёмом 1.1 литра в секунду, а сахар - 0.9 литра в секунду.
    да не так, блин мы дискретизируем волну, непрерывную
    то есть разливаем по дискретным бутылкам непрерывный поток воды, вытекающий из трубы
    за одно и то же время разлить можем или в 100 бутылок, или в 101, или в 99
    в любом случае объём останется тем же, как и минеральный состав

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    Если-же отбрасывать сэмплы или вставлять копии - это приведет к искажению звука или видео. В этом собственно и вопрос - как это решать?
    никто ничего не отбрасывает и тем более не вставляет копий, не фантазируй
    сэмплы - это равномерно расставленные точки на графике исходной волны
    на том же графике при другом кол-ве сэмплов их координаты будут другими
    расстояние между соседними - будет другим (это как объём воды в бутылке как раз)
    Прихожу без разрешения, сею смерть и разрушение...

  6. #656

    Регистрация
    04.08.2005
    Адрес
    Nizhnevartovsk
    Сообщений
    1,091
    Спасибо Благодарностей отдано 
    102
    Спасибо Благодарностей получено 
    152
    Поблагодарили
    100 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Корежить звук, даже на минимальную писечку, в угоду "плавности картинки" - концептуально неправильно. Если опции "не трогать звук" нет, то нафиг такую эмуляцию, ИМХО.

  7. #657

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,970
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    320
    Спасибо Благодарностей получено 
    316
    Поблагодарили
    239 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Dexus Посмотреть сообщение
    Корежить звук, даже на минимальную писечку, в угоду "плавности картинки" - концептуально неправильно. Если опции "не трогать звук" нет, то нафиг такую эмуляцию, ИМХО.
    что значит "не трогать"? если вдруг кто еще не в курсе, звук - это аналоговый сигнал, был дискретизирован = уже тронули, ЛЮБАЯ дискретизация "звук корёжит"

    - - - Добавлено - - -

    отсюда логический вывод - если всё равно "корёжить" приходится, то надо делать это именно "в угоду картинке"
    Прихожу без разрешения, сею смерть и разрушение...

  8. #658

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    в любом случае объём останется тем же, как и минеральный состав
    э нет, для звуковой карты время течет иначе чем для видеокарты, поэтому условно говоря за время 100 кадров видеокарты, на часах звуковой карты может набежать 100 ± 5 кадров (цифры взяты от балды для примера). И скорость течения времени постоянно меняется, как у звуковой карты, так и у видеокарты, поэтому в какой-то момент часы видеокарты могут идти быстрее, в другой момент времени наоборот.

    Это для эмулятора время звука и видео всегда одинаково, т.к. у спектрума они синхронизированы от одного клока. А для звуковой карты и видеокарты время течет по разному, поэтому 1 секунда эмулятора (50 кадров) на видеокарте и на звуковой карте будут воспроизводиться разное время.

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    на том же графике при другом кол-ве сэмплов их координаты будут другими
    расстояние между соседними - будет другим (это как объём воды в бутылке как раз)
    для того чтобы координаты сэмплов стали другими, сигнал нужно реконструировать в непрерывный и передискретизировать заново в новой координатной сетке. Грубо говоря сделать апсемплинг и затем даунсемплинг к другой частоте дискретизации. Операция довольно тяжелая и проблематичная, особенно учитывая дробные коэффициенты преобразования. Без искажений сигнала и нагрузки на процессор тут не обойтись.
    Последний раз редактировалось ZXMAK; 10.03.2025 в 11:27.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  9. #659

    Регистрация
    04.08.2005
    Адрес
    Nizhnevartovsk
    Сообщений
    1,091
    Спасибо Благодарностей отдано 
    102
    Спасибо Благодарностей получено 
    152
    Поблагодарили
    100 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    отсюда логический вывод - если всё равно "корёжить" приходится, то надо делать это именно "в угоду картинке"
    Нет.
    Из-за этого "в угоду картинке" в том же твиче периодически частота начинает плавать.

    Если у кого-то табун медведей пробежался по ушам, не значит что никто не заметит эту жуть.

    Нельзя трогать звук, и передискретизировать его туда-сюда чтобы фреймы ровно шли.

  10. #660

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    ЛЮБАЯ дискретизация "звук корёжит"
    корежит при условии, что на входе дискретизатора присутствуют частоты выше Fs/2 (ну или ниже, с учетом фазы).
    Если полоса сигнала на входе дискретизатора скажем 1/10 от полосы дискретизатора, то ничего не корежится (в пределах разумного).
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

Страница 66 из 73 ПерваяПервая ... 626364656667686970 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Эмулятор УКНЦ - EmuStudio
    от Titus в разделе Эмуляторы отечественных компьютеров
    Ответов: 1198
    Последнее: 07.05.2025, 13:34
  2. Эмулятор МС-0515 - EmuStudio
    от Titus в разделе Эмуляторы отечественных компьютеров
    Ответов: 143
    Последнее: 09.02.2023, 10:44

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •