NEO SPECTRUMAN,
По крайней мере до 15кгц не должно быть никаких спадов. А тут чуть больше 3кгц и уже глушняк. Как телефонная связь.
NEO SPECTRUMAN,
По крайней мере до 15кгц не должно быть никаких спадов. А тут чуть больше 3кгц и уже глушняк. Как телефонная связь.
о чем это ты?
это LP фильтр
после частоты среза (6КГц) не должно быть ничего вообще
тут у меня напрашиваются фразы
но изза простоты фильтра там что то все еще есть
надо будет сделать еще пару тройку повторных проходов поверх
Последний раз редактировалось NEO SPECTRUMAN; 01.09.2020 в 08:09.
Это хреновый LP фильтр.
И поэтому оно все будет отражаться, и это - неприемлемо.
На мой слух музыка отрендеренная с Ayumi звучит даже лучше оригинала (железного, у меня YM, и там просто шум, а Ayumi - звучит "кристально"). Дальше идёт ZX-Tune, Ay_emul/Unreal...
Закончить можно было бы после твоего утверждения:
И вообще, какие-то проблемы?
Ayumi дает звук, лишённый шумов аудиотракта (которые в реале присутствуют). На фоне этого тот абсолютный минимум артефактов (отраженных гармоник) Ayumi вообще не ощущается.
А в ZX-Tune движок от ay_emul взят и улучшен + управляемая скважность (пусть и в плеере) порой весьма скрашивает пресный меандр (хотя небезупречно - скважность шума вообще не стоит трогать).
Слыш, эльф. Вот смотри:
Это инициализация таблицы с коэффициентами
Это понижение дискретизации (32 сэмпла в один, который пойдёт на вывод). На входе в sndLev имеем амплитуду звука, снятую в данный момент эмуляции с железяки. В tmpLev накапливается сумма на выводКод:void init_kih() { long double Fd = conf.snd.rate * DISCRATE; long double Fs = 2; long double Fx = 2; long double H_id [DISCRATE] = {0}; long double W[DISCRATE] = {0}; long double Fc = (Fs + Fx) / (2 * Fd); int i; for (i = 0; i < DISCRATE; i++) { if (i == 0) { H_id[i] = 2 * M_PI * Fc; } else { H_id[i] = sinl(2 * M_PI * Fc * i) / (M_PI * i); } W[i] = 0.42 - 0.5 * cosl((2 * M_PI * i) / (DISCRATE - 1)) + 0.08 * cosl((4 * M_PI * i) / (DISCRATE - 1)); H[i] = H_id[i] * W[i]; } // normalizzze double sum = 0; for (i = 0; i < DISCRATE; i++) sum += H[i]; for (i = 0; i < DISCRATE; i++) H[i] /= sum; }
Звучит как *****. Что не так?Код:... tmpLev.left += sndLev.left * H[disCount]; tmpLev.right += sndLev.right * H[disCount]; disCount++; if (disCount >= DISCRATE) { sndLev = tmpLev; <- это пойдёт в звуковой буфер tmpLev.left = 0; tmpLev.right = 0; disCount = 0; ...
Все любят гипножабу
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
>Звучит как *****. Что не так?
Хз. Что за функция создающая таблицу? Откуда она?
А вообще, может дело в том, что это не свертка происходит, и никакого overlap add нет? Это предположение. Я насколько вижу — сверточный буфер в 32 значение, и сигнал децимируется тоже с шагом в 32. Что происходит с крайними значениями буфера? Какой вклад они имеют в итоговые суммы? Если в одном фрейме свертки это 0%, то в соседнем должно быть 100%
.
Т.е. шаг должен быть как минимум в 2 раза короче сверточного буфера.
https://habr.com/ru/post/128140/
PS: Ну да, конечно, ошибка в формуле. Надо
W[i] = 0.42 + 0.5 * cosl((2 * M_PI * i) / (DISCRATE - 1)) + 0.08 * cosl((4 * M_PI * i) / (DISCRATE - 1));
Так лучше
ЗЫ: Без этого фильтра звук чище. С ним резко затихают верхние частоты.
Последний раз редактировалось SAM style; 02.09.2020 в 19:51.
Все любят гипножабу
запиши звук с эмулятора до и после
тест пищалка полторы минуты
https://dropmefiles.com.ua/ru/Rsv3
посмотрим глазами
вот мы сравнивали (по быстренькому) фпга пищалки разной степени унылости
https://zx-pk.ru/threads/31677-nsid_...=1#post1063361
сравним с ними и с унриалом
Последний раз редактировалось NEO SPECTRUMAN; 02.09.2020 в 21:05.
Эту тему просматривают: 11 (пользователей: 0 , гостей: 11)