PulseAudio/故障排除

出自 ArchWiki

获取 pulseaudio 的调试输出

在调试期间,手动在终端中停止 pulseaudio.socketpulseaudio.service 用户单元 并手动启动可能很有用

$ pulseaudio -v

添加 v 以增加详细程度。

音量

您可以在这里找到一些关于音量问题的提示,以及您可能听不到声音的原因。

自动静音模式

自动静音模式amixer 的一个可配置设置。有关更多信息,请参阅 ALSA#启动时禁用自动静音

音频设备已静音

如果在使用 ALSA 时通过任何方式都无法获得音频输出,请尝试取消声卡的静音。为此,启动 alsamixer 并确保每列下方都有绿色的 00(可以通过按 m 键切换)

$ alsamixer -c 0
注意: alsamixer 不会告诉您哪个输出设备被设置为默认设备。安装后没有声音的一个可能原因是 PulseAudio 检测到错误的输出设备作为默认设备。安装 pavucontrol 并检查播放 .wav 文件时 pavucontrol 面板上是否有任何输出。

要仅通过 CLI 进行故障排除,请安装 pamixer 并检查以下命令的输出

$ pamixer --get-volume-human

如果输出显示 muted,则运行 pamixer -u 取消静音。如果它显示较低的百分比值,您可以多次运行 pamixer -i 10 以逐渐调高音量。

当主音量切换时,输出卡在静音状态

在具有多个输出(例如“耳机”和“扬声器”)的设置中,使用普通的 amixer 切换 Master 可能会触发 PulseAudio 也将活动输出静音,但当 Master 切换回非静音状态时,它不一定会取消静音。[1] 要解决此问题,amixer 必须将设备标志设置为“pulse”

$ amixer -D pulse sset Master toggle

这将导致 amixer 请求 PulseAudio 执行切换,而不是直接切换。因此,PulseAudio 将正确地取消主音量以及任何适用的输出的静音。

应用程序已静音

如果特定应用程序已静音或音量过低,而其他一切似乎都正常,则可能是由于个别的 sink-input 设置。在有问题的应用程序播放音频时,运行

$ pacmd list-sink-inputs

找到并记下相应的 sink inputindex。属性:application.nameapplication.process.binary 等等,应该在这里有所帮助。确保存在合理的设置,特别是 mutedvolume 的设置。如果接收器已静音,可以通过以下方式取消静音

$ pacmd set-sink-input-mute <index> false

如果需要调整音量,可以通过以下方式将其设置为 100%

$ pacmd set-sink-input-volume <index> 0x10000
注意: 如果 pacmd 报告 0 sink input(s),请仔细检查应用程序是否正在播放音频。如果仍然没有,请验证其他应用程序是否显示为接收器输入。

音量调节无法正常工作

检查 /usr/share/alsa-card-profile/mixer/paths/analog-output.conf.common

如果使用 alsamixeramixer 时音量似乎无法正确递增/递减,则可能是因为 PulseAudio 具有更多的增量(确切地说是 65537)。尝试在更改音量时使用更大的值(例如 amixer set Master 655+)。

当主音量调节时,每个应用程序的音量都会改变

这是因为 PulseAudio 默认使用扁平音量,而不是相对于绝对主音量的相对音量。如果发现这不方便、愚蠢或其他方面不受欢迎,则可以通过禁用 PulseAudio 守护进程配置文件中的扁平音量来启用相对音量

/etc/pulse/daemon.conf or ~/.config/pulse/daemon.conf
flat-volumes = no

然后通过执行以下命令重启 PulseAudio

$ pulseaudio -k
$ pulseaudio --start

每次启动新应用程序时音量都会变大

默认情况下,似乎在应用程序中更改音量会将全局系统音量设置为该级别,而不是仅影响相应的应用程序。因此,在启动时设置音量的应用程序将导致系统音量“跳跃”。

通过禁用扁平音量来解决此问题,如上一节所示。当 Pulse 在几秒钟后恢复时,应用程序将不再更改全局系统音量,而是再次拥有自己的音量级别。

注意: 以前安装和删除的 pulseaudio-equalizer 可能会在 ~/.config/pulse/default.pa~/.pulse/default.pa 中留下设置残余,这也可能导致音量最大化问题。根据需要注释掉。

在 M-Audio Audiophile 2496 声卡上声音输出只有单声道

添加以下内容

/etc/pulseaudio/default.pa
load-module module-alsa-sink sink_name=delta_out device=hw:M2496 format=s24le channels=10 channel_map=left,right,aux0,aux1,aux2,aux3,aux4,aux5,aux6,aux7
load-module module-alsa-source source_name=delta_in device=hw:M2496 format=s24le channels=12 channel_map=left,right,aux0,aux1,aux2,aux3,aux4,aux5,aux6,aux7,aux8,aux9
set-default-sink delta_out
set-default-source delta_in

低于某个音量下限时没有声音,或在特定输出设备上出现削波

已知问题(不会修复):https://bugs.launchpad.net/ubuntu/+source/pulseaudio/+bug/223133

如果当 PulseAudio 的音量设置为低于某个级别时声音不播放,或者即使在低音量(包括蓝牙设备)下也听到输出削波,请尝试在 /etc/pulse/default.pa 中设置 ignore_dB=1

/etc/pulse/default.pa
load-module module-udev-detect ignore_dB=1

但是,请注意,这可能会导致另一个错误,阻止 PulseAudio 在耳机或其他音频设备拔下时取消扬声器的静音。

内置麦克风音量过低

如果您在内置笔记本电脑麦克风上遇到音量过低的问题,请尝试设置

/etc/pulse/default.pa
set-source-volume 1 300000

客户端更改主输出音量(又名:运行应用程序后音量跳到 100%)

如果在特定应用程序中更改音量或仅运行一个应用程序会更改主输出音量,则这很可能是由于 pulseaudio 的扁平音量模式。在禁用它之前,KDE 用户应尝试在“系统设置”>“声音”>“通知声音”中将音量降低到合理的水平。在 KMix 或另一个音量混合器应用程序中更改“事件声音”音量在这里没有帮助。如果这不起作用,这应该使扁平音量模式按预期工作,可能是其他一些应用程序在播放某些内容时请求 100% 音量。如果所有其他方法都失败,您可以尝试禁用扁平音量

/etc/pulse/daemon.conf
flat-volumes = no

然后重启 PulseAudio 守护进程

$ pulseaudio -k
$ pulseaudio --start

从睡眠恢复后没有声音

如果音频通常工作,但在从睡眠状态恢复后停止工作,请尝试通过执行以下命令“重新加载”PulseAudio

$ /usr/bin/pasuspender /bin/true

这比完全杀死并重启它(pulseaudio -k,然后是 pulseaudio --start)更好,因为它不会中断已经在运行的应用程序。

如果上述方法解决了您的问题,您可能希望通过创建 systemd 服务文件来自动化它。

在以下位置创建模板服务文件

/etc/systemd/system/resume-fix-pulseaudio@.service
[Unit]
Description=Fix PulseAudio after resume from suspend
After=suspend.target

[Service]
User=%I
Type=oneshot
Environment="XDG_RUNTIME_DIR=/run/user/%U"
ExecStart=/usr/bin/pasuspender /bin/true

[Install]
WantedBy=suspend.target

启用它为您的用户帐户(即 resume-fix-pulseaudio@YOUR_USERNAME_HERE.service

执行 daemon-reload

当耳机插拔不当时,ALSA 通道静音

如果在拔下或插入耳机时,由于设置为 0%,音频在 alsamixer 中错误的通道上保持静音,您可以通过打开 /etc/pulse/default.pa 并注释掉以下行来修复它

load-module module-switch-on-port-available

然后重启 pulseaudio.service 用户单元

音量每隔几秒重置为 50%

安装 alsa-tools 并使用

$ hdajackretask

将“未连接”设置为除您正在使用的端口之外的所有端口。似乎主板上其他未使用的音频端口会干扰已使用的端口。然后,如果需要,请使用 Boot Override 在重启之间保存此更改。有可能是前置绿色耳机导致了该错误,如果您需要它,请将前置麦克风覆盖为耳机,并将前置绿色耳机覆盖为“未连接”,并将前置麦克风端口用作耳机端口。

有关此问题的更多信息:[2]

模拟耳机/扬声器音量低/太小

如果您之前在 /etc/pulse/default.pa 中的 load-module module-udev-detect 行中添加了 ignore_dB=1 选项,请尝试删除它。

使用媒体键更改音量时有延迟

编辑 /etc/pulse/daemon.conf 并设置 enable-deferred-volume = no。这可能会在更改音量时导致一些声音爆裂,在这种情况下,您可能希望保持该选项启用,并调整 deferred-volume-safety-margin-usecdeferred-volume-extra-delay-usec 选项。

麦克风

PulseAudio 未检测到麦克风

注意: 对于蓝牙耳机,您可能正在寻找 此线程

确定麦克风的声卡和设备编号

$ arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: ALC269VC Analog [ALC269VC Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0

hw:CARD,DEVICE 表示法中,您会将上述设备指定为 hw:0,0

然后,编辑 /etc/pulse/default.pa 并插入一个 load-module 行,如下所示指定您的设备

load-module module-alsa-source device=hw:0,0
# the line above should be somewhere before the line below
.ifexists module-udev-detect.so

最后,重启 pulseaudio 以应用新设置

$ pulseaudio -k ; pulseaudio -D

如果一切正常,您现在应该在运行 pavucontrol 时看到您的麦克风出现(在“输入设备”选项卡下)。

PulseAudio 使用错误的麦克风

如果 PulseAudio 使用了错误的麦克风,并且使用 Pavucontrol 更改输入设备没有帮助,请查看 alsamixer。似乎 Pavucontrol 并不总是正确设置输入源。

$ alsamixer

F6 并选择您的声卡,例如 HDA Intel。现在按 F5 显示所有项目。尝试找到项目:Input Source。使用向上/向下箭头键,您可以更改输入源。

现在尝试是否使用正确的麦克风进行录音。

ThinkPad T400/T500/T420 上没有麦克风

运行

$ alsamixer -c 0

取消“内置麦克风”的静音并最大化音量。

一旦您看到带有以下内容的设备

$ arecord -l

您可能仍然需要调整设置。麦克风和音频插孔是双工的。在 pavucontrol 中将内置音频的配置设置为模拟立体声双工

Acer Aspire One 和 Lenovo Ideapad 310-15ISK/330-15ARR 上没有麦克风输入

安装 pavucontrol,取消链接麦克风通道并将左声道调低至 0。

某些应用程序(例如 chromium)可以更改麦克风电平,从而导致相同的问题,一种解决方法是将立体声输入重新映射到单声道输入,并将重新映射的设备用作默认设备。

麦克风录音中有静音

如果我们在 Skype、gnome-sound-recorder、arecord 等的录音中获得静音,则声卡采样率不正确。这就是 Linux 麦克风录音中出现静音的原因。要解决此问题,我们需要在 /etc/pulse/daemon.conf 中为声音硬件设置采样率。

除了下面的指南外,自 PulseAudio 11 以来,可以在 daemon.conf 中设置 avoid-resampling = yes

确定系统中的声卡 (1/5)

这需要安装 alsa-utils 和相关软件包

$ arecord --list-devices
**** List of CAPTURE Hardware Devices ****
card 0: Intel [HDA Intel], device 0: ALC888 Analog [ALC888 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 2: ALC888 Analog [ALC888 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

声卡是 hw:x,y,其中 x 是声卡号,y 是设备号。在上面的示例中,它是 hw:0,0

确定声卡的采样率 (2/5)

我们的目标是使用从低值开始的试错程序,找到 hw:0,0 声卡支持的最高采样率。当达到最高值时,我们会收到警告消息

arecord -f dat -r 60000 -D hw:0,0 -d 5 test.wav
"Recording WAVE 'test.wav' : Signed 16 bit Little Endian, Rate 60000 Hz, Stereo
Warning: rate is not accurate (requested = 60000Hz, got = 44100Hz)
please, try the plug plugin

请注意,got = 44100Hz。这是我们声卡的最大采样率。

将声卡的采样率设置到 PulseAudio 配置中 (3/5)

PulseAudio 中的默认采样率

$ grep "default-sample-rate" /etc/pulse/daemon.conf
; default-sample-rate = 48000

48000 已禁用,需要更改为 44100

# sed 's/; default-sample-rate = 48000/default-sample-rate = 44100/g' -i /etc/pulse/daemon.conf

重启 PulseAudio 以应用新设置 (4/5)

$ pulseaudio -k
$ pulseaudio --start

最后通过录音和回放进行检查 (5/5)

让我们使用麦克风录制一些声音,例如 10 秒钟。确保麦克风未静音且一切正常

$ arecord -f cd -d 10 test-mic.wav

10 秒后,让我们播放录音...

$ aplay test-mic.wav

现在希望,麦克风录音中不再有静音。

另一种可能的原因

另一种可能的原因是您的麦克风有两个声道,但只有一个声道可以提供有效的声音信号。有关信息可以在 这里 找到。解决方案是将立体声输入重新映射到单声道输入

1. 从以下命令中找到您的源名称;我的源名称是 alsa_input.pci-0000_00_1f.3.analog-stereo

pacmd list-sources | grep 'name:.*input'

2. 编辑 /etc/pulse/default.pa 并添加以下行,其中 INPUT_NAME 是上一步中输入源的名称

load-module module-remap-source source_name=record_mono master=INPUT_NAME master_channel_map=front-left channel_map=mono
set-default-source record_mono

3. 重启 PulseAudio

$ pulseaudio -k
$ pulseaudio --start

现在 arecord 希望可以正常工作了。您可能仍然需要在 pavucontrol 的“录制”选项卡中将特定应用程序的“RecordStream from”设置更改为“重新映射的内置音频模拟立体声”。

如果使用 USB 麦克风

尝试将其插入不同的端口(例如:背面的端口而不是前面的端口)。

当 enable-remixing = no 时,Steam 或 Skype 上没有麦克风

当您在 /etc/pulse/daemon.conf 上设置 enable-remixing = no 时,您可能会发现您的麦克风在某些应用程序(如 Skype 或 Steam)上停止工作。发生这种情况是因为这些应用程序仅以单声道捕获麦克风,并且由于禁用了混音,Pulseaudio 将不再将您的立体声麦克风混音为单声道。

要解决此问题,您需要告诉 Pulseaudio 为您执行此操作

1. 找到源的名称

# pacmd list-sources

示例输出已编辑以求简洁,您需要的名称以粗体显示

   index: 2
       name: <alsa_input.pci-0000_00_14.2.analog-stereo>
       driver: <module-alsa-card.c>
       flags: HARDWARE HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY DYNAMIC_LATENCY

2. 将重新映射规则添加到 /etc/pulse/default.pa,使用您通过上一个命令找到的名称,这里我们将使用 alsa_input.pci-0000_00_14.2.analog-stereo 作为示例

/etc/pulse/default.pa
### Remap microphone to mono
load-module module-remap-source master=alsa_input.pci-0000_00_14.2.analog-stereo master_channel_map=front-left,front-right channels=2 channel_map=mono,mono

3. 重启 Pulseaudio

# pulseaudio -k
注意: 如果您不退出正在使用麦克风的程序(例如,如果您在修改文件之前在 Steam 上进行了测试),Pulseaudio 可能无法启动,在这种情况下,您应该退出该应用程序并手动启动 Pulseaudio
# pulseaudio --start

麦克风因自动调整而失真

如果您的麦克风音量自动升高并导致声音失真,您可以通过禁用麦克风增强来修复它

在所有文件 /usr/share/alsa-card-profile/mixer/paths/analog-input*.conf 中,

  • [Element Capture] 下,将 volume 设置为 zero
  • [Element Internal Mic Boost] 下,将 volume 设置为 zero
  • [Element Int Mic Boost] 下,将 volume 设置为 zero
  • [Element Mic Boost] 下,将 volume 设置为 zero

包括所有变体,例如 [Element Headphone Mic Boost][Element Mic Boost (+20dB)]

然后重启 PulseAudio

# pulseaudio -k

Realtek ALC892 麦克风出现爆裂声

有时 ALC892 芯片在使用麦克风录音时会出现爆裂声。一些 Pulseaudio 配置更改可能会有所帮助

/etc/pulse/daemon.conf
resample-method = src-sinc-best-quality
default-sample-format = s16le
default-sample-rate = 48000

并将 use_ucm 选项添加到

/etc/pulse/default.pa
load-module module-udev-detect use_ucm=0 tsched=0

然后重启 pulseaudio。

回声测试

如果您不确定麦克风设置,您可以通过启用环回模块source)实时听到来自麦克风的输入

$ pactl load-module module-loopback

该模块将显示在 录制 选项卡中的 pavucontrol 程序中,您可以在其中配置源和音量。虽然延迟应该很低,但应该足以让您感受到声音质量,因为您会听到自己在麦克风中讲话的声音。要使更改永久生效,请添加以下 pulseaudio 配置

/etc/pulse/default.pa
load-module module-loopback

注意反馈!如果麦克风拾取了扬声器的输出,请准备好降低所有音量。当然,最好使用耳机进行此类测试。

音频质量

解决缓冲区下溢问题(故障、跳过、爆裂声)

较新版本的 PulseAudio 声音服务器使用基于定时的音频调度,而不是传统的、中断驱动的方法。

基于定时的调度可能会暴露某些 ALSA 驱动程序中的问题。另一方面,其他驱动程序如果没有启用它,则可能容易出现缓冲区下溢,因此请检查哪种方法在您的系统上有效。

注意: 音频接口从一个小的样本环形缓冲区中读取数据。这使得接口可以自行持续播放声音,而内核偶尔会向缓冲区添加样本。如果内核添加样本的速度不够快,并且缓冲区已耗尽,则接口将无内容可播放。此时,接口会临时生成音频,这在不同品牌和型号之间听起来会有所不同。这称为“缓冲区下溢”,通常标记为“故障”、“跳过”、“爆裂声”,甚至“静音”或“失真”。

要关闭基于定时的调度,请在 /etc/pulse/default.pa 中添加 tsched=0

/etc/pulse/default.pa
load-module module-udev-detect tsched=0

然后重启 PulseAudio 服务器

$ pulseaudio -k
$ pulseaudio --start

如果默认未启用,请反向操作以启用基于定时的调度。

如果您正在使用 Intel 的 IOMMU 并遇到缓冲区下溢,请将 intel_iommu=igfx_off 添加到您的内核命令行。

如果您由于内核页面锁定或延迟调度而遇到缓冲区下溢,请参阅 Gaming#调整内核参数以获得响应时间一致性

使用耳机时有静音

基于定时的调度可能是造成这种情况的原因,请按照 #解决缓冲区下溢问题(故障、跳过、爆裂声) 中的说明禁用它。

您在耳机插孔中遇到静音的另一个原因可能是 ALSA 的环回混音。

确保您已安装 alsa-utils,启动 alsamixer,然后选择您的音频设备(按 F6),使用向左箭头一直导航到最左侧,并在 Loopback 上停止,如果为已启用,则使用向下箭头禁用它。除非您需要环回混音,否则这不应负面影响音频播放或麦克风录音。

某些笔记本电脑型号,例如 Dell XPS 13 9360,在插入耳机时会出现持续的嘶嘶声

此症状的另一个原因可能是您的音频设备的省电模式。[3] 如果您按照 电源管理#音频 中的步骤操作,请还原更改并检查是否解决了问题。

在 PulseAudio 中设置默认片段数量和缓冲区大小

本文或本节需要改进语言、wiki 语法或风格。请参阅 Help:Style 以获取参考。

原因: 从 Linux mint 主题复制而来,并进行了一些添加 (在 Talk:PulseAudio/Troubleshooting 中讨论)

禁用基于定时的调度

默认情况下,PulseAudio 使用基于定时的调度。在此模式下,根本不使用固定大小的片段,因此 default-fragments 和 default-fragment-size-msec 参数将被忽略。要关闭基于定时的调度,请在 /etc/pulse/default.pa 中添加 tsched=0

/etc/pulse/default.pa
load-module module-udev-detect tsched=0

确定音频设备参数

以下说明将使 PulseAudio 对音频片段使用固定的大小和数量。这些设置直接影响延迟和功耗。延迟计算公式为 default-fragments * default-fragment-size-msec,中断率(即应用程序被通知某些声音确实已播放的频率)为 1000 / default-fragment-size-msec。需要考虑的事项是

  • 片段总数必须在硬件接受的限制范围内。大多数声卡可以接受两个或更多片段,但有些声卡需要三个或更多。
  • 与严格必要的片段数量相比,给声卡更多片段会增加延迟,不会改变功耗,也不会减轻调度器的负载。因此,仅在中断无法可靠地传递到 CPU 的情况下才建议这样做,并且在所需最小值之外额外增加一个片段通常就足够了。
  • 给声卡更大的片段会增加延迟并降低功耗。
  • 某些应用程序(游戏和 VoIP)请求低延迟,并且当 PulseAudio 无法满足其请求时会导致缓冲区下溢。
  • 将延迟设置得过低会给调度器带来很大的压力,也会导致缓冲区下溢。

如果不在意过度的功耗,那么 2 或 3 个片段,每个片段 5 毫秒,是一个合理的选择。

修改 PulseAudio 的配置文件

/etc/pulse/daemon.conf
default-fragments = 3
default-fragment-size-msec = 5

查看是否有帮助

重启 pulseaudio.service 用户单元

运行您的应用程序,聆听它们产生的声音,检查 日志

如果缓冲区下溢是偶尔的,并且主要与系统高负载相关:这是一个调度器问题,需要增加延迟。

如果所有应用程序都出现速度错误的金属声:最常见的原因是您尝试配置的片段大小太小,例如 1 毫秒。不要这样做。

如果某些但并非所有应用程序都遇到缓冲区下溢:这是一个假设低延迟设置的应用程序。因此,必须减小片段大小,以使应用程序请求有效。

模拟环绕声设置下的断断续续的声音

默认情况下,低频效果 (LFE) 或低音炮声道未重新混合。要启用它,需要在 /etc/pulse/daemon.conf 中设置以下内容 

/etc/pulse/daemon.conf
remixing-produce-lfe = yes
remixing-consume-lfe = yes

您还应该考虑为 LFE 声道设置适当的交叉频率。交叉频率是音频信号被重新路由到 LFE 输出端的频率上限。最佳交叉频率(以 Hz 为单位)取决于所有扬声器的大小。

/etc/pulse/daemon.conf
lfe-crossover-freq = <40-200>

声音延迟

此问题是由于缓冲区大小不正确引起的。首先验证变量 default-fragmentsdefault-fragment-size-msec 是否未在 /etc/pulse/daemon.conf 文件中设置为非默认值。如果问题仍然存在,请尝试将它们设置为以下值

/etc/pulse/daemon.conf
default-fragments = 5
default-fragment-size-msec = 2

断断续续/失真的声音

这可能是由于采样率设置不正确造成的。尝试以下设置

/etc/pulse/daemon.conf
avoid-resampling = yes #(Needs PA11 or higher)
default-sample-rate = 48000

并重启 PulseAudio 服务器。

如果在使用 OpenAL 的应用程序中遇到断断续续的声音,请在 /etc/openal/alsoft.conf 中更改采样率

/etc/openal/alsoft.conf
frequency = 48000

将 PCM 音量设置为高于 0 dB 可能会导致削波。运行 alsamixer 将允许您查看这是否是问题,如果是,则修复它。请注意,ALSA 可能无法正确导出 dB 信息到 PulseAudio。尝试以下操作

/etc/pulse/default.pa
load-module module-udev-detect ignore_dB=1

并重启 PulseAudio 服务器。另请参阅 #音量截止值以下无声音或特定输出设备上出现削波

通过网络流式传输时声音断续

当使用 module-native-protocol-tcp 通过 Wi-Fi 流式传输时,您可能会遇到周期性的声音断续和缓冲区下溢。作为一种解决方法,您可以尝试使用 rtp 协议。在发送端,创建一个 rtp 输出

/etc/pulse/default.pa
load-module module-null-sink sink_name=rtp
load-module module-rtp-send source=rtp.monitor

并切换到它

/etc/pulse/default.pa
set-default-sink rtp

在接收端,加载 rtp 模块

/etc/pulse/default.pa
load-module module-rtp-recv

开始和停止播放时出现爆音

PulseAudio 可以在一段时间不活动后挂起输出端。这可能会产生可听见的噪音(如噼啪声/爆音/刮擦声)。有时甚至在移动音量滑块或打开和关闭窗口时也会出现。默认配置文件中启用了此行为

/etc/pulse/default.pa
load-module module-suspend-on-idle
/etc/pulse/system.pa
load-module module-suspend-on-idle

在相关文件中注释掉该行可以解决该问题。更好的解决方案是添加以下文件

~/.config/pulse/default.pa
.include /etc/pulse/default.pa
.nofail
unload-module module-suspend-on-idle
.fail

对于某些设备(例如 Bose Quietcomfort 35 II),将设备音量设置得足够高(通常通过物理按钮或滑块)可以消除停止播放后可听见的噪音。

硬件和声卡

显示器关闭一段时间后没有 HDMI 音频输出

显示器通过 HDMI/DisplayPort 连接,音频插孔插入显示器的耳机插孔,但 PulseAudio 坚持认为它已拔下

pactl list sinks
...
hdmi-output-0: HDMI / DisplayPort (priority: 5900, not available)
...

这导致 HDMI 输出没有声音。一种解决方法是切换到另一个 VT 然后再切换回来。如果这不起作用,请尝试:关闭显示器,切换到另一个 VT,打开显示器,然后切换回来。ATI/Nvidia/Intel 用户已报告此问题。

另一种解决方法可能是禁用 switch-on-port-available 模块,方法是在 /etc/pulse/default.pa 中注释掉它 [4]

/etc/pulse/default.pa
...
### Should be after module-*-restore but before module-*-detect
#load-module module-switch-on-port-available
...

使用无头服务器时没有 HDMI 音频

您可能希望将 HDMI 音频与您的 A/V 接收器一起使用,但没有显示器。HDMI 需要视频信号,我们从虚拟终端获得视频信号。

默认情况下,此信号在 600 秒后关闭,因此音频输出端也会丢失。

要防止屏幕空白,请将 consoleblank=0 添加到内核命令行。

没有声卡

如果 PulseAudio 启动,请运行 pacmd list。如果没有报告声卡,请确保 ALSA 设备未在使用中

$ fuser -v /dev/snd/*
$ fuser -v /dev/dsp

在重启 PulseAudio 之前,请确保关闭任何使用 pcm 或 dsp 文件的应用程序。

启动应用程序中断其他应用程序的声音

如果您在某些应用程序(例如 TeamSpeak 或 Mumble)中断已运行应用程序(例如 Deadbeaf)的声音输出时遇到问题,您可以通过注释掉 /etc/pulse/default.pa 中的 load-module module-role-cork 行来解决此问题,如下所示

/etc/pulse/default.pa
### Cork music/video streams when a phone stream is active
# load-module module-role-cork

然后使用您的普通用户帐户通过以下方式重启 pulseaudio

$ pulseaudio -k
$ pulseaudio --start

唯一显示的设备是“虚拟输出”或未检测到新连接的声卡

如果唯一的播放设备是虚拟输出,则 PulseAudio 无法访问您的声音设备。可能是 logind 授予权限时出现问题,有关更多信息,请参阅 常规故障排除#会话权限

应用程序也可能未配置为与 PulseAudio 一起使用。例如,FluidSynth 就会发生这种情况。要查看哪个应用程序负责直接访问声卡(通过 alsa),请运行以下命令

# fuser -v /dev/snd/*

尝试关闭这些应用程序。如果 pulseaudio 正在运行,它应该再次优先于这些应用程序,并且所有依赖 pulseaudio 的应用程序都应该再次像预期的那样工作。

如果以上方法不起作用,请尝试重启 pulseaudio.service

如果 pulseaudio 在从休眠或挂起状态恢复后未能检测到任何硬件,则重启 pulseaudio.service 也可能很有用。

设备没有 HDMI 5/7.1 选择

如果您无法为工作的 HDMI 设备选择 5/7.1 声道输出,则关闭 /etc/pulse/default.pa 中的“stream device reading”可能会有所帮助。

请参阅 #备用设备未被遵守

创建输出输入失败:输出端已挂起

如果您没有任何声音输出,并且从以 root 身份运行 journalctl -b 收到大量与挂起输出端相关的错误消息,请先备份,然后删除您的用户特定的 pulse 文件夹

$ rm -r ~/.pulse ~/.pulse-cookie ~/.config/pulse

同时输出到多个声卡/设备

同时输出到两个不同的设备可能非常有用。例如,能够通过显卡的 HDMI 输出将音频发送到您的 A/V 接收器,同时还通过主板内置音频的模拟输出发送相同的音频。这比以前方便多了(在此示例中,我们使用的是 GNOME 桌面)。

使用 paprefs,只需从“同时输出”选项卡下选择“为所有本地声卡上的同时输出添加虚拟输出设备”。然后,在 GNOME 的“声音设置”下,选择您刚刚创建的同时输出。

如果这不起作用,请尝试将以下内容添加到 ~/.asoundrc

pcm.dsp {
   type plug
   slave.pcm "dmix"
}
提示: 也可以使用 alsamixer 手动实现同时输出。禁用“自动静音”项,然后取消静音您想要听到的其他输出源并增加它们的音量。

在同一声卡上同时输出到多个输出端不起作用

这对于拥有多个声源并希望在不同的输出端/输出上播放它们的用户很有用。一个示例用例是您播放音乐并进行语音聊天,并希望将音乐输出到扬声器(在本例中为数字 S/PDIF),并将语音输出到耳机(模拟)。

PulseAudio 有时会自动检测到这一点,但并非总是如此。如果您知道您的声卡可以同时输出到模拟和 S/PDIF,并且 PulseAudio 在 pavucontrol 或 veromix 的配置文件中没有此选项,那么您可能需要为您的声卡创建一个配置文件。

更详细地说,您需要为您的特定声卡创建一个 profile-set。这主要分两步完成。

  • 创建 udev 规则,使 PulseAudio 选择特定于声卡的 PulseAudio 配置文件。
  • 创建实际配置。

创建一个 pulseaudio udev 规则。

注意
  • 这只是 Asus Xonar Essence STX 的示例。阅读 udev 以查找正确的值。
  • 您的配置文件的编号应低于原始 PulseAudio 规则才能生效。
/usr/lib/udev/rules.d/90-pulseaudio-Xonar-STX.rules
ACTION=="change", SUBSYSTEM=="sound", KERNEL=="card*", \
ATTRS{subsystem_vendor}=="0x1043", ATTRS{subsystem_device}=="0x835c", ENV{PULSE_PROFILE_SET}="asus-xonar-essence-stx.conf"

现在,创建一个配置文件。如果您愿意,您可以从头开始并使其变得漂亮。但是您也可以使用默认配置文件,重命名它,然后在那里添加您知道有效的配置文件。不那么漂亮但也更快。

要为 Asus Xonar Essence STX 启用多个输出端,您只需要添加此内容即可。

注意: asus-xonar-essence-stx.conf 还包括 default.conf 中的所有代码/映射。
/usr/share/alsa-card-profile/mixer/profile-sets/asus-xonar-essence-stx.conf
[Profile analog-stereo+iec958-stereo]
description = Analog Stereo Duplex + Digital Stereo Output
input-mappings = analog-stereo
output-mappings = analog-stereo iec958-stereo
skip-probe = yes

这将使用默认配置文件自动配置您的 Asus Xonar Essence STX,并添加您自己的配置文件,以便您可以拥有多个输出端。

如果您希望使用 AC3 Digital 5.1 输出获得相同的功能,则需要在配置文件中创建另一个配置文件。

请参阅有关配置文件的 PulseAudio 文章

某些配置文件(如 SPDIF)默认情况下未在声卡上启用

某些配置文件(如 IEC-958(即 S/PDIF))可能默认情况下未在选定的输出端上启用。每次系统启动时,声卡配置文件都会被禁用,并且 pulseaudio 守护程序无法选择它。您必须将配置文件选择添加到您的 default.pa 文件中。使用以下命令验证声卡和配置文件名称 

$ pacmd list-cards

然后编辑配置以添加配置文件

~/.config/pulse/default.pa
## Replace with your card name and the profile you want to activate
set-card-profile alsa_card.pci-0000_00_1b.0 output:iec958-stereo+input:analog-stereo

Pulse 音频会将此配置文件添加到可用配置文件的池中

仅 S/PDIF 输出可用

如果 PulseAudio 使用错误的输出设备,则可能会发生这种情况。首先,设置正确的声卡配置文件

$ pacmd set-card-profile alsa_card.pci-0000_00_1f.3 output:analog-stereo

$ pacmd set-card-profile alsa_card.pci-0000_00_1f.3 output:analog-stereo+input:analog-stereo

alsa_card.pci-0000_00_1f.3 替换为您的声卡,将 output:analog-stereooutput:analog-stereo+input:analog-stereo 替换为您的配置文件,请记住选择带有模拟的配置文件。使用 shell 自动完成可能会对您有很大帮助。也可以使用以下命令检查可用的声卡和配置文件

$ pacmd list-cards

可能还需要通过以下方式设置输出端端口

$ pacmd set-sink-port alsa_output.pci-0000_00_1f.3.analog-stereo analog-output-headphones

使用以下命令检查可用的输出端端口

$ pacmd list-sinks

要保留这些设置,请将它们添加到 PulseAudio 的配置文件 default.pa 中。

~/.config/pulse/default.pa
.include /etc/pulse/default.pa

set-card-profile alsa_card.pci-0000_00_1f.3 output:analog-stereo+input:analog-stereo
set-sink-port alsa_output.pci-0000_00_1f.3.analog-stereo analog-output-headphones

USB 声音爆裂或爆音问题

虽然与 PulseAudio 无关,但也可能是声卡未通过其 USB 端口正确供电,或者它没有提供足够的带宽。

尝试将 USB DAC 直接连接到计算机的 USB 端口,避免使用任何集线器或扩展坞。

蓝牙

请参阅 蓝牙耳机#故障排除 2

应用程序

Audacity

启动 Audacity 时,您可能会发现您的耳机不再工作。这可能是因为 Audacity 尝试将它们用作录音设备。要解决此问题,请打开 Audacity,然后将其录音设备设置为 pulse:Internal Mic:0

在某些情况下,播放可能会失真、过快或卡顿,如 上游 解释的那样,使用以下命令启动 Audacity

$ env PULSE_LATENCY_MSEC=30 audacity

如果上述解决方案无法解决此问题,则可能希望在使用 pasuspender 命令运行 Audacity 时临时禁用 pulseaudio

$ pasuspender -- audacity

然后,请务必在 Audacity 中选择适当的 ALSA 输入和输出设备。

另请参阅 #某些应用程序未显示在 pavucontrol 中或不播放声音#在 PulseAudio 中设置默认片段数量和缓冲区大小

OpenAL

某些游戏可能会阻止您切换输出设备。尝试使用 pactl 移动输出端会产生以下错误

pactl move-sink-input 11 alsa_output.pci-0000_01_00.1.hdmi-stereo-extra1
Failure: Invalid argument

需要配置 OpenAL 以允许移动输出端

~/.alsoftrc
[pulse]
allow-moves = true

浏览器 (firefox) 加载视频但不播放

检查您的 daemon.conf 文件中是否有以下选项

/etc/pulse/daemon.conf
default-sample-rate = 384000
alternate-sample-rate = 384000

本文或本节需要改进语言、wiki 语法或风格。请参阅 Help:Style 以获取参考。

原因: 不要使用第一人称写作,请参阅 Help:Style#语言风格。(在 Talk:PulseAudio/Troubleshooting 中讨论)

对我而言,我将默认采样率从 44.1Khz 更改为 384Khz。之后,firefox 开始在 netflix、hbo max 和 paramount+ 站点上播放时出现问题。但是,spotify 不受影响。

如果您将 alternate-sample-rate 设置为默认值 48000,firefox 将尝试以该采样率发送音频。这会触发 pulseaudio 不对音频进行重采样并将其直接发送到声卡,从而导致播放问题。

如果您将 alternate-sample-rate 设置为与默认采样率相同的值,它将触发 pulseaudio 对来自 firefox 的音频进行重采样。然后一切正常。

最后,opera 或其他基于 chromium 的浏览器未受此问题影响,因为它们似乎总是重新采样以匹配 pulseaudio 的默认采样率。Firefox 在这方面试图在播放方面更加位完美,这是一件好事。但不幸的是,遇到了 pulseaudio 的这个错误/问题。

其他问题

某些应用程序未显示在 pavucontrol 中或不播放声音

为了与 PulseAudio 一起使用,某些应用程序需要 pulseaudio-alsa。这提供了 pulse:... 播放和录音设备。有关详细信息,请参阅 PulseAudio#ALSA

无法在 pavucontrol 中更新声音设备的配置

pavucontrol 是一个方便的 GUI 实用程序,用于配置 PulseAudio。在其“配置”选项卡下,您可以为每个声音设备选择不同的配置文件,例如模拟立体声、数字输出 (IEC958)、HDMI 5.1 环绕声等。

但是,您可能会遇到一种情况,即为声卡选择不同的配置文件会导致 pulse 守护程序崩溃并自动重启,而新的选择“未保持”。如果发生这种情况,请使用另一个有用的 GUI 工具 paprefs,检查“同时输出”选项卡下是否有虚拟的同时输出设备。如果此设置处于活动状态(选中),它将阻止您在 pavucontrol 中更改任何声卡的配置文件。取消选中此设置,然后在 paprefs 中重新启用同时输出之前,在 pavucontrol 中调整您的配置文件。

创建输出输入失败:输出端已挂起

如果您没有任何声音输出,并且从以 root 身份运行 journalctl -b 收到大量与挂起输出端相关的错误消息,请先备份,然后删除您的用户特定的 pulse 文件夹

$ rm -r ~/.pulse ~/.pulse-cookie ~/.config/pulse

Pulse 覆盖 ALSA 设置

PulseAudio 通常会在启动时覆盖 ALSA 设置 - 例如使用 alsamixer 设置的设置 - 即使加载了 ALSA 守护程序也是如此。由于似乎没有其他方法可以限制此行为,因此一种解决方法是在 PulseAudio 启动后再次恢复 ALSA 设置。将以下命令添加到 .xinitrc.bash_profile 或任何其他 自动启动 文件

restore_alsa() {
 while [ -z "$(pidof pulseaudio)" ]; do
  sleep 0.5
 done
 alsactl -f /var/lib/alsa/asound.state restore 
}
restore_alsa &

守护进程启动失败

尝试重置 PulseAudio

$ rm -rf /tmp/pulse* ~/.pulse* ~/.config/pulse
$ pulseaudio -k
$ pulseaudio --start
  • 检查是否正确设置了输出端的选项。
  • 如果您在 default.pa 中配置为加载和使用 OSS 模块,请使用 lsof 检查 /dev/dsp 设备是否未被另一个应用程序使用。
  • 设置首选工作重采样方法。使用 pulseaudio --dump-resample-methods 查看您可以使用的所有可用重采样方法的列表。
  • 要获取当前出现的未修复错误的详细信息,或仅获取守护进程的状态,请使用 pax11publish -dpulseaudio -v 等命令,其中 v 选项可以多次使用以设置日志输出的详细程度,等于 --log-level[=LEVEL] 选项,其中 LEVEL 的范围为 0 到 4。请参阅 #PulseAudio 错误状态检查实用程序的输出 部分。

有关更多详细信息,另请参阅 pax11publish(1)pulseaudio(1) 的手册页。

PulseAudio 错误状态检查实用程序的输出

如果 pax11publish -d 显示如下错误

N: [pulseaudio] main.c: User-configured server at "user", refusing to start/autospawn.

然后运行 pax11publish -r 命令,然后注销并重新登录也可能不错。

如果 pulseaudio -vvvv 命令显示如下错误

E: [pulseaudio] module-udev-detect.c: You apparently ran out of inotify watches, probably because Tracker/Beagle took them all away. I wished people would do their homework first and fix inotify before using it for watching whole directory trees which is something the current inotify is certainly not useful for. Please make sure to drop the Tracker/Beagle guys a line complaining about their broken use of inotify.

可以通过以下方式临时解决此问题

$ echo 100000 > /proc/sys/fs/inotify/max_user_watches

为了永久使用,请将设置保存在 99-sysctl.conf 文件中

/etc/sysctl.d/99-sysctl.conf
# Increase inotify max watchs per user
fs.inotify.max_user_watches = 100000
警告: 这可能会导致内核消耗更多的内存。

另请参阅

守护进程已在运行

在某些系统上,PulseAudio 可能会多次启动。journalctl 将报告

[pulseaudio] pid.c: Daemon already running.

确保仅使用一种自动启动应用程序的方法。pulseaudio 包括以下文件

  • /etc/X11/xinit/xinitrc.d/pulseaudio
  • /etc/xdg/autostart/pulseaudio.desktop
  • /etc/xdg/autostart/pulseaudio-kde.desktop

还要检查用户自动启动文件和目录,例如 xinitrc~/.config/autostart/ 等。

低音炮在每首歌结束后停止工作

已知问题:https://bugs.launchpad.net/ubuntu/+source/pulseaudio/+bug/494099

要解决此问题,必须按照 #模拟环绕声设置下的断断续续的声音 中所述设置 enable-lfe-remixing = yes

无法选择除“环绕声 4.0”以外的环绕声配置

如果您无法在 pavucontrol 中设置 5.1 环绕声输出,因为它仅显示“模拟环绕声 4.0 输出”,请打开 ALSA 混音器并在那里将输出配置更改为 6 声道。然后重启 pulseaudio,pavucontrol 将列出更多选项。

实时调度

如果 rtkit 不起作用,您可以手动设置您的系统以使用实时调度运行 PulseAudio,这有助于提高性能。为此,请将以下行添加到 /etc/security/limits.conf

@pulse-rt - rtprio 9
@pulse-rt - nice -11

之后,您需要将您的用户添加到 pulse-rt

# gpasswd -a <user> pulse-rt

备用设备未被遵守

PulseAudio 没有真正的默认设备。相反,它使用“备用”,它仅适用于新的声音流。这意味着先前运行的应用程序不受新设置的备用设备的影响。

gnome-control-centermate-mediapaswitchAUR 可以优雅地处理此问题。或者

1. 在 pavucontrol 中手动将旧的流移动到新的声卡。

2. 停止 Pulse,擦除 ~/.config/pulse 和/或 ~/.pulse 中的“stream-volumes”,然后重启 Pulse。这也会重置应用程序音量。

3. 禁用流设备读取。当使用具有不同应用程序的不同声卡时,这可能是不希望的。

/etc/pulse/default.pa
load-module module-stream-restore restore_device=false

RTP/UDP 数据包洪流

在某些情况下,默认配置可能会使网络充斥 UDP 数据包。[5] 要解决此问题,请启动 paprefs 并禁用“Multicast/RTP Sender”。[6]

新的音频源流自动选择到“空白”流而不是 BT 耳机

示例场景:在 KDE + Arch 上使用 Firefox 68.0.1 重启、停止、快进 Youtube 视频可能会将 PulseAudio 中与其关联的“输出端”设置为空白状态,然后通过笔记本电脑扬声器输出声音。在 Dell 9360 上不一致地重现。

修复方法似乎是杀死并重启 pulseaudio

pulseaudio -k
pulseaudio --start