Audio

使用 arecord、parec 或 jackd 播放或監控音頻輸入的理想方式是什麼?

  • June 20, 2021

儘管在錄製、安裝和設置pulseaudio並使用parec後儘我所能將輸出通過管道傳輸到tee,但我未能在我的音頻設備上傳輸錄製的音頻輸入(一個alsa驅動的hifiberry,並在樹莓派上託管了一個adc),因為以及 jackd 和 jack_capture。

我的任務關鍵圖:

線路電平音頻 -> ADC -> PCM/Wav 文件 -> DAC -> 線路電平音頻。

問題是在錄製過程中沒有播放任何輸出。

我正在錄製線路電平輸入並希望聽到它。延遲並不重要,但我希望它是 200 毫秒或更短。

我在這個令人難以置信的黑客解決方案中取得了成功,它只是在一個終端視窗中“記錄”並在另一個終端視窗中“播放”(有效),但這不可能解決我的問題。

為了使問題更加複雜,我在Google上搜尋的嘗試失敗了,因為Google認為我只是試圖將一個應用程序的輸出擷取到文件中。我不是。我想監控音效卡的輸入。在 Apple 的 Logic Pro 中,這被稱為“軟體監控”——我認為這很容易。我也看到它被稱為“播放”,但也許這是另一回事。

我的希望是用pulseaudio提出的——他們說這只是“源和匯”。

我確實成功地用pulseaudio的parec、alsa的arecord和jackd + jack_capture錄製了一個pcm文件。我顯然遺漏了一些明顯的東西。

parec -d alsa_input.platform-soc_sound.stereo-fallback | sox -t raw -b 16 -e signed -c 2 -r 44100 - /mnt/audio/pulsetest.wav

顯然我的作業系統和硬體可以“雙工”,因為我可以同時錄製和播放。

可以這樣做還是我應該繼續使用 arecord 和 aplay?

請嘗試類似

pacmd load-module module-loopback source="alsa_input.platform-soc_sound.stereo-fallback" sink="alsa_output.whatever"

其中“alsa_output.whatever”是線路輸出接收器的實際名稱。你可以看到水槽

pacmd list-sinks | grep name:

我認為“環回”是一個用於擷取系統音頻的術語

“Loopback”是一個通用術語,用於將一些輸出發送回一些輸入。你有一個用於網路的環回介面lo

我在脈衝配置中設置了預設樣本格式和速率

不要這樣做,Pulseaudio 會重新採樣。不要弄亂其他任何東西,只需建立module-loopback從源到接收器的連接即可。

應該很簡單。

很簡單。我不知道你在做什麼讓它變得困難。

我想我應該拿出一個嗅探器並探測晶片,看看 alsa 在做什麼。

這是一件有趣的事情(特別是在真正的 PC 上,使用英特爾 HDA 驅動程序 - 在 RaspPi 上非常無聊),但由於您正在使用 Pulseaudio 級別,而不是 ALSA,因此可能沒有幫助。因為你有一個工作aplayarecord,這不應該是一個問題。


如果您有讓源和接收器使用 96k/24 位的額外要求(您從未在問題中提及),那麼這將是 Pulseaudio 的一段旅程:Pulseaudio 旨在以合理的方式執行 ALSA 硬體源/接收器預設值,然後在流式傳輸時根據需要進行上採樣/下採樣。擺弄 Pulseaudio 內部結構來改變這一點很棘手。

查看module-loopback 文件:您可以使用額外的參數設置所需的速率和格式(這是您應該做的),但不能保證源和接收器最終會以這種模式結束,而 Pulseaudio 不會不要在某處重新採樣。

你也沒有說這個要求是從哪裡來的;如果你想用 RaspPi 做專業級的音頻處理(DAW,數字音頻工作站),那麼 JACK 是比 Pulseaudio 更好的選擇。但這一切都取決於你的情況。

也就是說,如果您module-loopback與 一起執行parec --rate=96000 --format=s24le,那麼它當然不能在執行的接收器上更改比特率和格式,但如果您已經獲得了所需的格式和比特率,那麼就別管它了,開心就好。

是的,使用 Pulseaudio,您可以從一個源獲得多個流,並將多個流放入一個接收器。

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