混合兩個音訊串流的說明

混合兩個音訊串流的說明

對於廣播設置,我想將輸入設備中的音訊與 .wav 檔案中的音訊混合。 .wav 檔案包含介紹、等待或退出音樂,我希望在廣播期間的某個時間點將其添加到音樂中。

以下設定是目標: 在此輸入影像描述

需要多個步驟:

  1. 添加/混合兩個流
  2. 轉換為單聲道(或者也許這應該首先完成)
  3. 將串流拆分為廣播串流和 VU 表
  4. 將流傳送到本地音訊輸出

我很確定這一定是可能的,但我在網路上找不到任何解決方案。深入研究 alsa 的 .asoundrc 尚未產生任何結果。似乎 alsa dmix 做了一些混合,但不是我想要的...

我真的不知道從哪裡開始。

有人可以解釋一下嗎?部分解決方案也很好!

答案1

最簡單的方法是使用 Pulseaudio。 (你可以使用 ALSA 來做到這一點,但配置起來會很痛苦。)

所有產生聲音的東西都會在當前輸出上自動混合(Pulseaudio 術語中的“接收器”),因此您無需擔心混合。您可以使用 控製卷pavucontrol,它會透過應用程式名稱記住最後一個卷。您可以使用paplay命令列播放 wav 文件,但任何其他音訊播放器也可以。

如果您的接收器是單聲道的,則會自動轉換為單聲道。如果您無法為此配置本機 RaspPi 接收器(我不知道,我沒有 RaspPi),您可以添加一個「偽」接收器

pactl load-module module-null-sink sink_name=whatever

或者如果事實證明您需要在 Pulseaudio 中重新映射module-remap-sink(見下文,我自己還沒有嘗試過)。

該接收器或本機 RaspPi 接收器將有一個關聯的.monitor來源,您可以使用它將其分發到icecast等。

您可以將 hw:1 輸入設定為您選擇的接收器的永久提要:

pacmd load-module module-loopback source="alsa_input.name_of_hw_1" sink="whatever_or_local_sink"

您可以列出可用的接收器名稱

pacmd list-sinks | grep name:

作為參數,使用不帶尖括號的名稱。

我認為這是基礎知識。了解可用的 Pulseaudio模組,並且pacmd help會告訴您如果您不想使用pavucontrol.

編輯為了阿薩斯

首先,閱讀有關可用的外掛。您將需要一個“虛擬聲卡”來將音訊路由到 darkice 等。

sudo modprobe snd-aloop pcm_substreams=2

/etc/modprobe.d用於測試,並在工作時放入文件。假設環回是hw:3,*,*.

在虛擬聲卡的輸入端,您需要類似的東西

dmix "main_in" --> 插頭 (slave.channels = 1) --> hw:3,0,0

然後你就可以aplay -D main_in sound.wav運行

alsaloop -C hw:0 -P main_in

將其連接到音訊擷取器。

在虛擬聲卡的輸出端,類似

硬體:3,1,0 --> dsnoop“main_out”

並再次在本地音訊輸出上監視它

alsaloop -C main_out -P local_audio_out

然後您可以darkice直接在 上執行 VU 表main_out。 BTW,arecord -D main_out -d 0 -vv /dev/null是一個很好的測試 VU 計。

請閱讀上面鏈接中有關語法的詳細信息,我不打算嘗試這個。箭頭-->表示插件的主從關係。延遲可能會很可怕,因為一次環回會穿過核心空間和大量用戶空間應用程式。

如果 Pulseaudio 不適合您,另一個選擇是jack,但我沒有配置它的經驗。

相關內容