¿Cómo monitoreo la entrada del micrófono?

¿Cómo monitoreo la entrada del micrófono?

¿Cómo superviso la entrada del micrófono en Linux?

Nota: monitorear no es lo mismo que grabar y reproducir lo grabado.


En Windows, puedo escuchar mi propio micrófono de las siguientes maneras:

  1. Con algún programa que capture mi micrófono y lo envíe a mi tarjeta de sonido para reproducirlo. Por ejemplo, con ffplayel comando

    ffplay -f dshow -i audio="Front panel mic (Realtek High Definition Audio)"
    

    Producirá un retraso significativo, de hasta varios segundos.

  2. Con la opción "Escuchar" de las propiedades del dispositivo de entrada

    ingrese la descripción de la imagen aquí

    Producirá un retraso menor, hasta un segundo.

  3. Con widget de tarjeta de sonido

    ingrese la descripción de la imagen aquí

    Producirá CERO retraso. Creo que esto hará que el sonido de entrada pase a la salida sin salir de la tarjeta de sonido, pero no estoy seguro.

Necesito la opción n.° 2 en la línea de comando de Linux.

Respuesta1

Deberías poder monitorear tu micrófono con PulseAudiomódulo de bucle invertido. El módulo debería crear automáticamente salidas de bucle invertido para los dispositivos de entrada disponibles. Para cargar el módulo manualmente

pactl load-module module-loopback

Para que el cambio sea persistente, agregue /etc/pulse/default.pacon

load-module module-loopback

Respuesta2

Si tiene entrada y salida analógicas, le recomendaría simplemente usar pavucontrol(Control de volumen PulseAudio) para enrutar el audio de entrada a la salida en el mezclador. Sin embargo, si tiene, por ejemplo, un micrófono USB, el audio no se puede simplemente mezclar, sino que algún software debe grabar el audio y luego reproducirlo para generar un flujo de salida. Y dependiendo de su hardware, esta grabación y reproducción puede causar cierta (o incluso alta) latencia.

Podrías probar esto:

Primero obtenga los nombres de las entradas y salidas que desea utilizar:

$ pactl list short | egrep "alsa_(input|output)" | fgrep -v ".monitor"

Para mí, los resultados se ven así:

0   alsa_output.pci-0000_00_1b.0.analog-stereo  module-alsa-card.c  s16le 2ch 44100Hz   RUNNING
0   alsa_input.usb-Microsoft_Microsoft___LifeCam_HD-5000-02.analog-mono module-alsa-card.c  s16le 1ch 44100Hz   SUSPENDED

lo que significa que se llama a mi dispositivo de salida alsa_output.pci-0000_00_1b.0.analog-stereoy se llama a mi cámara web/micrófono USB alsa_input.usb-Microsoft_Microsoft___LifeCam_HD-5000-02.analog-mono.

Ahora puedo grabar el micrófono USB y enviarlo a la salida de audio de esta manera:

$ pacat -r --latency-msec=1 -d alsa_input.usb-Microsoft_Microsoft___LifeCam_HD-5000-02.analog-mono | pacat -p --latency-msec=2 -d alsa_output.pci-0000_00_1b.0.analog-stereo

Es decir, un pacatproceso lee desde el micrófono y solicita la pila de audio para intentar llevar la latencia a 1 ms o 0,001 segundos. Y otro pacatproceso escribe el audio en mi dispositivo de salida e intenta llevar la latencia a 2 ms o 0,002 segundos. También puedes intentar reducir la latencia de salida a 1 ms, pero al menos para mi hardware bastante antiguo, el audio se corta con demasiada facilidad en ese caso.

Sin embargo, si mantengo esta combinación de salida de grabación y reproducción ejecutándose durante períodos prolongados, parece que la latencia aumenta lentamente con el tiempo. Supongo que el reloj de mi micrófono USB es ligeramente más rápido que el reloj de mi audio de salida, lo que hace que el búfer aumente lentamente. No conozco una buena manera de permitir que esos procesos pactl omitan el audio para mantener la salida en tiempo real. Supongo que necesitaría escribir una aplicación personalizada para eso.

Para el pacat ... | pacatcanal anterior, la latencia en el mejor de los casos para mi hardware parece ser de alrededor de 6 ms desde las ondas de sonido que golpean el micrófono hasta las ondas de sonido que se emiten desde los parlantes de salida mientras uso el kernel de Linux con PREEMPT habilitado (por ejemplo, linux-lowlatencykernel de Ubuntu).

información relacionada