Alsa

將音頻從特定程序重定向到特定音頻設備甚至通道

  • February 1, 2017

如何將一個程序(或一組知道父程序 ID 的程序)生成的音頻重定向到 PulseAudio,然後重定向到特定的音頻硬體(甚至是特定的通道)?

最少的 PulseAudio 配置應該是什麼?

我有一個生成正弦曲線的 Python 腳本,例如,我只想將該聲音重定向到我的低音炮(我有 5.1 音頻系統)。我只想捕捉該過程產生的每一個聲音。

這是幾個問題。:-)

1a) 通常,為 Pulseaudio 產生聲音的應用程序通過某個名稱向 Pulseaudio 伺服器標識自己,並使用該名稱標識它們,您可以將音頻流重定向到特定的硬體接收器。

1b)如果您的程序通過以某種格式寫入stdout或類似的方式產生聲音,您可以將其通過管道傳輸到paplay,然後像來自 Pulseaudio 應用程序一樣處理它。使用該-n選項為其指定一個特定於您的程序的客戶端名稱(如paplay -n "sinusoid generator")。

1c) 如果您的程序使用 ALSA 產生聲音,請在以下選項pulse中選擇預設設備.asoundrc

pcm.!default pulse
ctl.!default pulse

這將添加一個兼容層並將聲音轉發到 Pulseaudio,在那裡它將再次顯示為具有特定名稱的應用程序。

1d) 如果您的流程以不同的方式產生聲音,您必須告訴我們更多細節。

pavucontrol2a) 您可以使用GUI將 Pulseaudio 聲音輸出從應用程序重定向到特定接收器。標準 Pulseaudio 設置包括一個模組,該模組記住哪些應用程序使用哪些接收器,並在應用程序下次啟動時自動恢復這些分配。所以你只需要這樣做一次。

2b)您也可以在命令行中使用pacmd move-sink-input, 在使用 other 之後執行此操作pacmdgrep獲得所需的名稱。不過,僅使用 GUI 會更簡單。

3a) 您只能移動完整的音頻流,不能移動頻道。但是,您可以在一個接收器上同時播放多個流,因此,如果您的正弦波發生器僅在低音炮通道上產生正弦波的 5.1 音頻,那麼它將在此處播放,您可以同時在 5.1 音頻系統上播放其他聲音時間。

3b) 如果您使用paplay(sa),您可以使用--channelsand--channel-map確保您的正弦波在低音炮聲道上播放。詳情請參閱man paplay

3c) 如果上述方法都不適合您,您可以在硬體接收器上創建一個額外的(虛擬)接收器,並重新映射通道(例如,單個單聲道接收器輸入 -> 低音炮通道輸出)。

  1. 大多數發行版使用的標準 Pulseaudio 配置應該足夠了。通過辨識和刪除不會使用的模組和包來使其變得更小是可能的,但需要做很多工作(當然這取決於您的發行版)。

引用自:https://unix.stackexchange.com/questions/341291