Instrucciones para mezclar dos transmisiones de audio

Instrucciones para mezclar dos transmisiones de audio

Para una configuración de transmisión, me gustaría mezclar audio de un dispositivo de entrada con audio de un archivo .wav. El archivo .wav contiene una música de introducción, espera o salida que me gustaría agregar a la música en algún momento durante la transmisión.

El objetivo es la siguiente configuración: ingrese la descripción de la imagen aquí

Se necesitan varios pasos:

  1. agregar/mezclar dos transmisiones
  2. convertir a mono (o tal vez esto debería haberse hecho primero)
  3. dividir las transmisiones para una transmisión de transmisión y un medidor VU
  4. enviar la transmisión a la salida de audio local

Estoy bastante seguro de que esto debe ser posible, pero todavía no pude encontrar ninguna solución en Internet. Investigar en .asoundrc de alsa no arrojó ningún resultado todavía. Parece que alsa dmix hace algunas mezclas, pero no es lo que quiero aquí...

Realmente no sé por dónde empezar.

¿Alguien puede arrojar algo de luz sobre esto? ¡Una solución parcial también estaría bien!

Respuesta1

La forma más sencilla es utilizar Pulseaudio. (Puedes hacerlo con ALSA, pero será complicado configurarlo).

Todo lo que produce sonido se mezcla automáticamente en la salida actual ("sumidero" en términos de Pulseaudio), por lo que no necesita preocuparse por la mezcla. Puede controlar los volúmenes con pavucontroly recuerda el último volumen por nombre de la aplicación. Puedes usarlo paplaypara reproducir archivos wav desde la línea de comandos, pero también servirá cualquier otro reproductor de audio.

La conversión a mono se realizará automáticamente si su disipador es mono. Si no puede configurar el sumidero RaspPi local para eso (no lo sé, no tengo un RaspPi), puede agregar un sumidero "pseudo" con

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

o si resulta que necesitas reasignar en Pulseaudio module-remap-sink(ver más abajo, todavía no lo he probado).

Este receptor o el receptor RaspPi local tendrá una .monitorfuente asociada que puede usar para distribuirlo a icecast, etc.

Puede configurar una alimentación permanente de la entrada hw:1 en los disipadores elegidos con

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

Puede enumerar los nombres de receptores disponibles con

pacmd list-sinks | grep name:

Como argumentos, utilice el nombre sin los corchetes angulares.

Creo que eso es lo básico. Lea sobre Pulseaudio disponiblemódulos, y pacmd helple dirá qué puede hacer desde la línea de comandos, si no desea utilizar pavucontrol.

EditarparaALSA:

Primero, lea sobre los disponibles.complementos. Necesitará una "tarjeta de sonido virtual" para enrutar el audio a darkice, etc. Ese es un módulo del kernel, así que haga algo como

sudo modprobe snd-aloop pcm_substreams=2

para probar y colocar un archivo /etc/modprobe.dcuando funcione. Digamos que el loopback es hw:3,*,*.

En el lado de entrada de la tarjeta de sonido virtual, necesitarás algo como

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

Entonces puedes aplay -D main_in sound.wavy corre.

alsaloop -C hw:0 -P main_in

para conectarlo al capturador de audio.

En el lado de salida de la tarjeta de sonido virtual, algo así como

hw:3,1,0 --> dsnoop "salida_principal"

y monitorearlo en la salida de audio local, nuevamente

alsaloop -C main_out -P local_audio_out

Luego puede ejecutar darkicey el medidor VU directamente en main_out. Por cierto, arecord -D main_out -d 0 -vv /dev/nulles un buen vúmetro para realizar pruebas.

Lea los detalles sobre la sintaxis en el enlace de arriba, no voy a probar esto. Las -->flechas indican las relaciones maestro/esclavo del complemento. La latencia probablemente será horrible, con un bucle invertido a través del espacio del kernel y muchas aplicaciones en el espacio de usuario.

Si Pulseaudio no te funciona, una alternativa es jack, pero no tengo experiencia en configurarlo.

información relacionada