0

如何将LADSPA插件添加到 pipewire 配置中以用于音频后处理?

有许多现有的 ladspa 插件。

ladspa 插件必须在立体声(两个通道)音频上工作。

4

1 回答 1

0

有一个现有的 pipewire 模块可以封装任意数量的 ladspa 插件,称为filter-chain

首先,我们需要在构建系统中添加过滤器链模块。在 yocto bitbake recipe 它是这样添加的:

 RDEPENDS_libpipewire += " \
     ${PN}-modules-client-node \
+    ${PN}-modules-filter-chain \
.....

然后使用过滤器链添加适当的 pipewire.conf 块,以在 pipewire 启动时添加特定的 ladspa 插件:

{   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 代替。

然后 capture/playback 属性确定 ladspa 插件是否具有用于处理的立体声通道,它们描述了为输出和输入创建的节点类型。

每个后处理节点都隐含两个节点——一个用于输入,另一个用于输出。

之后 ladspa 插件需要与选择的会话管理器连接。如果wireplumber我们可以使用 lua 脚本来检测插件节点并将其连接到适当的接收器(例如 alsa 接收器)和客户端节点。

示例图:

在此处输入图像描述

于 2021-11-05T12:00:41.823 回答