如何使用 Pipewire 实现(自动)同时输出?

如何使用 Pipewire 实现(自动)同时输出?

我希望我的系统自动输出到所有可用的音频设备(最好使用 Pulseaudio Volume Control 中的接收器)。单独使用 Pulseaudio 时可以实现这一点。

使用 Pipewire 可以实现吗?如果可以,您将如何实现?
是否可以将其设置为自动可用?

答案1

在报告了漏洞并得到一个回复回答我的问题。解决方案非常简单:

跑步:

pactl load-module module-combine-sink

您可以通过 PipeWire 获得相同的功能。

如果我理解这些指示/usr/share/pipewire/pipewire-pulse.conf正确地说,你可以通过复制并添加来使其永久生效~/.config/pipewire/pipewire-pulse.conf

context.exec = [
    { path = "pactl"  args = "load-module module-combine-sink" }
]

然后保存文件。或者,您可以将第一个命令添加到启动应用程序中。

答案2

这是为了补充OP的答案:

根据man pipewire.conf(和一点推断),您可以使用插入文件达到相同的效果,所以在我看来这应该是首选方法。

这些目录/etc/pipewire/pipewire-pulse.conf.d/用于全局和$XDG_CONFIG_HOME/pipewire/pipewire-pulse.conf.d/用户(~/.config/pipewire/pipewire-pulse.conf.d/如果$XDG_CONFIG_HOME未设置,则为默认目录)。


因此只需创建此文件(mkdir -p如果目录不存在):

$XDG_CONFIG_HOME/pipewire/pipewire.conf.d/add-combined-sink.conf

context.exec = [
    { path = "pactl" args = "load-module module-combine-sink" }
]

请注意,在我的测试中,如果我将插入文件放入/etc/pipewire/pipewire-pulse.conf.d/,组合输出会发生一些奇怪的事情(音调变得更高并引入规则的卡顿)。

如果一定要我猜的话,那可能与模块的加载顺序有关:很可能有办法修复它,但我还没费心去研究。$XDG_CONFIG_HOME/pipewire/pipewire-pulse.conf.d/不过,把它放进去就没问题了,所以我就这么做了。

答案3

对于 PipeWire 版本 0.3.65,我们还有一个可用的本机模块:module-combine-stream

对于同步输出配置,您需要使用以下内容pipewire.conf,改编自文档中的示例

context.modules = [
{   name = libpipewire-module-combine-stream
    args = {
        combine.mode = sink
        node.name = "my_combined_sink"
        node.description = "My Combined Sink"
        combine.props = {
            audio.position = [ FL FR ]
        }
        stream.rules = [
            {
                matches = [
                    {
                        media.class = "Audio/Sink"
                    }
                ]
                actions = {
                    create-stream = {
                    }
                }
            }
        ]
    }
}
]

如果您只想组合特定的接收器,那么您当然可以向数组中添加更多条目matches并指定node.name,而不是匹配所有接收器。

如果您还不知道它们的名称,您可以通过 获取所有可用的接收器名称pw-link -o

答案4

您可以检查赫尔沃姆 接收器和源是否正确连接。

相关内容