добавить постобработку стерео Ladspa в pipewire
Как добавить плагин LADSPA в конфигурацию pipewire, который будет использоваться для постобработки звука?
Есть ряд существующих плагинов ladspa.
Плагин ladspa должен работать со стереозвуком (двухканальным).
1 ответ
Существует существующий модуль pipewire, который может инкапсулировать любое количество плагинов ladspa, называемый цепочкой фильтров.
Сначала нам нужно добавить модуль цепочки фильтров в нашу систему сборки. В рецепте yocto bitbake он добавлен так:
RDEPENDS_libpipewire += " \
${PN}-modules-client-node \
+ ${PN}-modules-filter-chain \
.....
Затем добавьте соответствующий блок pipewire.conf, используя цепочку фильтров, чтобы добавить конкретный плагин ladspa при запуске pipewire:
{ name = libpipewire-module-filter-chain
args = {
node.name = "processing_name"
node.description = "Specifc postprocessing"
media.name = "Specifc postprocessing"
filter.graph = {
nodes = [
{
type = ladspa
name = plugin_name
plugin = libplugin_name
label = plugin_name #this needs to correspond to ladspa plugin code
control = {
"Some control" = 1234
}
}
]
}
capture.props = {
node.passive = true
media.class = Audio/Sink
audio.channels=2
audio.position=[FL,FR]
}
playback.props = {
media.class = Audio/Source
audio.channels=2
audio.position=[FL,FR]
}
}
}
Основная точка интеграции - это
label
часть в блоке узла. Это должно соответствовать коду плагина ladspa. Я думаю, что вместо этого можно использовать ladspa id.
Затем свойства захвата / воспроизведения определяют, будут ли плагины ladspa иметь стереоканалы для обработки, и описывают тип узлов, которые создаются для вывода и ввода.
Каждый узел постобработки неявно имеет два узла - один для ввода, а другой для вывода.
После этого плагин ladspa необходимо связать с выбранным менеджером сеансов. В случае
wireplumber
мы можем использовать скрипт lua для обнаружения и подключения узлов плагина к соответствующим приемникам (например, приемникам alsa) и клиентским узлам.
Пример графика: