Войти
ПрограммированиеФорумЗвук

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

#0
20:41, 6 авг. 2018

Пишу тут либу 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, так что в каком-нибудь мастеринге могут быть проблемы.


#1
0:34, 7 авг. 2018

Я в этом конечно не разбирался но работы сделано немало. Удачи в развитии

#2
12:58, 8 авг. 2018

Заметил принепреятнейшую историю.
Проявляется в виде плавного появления поднятой частоты на высоком гейне, до наступления основного звука, его породившего.
Я так понял это проблема всех high-order фильтров. plpareq такую же кашу выдает. fir тут будет не исключением.
Как ни странно, простой iir тут на слух выглядит более приятно.
Как этот эффект размазывания по времени называется?

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

Тема в архиве.