使用 pipewire 或 wireplumber 我们如何通过组合左声道和右声道使立体声输出设备变成单声道?
这个问题看起来很傻,但它非常有用,无论是你的扬声器无法重现立体声,还是出于可访问性原因,我们都应该有一个选项来轻松切换系统上的单声道输出。但是,是的,我们在 GNOME 上没有这个选项,然而。
按照指南,我将回答我自己的这个问题。
因此,这是针对 pipewire 的,因为我使用的是 Ubuntu 23.04,并且它使用了默认音频服务器。经过大量搜索,我无法使用 pipewire 或 wireplumber 找到这个简单问题的答案。因此,在找到一种方法使 Gnome-Control-Center 音频设置的输出设备上出现一个选项,以使用我选择的名称的单声道输出后,我将与大家分享我实现该目标所采取的步骤。
答案1
因此,为了从立体声输出实现真正的单声道,我们需要修改 pipewire 配置。
这是 pipewire 文档的一部分,它帮助我实现了所需的单声道接收器: Pipewire - 模块组合流
因此,首先我们需要找出我们在配置文件中使用的名称node.device
,如WirePlumber - ArchWiki从终端运行:
$ wpctl status
PipeWire 'pipewire-0' [0.3.56, user@hostname, cookie:1163266174]
Audio
├─ Devices:
│ 42. HD Audio Controller [alsa]
│ 105. USB PnP Audio Device [alsa]
│
├─ Sinks:
│ * 48. HD Audio Controller Analog Stereo [vol: 0.50]
│
├─ ...
│
├─ Sources:
│ * 101. USB PnP Audio Device Mono [vol: 0.74]
│
└─ ...
标有 的*
是您当前正在使用的,我们正在寻找接收器,数字表示 ID,因此我们可以使用$ wpctl inspect [ID]
$ wpctl inspect 48
id 48, type PipeWire:Interface:Node
...
...
* factory.id = "18"
factory.mode = "merge"
factory.name = "api.alsa.pcm.sink"
...
* media.class = "Audio/Sink"
* node.description = "HD Audio Controller Analog Stereo"
* node.name = "alsa_output.pci-0000_08_00.4.analog-stereo"
* node.nick = "ALC1220 Analog"
...
* object.path = "alsa:pcm:1:front:1:playback"
* object.serial = "49"
...
我们希望获得节点名称
现在我们收集了所有内容,我们可以结合来自两个维基百科的信息。
- 在您的 pipewire 分发文件夹中(通常
/usr/share/pipewire
),找到该pipewire.conf
文件并添加此配置并进行适合您需要的修改。 - 在该
context.modules
部分:
context.modules = [
{ name = libpipewire-module-combine-stream
args = {
combine.mode = sink
node.name = "combine_stereo_to_mono_sink" # Can be any name of your choice
node.description = "Mono Speakers" # This is the name that will appear in the sound settings
combine.latency-compensate = false
combine.props = {
audio.position = [ MONO ]
}
stream.props = {
stream.dont-remix = true
}
stream.rules = [
{ matches = [
{ media.class = "Audio/Sink"
node.name = "alsa_output.pci-0000_08_00.4.analog-stereo" # Your node.name here
} ]
actions = { create-stream = {
audio.position = [ FL FR ]
combine.audio.position = [ MONO ] # These both are what combine both channels into one
} } }
]
}
}
]
您可以直接复制里面的部分context.modules=[]
,也可以创建一个新文件并添加到pipewire.conf.d
或pipewire-pulse.conf.d
目录中。
保存文件后,重新启动系统或重新启动 pipewire 和 wireplumber:
$ systemctl --user restart pipewire pipewire-pulse wireplumber