按照传统,我在使用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/cards
或aplay -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 配置,没有其他的)