使用 PulseAudio 錄製另一台電腦的監聽源(輸出混音)
我正在設計一個基於 Raspberry Pi 的 LED 視覺化牆,例如,它可以顯示另一台電腦的聲音輸出的頻譜。合乎邏輯的選擇是使用 PulseAudio 來監控 LAN 上的音頻。
不過有一個問題。我可以輕鬆地將音頻從一台電腦播放到另一台電腦,還可以錄製遠端麥克風輸入,所以我的基本設置沒有任何問題,但由於某種原因,我無法錄製應該提供遙控器上播放的所有音頻混合的監聽源電腦。我什至可以在 PulseAudio 音量控制 (pavucontrol) 的輸入列表中看到遠端監聽源,但在選擇錄製時我得到的只是靜音。本地監視器源工作正常。接收器是帶有正常立體聲 PCM 的 HDMI 輸出,而不是 AC3/DTS 直通。
我在這裡錯過了什麼重要的東西嗎?是否出於某種原因阻止了對監控源的網路訪問?
如果有解決方案,我也很高興看到 CLI 替代方案,因為這是我的項目主要需要的。
我已經用完了我所有的 Google-fu,但沒有成功,但如果以前沒有人這樣做過,我會感到驚訝。
更新:
pacmd list-sources | grep name:
按要求添加了輸出。由於 IPv6,隧道項目被列出兩次,但這不是問題。name: <alsa_output.pci-0000_00_1b.0.analog-stereo.monitor> name: <alsa_input.pci-0000_00_1b.0.analog-stereo> name: <tunnel.mediacenter.local.alsa_input.pci-0000_00_14.2.analog-stereo> name: <tunnel.mediacenter.local.alsa_input.pci-0000_00_14.2.analog-stereo.2> name: <tunnel.mediacenter.local.alsa_output.pci-0000_01_00.1.hdmi-stereo.monitor> name: <tunnel.mediacenter.local.alsa_output.pci-0000_00_14.2.iec958-stereo.monitor> name: <tunnel.mediacenter.local.alsa_output.pci-0000_01_00.1.hdmi-stereo.2.monitor> name: <tunnel.mediacenter.local.alsa_output.pci-0000_00_14.2.iec958-stereo.2.monitor>
我發布了我自己的解決方案,在 PulseAudio 開發人員的幫助下找到,以便其他人可以避免我的掙扎。
這個問題原來是 PulseAudio 10.0 的 zeroconf 模組中的一個錯誤,可能遲早會得到修復。在那之前,唯一的解決方案(除了手動創建隧道)是直接從遠端 PulseAudio 伺服器錄製,繞過隧道模組。不過,這可能不適用於 GUI 應用程序。記錄遠端監控源的範例命令:
PULSE_SERVER=REMOTE_HOST parecord --device=MONITOR_SOURCE > recording.wav
使用源的本地名稱(即在我的例子中為 alsa_output.pci-0000_01_00.1.hdmi-stereo.monitor)用適當的值替換 REMOTE_HOST 和 MONITOR_SOURCE 。
GStreamer 可以使用類似的直接 PulseAudio 連接,它具有方便的 CLI 工具和各種程式語言的綁定。本地播放遠端監聽源的範例命令:
gst-launch-1.0 pulsesrc server=REMOTE_HOST device=MONITOR_SOURCE ! pulsesink
GStreamer 還可以提供頻譜數據,這在視覺化項目中可能很有用。具有長間隔且沒有音頻吞吐量的範例:
gst-launch-1.0 -m pulsesrc server=REMOTE_HOST device=MONITOR_SOURCE\ ! spectrum interval=400000000 bands=10 threshold=-100 ! fakesink