Да, конечно, и TurboFM тоже имеется, но писать свой рендерер ты вряд ли осилишь, а взять уже имеющийся - можно. Только вот генерировать FM с выходом на 3.5Мгц - нафиг оно кому нужно? FM в таком "дигитальном" режиме никогда не используется, и тратить на это ресурсы нет надобности. Как и с AY. Рендерить AY с частотой в 3.5Мгц, а потом прогонять через фильтры необходимость бывает только если это дигитал какой-нибудь. В том же AY_Emul есть два вида рендеринга звука, аккуратный и нет. Аккуратный - как раз с последующей КИХ-фильтрацией, и жрет больше CPU чем "быстрый". В большинстве случаев разница не особо слышна (потому что частота переключения данных регистров AY - 50Гц).
Вот "правильная" таблица фильтров https://github.com/darvin/unreal-spe...sound.cpp#L178
Нужно что-то подобное. А не простое математическое усреднение как у тебя https://github.com/samstyle/Xpeccy/b.../sound.cpp#L47.
Можно было бы заюзать https://github.com/avaneev/r8brain-free-src
Последний раз редактировалось Dexus; 31.08.2020 в 18:11.
И чё мне делать с этой таблицей? Развивай мысль, мне лень что-то гуглить.
PS: Делаю всё на энтузиазме (читать как: хочу - делаю, не хочу - не делаю), без какой-то отдачи со стороны юзеров. Поэтому когда появляется визгливые истерички, пытающиеся от меня требовать, не предлагая ничего взамен, я шлю их нахер.
Последний раз редактировалось SAM style; 31.08.2020 в 18:25.
Все любят гипножабу
Читать контекст (код). Читать что такое КИХ-фильтры. Читать статью про ayumi из первого сообщения issue. Просвещаться. Исправлять стыдный звук.
Вот поэтому (из-за такого отношения и обращения) и забил.
Лучше не трогать то что воняет, прокрастинируй дальше.
Спасибо за труды.
Последний раз редактировалось Dexus; 31.08.2020 в 19:33.
а потом как в ZEsarUX-ах
не AY а сплошной алиасинг
- - - Добавлено - - -
по fir фильтрам
попробую обьяснить как понимаю мну
вот наглядная картинко
на x вход
на y выход
а суть такова
что мы движемся по буферу окном (для примера 3 входа)
вот так
умножаем входное значения для каждого входа окна на свое значениеКод:220000222200 <- буфер === <-окно
например так
*0.2 *0.6 *0.2
тут как раз видим таблицу
https://github.com/darvin/unreal-spe...sound.cpp#L178
думаю что сюда можно подставить теже оконные функции что и для fft
от размера окна и функции будет зависеть частота среза
ну и сумируем результаты
и кидаем на выход
Код:220000222200 === 0.4 1.2 0 = 1.6
ну и перемещаем окно на один шаг и все повторяем
Код:220000222200 === 0.4+1.2+0 1.6 220000222200 === 0.4+0+0 1.6 0.4 220000222200 === 0+0+0 1.6 0.4 0 220000222200 === 0+0+0 1.6 0.4 0 0 220000222200 === 0+0+0.4 1.6 0.4 0 0 0.4
Последний раз редактировалось NEO SPECTRUMAN; 31.08.2020 в 20:38.
Раньше не приходилось запускать этот эмулятор кроме как на малинке. Запустил.
Извиняюсь, но равняться на него как-то даже ничего не поднимается. Отвратительный эмулятор этот ZEsarUX. Уж лучше Спектакулятор. Ни нормального отладчика, ни даже меню (а рисовать в графике самого спека - концепция может эстетичная, но совершенно непрактичная), не говоря уж о качестве эмуляции звука (который похоже на 11025 рендерит). О честном выводе анимации (бегущих строк) в 50Гц тоже никакой речи нет. Очень некачественное изделие.
Последний раз редактировалось Dexus; 31.08.2020 в 20:35.
так я это и имел ввиду
что на фоне такого гофна тут все отлично
да и я щитаю что тупое сумирование всех значения вполне допустимо
вот только тупо сумировать тоже желательно пошагово окном
(в случае если просто фильтр а не ресамплинг)
хотя при большом количестве входящих данных (ресамплинг)
вполне можно сразу
первые n (0...4095) значения в выходное значение 1
вторые n (4096...8191) значение в выходное значение 2
и чем больше данных сразу усредняется
тем меньше будет алиасинг...
- - - Добавлено - - -
не знаю как фильтруется у тя
но можно попробовать вообще фильтровать целочисленно квадратным окном
вот таким образом
дешево и сердитоКод:1-й шаг (можно пропустить но тогда фильтр "заведется" на 5 семплов позже : ) вощем тупо заполняем b1...b4 нулями :) sum = b1+b2+b3+b4+b5 ;b1....bn значения буфера out = sum/5 последующие шаги sum = sum - b1 + b6 out = sum/5 sum = sum - b2 + b7 out = sum/5
но будут искажения
Последний раз редактировалось NEO SPECTRUMAN; 31.08.2020 в 20:53.
Все любят гипножабу
сумма пофиг какая будет
главное чтоб в результате сумирования небыло переполнений и сильной потери точности
можно и из однобитногго потока делать 16 бит...
я бы делал вообще целочисленное умножение на 0...255
с последующим сдвиговым делением суммы значений
а то сильно жирные там расчеты
- - - Добавлено - - -
мне кажотсо что Dexus предлагает фильтровать не все 3,5МГц семплов
а прореживать самым примитивным алгоритмом в n раз
а потом фильтровать результат такой фигней...
по крайней мере я так понел
или хрен его
пушо с таким же успехом после такого фильтра
можно и прореживать более примитвным алгоритмом
тк таких высоких частоты уже не будет
которые всплывут при алиасингке
- - - Добавлено - - -
хотя аффтар сам такое морозит что просто...
Последний раз редактировалось NEO SPECTRUMAN; 31.08.2020 в 21:27.
Эту тему просматривают: 3 (пользователей: 0 , гостей: 3)