число вроде сразу же, тестировалось минут 10
Вид для печати
Извиняюсь, не получилось прошлый тест прогнать в предыдущие дни - были проблемы.
Вот результаты последнего теста на двух домашних ноутбуках с win10-x64.
https://s8.hostingkartinok.com/uploa...1deceb5e81.png
https://s8.hostingkartinok.com/uploa...f39cfa8aee.png
-------
Перед снятием скриншота выдерживал где-то минут 40. Когда появились числа на 1-м скриншоте, точно не знаю, но не ранее чем через 15 минут от начала теста.
-------
Завтра еще на win7 на работе потестирую.
Результаты теста
https://b.radikal.ru/b09/2003/00/041ad5e9161bt.jpg
Прогон теста велся 50 минут
Система:
ОС Win 10 20h1 сборка 2004 версия 19577.1000
ОЗУ 16 гб.
Звук creative sound blaster Z
Еще пара тестов с двух компов с win7-x64
https://s8.hostingkartinok.com/uploa...9c4ca049b4.png
https://s8.hostingkartinok.com/uploa...44f6214ae5.png
---
Гонял минут по 15 каждый.
Итак, подведем некоторый итог.
Комплексные тесты DirectSound и WASAPI Share показали, что чуть более, чем в половине случаев, идея удачная, и позволяет достаточно быстро и точно вычислить реальную частоту семплов.
В меньшем количестве случаев звуковая карточка не дает точной позиции воспроизведения (огрубляя до 480 (10мс) в любой момент времени). В этом случае также можно вычислить достаточно точную частоту семплов, но ждать придется гораздо дольше (примерно в 480 раз), либо использовать прекалькулированную частоту, выстчитанную ранее за предыдущий сеанс. Также, при такой грубости придется всегда иметь резервный зазор в буфере минимум на 480 отсчетов (10мс), что так же снижает скорость отклика звука относительно реального времени.
Извиняюсь, что немного поздно, но лучше поздно...
Windows 10 x64, Core i7-9700K, Denafrips Ares with XMOS XU208 USB Audio
https://pic.maxiol.com/images2/15837...82.screen1.png
https://pic.maxiol.com/images2/15837...82.screen2.png
Гонял минут 15.
Итак, новая итерация и совершенно новый принцип подхода к движку эмуляции.
По сравнению с предыдущим движком (2005 года) переписано примерно всё. Кроме ядер эмуляции, но это уже следующая очередь.
Самое главное, что я наконец-то добился от движка того, чего хотел, а именно:
1. Точная синхронизация видео и аудио, не зависимо от того, какие характеристики и источники тактирования у видео и аудиокарт.
2. Надежная работа всего этого на большинстве современных компьютеров начиная с Win7 (вот это мы сейчас и проверим).
3. Сверхмалая задержка вывода изображения. В современных системах с поддержкой Independent Flip менее <10мс (при развертке 100Гц) в любом режиме (оконном и полноэкранном). В старых системах задержка на 1 кадр дольше.
4. Сверхмалая задержка вывода звука в кооперативном режиме WASAPI (это стандартный режим, в котором звук от всех приложений смешивается, затем выводится в конечную точку аудиовывода). И это не смотря на достаточно сложную систему синхронизации аудио и видео, требующую временные зазоры для колебаний частот синхронизации.
5. Всякие мелочи типа - никаких щелчков в динамиках при запуске и закрытии эмулятора.
6. Самое качественное масштабирование изображение до любых размеров без какого-либо особо заметного альясинга (учитывая сканлайны, которые и порождают интерференцию).
7. И всякое другое.
Теперь немного подробнее. Фактически версия эмулятора является пока что тестом нового движка эмуляции, и модель Спектрума 48 (весьма абстрактная, не пентагон, не классика, а просто для теста с выводом звук а на биппер (AY пока нет)) играет роль тестовой модели.
Все, подо что был написан старый движок эмулятора (DirecInput, DirectSound, DirectDraw) выкинуто на помойку, как устаревшее 20 с лишним лет назад.
Теперь все переписано под современные технологии (Direct2D, WASAPI), но поддерживающиеся уже не менее 10 лет, а какие-то и 15.
Самое сложное, что удалось решить - это точную синхронизацию видео и аудио. Как я уже писал многократно, основная проблема всех эмуляторов в том, что они синхронизируются только по аудио, а видео подгоняется в зависимости от эмулятора с той или иной степенью точности. Любой плавный скролл в игре или демке, даже если ваш монитор имеет развертку равную эмулируемой модели (например, 50Гц), либо кратную (100Гц, 150Гц), все равно будет или неприятно дергаться (не буду называть большинство популярных эмуляторов, грешащих этим), либо почти не дергаться, но раз в несколько десятков секунд, когда набегает погрешность биения частот аудио и видео, все равно будет несколько подергиваний (например, ZXMAK, чем он мне весьма нравился). При этом, НИ ОДНОГО эмулятора, который бы точно синхронизировался по видео и аудио я не встречал (может есть, обязательно укажите).
В своем тестовом движке я пока что реализовал самый сложный режим синхронизации, когда частота кадров монитора равна или кратна частоте эмулируемой модели, а аудиосистема WASAPI работает в кооперативном режиме (точность отслеживания буфера 10мс).
Можете запустить любой плавный скролл, и увидите абсолютно плавное движение, без каких-либо подергиваний.
Ядро эмуляции видео и звука работает с самым высоким приоритетом в фоне, что позволяет достаточно сильно нагружать компьютер другими задачами без тормозов эмуляции.
С чуть более низким приоритетом работает вывод видео в окно через Direct2D. Если очень активно менять размер окна или иначе насиловать систему, только в этом случае кадры будут пропускаться.
Если система поддерживает, то используется вывод в окно через MPO (аппаратное многослойное наложение), или как его еще называют Independent Flip (независимое перелистывание). Говоря проще, особая часть видеопамяти проецируется прям в окно, что позволяет избежать необходимости ожидать копозиции рабочего стола Windows (это когда перед выводом нового кадра, все окна собираются системой DWM и рисуются на рабочем столе соблюдая приоритет, наложение и т.д.). Плюс такого вывода - сверхмалая задержка между построением изображения и выводом его на экран (<10мс при развертке 100Гц). Есть и небольшой минус. При изменении размеров такого окна или при перетаскивании окна, система кратковременно отключает Independent Flip, и включает обратно, когда окно перестали перетаскивать или изменять размер. Но это такие мелочи, которыми можно пренебречь.
Итак, предлагается уважаемым форумчанам потестировать движок на своих компьютерах, чтобы я вообще понимал, на сколько это все надежно работает на разном железе. Я-то у себя играюсь, и мне хорошо - полная иллюзия настоящего железного спектрума, что по изображению, что по звуку, что по скорости отклика.
Сканлайны сделаны на основе пиксельных шейдеров 5.0 (поддерживаются очень давно, но если у вас сверхстарая видюха, то сканлайнов не будет).
Если очень кратко - пиксельные шейдеры - это малюсенькие программы, выполняющиеся одновременно на куче микроядер GPU, каждая из которых обрабатывает свой пиксель. Это позволяет сильно разгрузить систему.
Что же касается масштабирования, то оно сделано с использованием самой качественной кубической фильтрации (но и самой нагружающей GPU). Если ваш компьютер, особенно при большом разрешении этого не тянет, можно переключиться системный режим масштабирования покликав в тулбаре на значок красного крестика.
Для разных режимов окна применяются разные настройки. Сейчас залоченно так, что в максимизированном окне или в полноэкранном режиме масштабирование экрана 1:4, а во всех остальных режимах оно привязно к размеру окна, так, чтобы был виден экран и небольшой кусочек бордюра вокруг него.
В окно эмулятора можно кинуть любой 48Кб .sna или .z80 и поиграться. Хотя, из-за неполноценности модели не исключено, что какие-то игры и не пойдут, но суть теста не в этом.
На иконки тулбара обращать внимания не надо, они взяты с потолка для теста тулбара, который тоже я написал сам.
Немного о клавишах:
RCtrl + S - запись снапшота
RCtrl + O - загрузка снапшота
RCtrl + P - пауза
RCtrl + F или Alt + Enter - переключение в полноэкранный режим
LCtrl + RCtrl - сброс
F2 - включить/выключить меню
F3 - включить/выключить тулбар
Задача теста:
1. Заскриншотить окно анализатора звука, когда оно заполнится почти целиком и прислать сюда.
2. Заскриншотить окно консоли (копипастой) и тоже прислать сюда.
p.s.: Забыл предупредить, что запускать надо ту версию, которая ближе по частоте кадров к частоте кадров вашего монитора.
Т.е. если у вас монитор 60Гц, то запускать надо версию 50Гц.
Если 100Гц, то запускать 100Гц.
Audiobuf можно выбирать 0.5, если звуковая карточка стабильная, хорошая, и 3.5, если ее характеристики гуляют. Но для теста можно запускать 3.5, чтобы наверняка.
И если у вас Win7, и почему-то не идут нормальные версии, то можно запустить версию DWM.
Скрытый текст
EmuStudio v0.9 test 1 (ZX)
и как ты себе представляешь тест на гладкость одновременно видео и звука с таким конфигом? :D
нужно минимум 128+AY - чтобы строчки под фоновую музыку бегали
до того - не вижу смысла запускать даже
как уже писал многократно, в общем случае точная синхронизация по более чем одной характеристике невозможна
вот не повезёт с системой на уровне железа/дров/процессов - и одно таки придётся подгонять-подстраивать под другое
подгонять звук проще, даже чисто программно, но традиционно почему-то предпочитают картинкой жертвовать
ну здрасьте, ни одного... а я здесь с чем столько времени распинаюсь?