PulseAudio 耳机问题

PulseAudio 耳机问题

按照传统,我在使用pulseaudio时遇到了一些麻烦。

当我输入 X (DWM) 、运行 google-chrome 并访问 youtube.com 并播放视频时,耳机无法工作,声音断断续续。

speaker-test -c 2 -t wav -D plughw:2,0结果:播放打开错误:-16,设备或资源繁忙

当我重新启动 X(注销 -> 登录)时,浏览器中的音频开始神奇地工作。

**** 播放硬件设备列表 ****

card 0: PCH [HDA Intel PCH], device 0: ALC898 Analog [ALC898 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 1: ALC898 Digital [ALC898 Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 7: HDMI 1 [HDMI 1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 8: HDMI 2 [HDMI 2]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 9: HDMI 3 [HDMI 3]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: Device [USB Sound Device], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

我不知道发生了什么,以下是我收到的消息/var/log/消息

首次登录

Mar 11 20:07:31 qwerty pulseaudio[1223]: [pulseaudio] alsa-mixer.c: Volume element Speaker has 8 channels. That's too much
Mar 11 20:07:31 qwerty pulseaudio[1223]: [pulseaudio] alsa-mixer.c: Volume element Speaker has 8 channels. That's too much
Mar 11 20:07:31 qwerty pulseaudio[1223]: [pulseaudio] alsa-mixer.c: Volume element Speaker has 8 channels. That's too much
Mar 11 20:07:31 qwerty pulseaudio[1223]: [pulseaudio] alsa-mixer.c: Volume element Speaker has 8 channels. That's too much
Mar 11 20:07:31 qwerty pulseaudio[1223]: [pulseaudio] alsa-mixer.c: Volume element Speaker has 8 channels. That's too much
Mar 11 20:07:44 qwerty org.a11y.Bus[1007]: Activating service name='org.a11y.atspi.Registry'
Mar 11 20:07:44 qwerty org.a11y.Bus[1007]: Successfully activated service 'org.a11y.atspi.Registry'
Mar 11 20:07:44 qwerty org.a11y.atspi.Registry[1288]: SpiRegistry daemon is running with well-known name - org.a11y.atspi.

第二次登录

Mar 11 20:08:01 qwerty org.gtk.vfs.Daemon[1007]: A connection to the bus can't be made
Mar 11 20:08:01 qwerty org.gtk.vfs.Daemon[1007]: g_dbus_connection_real_closed: Remote peer vanished with error: Underlyin on an async read (g-io-error-quark, 0). Exiting.
Mar 11 20:08:01 qwerty org.a11y.Bus[1007]: g_dbus_connection_real_closed: Remote peer vanished with error: Underlying GIOS async read (g-io-error-quark, 0). Exiting.
Mar 11 20:08:01 qwerty org.a11y.atspi.Registry[1288]: g_dbus_connection_real_closed: Remote peer vanished with error: Undebytes on an async read (g-io-error-quark, 0). Exiting.
Mar 11 20:08:02 qwerty org.a11y.Bus[1007]: No protocol specified
Mar 11 20:08:17 qwerty org.a11y.Bus[1349]: Activating service name='org.a11y.atspi.Registry'
Mar 11 20:08:17 qwerty org.a11y.Bus[1349]: Successfully activated service 'org.a11y.atspi.Registry'
Mar 11 20:08:17 qwerty org.a11y.atspi.Registry[1539]: SpiRegistry daemon is running with well-known name - org.a11y.atspi.

Asound.conf

pcm.pulse {
    type pulse
}

ctl.pulse {
    type pulse
}

pcm.!default {
    type pulse
}

ctl.!default {
    type pulse
}

ALSA 信息脚本的输出 v 0.4.64

http://www.alsa-project.org/db/?f=5290b8d86207b2cba3c1e4854fea0399e7fdb9f7

如果我继续终止所有正在运行的pulseaudio进程,然后运行

speaker-test -c 2 -t wav -D plughw:2,0音频可以工作,但在浏览器中显然不行。

现在我有两个选择,删除pulseaudio并尝试通过环境变量设置PCM_DEVICE,这也是一个痛苦的**或尝试整理这个pulseaudio s***...我宁愿花在其他地方的时间。

答案1

我不想尝试通过使用pulseaudio修复问题来解决它,因为这个问题只是从无处冒出来,我不知道我安装的哪个包破坏了这个,但我没有更改配置文件中的任何内容,而且这个问题是突然出现的。

我为解决这个问题所做的就是完全删除pulseaudio。

apt-get --purge remove pulseaudio*
rm -r ~/.config/pulse

改回我原来的 alsa声音配置文件文件并添加了设备环境变量的输入。

/ETC/ASOUND.CONF

defaults.pcm.!card Device
defaults.ctl.!card Device
defaults.pcm.!device { 
        @func igetenv  
                vars [ ALSA_PCM_DEVICE ]  
                default 0 
}

有用! (“设备”是我的USB卡的名称)

当切换到具有多个音频输出设备的卡时,我必须设置环境变量。

命令:>ALSA_PCM_CARD=卡 ALSA_PCM_DEVICE=设备 火狐

我无法在不将 ALSA_PCM_DEVICE 添加到 asound.conf 的情况下设置它,尽管它是在 .conf 中定义的,但显然不足以设置它/usr/share/alsa/alsa.conf

原因是plughw使用ALSA_PCM_DEVICE,如果未设置,则回退到defaults.pcm.device,而dmix(/usr/share/alsa/pcm/dmix.conf)仅使用defaults.pcm.device,而不检查ALSA_PCM_DEVICE

这就是为什么你必须显式地重新定义 defaults.pcm.!device 以使其检查 ALSA_PCM_DEVICE 环境变量

编辑(IRC - ALSA 环境变量总结对话)

除非您有一些不寻常的嵌入式设备/驱动程序。

Alsa 应该提供类似的“default”=plug->dmix->hw 播放链。

它应该开箱即用,根本不需要 ~/.asoundrc 。

默认情况下,链在卡 0 设备 0 上结束。

或者,从技术上讲,它: (1) 默认为卡 ALSA_PCM_CARD 环境,如果未设置 (2) 默认为 ALSA_CARD env.variable,如果未设置 (3) 默认为“defaults.pcm.card” alsa 变量,如果是未设置 (4) 默认为卡 0。

例如,要让所有应用程序播放名为“PCH”的声卡,您只需要在 ~/.asoundrc (仅限您的用户)或 /etc/asound.conf (所有用户)中添加 2 行:

defaults.pcm.!卡 PCH

defaults.ctl.!card PCH

要覆盖它并播放名为“Headset”的卡,您可以运行应用程序env ALSA_CARD=Headset some-app-here:您可以在cat /proc/asound/cardsaplay -l输出中看到卡名称。从技术上讲,您也可以使用卡号 ( env ALSA_CARD=2 some-app-here),但卡号可能会在重新启动时发生变化,因此通常最好使用名称。

编辑(IRC 上的摘要对话 - PulseAudio)

Pulseaudio 的做法有所不同。它没有添加中间模块,而是添加了一个全局的pulseaudio守护进程,并且该守护进程直接播放“hw”pcm。所有其他应用程序都应该播放该守护进程,因为当它运行时,没有其他应用程序可以播放“hw”。这就是为什么我有“设备或资源正忙”的原因。

所以一个典型的pulseaudio播放链是default="typepulse"模块->pulseaudio守护进程->hw。你不应该将“hw”或“plughw”或“dmix”与pulseaudio一起使用 - 它们不能一起工作。相反,我应该定义 pcm.!default { typepulse } (实际上,pulseaudio 通常会自动为您执行此操作)

安装了pulseaudio,你只需要pcm.!default { typepulse}。在大多数发行版上,pulseaudio 都会自动执行此操作。 (在 archlinux 上,它被打包为一个单独的“pulseaudio-alsa”包,基本上只有这个 alsa 配置,没有其他的)

相关内容