User Tag List

Страница 3 из 3 ПерваяПервая 123
Показано с 21 по 30 из 35

Тема: Нужны звуковые эффекты из Batty побитно

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,089
    Спасибо Благодарностей отдано 
    281
    Спасибо Благодарностей получено 
    70
    Поблагодарили
    49 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я завершил анализ системы передискретизации, применяемой в эмуляторе ZXMAK. В комментариях написано, что она позаимствована из UnrealSpeccy - если так, то и синтез звука UnrealSpeccy должен иметь те же достоинства и недостатки.

    Код передискретизации находится в файле SoundDeviceBase.cs. Реализуемый алгоритм передискретизации (с точки зрения ЦОС) таков:

    1) Сначала происходит интерполяция методом удержания (Hold Interpolation) с исходной частоты дискретизации (равной тактовой частоте Z80) на промежуточную частоту, которая в 64 раза выше выходной. Если выходная 44100Гц - то промежуточная частота будет около 2,82МГц. Это делается в строках 313 и 323 SoundDeviceBase.cs

    2) Затем применяется ФНЧ, FIR-фильтр 127 порядка (128 коэффициентов). Прилагаю графики его АЧХ. Общий вид, область перехода между пропусканием и подавлением, и отдельно полоса пропускания. Фильтр реализован, главным образом, в функции FlushFrame().

    3) После фильтра частота дискретизации уменьшается в 64 раза, т.е. приводится к стандартной частоте звуковой карты. Это также происходит в функции FlushFrame().

    Применяются некоторые трюки. Автор кода воспользовался кусочным постоянством входных сигналов для оптимизации. В буферах хранятся не сами сигналы, а только их фронты. Поэтому и происходит вычисление частичных сумм коэффициентов фильтра в конструкторе SoundDeviceBase().

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

    Теперь по поводу возможностей улучшения:
    1) Интерполяция методом удержания до фильтра - существенный источник алиасинга. Если применить ее не до, а после фильтра - то уже искажений станет меньше. А если применить вместо неё интерполяцию многочленом или структурой фильтра Фарроу - то станет намного лучше.

    2) Можно пересчитать и оптимизировать коэффициенты фильтра даже без повышения его порядка. Фактически, сейчас фильтр имеет частоту среза по уровню -3дБ около 15кГц. Его переходная полоса идет от 15 до примерно 50кГц. Подавление в полосе подавления - около 46дБ. Остаточные сигналы от 22050 до 50кГц отражаются в слышимую область в виде алиасинга.

    Фильтр можно существенно улучшить без или с незначительным повышением вычислительных затрат на его работу.

    Я готов все это сделать, но C# - не мой язык программирования. Я бы написал алгоритмы объектно-ориентированно на Си

    ZXMAK: ты мог бы потом перевести их на C# или вызывать через интерфейс на Си, и встроить потом в свой эмулятор?
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	zxmak_freqresp_pass.jpg 
Просмотров:	985 
Размер:	22.3 Кб 
ID:	81756   Нажмите на изображение для увеличения. 

Название:	zxmak_freqresp_transition.jpg 
Просмотров:	1027 
Размер:	22.6 Кб 
ID:	81755   Нажмите на изображение для увеличения. 

Название:	zxmak_freqresp_overview.jpg 
Просмотров:	990 
Размер:	22.5 Кб 
ID:	81754  
    Последний раз редактировалось Barmaley_m; 26.12.2024 в 00:12.

    Эти 2 пользователя(ей) поблагодарили Barmaley_m за это полезное сообщение:

    Titus(26.12.2024), ZXMAK(26.12.2024)

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

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

    По умолчанию

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    Я бы написал алгоритмы объектно-ориентированно на Си

    ZXMAK: ты мог бы потом перевести их на C# или вызывать через интерфейс на Си, и встроить потом в свой эмулятор?
    не вопрос, главное, чтобы новый вариант не сильно больше процессора кушал

    Я недавно, когда смотрел код AY, пробовал улучшить фильтр в octave, но без значительного увеличения порядка не получилось. Или сильный завал на ВЧ, или нужно сильно порядок фильтра увеличивать.
    Последний раз редактировалось ZXMAK; 26.12.2024 в 19:52.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  4. #3

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

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    не вопрос, главное, чтобы новый вариант не сильно больше процессора кушал
    Используй вычислительные шейдеры GPU. Как раз под фильтр хорошо подходят.
    Хотя, ты опять будешь говорить, что это не кроссплатформенно)

  5. #4

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

    По умолчанию

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    Я готов все это сделать, но C# - не мой язык программирования. Я бы написал алгоритмы объектно-ориентированно на Си

    ZXMAK: ты мог бы потом перевести их на C# или вызывать через интерфейс на Си, и встроить потом в свой эмулятор?
    Как там дела? есть какие-то результаты? Получилось чтото?

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

  6. #5

    Регистрация
    19.01.2005
    Адрес
    Наро-фоминск
    Сообщений
    2,012
    Спасибо Благодарностей отдано 
    511
    Спасибо Благодарностей получено 
    207
    Поблагодарили
    126 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Надо чтобы везде работало, в Linux, macos, haiku os без всяких хипстерских шейдеров..
    Последний раз редактировалось ^m00h^; 08.01.2025 в 15:33.
    Haiku OS - духовный последователь AmigaOS! Welcome на борт MK4 с зоопарком операционных систем, в наш космо-десант, Special Forces, в крайний отсек корабля, уходящего в гиперпрыжок, на поиски Раккслы и эры Встретившихся рук, в Час Быка, Звездное Наследие за нами!!!
    https://t.me/haiku_ru

  7. #6

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

    По умолчанию

    Цитата Сообщение от ^m00h^ Посмотреть сообщение
    Надо чтобы везде работало, в Linux, macos, haiku os без всяких хипстерских шейдеров..
    Мне не надо. У меня один комп PC. Думаю, что и у 90% тоже PC с Виндой.
    Если писать под кроссплатформенность, то лишаешься И скорости отклика, и качественной синхронной эмуляции.
    Универсальность ухудшает качество используемого ресурса.

  8. #7

    Регистрация
    19.01.2005
    Адрес
    Наро-фоминск
    Сообщений
    2,012
    Спасибо Благодарностей отдано 
    511
    Спасибо Благодарностей получено 
    207
    Поблагодарили
    126 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Но не у всех PC и винда, мир многомерен, и на других платформах также можно отстроить качество отклика и качественную синхронную эмуляцию.
    Haiku OS - духовный последователь AmigaOS! Welcome на борт MK4 с зоопарком операционных систем, в наш космо-десант, Special Forces, в крайний отсек корабля, уходящего в гиперпрыжок, на поиски Раккслы и эры Встретившихся рук, в Час Быка, Звездное Наследие за нами!!!
    https://t.me/haiku_ru

Страница 3 из 3 ПерваяПервая 123

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

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

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

Похожие темы

  1. Звуковые эффекты AY в играх
    от goblinish в разделе Игры
    Ответов: 31
    Последнее: 21.07.2015, 04:43
  2. Ответов: 24
    Последнее: 18.02.2015, 08:11
  3. Куплю звуковые чипы: YM2612, SN76489
    от evgs в разделе Барахолка (архив)
    Ответов: 1
    Последнее: 25.08.2010, 14:33
  4. Batty
    от CityAceE в разделе Игры
    Ответов: 1
    Последнее: 14.03.2005, 05:55

Ваши права

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