добавить постобработку стерео 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) и клиентским узлам.

Пример графика:

Другие вопросы по тегам