Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Зацените VST параметрический эквалайзер с linear phase (win32)

Зацените VST параметрический эквалайзер с linear phase (win32)

Blew_zcПостоялецwww6 авг. 201820:41#0
Пишу тут либу libpeq - phobos parametric equalizer with linear phase (zero group delay) aka PLParEQ и иже с ними.
Завернул в VST для тестов.
Для чего пишу: нужен биплятный параметрик с линейной фазой под линупс в виде модуля к pulseaudio.
Таковых не нашел, решил написать свое. Сам модуль планирую позже, после отладки либы.
В будущем планирую открыть репу на gitlab как опенсурц после более-менее стабильного релиза.

Фишки:
Линеризация фазы aka PLParEQ (сравнивал с ним, мой даже чуть лучше вышел по IMD) - IIR forward/backward processing with custom blocksize & overlap blocks count (% of overlap);
20 bands, 32 channels;
in/out data type: si16/si32/f32/f64 в режиме interleaved/separated;
upsample/downsample через libsoxr для уменьшения влияния ошибок (увеличение IMD) и прямого рендера в максимально доступном выходном битрейте девайса;
preamp & clamp detector (по abs);

Немного по интерфейсу плагина:
block size влияет на качество повторяемости АЧХ фильтра, а так же на качество линеризации.
blocks влияет на уровень IMD, и на линеризацию тоже.
галка upsample включает внутренний апсамплинг.
галка linearized вкл/выкл линеризацию фазы.
слева скролл с прегейном.
график АЧХ в табе control рисуется по реальной обработке, не по переходной функции. Тут же есть комбо с выбором размера окна для FFT.
галка Grp Delay вкл/выкл отрисовку групп.задержки (не путать с latency, оно тут константа и зависит от block size и апскейла).
галка IMD, переключающая режимы с АЧХ и IMD по сигналу их двух синусоид 40 и 50 Гц (вторая в 4 лаза слабее).
Так же есть галка со скейлом амплитуд (удобно для просмотра IMD).
вкладка spectrum - просто АЧХ сигнала после обработки (так же есть выбор размера окна FFT).
пресет пока один, он сохраняется в файл при выгрузке плагина.

Плаг тестился на foobar2000 и George Yohng's VST Wrapper.
Гуй на Qt, поэтому подружить их есть некоторая проблема. Рядом с ехешником vst host нужно положить папку platforms из архива.
peq.dll - сама либа.
qtpeq.dll - либа с гуем.
qtpeq_vst.dll - сам плаг (но еще не совсем VST, ибо так он не грузится, когда есть зависимости от dll Qt).
qtpeq.dll - враппер для загрузки qtpeq_vst.dll (добавляет путь поиска длл, где лежит сама длл).
qvstconfig.ini - говорит врапперу какую либу потом грузить.
peq.ini - настройки пресета.

При открытии пресет настроен на следующий тест (чисто чтобы каждый ушами мог понять различие обычного IIR от линеризованного):
В архиве трек fff.mp3 (да простят меня правооблядатели, не помню автора).
Сначала отключаем галки enabled и linearized, идем на вкладку spectrum.
В самом начале трека звучит синт какого-то kick drum с явно выраженным пиком в районе 47 Гц (немного плавает).
Затем жмем enabled, слушаем сначала. Понимаем, что поднятая частота уплыла во времени относительно звука педали.
Жмем linearized, слушаем сначала. Что-то понимаем.

Ну а дальше можно покрутить параметры, послушать свои треки. Сюда впечатления.
Добавить band: ПКМ по АЧХ, дальше выбрать нужное.
Удалить: удерживание ПКМ по кружочку, там целая менюшка.
Менять частоту/гейн/добротность можно только на графике, путем перемещения мыши с зажатой ЛКМ, ПКМ меняет добротность.

+ немного фоток

Архив: https://drive.google.com/file/d/1s00zUvBsbLm18w7SYf65T2RJgY5qJFnq… w?usp=sharing
passwd: q p x 1 9 3 9
(без пробелов)

И да, забыл сказать: эта штука скорее всего мало пригодна для реалтайм обработки звука из-за большой задержки в block_size samples. Только оффлайн или прослушивание.
Адд: Вспомнил, что не использую initialLatency, так что в каком-нибудь мастеринге могут быть проблемы.

Правка: 6 авг. 2018 21:37

The AndreypПостоялецwww7 авг. 20180:34#1
Я в этом конечно не разбирался но работы сделано немало. Удачи в развитии
Blew_zcПостоялецwww8 авг. 201812:58#2
Заметил принепреятнейшую историю.
Проявляется в виде плавного появления поднятой частоты на высоком гейне, до наступления основного звука, его породившего.
Я так понял это проблема всех high-order фильтров. plpareq такую же кашу выдает. fir тут будет не исключением.
Как ни странно, простой iir тут на слух выглядит более приятно.
Как этот эффект размазывания по времени называется?

/ Форум / Программирование игр / Звук

2001—2018 © GameDev.ru — Разработка игр