A maneira mais fácil é usar o Pulseaudio. (Você pode fazer isso com o ALSA, mas será difícil configurar.)
Tudo o que produz som é automaticamente misturado na saída atual ("sink" em termos de Pulseaudio), então você não precisa se preocupar com a mixagem. Você pode controlar volumes com pavucontrol
e lembra o último volume pelo nome do aplicativo. Você pode usar paplay
para reproduzir arquivos wav a partir da linha de comando, mas qualquer outro audioplayer também fará isso.
A conversão para mono será feita automaticamente se seu coletor for mono. Se você não puder configurar o coletor RaspPi local para isso (não sei, não possuo um RaspPi), você pode adicionar um coletor "pseudo" com
pactl load-module module-null-sink sink_name=whatever
ou se você precisar remapear no Pulseaudio, module-remap-sink
(veja abaixo, ainda não tentei fazer isso).
Esse coletor ou o coletor RaspPi local terá uma fonte .monitor
associada que você pode usar para distribuir para o icecast, etc.
Você pode configurar um feed permanente da entrada hw: 1 nos seus sumidouros escolhidos com
pacmd load-module module-loopback source="alsa_input.name_of_hw_1" sink="whatever_or_local_sink"
Você pode listar os nomes dos coletores disponíveis com
pacmd list-sinks | grep name:
Como argumentos, use o nome sem os colchetes angulares.
Eu acho que isso é o básico. Leia sobre os módulos disponíveis do Pulseaudio e pacmd help
dirá o que você pode faça na linha de comando, se você não quiser usar pavucontrol
.
Editar para ALSA :
Primeiro, leia sobre os plug-ins disponíveis. Você precisará de uma "placa de som virtual" para rotear o áudio para o darkice, etc. Isso é um módulo do kernel, então faça algo como
sudo modprobe snd-aloop pcm_substreams=2
para testar e colocar um arquivo em /etc/modprobe.d
quando ele funcionar. Diga que o loopback é hw:3,*,*
.
No lado da entrada da placa de som virtual, você precisará de algo como
dmix "main_in" --> plug (slave.channels = 1) --> hw:3,0,0
Então você pode aplay -D main_in sound.wav
e executar
alsaloop -C hw:0 -P main_in
para conectá-lo ao gravador de áudio.
No lado da saída da placa de som virtual, algo como
hw:3,1,0 --> dsnoop "main_out"
e para monitorá-lo na saída de áudio local, novamente
alsaloop -C main_out -P local_audio_out
Você pode executar darkice
e o medidor VU diretamente em main_out
. BTW, arecord -D main_out -d 0 -vv /dev/null
é um bom VU-meter para testes.
Leia os detalhes sobre a sintaxe no link acima, não vou tentar fazer isso. As -->
setas indicam as relações mestre / escravo do plugin. A latência provavelmente será horrível, com um loopback por meio do espaço do kernel e muitos aplicativos de espaço do usuário.
Se o Pulseaudio não funcionar para você, uma alternativa é jack
, mas não tenho experiência em configurá-lo.