如何将LADSPA插件添加到 pipewire 配置中以用于音频后处理?
有许多现有的 ladspa 插件。
ladspa 插件必须在立体声(两个通道)音频上工作。
有一个现有的 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 接收器)和客户端节点。
示例图: