PulseAudio
PulseAudio 是一个通用的声音服务器,旨在作为应用程序和硬件设备之间的中间件运行,可以使用高级 Linux 声音架构 (ALSA) 或 开放声音系统 (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 — 用于 PulseAudio 的 Ncurses 混音器,灵感来自 pavucontrol。
- pacmixer — 类似于 Alsamixer 的 PulseAudio 混音器。
- 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 Manager — 用于 PulseAudio 的简单 GTK 前端。已停止开发。
- 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 — 用于 Xfce4 面板的 PulseAudio 插件。
配置
默认情况下,PulseAudio 配置为自动检测所有声卡并对其进行管理。它控制所有检测到的 ALSA 设备并将所有音频流重定向到自身,从而使 PulseAudio 守护进程成为中央配置点。该守护进程应该可以开箱即用,只需要进行一些小的调整。
虽然 PulseAudio 通常可以开箱即用,只需要最少的配置,但高级用户可以通过修改默认配置文件以禁用模块或从头开始编写自己的配置文件来更改守护进程的几乎所有方面。
PulseAudio 作为服务器守护进程运行,可以使用客户端/服务器架构在全系统范围内或在每个用户的基础上运行。守护进程本身在没有其模块的情况下什么也不做,除了提供 API 和托管动态加载的模块。音频路由和处理任务都由各种模块处理,包括 PulseAudio 的本机协议本身(由 module-native-protocol-unix 提供)。客户端通过多个协议模块之一连接到服务器,这些模块将接受来自外部源的音频,通过 PulseAudio 路由它,并最终通过最终的其他模块输出。输出模块不必是实际的声音输出:它可以将流转储到文件中,将其流式传输到广播服务器(如 Icecast),甚至只是丢弃它。
您可以在 PulseAudio 可加载模块 找到所有可用模块的详细列表。要启用它们,您只需在 ~/.config/pulse/default.pa
中添加一行 load-module module-name-from-list
。
配置文件
PulseAudio 将首先在主目录 ~/.config/pulse/
中查找配置文件,如果找不到,则将应用来自 /etc/pulse/
的全系统范围配置。
- 强烈建议不要编辑全系统范围的配置文件,而是编辑用户配置文件。创建
~/.config/pulse
目录,然后将系统配置文件复制到其中并根据您的需要进行编辑。 - 确保您的用户配置与
/etc/pulse/
中打包文件的更改保持同步。否则,PulseAudio 可能会由于配置错误而拒绝启动。 - 通常不需要将您的用户添加到
audio
组,因为 PulseAudio 使用 udev 和 logind 来动态地向当前“活动”用户授予访问权限。例外情况包括以无头模式运行机器,这样就没有当前“活动”用户。
daemon.conf
这是配置守护进程本身的主要配置文件。它定义了基本设置,如模块使用的默认采样率、重采样方法、实时调度以及与服务器进程相关的各种其他设置。这些设置在运行时无法更改,除非重新启动 PulseAudio 守护进程。对于大多数用户来说,默认设置是合理的,有关更多信息,请参阅 pulse-daemon.conf(5) 手册页。布尔选项接受以下任何一项: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 声道电影输出到立体声音频接收器),pulse 可以重新混合所有声道(默认,yes ),或者在 no 时仅按名称简单地映射声道(左声道到左声道,右声道到右声道,所有其他声道都被忽略) |
system-instance | 如果设置为 yes ,则将守护进程作为 全系统范围 实例运行。强烈不建议,因为它可能会引入安全问题。在 多座席 系统或没有真实本地用户的无头系统上很有用。默认为 no 。 |
flat-volumes | 如果设置为 yes ,则使用“最响亮”应用程序的音量来缩放设备音量。例如,提高 VoIP 通话音量将提高硬件音量并调整音乐播放器音量,使其保持在原来的位置,而无需手动降低音乐播放器的音量。默认为 no 。注意: 启用后,有时可能会造成混淆,并且某些不了解此功能的应用程序可能会在启动时将其音量设置为 100%,从而可能损坏您的扬声器或您的耳朵。
|
realtime-scheduling | 如果您的 内核 支持实时调度(例如,实时内核 或 Linux-ck),请将其设置为 yes ,以确保 PulseAudio 可以提供低延迟、无故障的播放。您也可以调整 realtime-priority 以使其使用正确的优先级,尤其是在 JACK 也运行在系统上时。 |
nice-level | 由于 PulseAudio 在用户空间中运行并涉及进程间通信,如果守护进程没有足够的 CPU 时间来处理音频,则音频可能会出现丢帧。默认值通常足够,但可以调整以使 pulse 获得高于(或低于)其他应用程序的所需优先级。 |
exit-idle-time | 如果您只想在需要时运行 PulseAudio,否则使用 ALSA,您可以设置一个延迟(以秒为单位),在此延迟之后,当所有客户端断开连接后,守护进程将自动关闭。将其设置为 -1 以禁用此功能。 |
log-level | 调试时,您可能需要提高守护进程的日志记录级别,以准确查看特定模块为何无法加载。高日志记录级别有时会打印有用的信息,例如系统检测到的最小延迟,然后可以将其用于调整 default-fragments 和 default-fragment-size-msec 。 |
default-sample-format | 通常不需要更改此设置,但如果您的声卡的本机格式不同,则可以通过在此处设置正确的格式来提高性能和质量。 |
default-sample-rate | 除非在模块级别覆盖,否则 pulse 使用的默认采样率。如果您的声卡不支持 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 模块,并将直接从命令行接受配置,并在同一终端上输出结果信息或错误消息。这在调试守护进程或在磁盘上永久设置各种模块之前测试它们时很有用。手册页非常不言自明,有关语法的详细信息,请查阅 pulse-cli-syntax(5)。
~/.config/pulse/default.pa
可以以.include /etc/pulse/default.pa
行开头,然后仅覆盖默认值,而不是作为完整副本。- 运行
pacmd list-sinks | grep -Ei 'index:|name:'
列出可用的音频接收器。当前的默认音频接收器用星号标记。 - 编辑
~/.config/pulse/default.pa
以插入/更改 set-default-sink 命令,使用音频接收器的名称,因为不能保证编号是可重复的。
client.conf
这是每个 PulseAudio 客户端应用程序读取的配置文件。它用于配置各个客户端的运行时选项。它可用于静态设置和配置默认音频接收器和音源,以及允许(或不允许)客户端在服务器当前未运行时自动启动服务器。如果启用了 autospawn,则当客户端尝试连接到 PulseAudio 时,如果 PulseAudio 尚未运行,客户端将自动启动 PulseAudio。如果您不希望 PulseAudio 始终运行以节省系统资源,这将非常有用。否则,您真的应该让它与您的 X11 会话一起启动。
配置命令
在运行时配置服务器的主要命令是 pacmd
。运行 pacmd --help
以获取选项列表,或者只运行 pacmd
进入 shell 交互模式,并按 Ctrl+d
退出。所有修改都将立即应用。
一旦您的新设置经过测试并满足您的需求,请相应地编辑 default.pa
以使更改持久。有关一些基本设置,请参阅 PulseAudio/示例。
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 名称是 pacmd list-cards
命令显示的“profile:”下任何行的开头到冒号和第一个空格之前的所有内容。例如,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 用例管理器 配置文件而不是 pulseaudio 配置文件。有关如何恢复使用 pulseaudio 配置文件的信息,请参阅 PulseAudio/示例#禁用 UCM/“HiFi”。
连接和认证
由于 PulseAudio 作为当前用户的守护进程运行,因此客户端需要知道在哪里找到守护进程套接字以连接到它,以及客户端用于对其进行身份验证的共享随机 cookie 文件。默认情况下,客户端应该能够毫无问题地使用环境变量、X11 根窗口属性以及最后尝试默认位置 (unix:/run/user/$ID/pulse/native
) 来定位守护进程。但是,如果您有需要在 X11 会话之外访问 PulseAudio 的客户端(如作为不同用户运行的 mpd),则需要告诉它如何连接到您的 PulseAudio 实例。有关完整示例,请参阅 PulseAudio/示例#允许多个用户共享一个 PulseAudio 守护进程。默认情况下启用包含随机字节的身份验证 cookie,以确保音频不会在多用户系统上从一个用户泄漏到另一个用户。如果您已经使用用户/组权限控制谁可以访问服务器,则可以通过将 auth-cookie-enabled=0
传递给 module-native-protocol-unix
来禁用 cookie。
环境变量
如果您将 PulseAudio 的套接字移动到其他位置,则这两个变量对于 libpulse 客户端定位 PulseAudio 非常重要。有关更多详细信息和客户端将读取的其他有用环境变量,请参阅 pulseaudio(1)。
变量 | 定义 |
---|---|
PULSE_SERVER |
定义服务器的位置。它接受一个协议前缀,如 unix: 或 tcp ,后跟服务器的路径或 IP 地址。示例:unix:/home/pulse/native-sock 。 |
PULSE_COOKIE |
指向包含 PulseAudio 生成的随机 Cookie 的文件位置。客户端会读取此文件,并将其内容发送到服务器,因此所有音频客户端都必须可读取该文件。它不需要是同一个文件,只要其内容与守护程序使用的内容匹配即可。 |
X11 属性
PulseAudio 还使用 X11 服务器根窗口上的窗口属性来帮助查找守护程序。由于环境变量在子进程启动后无法修改,因此 X11 属性更灵活,因为它们更容易更改,因为它们是全局共享的。只要应用程序收到 DISPLAY=
环境变量,它就可以读取最新的值。可以使用 xprop -root
查询 X11 属性,或使用 pax11publish -d
读取 Pulse 专有属性。pax11publish
也可用于从环境变量更新属性 (pax11publish -e
,或 pax11publish -r
完全删除它们)。如果可能,建议让 PulseAudio 通过自身使用 module-x11-publish 模块或 start-pulseaudio-x11
命令来完成此操作。下表仅供完整性参考,您永远都不需要手动设置这些变量。
变量 | 定义 |
---|---|
PULSE_SERVER |
字符串值 (xprop -root -f PULSE_SERVER 8s -set PULSE_SERVER "unix:/tmp/pulse-sock" ),作用与同名的环境变量相同。 |
PULSE_COOKIE |
包含身份验证 Cookie 的十六进制表示形式的字符串值。 |
运行
Arch 上的 PulseAudio 默认情况下为 systemd/User 实例启用了 pulseaudio.socket
。这意味着 PulseAudio 将在需要时自动启动。
- 要禁用
pulseaudio.socket
,请确保$XDG_CONFIG_HOME/systemd/user/
存在,并屏蔽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 软件包。它包含必要的 /etc/alsa/conf.d/99-pulseaudio-default.conf
,用于配置 ALSA 以使用 PulseAudio。另请确保 ~/.asoundrc
不存在,因为它会覆盖 /etc/asound.conf
文件。
如果您运行 x86_64 系统并希望为 32 位 multilib 程序(如 Wine 和 Steam)提供声音,则还需要安装 lib32-libpulse 和 lib32-alsa-plugins。
为防止应用程序使用 ALSA 的 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 源、Sink 和混音器暴露给 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,而不会被 Pulse 挂钩。
- 在
/etc/pulse/default.pa.d/
中创建一个配置文件,以卸载自动检测模块并静态加载后端驱动程序。添加 device 参数,如下所示
/etc/pulse/default.pa.d/load-audio-drivers-statically.pa
unload-module module-udev-detect unload-module module-detect load-module module-alsa-sink device=dmix load-module module-alsa-source device=dsnoop
- 现在,重启您的计算机,并尝试同时运行 ALSA 和 PulseAudio 应用程序。它们都应该同时产生声音。
- 如果需要,使用 pavucontrol 控制 PulseAudio 音量。
OSS
有多种方法可以使仅限 OSS 的程序输出到 PulseAudio
ossp
安装 ossp 软件包并启动 osspd.service
。
padsp 包装器
使用 OSS 的程序可以通过使用 padsp (包含在 PulseAudio 中) 启动它来与 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
之前。
tsched=0
时,这不起作用。GStreamer
安装 gst-plugins-good,或者如果您的预期程序具有旧版 GStreamer 实现,则安装 gstreamer0.10-good-pluginsAUR。
OpenAL
OpenAL Soft 应该默认使用 PulseAudio,但可以显式配置为这样做
/etc/openal/alsoft.conf
drivers=pulse,alsa
libao
编辑 libao 配置文件
/etc/libao.conf
default_driver=pulse
请务必删除 alsa 驱动程序的 dev=default
选项,或对其进行调整以指定特定的 Pulse sink 名称或编号。
音频后处理
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 并阅读以下说明。
加载均衡器 sink 和 dbus-protocol 模块
$ pactl load-module module-equalizer-sink $ pactl load-module module-dbus-protocol
要启动 GUI,请运行 qpaeq
。
要在每次启动时加载均衡器和 dbus 模块,请在 /etc/pulse/default.pa.d/
中创建一个 .pa 文件,或编辑 ~/.config/pulse/default.pa
并添加以下行
### Load the integrated PulseAudio equalizer and D-Bus module load-module module-equalizer-sink load-module module-dbus-protocol
动态范围压缩
动态范围压缩可以使用 #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
您必须指定您的声卡 sink 名称,从 pacmd list-sinks
获取它。为了应用更改,停止并重启 Pulseaudio。以上配置具有使用默认值的空控制选项。
要使用自定义控制参数调整模块,请按照正确的顺序填写它们。
控制选项 | 描述 |
---|---|
RMS/峰值 (0/1) | RMS 和峰值包络跟随器之间的平衡。RMS 通常更适合细微的、音乐性的压缩,而峰值更适合更重的、快速的压缩和打击乐。 |
启动时间 (ms) | 以毫秒为单位的启动时间。 |
释放时间 (ms) | 以毫秒为单位的释放时间。 |
阈值电平 (dB) | 压缩器将开始工作的点。 |
比率 (1:n) | 当信号电平超过阈值时使用的增益衰减比率。1 表示无压缩;值越高,压缩越强。 |
拐点半径 (dB) | 拐点曲线开始的距阈值的距离。 |
补偿增益 (dB) | 控制补偿输入信号的增益,单位为分贝。 |
其他插件可以在 Steve Harris 的 LADSPA 插件文档中找到。
Calf 插件
对于更专业的压缩器,您可以使用 Calf Studio Gear 开发的压缩器。安装 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 | 浮点数 ms | |
释放 | 250 | 0.01 | 2000 | 浮点数 ms | |
补偿 | 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 文档。 |
麦克风回声/噪音消除
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
检查模块是否已激活。在 Recording
下,输入设备应显示 Echo-Cancel Source Stream from"
。
如果在 aec_args 中打开 beamforming=1
,如果您有多个麦克风(这在许多新笔记本电脑上很常见),也可以显着降低背景噪音。但是,波束成形需要指定您的 mic_geometry
(见下文)。
如果您希望现有流自动移动到新的 sink 和 source,您必须在之前加载 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#禁用 WebRTC 音频后处理
- Steam
- 设置 > 语音 > 高级选项 > 显示
- 禁用以下滑块:回声消除、噪音消除、自动音量/增益控制
- Skype
- 工具 -> 设置... -> 音频和视频 -> 麦克风 -> 自动调整麦克风设置 -> 关闭
用于重新加载 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 的 Pulse Audio 实时噪声抑制插件的 GUI 前端。
另一个替代方案是 noisetorchAUR,它也构建在 RNNoise 之上。不仅有输入噪声消除,还有输出。
应用程序
QEMU
有关如何在 QEMU 中配置 pulseaudio 的详细指南,请参阅 QEMU#创建音频后端。
AlsaMixer.app
使 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
XMMS2
使其切换到 PulseAudio 输出
$ xmms2 server config output.plugin pulse
以及 alsa
$ xmms2 server config output.plugin alsa
要使 XMMS2 使用不同的输出 sink,例如
$ 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-gstreamer 后端用于 Phonon,则 GStreamer 也应按照 #GStreamer 中的描述进行配置。
Audacious
Audacious 原生支持 PulseAudio。为了使用它,请将 Audacious 首选项 -> 音频 -> 当前输出插件设置为“PulseAudio 输出插件”。
音乐播放器守护进程 (MPD)
配置 MPD 以使用 PulseAudio。另请参阅 MPD/技巧和窍门#PulseAudio。
MPlayer
MPlayer 原生支持 PulseAudio 输出,使用 -ao pulse
选项。也可以将其配置为默认使用 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 从 网络摄像头 获取 PulseAudio 输入时,音频输入可能会暂停,从而导致无法录制音频。您可以通过执行以下命令来检查这一点
$ pactl list sources
如果音频源为“suspended”,则创建以下 .pa 文件
/etc/pulse/default.pa.d/no-module-suspend-on-idle.pa
unload-module module-suspend-on-idle
然后,重启 PulseAudio 或您的计算机将仅空闲输入源,而不是暂停它。guvcview 将随后正确录制来自设备的音频。
网络音频
PulseAudio 的独特功能之一是其能够通过 TCP 将音频从客户端可靠地流式传输到运行 PulseAudio 守护程序的服务器,这在 LAN 中是可靠的。确保客户端和服务器系统在时间上一致(即,使用 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 文件,匿名客户端可以通过将 auth-anonymous
传递给服务器上的 module-native-protocol-tcp
(同样在 /etc/pulse/default.pa.d/
中)来访问服务器
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 服务器实例所需的用户和组 [14]
- 添加用户 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 服务永远不会启动。
选择服务器
对于单个 shell 或命令,您可以将环境变量 $PULSE_SERVER
设置为所需 PulseAudio 服务器的主机名或 IP 地址。
$ env PULSE_SERVER=server-hostname-or-ip mplayer test.mp3
或者,您可以创建或修改 ~/.pulse/client.conf
或 /etc/pulse/client.conf
以持久设置默认服务器。
default-server = server-hostname-or-ip
也可以指定多个以空格分隔的服务器,PulseAudio 会依次尝试这些服务器[16]
default-server = server1 backup
技巧和窍门
键盘音量控制
映射以下命令到您的音量键:XF86AudioRaiseVolume
、XF86AudioLowerVolume
和 XF86AudioMute
。
首先找出哪个 sink 对应于您想要控制的音频输出。要列出可用的 sink
$ pactl list sinks short
假设要使用 sink 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
- 要使键盘快捷键始终在默认 sink 上操作,请将
@DEFAULT_SINK@
指定为 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 会话启动时自动运行这些命令的方法,请参阅 自动启动。
连接时切换
switch-on-connect 模块在连接新设备时将输出声音切换到新设备。例如,如果您插入 USB 耳机,输出将切换到该耳机。如果您拔下耳机,输出将设置回上一个设备。
此模块默认情况下处于禁用状态,因为它过于激进,但可以通过将 load-module module-switch-on-connect
行添加到您的 ~/.config/pulse/default.pa
中来启用。
用于切换模拟输出的脚本
一些声卡提供了多个模拟输出的选项,可以通过使用 Pulseaudio 配置文件进行切换。但是手动切换可能会变得很麻烦,因此您可以使用以下命令进行切换
$ pactl set-sink-port 'number of the card' 'port'
这将把默认输出设置为您选择的任何端口。示例
$ pactl set-sink-port 0 "analog-output;output-speaker"
这些值可以使用以下命令轻松获得
$ pactl list
当前输出可以通过以下命令获得
$ pactl list sinks | grep "active profile"| cut -d ' ' -f 3-
这个过程可以通过一个简单的脚本自动化。然后用户可以为这个脚本设置快捷方式
~/pa.sh (or anything the user wants)
#!/bin/sh # This script uses kdialog notification to warn the user of the currently swapped to profile. User could adapt it to their needs or change it. CURRENT_PROFILE=$(pactl list sinks | grep "active profile"| cut -d ' ' -f 3-) if [ "$CURRENT_PROFILE" = "analog-output;output-speaker" ] ; then pactl set-sink-port 0 "analog-output;output-headphones-1" kdialog --title "Pulseaudio" --passivepopup "Headphone" 2 & else pactl set-sink-port 0 "analog-output;output-speaker" kdialog --title "Pulseaudio" --passivepopup "Speaker" 2 & fi
此脚本旨在在两个配置文件之间切换。首先检查当前配置文件,然后切换它。用户需要根据 pactl 报告的语言更改 'active profile' 字段。用户可能需要更改声卡和输出的编号以适合他们的机器。
禁用进入语音通话时媒体静音 (module-role-cork)
当进入语音通话时(例如在 Microsoft Teams 中,也可能是其他应用),任何媒体应用程序都可能会被静音。要禁用此行为,您可以简单地在 PulseAudio 配置中禁用此模块
/etc/pulse/default.pa.d/no-cork.pa
unload-module module-role-cork
高级配置和用例
请参阅 PulseAudio/Examples。
故障排除
请参阅 PulseAudio/Troubleshooting。