2011年3月12日 星期六

PulseAudio 硬體輸入與系統聲音同時錄音

在一個 PulseAudio + ALSA 的系統上,麥克風與線路輸入是屬於實體輸入 alsa_input,而系統聲音則是某個 output的 monitor。如果系統沒有特別設定過,我們只能在錄音的時候讓錄音程式使用 input 或 monitor 其中一個來源錄音。

這對於有桌面實況需求的人來說有點麻煩,你想要用麥克風跟觀眾說話就得犧牲掉系統聲音,要讓觀眾聽音效就得停止麥克風輸入。幸好 PulseAudio 有一系列的 module 讓聲音系統變得很有彈性,解決這個問題的原理是這樣的:

我們知道一個輸出裝置會對應到一個可錄音的 monitor,要把 input 跟 monitor 混合在一起送給錄音程式,我們可以利用建立一個虛擬的輸出裝置來達成。這個虛擬的輸出裝置也會有一個對應的 monitor 可供錄音,這時候只要利用 loopback module 將 input 和原本的 monitor 這兩個 source 的聲音送給虛擬輸出裝置播放,這樣一來我們就可以從虛擬輸出裝置的 monitor 錄到全部的聲音。

上面的步驟可以靠編輯 /etc/pulse/default.pa 來達成,在檔案末端加入以下內容:

load-module module-null-sink sink_name=virtual
load-module module-loopback source=alsa_output.pci-0000_05_07.0.analog-stereo.monitor sink=virtual
load-module module-loopback source=alsa_input.pci-0000_05_07.0.analog-stereo sink=virtual

其中的 source 請改成你要的裝置