答案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
,但我沒有配置它的經驗。