Audio

使用 ALSA 循環設備從基於網路的音頻播放器錄製音頻

  • December 1, 2014

我正在嘗試以最佳質量保存來自 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 發送音頻?

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