Linux
PulseAudio 如何確定哪些 ALSA 設備可用或不可用?
PulseAudio 通常可以很好地確定可用的 ALSA 設備並自動設置它們。如果沒有,我不清楚這種看似自動的連結是如何發生的。是 ALSA 告訴 PulseAudio 有關設備的推送,還是 PulseAudio 從 ALSA 配置中確定的推送?假設您有 3 個音頻“卡”:A、B 和 C。
aplay -l
顯示所有三個(假設所有三個都通過 aplay 按預期工作)但pacmd list-cards
只顯示 A 和 B。如果您只希望 PulseAudio 使用 B 和 C,您如何讓 PulseAudio 刪除 A 並添加 C?我認為這將通過pacmd
和/或更改 PA 的啟動配置文件來完成,但我不清楚具體如何執行此操作。
我認為模組負責添加設備。例如,有一個叫
module-udev-detect
,如果我pacmd list-cards
在我的系統中這樣做,我會看到module-udev-detect.discovered = "1"
三個中的兩個。第三個是藍牙設備,所以我猜一個來自bluez5
模組。
ENV{PULSE_IGNORE}="1"
稍微看一下網路,您可以通過設置udev 規則使 pulseaudio 忽略來自 udev 的設備。看
- https://jamielinux.com/blog/tell-pulseaudio-to-ignore-a-usb-device-using-udev/和
- https://github.com/pulseaudio/pulseaudio/blob/5f727f0faf4c37794da6719941ab975252325888/src/modules/module-udev-detect.c#L453)
我想對於藍牙,您必須擺弄 bluez,才能忽略該設備。
至於為什麼設備會被忽略,可能是因為當pulseaudio試圖打開它時它被鎖定(alsa設備只能打開一次)。
從@blihp 編輯:
要強制 PulseAudio 嘗試使用音頻設備,請將條目添加到
/etc/pulse/default.pa
:load-module module-alsa-sink device=plughw:<card#>,<device#>
(替換
<card#>,<device#>
為您系統的特定硬體,例如0,1
)