在 Linux 上錄製音頻 - 擷取 VoIP 對話的雙方
我想使用 Audacity(或類似的)來錄製播客的音頻。播客將通過 IP 語音 (SIP) 電話進行採訪。
我在這裡遇到了一個很好的教程: http ://www.linux.com/learn/tutorials/367395-weekend-project-record-from-skype-calls-and-other-apps-on-linux
它提供了我需要的大部分步驟。最重要的是,它描述瞭如何從不支持錄音的應用程序中擷取通話雙方。“擷取通話雙方的真正解決方案是建構一個連接到雙方的虛擬 PulseAudio 設備”和“然後記錄空接收器,在單個文件中擷取合併的音頻。”
但是,我想以不同的方式做一件事。我不希望對話的音頻完全“合併”。我希望對話的一側在一個頻道中,另一側在另一個頻道中。實際上有一個硬體設備可以做到這一點,這就是我想到的地方。該設備是此處找到的 JK Audio Inline Patch:
http://www.jkaudio.com/inline-patch_dtails.htm
它提供“一個迷你立體聲輸出插孔,左聲道呼叫者,右聲道本地語音。” 這與我想要的相似。我想我可以像教程中描述的那樣做,而無需購買 250 美元的美國硬體設備。
原教程步驟如下:
pacmd info cp /etc/pulse/default.pa ~/.pulse/default.pa
然後在您喜歡的編輯器中打開 default.pa 並添加類似這樣的內容(基於來自 pacmd info 的資訊):
# set up null sink and loopbacks to record voice calls load-module module-null-sink sink_name=mywiretap load-module module-loopback source=alsa_output.pci-0000_00_06.1.analog-surround-40.monitor sink=mywiretap load-module module-loopback source=alsa_input.pci-0000_00_06.1.analog-stereo sink=mywiretap
來自教程:此設置的額外好處是 PulseAudio 會自動儲存應用程序連接詳細資訊,因此下次登錄時,您無需重複將錄音應用程序連接到 Null 輸出監視器的過程 - 只需啟動你的錄音機,打電話給你的
$$ interview subjects $$,然後開始說話…… 我的問題是,如何在立體聲錄音的一個通道中擷取我的音頻,而在另一個通道中擷取採訪對象的音頻?或者我如何使用 Audacity 完全單獨(如有必要)擷取它們?
我玩弄了 Audacity,我無法打開兩個視窗並使用 Audacity 記錄兩個單獨的源(至少我無法弄清楚)。
如果有興趣,我的 SIP 客戶端是 Twinkle。
解決方案是使用 JACK 音頻連接套件 ( http://jackaudio.org/ )。我最終安裝了 KX Studio 發行版(基於 Debian/Ubuntu),為了簡單起見,我刪除了 PulseAudio。
播客將通過 IP 語音 (SIP) 電話進行採訪。我希望對話的一側在一個頻道中,另一側在另一個頻道中。
JACK 允許我這樣做。
這是 PulseAudio 和 gstreamer 的解決方案:
- 通過查看
pactl list | grep -A2 'Source #'
. 這兩個設備對應通話的兩端。- 如下執行 gstreamer 命令,提供您的設備名稱,而不是
device=…
:gst-launch-1.0 -e \ pulsesrc device=alsa_input.usb-046d_0819_561F63A0-02.mono-fallback \ ! queue ! audioresample ! audioconvert \ ! vorbisenc ! oggmux ! filesink location=recording1.ogg \ pulsesrc device=alsa_output.pci-0000_00_1b.0.analog-stereo.monitor \ ! queue ! audioresample ! audioconvert \ ! vorbisenc ! oggmux ! filesink location=recording2.ogg
- 因此,您將擁有兩個單獨的錄音
recording1.ogg
,並recording2.ogg
用於通話的雙方。它們在完全相同的時間開始,因此可以用作例如 Audacity 中的不同軌道。gstreamer 命令只是打開兩個單獨的源和兩個單獨的接收器,並將一個源分別路由到一個接收器。它還可以將多個源混合到一個接收器中,但在這種情況下,這是您不希望發生的。