使用 ALSA 循環設備從基於網路的音頻播放器錄製音頻
我正在嘗試以最佳質量保存來自 Verizon Fios 手機的語音郵件。語音郵件消息可線上獲得,但僅用於播放(基於 Java 的播放器),不能保存。官方沒有支持如何將原始數字語音消息保存為來自 Fios 數字語音服務的文件(沒有付費服務,沒有任何東西,沒有理由)。
我唯一的想法是在通往音效卡的途中記錄來自播放器的數字數據。我嘗試使用循環設備進行 Linux ALSA 配置。
# cat /etc/asound.conf # default device pcm.!default { type plug slave.pcm "loop" } # output device pcm.loopout { type dmix ipc_key 328211 slave.pcm "hw:Loopback,0,0" } # input device pcm.loopin { type dsnoop ipc_key 686592 slave.pcm "hw:Loopback,1,0" } # duplex plug device pcm.loop { type plug slave { pcm { type asym playback.pcm "loopout" capture.pcm "loopin" } } }
這似乎正在工作並記錄音頻,例如在 Youtube 上播放某些內容時,音頻輸出會進入循環設備(預設音頻輸出),我可以擷取它(不確定它是如何工作的,我測試了 44.1kHz 和 48Khz )
arecord -f cd -D loop | aplay -f cd -D hw:0,0 arecord -f dat -D loop | aplay -f dat -D hw:0,0
但是當我嘗試擷取 Verizon Java 音頻播放器的輸出時,它出現了亂碼,並且長度似乎不匹配。我懷疑它可能是 8 kHz 的單聲道,我嘗試了不同的方法,改變了頻率和格式,但沒有任何幫助。
您知道這裡出了什麼問題以及如何記錄消息嗎?ALSA 配置有問題嗎?或者可能是核心問題?(我使用的是 3.4.88)。任何想法都會非常受歡迎。
有趣的問題,很久以前我在考慮簡單的數字音頻和影片錄製,可能通過一些虛擬音頻和影片驅動程序,但從未實現。
我使用了您的配置文件,並且遇到了與您描述的完全相同的問題。(可以肯定的是,我從 ALSA 中刪除了 OSS 兼容性驅動程序,測試了不同的核心 - 似乎無關緊要,並使用了 Debian Wheezy)
$ alsaplayer -d front audio.mp3 $ mplayer -vo null -ao alsa:device=front video.mp4 AO: [alsa] 44100Hz 2ch s16le (2 bytes per sample) $ mplayer -ao alsa:device=front audio.mp3 AO: [alsa] 44100Hz 2ch s16le (2 bytes per sample)
以上命令都可以播放到揚聲器
$ arecord -f cd -D loop | aplay -f cd -D front Recording WAVE 'stdin' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo Playing WAVE 'stdin' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
現在從循環錄製並播放到前面
$ alsaplayer audio.mp3 $ alsaplayer -d loop audio.mp3 $ mplayer -vo null video.mp4 $ mplayer -vo null -ao alsa:device=loop video.mp4 AO: [alsa] 48000Hz 2ch s16le (2 bytes per sample) $ mplayer -ao alsa:device=loop audio.mp3 AO: [alsa] 48000Hz 2ch floatle (4 bytes per sample)
全部發送音頻循環播放並播放到揚聲器 OK
$ mplayer audio.mp3 AO: [alsa] 48000Hz 2ch floatle (4 bytes per sample)
但是這裡的聲音壞了——非常失真!!!只是播放到預設設備。通過循環指定的播放工作!
在嘗試了各種更改後,我測試了對 asound.conf 的修改
pcm.!default { type plug slave.pcm "loopout" }
它解決了問題!當預設設備環出時,它可以工作。嘗試
arecord -f cd -D loopin | aplay -f cd -D front
沒有任何效果。不確定循環是如何工作的,但這能夠擷取音頻。還是 ALSA 中的錯誤?你在使用 Debian 嗎?對你起作用嗎?對解決問題的其他建議的註釋:
轉儲網路流:我假設如果應用程序不希望您保存數據,則傳輸將被加密(https ???)。如果播放器不檢查伺服器證書,您如何擷取數據?如何成為中間人並抓住潮流,您最喜歡的快速簡便的方法是什麼?
Pulseaudio:如何讓它在 Debian Wheezy 上執行?維基說它只是工作。它沒有。
/etc/init.d/pulseaudio start [warn] PulseAudio configured for per-user sessions ... (warning).
如何解決正在發生的事情?(工具,診斷?)
Jack:我沒有找到任何安裝 Jack 的簡單說明。看起來相當複雜。它是否假設 Pulseaudio 正在執行?文件令人困惑。您是否有一個不錯的快速入門連結(如何安裝和測試以確保它正常工作?)
您是否認為大多數音頻應用程序(如 Fios Voicemail Java 播放器)能夠播放到 Pulseaudio 或 Jack 而不會向 ALSA 發送音頻?