PulseAudio
PulseAudio 是一个通用声音服务器,旨在作为应用程序和硬件设备之间的中间件运行,可以使用 高级 Linux Sound Architecture (ALSA) 或 Open Sound System (OSS)。如果启用了 Avahi,它还提供通过本地设备进行便捷的网络流式传输。虽然其主要目的是简化音频配置,但其模块化设计允许更高级的用户精确配置守护进程以最好地满足他们的需求。
libasound。[1] PulseAudio 仅基于内核组件构建,但通过 pulseaudio-alsa 提供与 libasound 的兼容性。[2]安装
安装 pulseaudio 包。
一些 PulseAudio 模块未包含在主包中,如果需要,必须单独安装
- pulseaudio-alsa,以便 PulseAudio 也能管理 ALSA,请参见 #ALSA
- pulseaudio-bluetooth 用于 蓝牙 支持 (BlueZ),请参见 蓝牙耳机 页面
- pulseaudio-equalizer 用于均衡器汇 (qpaeq)
- pulseaudio-jack 用于 JACK 汇、源和 jackdbus 检测
- pulseaudio-lirc 用于通过 LIRC 进行红外音量控制
- pulseaudio-zeroconf 用于 Zeroconf (Avahi/DNS-SD) 支持
前端
有许多可用的前端用于控制 PulseAudio 守护进程
控制台
- ncpamixer — 受 pavucontrol 启发的 PulseAudio ncurses 混音器。
- pacmixer — 类似于 pavucontrol 的 PulseAudio 的 alsamixer(1)。
- PAmix — 类似于 pavucontrol 的 Ncurses PulseAudio 混音器。
- pamixer — PulseAudio 命令行混音器。
- pavolume — 带有 libnotify 消息的简单的 PulseAudio 命令行音量控制。
- Ponymix — PulseAudio 的命令行混音器。
- pulseaudio-ctl — 从 shell 或映射到键盘快捷键控制 PulseAudio 音量。
- pulsemixer — PulseAudio 的 CLI 和 curses 混音器。开发已停止。
图形界面
- KMix — KDE 音量控制应用程序,支持包括 PulseAudio 在内的多种平台,可配置的系统托盘小程序。
- MicTray — 轻量级系统托盘应用程序,可让您使用 PulseAudio 控制麦克风状态和音量。
- pa-applet — 带有音量条的 PulseAudio 系统托盘小程序。
- pa-notify — PulseAudio 或 PipeWire 音量通知守护进程。
- pasystray — PulseAudio 的系统托盘小程序。
- plasma-pa — 使用 PulseAudio 进行音频音量管理的 KDE Plasma 小程序。
- PulseAudio Equalizer — 基于 LADSPA 的 PulseAudio 多段均衡器。
- PulseAudio Graph Control — 基于 Electron 的 PulseAudio 音量和图形控制。
- PulseAudio Preferences — 简单的 PulseAudio GTK 配置对话框。
- PulseAudio Volume Control — PulseAudio 的简单 GTK 音量控制工具(“混音器”)。
- PulseAudio Volume Control (Qt) — PulseAudio 的混音器(pavucontrol 的 Qt 端口)。
- PulseAudio Volume Meter — PulseAudio 的简单 GTK 音量计。开发已停止。
- PulseEffects — PulseAudio 应用程序的音频效果。
- Volctl — 每个应用程序的系统托盘小程序音量控制和 PulseAudio 的 OSD。
- Xfce PulseAudio Panel Plugin — PulseAudio 插件,用于 Xfce4 面板。
配置
默认情况下,PulseAudio 配置为自动检测所有声卡并进行管理。它控制所有检测到的 ALSA 设备并将所有音频流重定向到自身,从而使 PulseAudio 守护进程成为中央配置点。守护进程通常开箱即用,只需要一些小的调整。
虽然 PulseAudio 通常开箱即用且只需要最少的配置,但高级用户可以通过修改默认配置文件来禁用模块或从头开始编写自己的配置文件,从而更改守护进程的几乎所有方面。
PulseAudio 作为服务器守护进程运行,可以使用客户端/服务器架构在系统范围内或按用户运行。守护进程本身不执行任何操作,除非其模块,除了提供 API 和托管动态加载的模块。音频路由和处理任务都由各种模块处理,包括 PulseAudio 的原生协议本身(由 module-native-protocol-unix 提供)。客户端通过许多协议模块之一访问服务器,这些模块接受来自外部源的音频,通过 PulseAudio 路由,并最终通过另一个最终模块输出。输出模块不一定是实际的音频输出:它可以将流转储到文件,流式传输到 Icecast 等广播服务器,甚至只是丢弃它。
您可以在 PulseAudio 可加载模块 找到所有可用模块的详细列表。要启用它们,只需将 load-module module-name-from-list 行添加到 ~/.config/pulse/default.pa。
配置文件
PulseAudio 将首先在主目录 ~/.config/pulse/ 中查找配置文件,如果找不到,将应用 /etc/pulse/ 中的系统范围的配置。
- 强烈建议不要编辑系统范围的配置文件,而是编辑用户配置文件。创建
~/.config/pulse目录,然后将系统配置文件复制到其中并根据需要进行编辑。 - 确保用户配置与
/etc/pulse/中打包文件的更改保持同步。否则,PulseAudio 可能会因配置错误而无法启动。 - 通常不需要将用户添加到
audio组,因为 PulseAudio 使用 udev 和 logind 动态授予当前“活动”用户的访问权限。例外情况包括运行无头机器,因此没有真正的本地用户。
daemon.conf
这是配置守护进程本身的配置文件。它定义了基础设置,例如模块使用的默认采样率、重采样方法、实时调度以及与服务器进程相关的各种其他设置。这些设置在运行时不重新启动 PulseAudio 守护进程就无法更改。默认设置对大多数用户来说都是合理的,有关更多信息,请参阅 pulse-daemon.conf(5) man page。布尔选项接受 true、yes、on 和 1 以及 false、no、off 和 0。
| 选项 | 描述 |
|---|---|
| daemonize | 控制服务器是否将自身守护化并返回。在调试时设置为 no,以便您可以在终端上看到调试信息。 |
| resample-method | 当具有不兼容采样率的音频需要在模块之间传递时(例如,在仅支持 48kHz 的硬件上播放 96kHz 音频)使用的重采样器。可以使用 pulseaudio --dump-resample-methods 列出可用的重采样器。为当前的用例选择 CPU 使用率和音频质量之间的最佳权衡。提示 在某些情况下,PulseAudio 会产生高 CPU 负载。当多个流被(单独)重采样时,可能会发生这种情况。如果这是工作流程中常见的用例,则应考虑创建一个在匹配采样率下的附加汇,然后将其馈送到主汇,只重采样一次。
|
| avoid-resampling | 当 avoid-resampling = yes 时,如果硬件支持该采样率,PulseAudio 会自动将硬件配置为应用程序使用的采样率(需要 PA 11 或更高版本)。警告 启用此功能可能会导致音频失真,因此默认禁用此功能,有关更多信息,请参阅 发行说明。
|
| enable-remixing | 当输入和输出具有不同的通道数时(例如,将 6 声道电影输出到立体声汇),PulseAudio 可以对所有通道进行混音(默认,yes),或者当为 no 时,通过名称简单地映射通道(左声道到左声道,右声道到右声道,其他所有声道忽略)。 |
| system-instance | 如果设置为 yes,则将守护进程作为 系统范围 的实例运行。 强烈不推荐,因为它可能引入安全问题。在 多座 系统或没有真正本地用户的无头系统上很有用。默认为 no。 |
| flat-volumes | 如果设置为 yes,则设备的音量会与“最响”应用程序的音量一起缩放。例如,提高 VoIP 通话音量将提高硬件音量并调整音乐播放器音量,使其保持在原来的位置,而无需手动降低音乐播放器音量。默认为 no。注意 启用后,这有时会令人困惑,并且一些不了解此功能的应用程序可能会在启动时将其音量设置为 100%,从而可能损坏您的扬声器或耳朵。
|
| realtime-scheduling | 如果您的 内核 支持实时调度(即 实时内核),请将其设置为 yes 以确保 PulseAudio 能够提供低延迟、无干扰的播放。您还可以调整 realtime-priority 以使用正确的优先级,尤其是在 JACK 也在系统上运行时。 |
| nice-level | 由于 PulseAudio 在用户空间运行并涉及进程间通信,如果守护进程没有足够的 CPU 时间来处理音频,则音频可能会出现中断。默认情况下通常足够,但可以进行调整,以使 PulseAudio 相对于其他应用程序具有所需的优先级(或低于其他应用程序)。 |
| exit-idle-time | 如果您只想在需要时运行 PulseAudio,否则使用 ALSA,则可以设置一个延迟(以秒为单位),之后在所有客户端断开连接后守护进程将自动关闭。将其设置为 -1 可禁用此功能。 |
| log-level | 在调试时,您可能需要提高守护进程的日志记录级别,以确切了解为什么某个模块加载失败。高日志记录级别有时会打印有用的信息,例如检测到的系统最小延迟,然后可用于调整 default-fragments 和 default-fragment-size-msec。 |
| default-sample-format | 这通常不需要更改,但如果声卡的本机格式不同,通过在此处设置正确的格式可以提高性能和质量。 |
| default-sample-rate | PulseAudio 使用的默认采样率,除非在模块级别被覆盖。如果您的声卡不支持 44100Hz 或您希望对所有音频进行升采样,请更改此设置。有关 CPU 使用率的说明,请参见前面的注释。 |
| alternate-sample-rate | 为了解决一个常见限制,即 48000Hz 的电影不必要地被降采样到 44100Hz,一些模块支持动态更改其采样率以避免在可能时进行重采样。有关更深入的信息,请参阅手册。这通常不需要更改。 |
| default-sample-channels | 未指定时的默认通道数。通常不需要任何更改,因为您可以按模块配置更多通道。 |
| default-fragments | 音频样本被分成多个 default-fragment-size-msec 大小的片段。缓冲区越大,当系统过载时音频跳过的可能性越小。缺点是这将增加总体延迟。如果您遇到问题,请增加此值。 |
| default-fragment-size-msec | 每个片段的大小(以毫秒为单位)。这是守护进程一次将处理的数据量。 |
default.pa
此文件是用于配置模块的启动脚本。在守护进程完成初始化后,它会被解析和读取,并且可以使用 pactl(1) 或 pacmd(1) 在运行时发送其他命令。启动脚本也可以在命令行中提供,方法是在终端中使用 pulseaudio -nC 启动 PulseAudio。这将使守护进程加载 CLI 模块,并直接从命令行接受配置,并在同一终端上输出结果信息或错误消息。这在调试守护进程时可能很有用,或者只是在将各种模块永久存储在磁盘上之前进行测试。man page 内容非常直观,请参阅 pulse-cli-syntax(5) 以获取语法详细信息。
默认配置还会加载 module-gsettings 来应用 paprefs 指定的设置。
~/.config/pulse/default.pa不必是完整副本,它可以以行.include /etc/pulse/default.pa开头,然后仅覆盖默认值。- 运行
pacmd list-sinks | grep -Ei 'index:|name:'来列出可用的汇。当前的默认汇会用星号标记。 - 编辑
~/.config/pulse/default.pa以插入/修改 set-default-sink 命令,使用汇的名称,因为编号不能保证可重复。
system.pa
此文件是在 PulseAudio 以系统范围模式运行时替换 default.pa 的启动脚本。
client.conf
这是每个 PulseAudio 客户端应用程序读取的配置文件。它用于配置单个客户端的运行时选项。它可以用于静态设置和配置默认汇和源,以及允许(或不允许)客户端在服务器当前未运行时自动启动服务器。如果启用了 autospawn,当客户端尝试连接到 PulseAudio 时,如果 PulseAudio 尚未运行,客户端将自动启动 PulseAudio。如果您不希望 PulseAudio 始终运行以节省系统资源,这可能会很有用。否则,您确实应该让它与您的 X11 会话一起启动。
配置命令
在运行时配置服务器的主要命令是 pacmd。运行 pacmd --help 可查看选项列表,或仅运行 pacmd 进入 shell 交互模式,然后按 Ctrl+d 退出。所有修改将立即应用。
一旦您的新设置经过测试并满足您的需求,请相应地编辑 default.pa 以使更改持久化。有关一些基本设置,请参阅 PulseAudio/Examples。
default.pa 文件中的 load-module module-default-device-restore 行不变。它将允许您在默认状态下重新启动服务器,从而消除任何错误的设置。理解 PulseAudio 可访问和可选择的“源”(进程、捕获设备)和“汇”(声卡、服务器、其他进程)取决于当前选择的硬件“配置文件”很重要。这些“配置文件”是 aplay -L 命令列出的 ALSA “pcms”,更具体地说,是 pacmd list-cards 命令列出的。该命令的输出中包含“index:”、“profiles:”开头的列表以及“active profile: <...>”行。 “配置文件”对应于不同的声卡输入/输出配置,尤其是可用的输入/输出通道数。
可以使用命令 pacmd set-card-profile INDEX PROFILE 设置“活动配置文件”,其中 INDEX 和 PROFILE 之间没有逗号分隔,其中 INDEX 只是“index:”行上的数字,而 PROFILE 名称是“profiles:”下任何行开头到冒号和第一个空格之前的所有内容,如 pacmd list-cards 命令所示。例如,pacmd set-card-profile 0 output:analog-stereo+input:analog-stereo。
使用图形工具(如 pavucontrol 的“配置”选项卡,或 KDE 系统设置的“声音”选项卡)选择“配置文件”可能更容易。每个音频“声卡”(这些是 aplay -l 命令或再次 pacmd list-cards 命令列出的设备)将拥有自己的可选择“配置文件”。选择“配置文件”后,可以使用命令 pacmd list-sources 和 pacmd list-sinks 查看可用的“源”和“汇”。请注意,每次更改声卡配置文件时,可用源和汇的“索引”都会发生变化。
选择的“配置文件”可能会影响某些应用程序,特别是 Adobe Flash 播放器,通常是 /usr/lib/mozilla/plugins/libflashplayer.so 和 /usr/lib/PepperFlash/libpepflashplayer.so。通常,这些 Flash 播放器仅在选择立体声配置文件之一时才能工作,否则,它们将播放视频而没有声音,或者会“崩溃”。如果所有其他方法都失败了,您可以尝试选择另一个配置文件。
当然,在 PulseAudio 中配置某种环绕声时,必须先选择适当的环绕声配置文件,才能使环绕声正常工作,或才能进行诸如重新映射扬声器通道之类的操作。
如果您的配置文件中只有一个“HiFi”选项,这意味着您使用的是 ALSA Use Case Manager 配置文件,而不是 PulseAudio 配置文件。有关如何返回使用 PulseAudio 配置文件的信息,请参阅 PulseAudio/Examples#Disabling UCM/"HiFi"。
连接和身份验证
由于 PulseAudio 作为守护进程以当前用户身份运行,客户端需要知道在哪里可以找到守护进程套接字以连接到它,以及客户端用于对其进行身份验证的共享随机 cookie 文件。默认情况下,客户端应能通过环境变量、X11 根窗口属性、client.conf 中的 default-server 选项以及最后尝试默认位置 $XDG_RUNTIME_DIR/pulse/native(通常是 unix:/run/user/user-id/pulse/native)来定位守护进程。但是,如果您有需要在 X11 会话之外访问 PulseAudio 的客户端,例如以不同用户身份运行的 mpd,您将需要告知它如何连接到您的 PulseAudio 实例。有关完整示例,请参阅 PulseAudio/Examples#Allowing multiple users to share a PulseAudio daemon。为了确保音频不会在一个多用户系统上从一个用户泄露到另一个用户,默认启用了包含随机字节的身份验证 cookie。如果您已经通过用户/组权限控制了谁可以访问服务器,则可以通过将 auth-cookie-enabled=0 传递给 module-native-protocol-unix 来禁用 cookie。
环境变量
这两个变量对于 libpulse 客户端在您将套接字移动到其他位置时定位 PulseAudio 非常重要。有关更多详细信息和其他客户端将读取的有用环境变量,请参阅 pulseaudio(1)。
| 变量 | 定义 |
|---|---|
PULSE_SERVER |
定义服务器的位置。它接受一个协议前缀,如 unix: 或 tcp,后跟服务器的路径或 IP。示例:unix:/home/pulse/native-sock。 |
PULSE_COOKIE |
将其指向包含 PulseAudio 生成的随机 cookie 的文件位置。客户端将读取此文件,并将其内容发送到服务器,因此所有音频客户端都必须能够读取该文件。它不必是同一个文件,只要其内容与守护进程使用的内容匹配即可。 |
X11 属性
当使用 SSH X11 转发时(即存在 DISPLAY 和 SSH_CONNECTION 环境变量时),libpulse 客户端还使用 X11 服务器的根窗口上的窗口属性来帮助查找守护进程。
可以使用 xprop -root 查询 X11 属性,或使用 pax11publish -d 读取脉冲特定属性。pax11publish 还可以用于根据环境变量更新属性(pax11publish -e,或使用 pax11publish -r 完全删除它们)。如果可能,建议让 PulseAudio 通过使用 module-x11-publish 模块或 start-pulseaudio-x11 命令自行处理。
| 变量 | 定义 |
|---|---|
PULSE_SERVER |
字符串值(xprop -root -f PULSE_SERVER 8s -set PULSE_SERVER 127.0.0.1:4713 或 pax11publish -e -S 127.0.0.1:4713),其功能与同名环境变量相同。 |
PULSE_COOKIE |
包含身份验证 cookie 十六进制表示的字符串值。 |
运行
Arch 上的 PulseAudio 默认启用了 pulseaudio.socket 用于 systemd/User 实例。这意味着 PulseAudio 将在需要时自动启动。
- 要禁用
pulseaudio.socket,请 屏蔽pulseaudio.socket用户单元。这将允许您安装 pulseaudio 而无需应用程序使用它,例如,您不需要声音或正在使用替代声音服务器。- 这种基于 systemd 的方法优先于 pulse-client.conf(5) 中描述的
autospawn选项。 pulseaudio 默认禁用此选项,因此您无需担心自行设置。 [3]
- 这种基于 systemd 的方法优先于 pulse-client.conf(5) 中描述的
- 许多 桌面环境 支持 XDG Autostart。在这些桌面环境中,PulseAudio 将自动启动,无论套接字激活状态如何。
有关更多信息,请参阅 PulseAudio: Running。
停止
停止 pulseaudio.socket 和 pulseaudio.service 用户单元。
后端配置
ALSA
如果您有不支持 PulseAudio 但依赖 ALSA 的应用程序,这些应用程序将尝试直接通过 ALSA 访问声卡,从而绕过 PulseAudio。因此,PulseAudio 将不再能够访问声卡。结果,所有依赖 PulseAudio 的应用程序都将停止工作,导致 此问题。为防止这种情况发生,您需要安装 pulseaudio-alsa 包。它包含将 ALSA 配置为使用 PulseAudio 所需的 /etc/alsa/conf.d/99-pulseaudio-default.conf。另外,请确保 ~/.asoundrc 文件不存在,因为它会覆盖 /etc/asound.conf 文件。
如果您运行的是 x86_64 系统并希望为 multilib 程序(如 Wine 和 Steam)提供 32 位声音,还需要安装 lib32-libpulse 和 lib32-alsa-plugins。
为防止应用程序使用 OSS 仿真并绕过 PulseAudio(从而阻止其他应用程序播放声音),请确保在启动时未加载 snd_pcm_oss 模块。如果它当前已加载(lsmod | grep oss),请通过执行以下命令禁用它:
# rmmod snd_pcm_oss
通过 ALSA 启用 DTS
要通过 ALSA 启用 PulseAudio DTS(数字影院系统),请安装 dcaencAUR 包并启用它
/etc/asound.conf
<confdir:pcm/dca.conf>
最后重启 PulseAudio。如果您遇到 DTS 设备和/或 PulseAudio 的音量问题,您可以通过查看 dcaenc 的 GitLab 来查找更多设置选项。
将 PulseAudio 源、接收器和混音器暴露给 ALSA
尽管 pulseaudio-alsa 包含允许 ALSA 应用程序使用 PulseAudio 默认设备的必要配置文件,但 ALSA 的 pulse 插件比这更通用
~/.asoundrc (or /etc/asound.conf)
# Create an alsa input/output using specific PulseAudio sources/sinks
pcm.pulse-example1 {
type pulse
device "my-combined-sink" # name of a source or sink
fallback "pulse-example2" # if combined not available
}
pcm.pulse-example2 {
type pulse
device "other-sound-card" # name of a source or sink
# example: device "alsa_output.pci-0000_00_1b.0.analog-stereo"
}
# Create an ALSA mixer using specific PulseAudio sources/sinks
# these can be tested with "alsamixer -D pulse-example3"
ctl.pulse-example3 {
type pulse
device "my-output" # name of source or sink to control
# example: always control the laptop speakers:
# device "alsa_output.pci-0000_00_1b.0.analog-stereo"
fallback "pulse-example4" # supports fallback too
}
# Mixers also can control a specific source and sink, separately:
ctl.pulse-example4 {
type pulse
sink "my-usb-headphones"
source "my-internal-mic"
# example: output to HDMI, record using internal
sink "alsa_output.pci-0000_01_00.1.hdmi-stereo-extra1"
source "alsa_input.pci-0000_00_1b.0.analog-stereo"
}
# These can override the default mixer (example: for pnmixer integration)
ctl.!default {
type pulse
sink "alsa_output.pci-0000_01_00.1.hdmi-stereo-extra1"
source "alsa_input.pci-0000_00_1b.0.analog-stereo"
}
可以阅读 源代码以了解所有可用选项。
ALSA/dmix 不抓取硬件设备
您可能希望在大多数应用程序中使用 ALSA,同时又能使用需要 PulseAudio 的应用程序。以下步骤允许您使 PulseAudio 使用 dmix,而不是抓取 ALSA 硬件设备。
- 卸载 pulseaudio-alsa 包,它在 ALSA 应用程序和 PulseAudio 之间提供了兼容层。卸载后,您的 ALSA 应用程序将直接使用 ALSA,而不会被 PulseAudio 挂钩。
- 在
/etc/pulse/default.pa中,注释掉或删除load-module module-udev-detect行,并添加以下行:
/etc/pulse/default.pa
load-module module-alsa-sink device=dmix load-module module-alsa-source device=dsnoop
- 现在,重新启动您的计算机,并尝试同时运行 ALSA 和 PulseAudio 应用程序。它们都应该同时产生声音。
- 如果需要,使用 pavucontrol 控制 PulseAudio 音量。
OSS
有多种方法可以让仅限 OSS 的程序输出到 PulseAudio
ossp
padsp 包装器
使用 OSS 的程序可以通过用 padsp(1)(包含在 libpulse 中)启动来与 PulseAudio 一起工作。
$ padsp OSSprogram
几个例子
$ padsp aumix $ padsp sox foo.wav -t ossdsp /dev/dsp
您还可以添加一个自定义包装器脚本,如下所示
/usr/local/bin/OSSprogram
#!/bin/sh exec padsp /usr/bin/OSSprogram "$@"
确保 /usr/local/bin 在您的 PATH 中位于 /usr/bin 之前。
GStreamer
gst-plugins-good 为使用 GStreamer 的应用程序提供了 pulseaudio 插件。
OpenAL
OpenAL Soft 应该默认使用 PulseAudio,但可以显式配置以这样做
/etc/openal/alsoft.conf
drivers=pulse,alsa
libao
编辑 libao 配置文件
/etc/libao.conf
default_driver=pulse
请务必删除 alsa 驱动程序的 dev=default 选项,或调整它以指定特定的 PulseAudio 接收器名称或编号。
alsa 驱动程序及其默认设备的标准,因为 ALSA 默认设备就是 PulseAudio。音频后处理
PulseEffects
PulseEffects 是一个 GTK 高级实用工具,用于在音频输入和输出上应用多种音频效果(例如,降噪、均衡器等)。
您可能还需要安装其可选依赖项 lsp-plugins 才能使插件正常工作。如果在安装插件后 PulseEffects 插件变灰,尝试启动守护进程时产生错误,或在“设置 > PulseAudio”选项卡中未显示任何设备,请尝试清除缓存,方法如 [4] 所示。
您可以在 社区预设中找到 PulseEffects 预设的集合。
均衡
如果您想使用与 #PulseEffects 中集成的均衡器不同的均衡器,有以下选项。
LADSPA 模块
安装 pulseaudio-equalizer-ladspa,这是一个基于 LADSPA swh-plugins 的均衡器。启动 pulseaudio-equalizer-gtk GUI 并调整参数以满足您的期望。
集成模块
PulseAudio 有一个集成的 10 段均衡器系统。要使用它,请安装 pulseaudio-equalizer 并加载 module-equalizer-sink
$ pactl load-module module-equalizer-sink
如果您的配置未默认加载 module-dbus-protocol,也请加载它。
要启动 GUI,请运行 qpaeq。
要加载启动时的均衡器模块,请在 /etc/pulse/default.pa.d/ 中创建一个 .pa 文件,或编辑 ~/.config/pulse/default.pa 并添加以下行:
### Load the integrated PulseAudio equalizer load-module module-equalizer-sink
动态范围压缩
可以使用 #PulseEffects 进行动态范围压缩,但是 PulseEffects 可能会为音频流引入大量的开销和延迟,所以如果您只需要压缩效果并且系统负载较小,可以使用 module-ladspa-sink 模块提供其他选项。
Steve Harris 插件
Steve Harris LADSPA 是一组包含各种压缩模块的插件。安装 swh-plugins 并按以下方式编辑配置:
~/.config/pulse/default.pa
.include /etc/pulse/default.pa set-default-sink your_card_sink_name load-module module-ladspa-sink sink_name=shw_sc4 sink_master=your_card_sink_name plugin=sc4_1882 label=sc4 control=,,,,,, set-default-sink shw_sc4
您必须指定您的声卡接收器名称,请从 pacmd list-sinks 获取。要应用更改,请停止并重新启动 PulseAudio。上面的配置具有空的控制选项,使用默认值。
要使用自定义控制参数调整模块,请按正确的顺序填写它们。
| 控制选项 | 描述 |
|---|---|
| RMS/峰值(0/1) | RMS 和峰值包络跟随器之间的平衡。RMS 通常更适合微妙的音乐压缩,而峰值更适合重度、快速的压缩和打击乐。 |
| 攻击时间(毫秒) | 攻击时间(以毫秒为单位)。 |
| 释放时间(毫秒) | 释放时间(以毫秒为单位)。 |
| 阈值电平(dB) | 压缩器开始生效的点。 |
| 比率(1:n) | 当信号电平超过阈值时使用的增益衰减比率。1 表示无压缩;值越高,压缩越强。 |
| 膝盖半径(dB) | 膝盖曲线开始处的阈值距离。 |
| 补偿增益(dB) | 控制补偿输入信号的增益(以分贝为单位)。 |
可以在 Steve Harris 的 LADSPA 插件文档 中找到其他插件。
Calf 插件
对于更专业的压缩器,您可以使用 Calf Studio Gear 开发的压缩器[链接失效 2025-08-16—SSL 错误]。安装 calf-ladspaAUR 并按以下方式编辑配置:
~/.config/pulse/default.pa
.include /etc/pulse/default.pa set-default-sink your_card_sink_name load-module module-ladspa-sink sink_name=calf_comp_x2 sink_master=your_card_sink_name plugin=veal label=Compressor control=,,,,,,,,,, set-default-sink calf_comp_x2
该插件有 11 个控制选项。如果您想插入自定义值,请阅读下表,并不要忘记按正确的顺序指定它们。
| 控制选项 | 默认 | 最小值 | 最大值 | 类型 | 信息 |
|---|---|---|---|---|---|
| 旁路 | 0 | 0 | 1 | 布尔值 | |
| 输入电平 | 1 | 0.015625 | 64 | 浮点 dB | |
| 阈值 | 0.125 | 0.000976563 | 1 | 浮点 dBFS | 例如,要设置为 -18 dB,正确的值是 10^(-18/20) = 0.158 |
| 比率 | 2 | 1 | 20 | 浮点数 | |
| 攻击 | 20 | 0.01 | 2000 | 浮点毫秒 | |
| 释放 | 250 | 0.01 | 2000 | 浮点毫秒 | |
| 补偿 | 1 | 1 | 64 | 浮点 dB | |
| 膝盖 | 2.828427125 | 1 | 8 | 浮点 dB | |
| RMS/峰值 | 0 | 0 | 1 | 布尔值 | 0 = RMS;1 = 峰值 |
| 立体声链接 | 0 | 0 | 1 | 布尔值 | 0 = 平均;1 = 最大值 |
| 混合 | 1 | 0 | 1 | 浮点数 | 百分比 |
| 要理解每个选项的含义,请阅读 Calf Compressor 文档[链接失效 2025-08-16—SSL 错误]。 | |||||
麦克风回声/降噪
Arch 默认不加载 PulseAudio 的回声消除模块,因此我们必须在 /etc/pulse/default.pa.d/ 中添加它。首先,您可以使用 pacmd 并输入 list-modules 来测试模块是否存在。如果您找不到显示 name: <module-echo-cancel> 的行,您需要创建
/etc/pulse/default.pa.d/noise-cancellation.pa
### Enable Echo/Noise-Cancellation load-module module-echo-cancel use_master_format=1 aec_method=webrtc aec_args="analog_gain_control=0 digital_gain_control=1" source_name=echoCancel_source sink_name=echoCancel_sink set-default-source echoCancel_source set-default-sink echoCancel_sink
然后重启 PulseAudio
$ pulseaudio -k $ pulseaudio --start
并通过启动 pavucontrol 检查模块是否已激活。在“录音”下,输入设备应显示“Echo-Cancel Source Stream from”。
在 aec_args 中将 beamforming=1 打开还可以显著减少背景噪音,如果您有多个麦克风(这在许多新笔记本电脑上很常见)。但是,波束形成需要指定您的 mic_geometry(见下文)。
如果您希望现有流自动移动到新的接收器和源,您必须在 module-switch-on-connect 之前加载 module-switch-on-connect 模块,并设置 ignore_virtual=no。
module-echo-cancel 后将耳机插入前置音频连接器,则必须手动卸载并重新加载 module-echo-cancel,因为不幸的是,没有办法告诉模块它应该自动切换到新的默认“source_master”和“source_sink”。请参阅 [5]。“aec_method=webrtc”可能的“aec_args”
以下是“aec_method=webrtc”可能使用的“aec_args”列表及其默认值 [6][7]
analog_gain_control=1- 模拟 AGC - 通过直接改变音量进行的“自动增益控制” - 最有可能导致失真。digital_gain_control=0- 数字 AGC - 在后期处理中进行的“自动增益控制”(CPU 负载较高)。experimental_agc=0- 允许启用 webrtc 实验性 AGC 机制。agc_start_volume=85- 使用 AGC 时的初始音量 - 可能的值为 0-255 - 过低的初始音量可能导致 AGC 算法永远无法将音量提高到足够高 [8]。high_pass_filter=1- ?noise_suppression=1- 降噪。voice_detection=1- VAD - 语音活动检测。extended_filter=0- 扩展滤波器更复杂,并且比常规滤波器对硬件报告的延迟不正确不太敏感。扩展滤波器模式默认禁用,因为它在双讲时似乎会产生较差的结果 [9]。如果您的麦克风或扬声器延迟较大(例如,使用无线麦克风或某些 HDMI 电视作为扬声器)时,请启用此选项。intelligibility_enhancer=0- webrtc 可懂度增强器的一些位。drift_compensation=0- 漂移补偿,允许在不同设备之间进行回声消除(例如,笔记本电脑的扬声器和 USB 网络摄像头的麦克风)。- 仅在“mobile=0”时可用。beamforming=0- 这可以显著减少背景噪音。请参阅 [10][11]mic_geometry=x1,y1,z1,x2,y2,z2- 仅当“beamforming=1”时。target_direction=a,e,r- 仅当“beamforming=1”时。注意:如果模块因该参数而无法加载,请将方位角(a)设置为所需值,但将仰角(e)和半径(r)设置为 0。
mobile=0- ?routing_mode=speakerphone- 可能的值:“quiet-earpiece-or-headset,earpiece,loud-earpiece,speakerphone,loud-speakerphone” - 仅当“mobile=1”时有效。comfort_noise=1- ? - 仅当“mobile=1”时有效。
在特定应用程序中禁用音频后处理
如果您正在使用 module-echo-cancel,您可能不希望其他应用程序进行额外的音频后处理。以下是禁用以下应用程序中音频后处理的列表:
- Mumble
- 配置 > 设置 > 音频输入
- 回声消除:选择禁用
- 降噪:选择禁用
- 最大放大:将滑块设置为1.00
- TeamSpeak
- 工具 -> 选项 -> 捕获
- 取消勾选:“输入衰减”、“移除背景噪音”、“回声消除”和“回声降低(静音)”
- Firefox:请参阅 Firefox tweaks#Disable WebRTC audio post processing
- Steam
- 设置 > 语音 > 高级选项 > 显示
- 禁用以下滑块:“回声消除”、“降噪”、“自动音量/增益控制”
重新加载 module-echo-cancel 的脚本
由于 module-echo-cancel 并非总是必需的,或者如果 source_master 或 sink_master 发生变化,则必须重新加载它,因此拥有一个加载或重新加载 module-echo-cancel 的简单方法会很有用。
创建以下脚本并使其可执行
echoCancelEnable.sh
#!/bin/sh aecArgs="$*" # If no "aec_args" are passed on to the script, use this "aec_args" as default: [ -z "$aecArgs" ] && aecArgs="analog_gain_control=0 digital_gain_control=1" newSourceName="echoCancelSource" newSinkName="echoCancelSink" # "module-switch-on-connect" with "ignore_virtual=no" (needs PulseAudio 12 or higher) is needed to automatically move existing streams to a new (virtual) default source and sink. if ! pactl list modules short | grep "module-switch-on-connect.*ignore_virtual=no" >/dev/null 2>&1; then echo Load module \"module-switch-on-connect\" with \"ignore_virtual=no\" pactl unload-module module-switch-on-connect 2>/dev/null pactl load-module module-switch-on-connect ignore_virtual=no fi # Reload "module-echo-cancel" echo Reload \"module-echo-cancel\" with \"aec_args=$aecArgs\" pactl unload-module module-echo-cancel 2>/dev/null if pactl load-module module-echo-cancel use_master_format=1 aec_method=webrtc aec_args=\"$aecArgs\" source_name=$newSourceName sink_name=$newSinkName; then # Set a new default source and sink, if module-echo-cancel has loaded successfully. pacmd set-default-source $newSourceName pacmd set-default-sink $newSinkName fi
为了方便地从图形环境中运行该脚本,您可以为其创建一个桌面启动器。
循环神经网络降噪(RNNoise)
安装 noise-suppression-for-voice 包将允许基于 RNNoise 的实时降噪:学习降噪 [12]。配置详细信息可以在项目 Github 站点 [13] 上找到。您可以安装 Cadmus(cadmus-debAUR 或 cadmus-appimageAUR),它是 @werman 的 PulseAudio 实时降噪插件的 GUI 前端。
另一个选择是 noisetorchAUR,它也构建在 RNNoise 之上。它不仅有输入降噪,还有输出降噪。
应用程序
QEMU
有关如何在 QEMU 中配置 PulseAudio 的详细指南,请参阅 QEMU#Creating an audio backend。
AlsaMixer.app
安装 pulseaudio-alsa,并使 alsamixer.appAUR dockapp 为 windowmakerAUR 使用 PulseAudio,例如:
$ AlsaMixer.app --device pulse
这里有两个例子,第一个是 ALSA,第二个是 PulseAudio。您可以运行多个实例。使用 -w 选项选择要与鼠标滚轮绑定的控件按钮。
$ AlsaMixer.app -3 Mic -1 Master -2 PCM --card 0 -w 1 $ AlsaMixer.app --device pulse -1 Capture -2 Master -w 2
有关详细信息,请参阅 #ALSA。
XMMS2
使其切换到 PulseAudio 输出
$ xmms2 server config output.plugin pulse
和 ALSA
$ xmms2 server config output.plugin alsa
要让 XMMS2 使用不同的输出接收器,例如:
$ xmms2 server config pulse.sink alsa_output.pci-0000_04_01.0.analog-stereo.monitor
请参阅 官方指南。
KDE Plasma 工作区和 Qt
PulseAudio 将自动被 KDE / Qt 应用程序使用。它在 KDE 声音混音器中默认支持。有关更多信息,请参阅 PulseAudio Wiki 中的 KDE 页面。
如果为 Phonon 使用了 phonon-gstreamer 后端,GStreamer 也应按 #GStreamer 中的描述进行配置。
Audacious
Audacious 原生支持 PulseAudio。要使用它,请将“文件 > 设置 > 音频 > 输出插件 > PulseAudio Output”设置为。
音乐播放器守护进程(MPD)
配置 MPD 以使用 PulseAudio。另请参阅 Music Player Daemon/Tips and tricks#PulseAudio。
MPlayer
MPlayer 原生支持使用 -ao pulse 选项的 PulseAudio 输出。它也可以配置为默认使用 PulseAudio 输出,在 ~/.mplayer/config 中为每个用户,或在 /etc/mplayer/mplayer.conf 中为系统范围。
/etc/mplayer/mplayer.conf
ao=pulse
mpv
mpv 支持 PulseAudio,方式与 #MPlayer 的描述相同。用户自定义配置在 ~/.config/mpv/mpv.conf 中,系统范围配置在 /etc/mpv/mpv.conf 中。
guvcview
guvcview 在使用来自 Webcam 的 PulseAudio 输入时,可能会导致音频输入被暂停,从而导致没有音频被录制。您可以通过执行以下命令来检查:
$ pactl list sources
如果音频源是“暂停”状态,则创建以下 .pa 文件
/etc/pulse/default.pa.d/no-module-suspend-on-idle.pa
unload-module module-suspend-on-idle
然后重启 PulseAudio 或您的计算机将仅使输入源处于空闲状态而不是暂停它。guvcview 将随后正确地从设备录制音频。
网络音频
PulseAudio 的独特功能之一是它能够可靠地在局域网内通过 TCP 将音频从客户端流式传输到运行 PulseAudio 守护进程的服务器。请确保客户端和服务器系统在时间上同步(即,使用 NTP),否则音频流可能会断断续续或根本不起作用。有关更详细的指南,请访问 官方 PulseAudio 文档。
要在服务器(实际输出声音的计算机)上启用 TCP 模块,请创建以下 .pa 文件:
/etc/pulse/default.pa.d/tcp.pa
load-module module-native-protocol-tcp
或者,您可以使用 paprefs GUI 应用程序(不需要 root 权限)。转到“网络服务器 > 启用对本地声音设备的网络访问”。
为了确保 module-native-protocol-tcp 在服务器上加载,您可以使用:
$ pacmd list-modules | grep module-native-protocol-tcp
客户端和服务器共享相同的 cookie 是必需的。请确保客户端和服务器共享位于 ~/.config/pulse/cookie 下的同一个 cookie 文件。使用哪个 cookie 文件(服务器的还是客户端的)并不重要,只要服务器和客户端共享同一个即可。
如果您不希望将 cookie 文件从客户端复制,匿名客户端可以通过在服务器上(同样是在 /etc/pulse/default.pa.d/ 中)将 auth-anonymous 传递给 module-native-protocol-tcp 来访问服务器。
load-module module-native-protocol-tcp auth-anonymous=1
也可以基于客户端 IP 地址进行身份验证
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/24
更改 LAN IP 子网以匹配您希望访问服务器的客户端的子网。
系统范围启动
PulseAudio 守护进程通常在用户登录并尝试播放某种音频时作为用户服务启动。要运行一个接受 TCP 客户端连接的专用 PulseAudio 服务器,守护进程必须在启动时作为系统服务启动。请注意 在大多数桌面使用场景中,系统模式可能不是正确的选择。
要以系统模式运行 PulseAudio,首先我们需要设置系统范围 PulseAudio 服务器实例所需的用户和组:
- 添加用户
pulse。PulseAudio 守护进程在启动后会切换到此用户。# useradd -d /var/run/pulse -s /usr/bin/nologin -G audio pulse
- 如果您的系统上有蓝牙(BlueZ)并且您希望 PulseAudio 使用蓝牙,可以选择将用户
pulse添加到bluetooth组。# usermod -aG bluetooth pulse
- 添加组
pulse-access。此组由 PulseAudio 服务器用于访问控制。# groupadd pulse-access
- 如果希望用户访问系统范围的 PulseAudio 实例,请将用户添加到
pulse-access组。# usermod -aG pulse-access root
在 /etc/systemd/system 中创建服务 pulseaudio.service,包含以下内容:
/etc/systemd/system/pulseaudio.service
[Unit] Description=Sound Service [Service] # Note that notify will only work if --daemonize=no Type=notify ExecStart=/usr/bin/pulseaudio --daemonize=no --exit-idle-time=-1 --disallow-exit=true --system --disallow-module-loading Restart=always [Install] WantedBy=default.target
root 更改为 pulse。[15] 以 pulse 用户身份启动服务不起作用,PulseAudio 会抱怨它不是 root。该用户和组名是硬编码的。然后,在系统级别启用 pulseaudio.service。您还需要通过使用 --global 标志屏蔽 pulseaudio.socket 来禁用整个系统的用户级 PulseAudio 服务。
即使您通过 SSH 访问系统,这也是必需的,以确保用户级 PulseAudio 服务永远不会启动。
当 PulseAudio 以系统模式启动时,将使用 /etc/pulse/system.pa 而不是 default.pa,因此请确保将所有必要的设置放入 system.pa。
选择服务器
对于单个 shell 或命令,您可以将 PULSE_SERVER 环境变量设置为所需 PulseAudio 服务器的主机名或 IP 地址。
$ env PULSE_SERVER=server-hostname-or-ip mplayer test.mp3
或者,您可以创建或修改 ~/.config/pulse/client.conf 或 /etc/pulse/client.conf 来永久设置默认服务器。
default-server = server-hostname-or-ip
也可以指定多个服务器,用空格分隔,然后 PulseAudio 会依次尝试[16]。
default-server = server1 backup
技巧与提示
键盘音量控制
将以下命令映射到您的音量键:XF86AudioRaiseVolume、XF86AudioLowerVolume 和 XF86AudioMute。
首先找出您想要控制的音频输出对应的输出设备。要列出可用的输出设备
$ pactl list sinks short
假设使用输出设备 0,提高音量
$ sh -c "pactl set-sink-mute 0 false ; pactl set-sink-volume 0 +5%"
减小音量
$ sh -c "pactl set-sink-mute 0 false ; pactl set-sink-volume 0 -5%"
静音/取消静音音量
$ pactl set-sink-mute 0 toggle
静音/取消静音麦克风
$ pactl set-source-mute 1 toggle
- 要使键盘快捷键始终作用于默认输出设备,请指定
@DEFAULT_SINK@作为输出设备编号,例如pactl set-sink-mute @DEFAULT_SINK@ toggle。 - 对于更高级的控制,例如限制最大音量,请考虑使用 控制台前端之一。
从非交互式 shell(systemd 服务、cron)播放声音
将 user 替换为运行 PulseAudio 的用户
# machinectl shell --uid=user .host /usr/bin/paplay /usr/share/sounds/freedesktop/stereo/complete.oga
X11 响铃事件
要让 PulseAudio 处理 X11 响铃事件,请在 X11 会话启动后运行以下命令
$ pactl upload-sample /usr/share/sounds/freedesktop/stereo/bell.oga bell-window-system $ pactl load-module module-x11-bell display=$DISPLAY
或者使用配置文件 /etc/pulse/default.pa.d/ 或 ~/.config/pulse/default.pa
~/.config/pulse/default.pa
.include /etc/pulse/default.pa # audible bell load-sample-lazy bell-window-system /usr/share/sounds/freedesktop/stereo/bell.oga load-module module-x11-bell
要调整 X11 响铃的音量,请运行以下命令
$ xset b 100
100 是一个百分比。这需要 xorg-xset 包。有关在 X11 会话启动时自动运行这些命令的方法,请参阅 Autostarting。
连接时切换
switch-on-connect 模块会在连接新设备时将音频输出切换到新设备。例如,如果您插入 USB 耳机,输出将切换到该耳机。如果您拔出它,输出将恢复到最后一个设备。
此模块默认禁用,因为它过于激进,但可以通过将行 load-module module-switch-on-connect 添加到您的 ~/.config/pulse/default.pa 来启用。
切换输出端口的脚本
一些声卡提供了多个模拟输出选项,可以通过 PulseAudio 端口进行切换。但手动切换可能很麻烦,因此您可以使用 pactl 命令自动化此过程。
列出可用的端口
$ LC_ALL=C.UTF-8 pactl list sinks
Sink #0 ... Ports: analog-output-speaker: Speakers (type: Speaker, priority: 10000, availability unknown) analog-output-headphones: Headphones (type: Headphones, priority: 9900, not available) Active Port: analog-output-speaker
当前端口可以通过以下方式获得
$ LC_ALL=C.UTF-8 pactl list sinks | grep "Active Port" | cut -d ' ' -f 3-
切换活动端口
$ pactl set-sink-port sink-index port
此过程可以通过一个简单的脚本自动化。然后用户可以为该脚本分配一个快捷方式
~/pa.sh (or anything the user wants)
#!/bin/sh # This script uses notify-send from the libnotify package to warn the user of the currently swapped to port. # User could adapt it to their needs or change it. CURRENT_PORT=$(LC_ALL=C.UTF-8 pactl list sinks | grep "Active Port" | cut -d ' ' -f 3-) if [ "$CURRENT_PORT" = "analog-output-speaker" ] ; then pactl set-sink-port 0 "analog-output-headphones" notify-send --expire-time=2000 "PulseAudio" "Headphones" else pactl set-sink-port 0 "analog-output-speaker" notify-send --expire-time=2000 "PulseAudio" "Speakers" fi
此脚本旨在在两个端口之间切换。首先检查当前端口,然后进行切换。用户可能需要更改输出设备索引号和端口名称以适应其机器。
禁用进入语音通话时静音媒体(module-role-cork)
进入语音通话时(例如在 Microsoft Teams 中,可能还有其他应用程序),媒体应用程序可能会被静音。要禁用此行为,您只需在 PulseAudio 配置中禁用此模块即可
/etc/pulse/default.pa.d/no-cork.pa
unload-module module-role-cork
高级配置和用例
请参阅 PulseAudio/Examples。
故障排除
请参阅 PulseAudio/Troubleshooting。