SDB:Pulseaudio
通用
PulseAudio 提供
- 对多个音频流进行软件混合,绕过硬件的任何限制。
- 网络透明性,允许应用程序在与运行它的机器不同的机器上播放或录制音频。
- 声音 API 抽象,减轻了应用程序处理现有各种声音系统的需要。
- 通用的硬件抽象,可以实现例如每个应用程序的单独音量等功能。
PulseAudio 带有许多插件模块。所有来自/到客户端和音频接口的音频都通过模块进行。PulseAudio 客户端可以将音频发送到“接收器 (sinks)”并从“源 (sources)”接收音频。客户端可以是 GStreamer、xinelib、MPlayer 或任何其他音频应用程序。只有设备驱动程序/音频接口才能是源或接收器 (它们通常是硬件输入和输出)。
配置
PulseAudio 在 openSUSE 安装中默认启用。当应用程序尝试使用 pulseaudio 时,守护进程会自动启动。例如,登录到 KDE 或 Gnome 桌面环境会触发其启动。
如果您在使用 PulseAudio 时遇到问题,在向我们的 Bugzilla 报告问题之前,请务必阅读 完美的 PulseAudio 设置。其中包含有关使所有可用的声音系统使用 PulseAudio 进行实际声音播放的信息。另一方面,如果您希望完全禁用 pulseaudio 并回退到 ALSA 以用于所有基于 GNOME 的应用程序,请阅读下面的完全禁用 pulseaudio (ALSA 回退) 部分。
软件包
GNOME 安装默认包含所有必要的工具和软件包。在其他环境中,pulseaudio 通常由于依赖关系而被拖入,但没有控制它的工具。因此,可能需要手动安装以下软件包才能控制 pulseaudio 守护进程
- pavucontrol - PulseAudio 音量控制
- paprefs - PulseAudio 首选项
- pulseaudio-utils - PulseAudio 工具
- padevchooser - PulseAudio 设备选择器
- paman - PulseAudio 管理器
- alsa-plugins-pulse (-32位) - ALSA 库的 Pulseaudio 插件
默认将 Pulseaudio 作为 alsa 后端使用
要使所有支持 alsa 但不支持 pulseaudio 的应用程序通过 pulseaudio 播放声音,您需要安装 alsa-plugins-pulse (以及如果您使用的是 64 位则安装 32 位软件包),并运行以下命令使其成为默认设置
sudo setup-pulseaudio --enable
另一方面,如果您希望完全禁用 pulseaudio 并回退到 ALSA 以用于所有基于 GNOME 的应用程序,请阅读下面的完全禁用 pulseaudio (ALSA 回退) 部分。
禁用 OSS 模块
使用 OSS 音频输出的某些应用程序,如果未正确配置,可能会中断 pulseaudio,导致 pulseaudio 无法连接到输出硬件设备。可以通过运行以下命令禁用它
然后将 blacklist snd-pcm-oss 附加到文件 /etc/modprobe.d/50-blacklist.conf 。(摘自 ArchLinux wiki.)
禁用 Pulseaudio 自动启动
由于依赖关系,通常无法完全卸载 pulseaudio。为了防止使用 pulseaudio,可以通过在 /etc/pulse/client.conf 中设置 autospawn = no 来防止自动启动守护进程
可以使用以下命令禁用 Pulseaudio
sudo setup-pulseaudio --disable
这将停止相关的 pulseaudio 组件,包括“pulseaudio”守护进程,并抑制自动启动。
问题
安装后无声音
有些情况下,默认情况下声音被静音,并且 KDE 混音器中未显示此信息。要解决此问题,请运行 padevchooser (您可能需要先安装它),单击托盘图标,然后选择“音量控制”。检查所有内容是否未静音,包括在通过应用程序启动声音后 (应用程序应显示在“播放”选项卡中)。
如果声音仍然无法工作,或者 pulseaudio 工具无法工作,请尝试将您的用户添加到“pulse”和“pulse-access”组 (Yast > 用户和组管理 > [选择用户] > 编辑 > 详细信息 > 附加组)。您需要注销并重新登录才能使此更改生效。
5.1 声道
在开箱即用状态下获得 5.1 声道声音存在问题,请参阅 bug 381686 以获取更多信息。许多人拥有环绕声卡,但只有两个通道的扬声器,因此 PulseAudio 无法默认设置为环绕声设置。要启用所有通道,请编辑 /etc/pulse/daemon.conf:取消注释 default-sample-channels 行 (即删除行开头的分号),如果您的设置是 5.1,则将值设置为 6,如果您的设置是 7.1,则将值设置为 8 等。或者更简单地说,您可以使用 paprefs 通过 paprefs GUI 设置扬声器设置。
音频播放中的卡顿
编辑 /etc/pulse/daemon.conf:取消注释 default-fragments 和 default-fragment-size-msec,并将值从默认的 4 和 25 更改为 16 和 21。
请在 bug 381686 中反馈此方法是否有效。
返回 esound
删除所有 pulseaudio* 软件包并安装 esound。
使用 OpenAL (游戏) 时出现爆音
强制应用程序使用 pulseaudio 的 alsa 插件通常会导致使用 OpenAL 进行声音输出的游戏音质较低。到包括 openSUSE 11.1 为止,openal-soft 并不原生支持 puseaudio。要修复游戏中的声音,请删除 pulseaudio 或安装一个 来自 Factory 的补丁
启动某些应用程序会静音其他应用程序
某些应用程序 (例如 TeamSpeak) 在启动时会静音其他应用程序。可以通过删除或注释掉以下内容来修复此问题load-module module-role-cork在/etc/pulse/default.pa.
完全禁用 pulseaudio (ALSA 回退)
在 openSUSE 11.2 下,pulseaudio 是所有基于 GNOME 的应用程序的首选音频子系统。这可能会导致各种共存问题,尤其是在与 phonon (KDE 的声音子系统,使用 ALSA) 相关的问题。一个常见的症状是 ALSA 音频无法获取实时 (或更准确地说,接近实时) 调度,从而导致延迟和/或失真的声音。许多人发现完全禁用 pulseaudio,从而强制所有基于 GNOME 的应用程序使用 ALSA,对他们来说效果更好。要实现此目的,请执行以下操作
- 禁用 pulseaudio
sudo setup-pulseaudio --disable
- 删除所有 pulseaudio 软件包,但 libpulse-mainloop-glib0 和 libpulse0 除外,因为这些软件包是所有基于 GNOME 的应用程序所必需的 (因为它们默认情况下使用 pulseaudio 编译)。
- 隐藏 libpulse-mainloop-glib0 和 libpulse0 软件包提供的库,以强制 GNOME 应用程序回退到 ALSA。为此,请以 root 身份将它们移开,并发出以下命令 (假设 openSUSE 11.2 x86_x64)
cd /usr/lib64 sudo md HIDDEN mv *pulse* HIDDEN ldconfig
请注意,如果$HOME/.pulse您拥有正确设置的配置文件 (例如,在启用 pulseaudio 时),则上述隐藏 pulseaudio 库的步骤可能不需要。但是,如果您意外地 (或故意地) 删除$HOME/.pulse,GNOME 基于的应用程序将再次失去音频。无论/etc/asound.conf的内容如何,将库移开是保证回退到 ALSA 的唯一方法。
- 使用兼容 ALSA 的混音器 (例如 KDE 中的 kmix 或终端中的 alsamixer),并确保您感兴趣的所有通道未静音。
请注意,这是一个解决方法,而不是一个明确的解决方案:如果 libpulse-mainloop-glib0 和/或 libpulse0 软件包更新,您需要重新发出上述命令,将 pulseaudio 库移开。
提示和技巧
重新安装后 PulseAudio 守护进程无法启动
您可能会看到
E: [pulseaudio] main.c: Daemon startup failed.
将 ~/.config/pulse 移动到 ~/.config/pulseold 并尝试再次启动 pulse。第二次尝试应该可以启动。
动态范围压缩 (夜间模式)
Pulseaudio 支持 LADSPA 插件,通过此插件可以使用压缩器插件来实现通常称为“夜间模式”的功能,目标是降低电影和其他媒体中动作场面的音量 (爆炸等),同时不降低安静对话的音量。
Steve Harris 的 LADSPA 插件在 openSUSE 中可用,包括许多压缩器 (我们将在此示例中使用“SC1”压缩器),该软件包称为 ladspa-swh-plugins,请安装它,并安装一个高级 Pulseaudio 音量和输出控制面板,例如 pavucontrol。
zypper install ladspa-swh-plugins pavucontrol
然后以 root 身份打开文本编辑器并编辑文件 /etc/pulse/default.pa,在文件末尾添加以下内容
.ifexists module-ladspa-sink.so .nofail load-module module-ladspa-sink sink_name=compressor plugin=sc1_1425 label=sc1 control=5,100,-25,8,2.5,0 .fail .endif
然后保存并关闭文件。现在打开终端并重新启动 Pulseaudio
pulseaudio -k pulseaudio --start
现在打开 pavucontrol,SC1 LADSPA 插件应作为可选择的输出设备。
调整 SC1 压缩器
后面的六个值代表,按顺序
control=Attack time (ms), Release time (ms), Threshold level (dB), Ratio (1:n), Knee radius (dB), Makeup gain (dB)
在前面的示例中使用的设置在许多情况下都能产生良好的效果,但您有时可能需要调整的一个设置是阈值。示例中将其设置为 -25,但如果压缩器似乎经常对对话进行处理(这不是我们想要的 - 我们希望它对响亮的动作场景等进行处理),请尝试 -20,或者如果音轨的总体音量特别低,以至于压缩器不会对对话进行处理,但动作仍然太响亮,将阈值更改为 -30 可以改善结果。请参阅文档以获取更多详细信息。
多个声音设备
上面的示例将 SC1 LADSPA 插件作为输出设备路由到您的默认声音设备。如果您有多个声音设备并希望为所有设备选择夜间模式,请首先安装 pulseaudio-utils(如果尚未安装),并通过在终端中运行以下命令获取相关的设备标识符:
pacmd list-sinks | grep name:
您将获得类似以下内容的输出:
name: <alsa_output.pci-0000_00_01.1.hdmi-stereo> name: <alsa_output.pci-0000_00_14.2.analog-stereo>
将前面示例中添加到 /etc/pulse/default.pa 末尾的内容替换为以下内容:
.ifexists module-ladspa-sink.so .nofail load-module module-ladspa-sink sink_name=compressor master=alsa_output.pci-0000_00_01.1.hdmi-stereo plugin=sc1_1425 label=sc1 control=5,100,-25,8,2.5,0 load-module module-ladspa-sink sink_name=compressor master=alsa_output.pci-0000_00_14.2.analog-stereo plugin=sc1_1425 label=sc1 control=5,100,-25,8,2.5,0 .fail .endif
您可以看到,与前面的示例相比,此示例包含 master= 参数,这些参数设置为之前检索到的 pacmd 输出中显示的设备标识符 (因此不要随意复制粘贴上面的示例,您必须修改它以使用您的设备标识符)。然后,如前所述重新启动 Pulseaudio,您应该为每个声音设备获得 SC1 LADSPA 插件输出设备。