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/messages收到的消息**
首次登錄
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,這也是 a** 中的一個痛苦,或者嘗試將這個 pulseaudio s*** 排序出來……我寧願花在其他地方的時間。
我不想嘗試通過修復pulseaudio的問題來解決它,因為這個問題只是從無處浮出水面,我不知道我安裝的哪個包破壞了這個,但我沒有更改配置文件中的任何內容,而這個問題就突然出現了。
我為解決這個問題所做的是完全刪除pulseaudio。
apt-get --purge remove pulseaudio* rm -r ~/.config/pulse
改回我的舊 alsa asound.conf文件並添加了設備環境變數的輸入。
/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=CARD ALSA_PCM_DEVICE=DEVICE firefox
我無法在不將 ALSA_PCM_DEVICE 添加到 asound.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 應該提供類似的“預設”=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.!card PCH
defaults.ctl.!card PCH
要覆蓋它並播放名為“耳機”的卡,您可以將應用程序執行為:
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=“type pulse” module -> pulseaudio daemon -> hw。您不應該將“hw”或“plughw”或“dmix”與pulseaudio一起使用——它們不能一起工作。相反,我應該定義 pcm.!default { type pulse } (實際上 pulseaudio 通常會自動為您執行此操作)
安裝 pulseaudio 後,您只需要 pcm.!default { type pulse }。在大多數發行版中,pulseaudio 會自動執行此操作。(在archlinux上它被打包為一個單獨的“pulseaudio-alsa”包,它基本上只有這個alsa配置,沒有別的)