在 Arch Linux 中修改外置声卡的采样率 (Pipewire)
本人的系统 (Arch Linux + KDE6) 目前使用的音频系统是 PipeWire,并通过 WirePlumber 作为会话管理器。PipeWire 也兼容了 PulseAudio 的协议,所以部分应用程序则是通过PulseAudio 兼容层(基于 PipeWire) 处理音频。由于网上搜到的很多Blog都已经过时,导致我在配置时踩了不少坑,学习了大量Arch Linux 音频系统工作原理相关知识后才成功配置….附上一张小尾巴被修改采样率后的图片:
🚀 解决方案
修改 PipeWire 的配置文件来更改采样率。请注意,不要直接编辑 ~/.config/pipewire/pipewire.conf
,而是要通过创建一个新的自定义配置文件来实现。否则会产生错误: : pw.context: "0x5808608651f0:" no modules loaded from context.modules
步骤如下:
-
创建自定义配置文件: 在
~/.config/pipewire/pipewire.conf.d/
目录下创建一个custom.conf
文件:mkdir -p ~/.config/pipewire/pipewire.conf.d touch ~/.config/pipewire/pipewire.conf.d/custom.conf
-
编辑配置文件: 打开
custom.conf
文件并加入以下内容:context.properties = { default.clock.rate = 192000 default.clock.allowed-rates = [ 48000 96000 192000 ] }
这里将采样率设置为 192kHz,并允许系统支持其他常见的采样率如 48kHz 和 96kHz。
-
重启 PipeWire: 保存文件后,重启 PipeWire 服务:
systemctl --user restart pipewire systemctl --user restart pipewire-pulse
-
检查配置是否生效: 你可以通过以下命令查看当前的音频服务器信息,确认采样率的更改是否成功:
pactl info
执行后的输出应该类似如下:
Server String: /run/user/1000/pulse/native Library Protocol Version: 35 Server Protocol Version: 35 Is Local: yes Client Index: 264 Tile Size: 65472 User Name: zyf Host Name: zyf-arch-pc Server Name: PulseAudio (on PipeWire 1.2.3) Server Version: 15.0.0 Default Sample Specification: float32le 2ch 192000Hz Default Channel Map: front-left,front-right Default Sink: alsa_output.usb-Sonata_Sonata_BHD_Pro_Sonata_BHD_Pro-00.pro-output-0 Default Source: alsa_output.usb-Sonata_Sonata_BHD_Pro_Sonata_BHD_Pro-00.pro-output-0.monitor
可以看到,默认采样率已经被修改为
192000Hz
。
🔧 Arch Linux 音频系统工作原理
Arch Linux 目前广泛使用 PipeWire 作为音频服务器,它替代了传统的 PulseAudio 和 JACK,成为一个更通用的音频处理框架。下面我们来简要介绍一下 Arch Linux 音频系统中的各个部分及其调用关系:
-
PipeWire: PipeWire 是核心音频和视频处理框架,它负责管理不同应用程序的音频流,并且支持多种不同的音频后端,比如 ALSA、PulseAudio、JACK 等。
-
PulseAudio 兼容层: PipeWire 提供了一个兼容层,使得依赖 PulseAudio 的应用程序仍然能够正常工作。这意味着你仍然可以通过
pactl
、pulseaudio
等命令进行管理。 -
ALSA (Advanced Linux Sound Architecture): ALSA 是 Linux 内核的一部分,负责与实际的硬件设备(如声卡)进行通信。PipeWire 将 ALSA 作为低层接口,用来与声卡交互。
-
JACK 支持: PipeWire 也能兼容 JACK,用于低延迟的音频处理,常见于专业音频应用场景。
这些组件的调用关系通常是:应用程序 -> PulseAudio 兼容层 -> PipeWire -> ALSA -> 硬件声卡。对于需要低延迟的应用程序,则是:应用程序 -> PipeWire (通过 JACK 接口) -> ALSA -> 硬件声卡。
🛠 常用音频调试命令
在使用 PipeWire 时,你可能会遇到一些音频问题。以下是一些常用的调试命令,帮助你快速定位问题:
-
查看当前的 PipeWire 状态:
systemctl --user status pipewire
你可以通过这条命令查看 PipeWire 服务的运行状态,是否出现错误。
-
查看当前连接的音频设备:
pw-cli list-objects
这个命令会列出所有当前连接的音频设备,帮助你确认设备是否被正确识别。
-
查看当前的 ALSA 设备:
aplay -l
该命令会列出所有的 ALSA 播放设备,确保你的声卡被正确识别。
-
PulseAudio 兼容层的调试: 如果你依赖 PulseAudio 层,可以使用以下命令检查 PulseAudio 的状态:
pactl list short sinks pactl list short sources
-
pw-top 类似top,是一个音频任务监视器:
pw-top
以上内容仅为个人理解和测试得出,如有错误请帮忙指正!