¿Eliminación de ruido en tiempo real con PulseAudio?

66

¿Es posible hacer la eliminación de ruido en tiempo real con PulseAudio, por lo que la salida de sonido que sale es más suave?

Vadim Peretokin
fuente
probablemente sea posible, aunque sería intensivo y requeriría que alguien escribiera un filtro para ello.
RolandiXor
2
@Vadi: agregué una respuesta que podría ayudarte si todavía estás usando Ubuntu o cualquier otra distribución basada en PulseAudio. Espero que funcione para ti amigo.
Luis Alvarado
Esta publicación parece estar haciendo algo similar
akhmed

Respuestas:

75

Módulo Pulseaudio module-echo-cancel

Comencé a leer mucho sobre PulseAudio y las opciones "ocultas" que tenía para poder encontrar una similar a esta pregunta. El que encontré fue el módulo de cancelación de ruido, que es uno que reduce drásticamente cualquier ruido estático en el micrófono e incluso MUCHO ruido de fondo, básicamente brindándole la ventaja de grabar solo su propia voz con excelente calidad (para grabación de audio por ejemplo). Para hacer esto, siga estos pasos:

  1. sudo nano /etc/pulse/default.pa

  2. Agregue la siguiente línea en cualquier parte del archivo, pero le recomiendo casi al final donde encontrará un comentario sobre el material de cancelación de eco (~ línea 140):

    load-module module-echo-cancel
    
  3. Vuelva a cargar PulseAudio ( pulseaudio -k) o simplemente reinicie la computadora. Debería poder seleccionar la nueva opción de Cancelación de ruido en la sección Dispositivo de entrada:

    captura de pantalla

Puede encontrar más información al respecto en la página del módulo de cancelación de eco

Establecer entrada como predeterminada

Si desea establecer como predeterminado el dispositivo de cancelación de eco, simplemente convierta la línea anterior en:

load-module module-echo-cancel source_name=logitechsource

y luego en la parte inferior del archivo agregue

set-default-source logitechsource

En este caso, llamé a la fuente logitechsource, pero puede nombrarla como desee y simplemente reiniciar pulseaudio.

Renombrar dispositivo

Por último, si no desea un nombre súper largo en la Configuración de sonido (cuando desea seleccionar un dispositivo de entrada / salida). Mi sugerencia es cambiar el nombre del dispositivo de entrada de esta manera:

load-module module-echo-cancel source_name=logitechsource source_properties=device.description=LogitechHD

Y nuevamente, reiniciando pulseaudio. El resultado final se ve así:

captura de pantalla

Luis Alvarado
fuente
66
Fácil de hacer y no parece romper cosas, ¡gracias!
Vadim Peretokin
2
Excelente solución, salió de la caja para mí, gracias
rancho
1
¡Esto redujo la mayor parte del ruido del ventilador de mi computadora portátil y mis grabaciones suenan mucho mejor!
PJ Brunet
1
Holy Moly: obtengo resultados sorprendentes incluso con un micrófono de solapa de $ 5 que obtuve de eBay. No es de calidad de estudio, pero ahora está perfectamente bien para llamadas VOIP.
Raymond Morgan
2
Si desea evitar que el módulo de eco ajuste el control deslizante de volumen automáticamente, puede configurarlo load-module module-echo-cancel aec_method=webrtc aec_args="analog_gain_control=0 digital_gain_control=1"según gitlab.freedesktop.org/pulseaudio/pulseaudio/issues/224
joelostblom
16

Esta es una vieja pregunta, pero tuve el mismo problema y después de buscar en Google (donde encontré principalmente personas que estaban de acuerdo en que no era posible) y leer algunas páginas de manual, ahora he desarrollado una solución basada en la idea del usuario 2330377.

Primero debe crear un perfil de ruido para SoX. Simplemente use cualquier programa de grabación de audio para grabar unos segundos de ruido, luego cden el directorio donde lo guardó y haga sox noise.wav -n noiseprof noise.prof.

Luego, debe crear un dispositivo ALSA loopback:

sudo modprobe snd_aloop

Esto es necesario porque pulseaudio, a diferencia de Jack, no puede conectar directamente el software de audio; Por lo tanto, utilizaremos el dispositivo loopback como proxy.

Ahora debe comenzar pamany encontrar los nombres tanto de su micrófono (u otro dispositivo de grabación) como del dispositivo de bucle invertido que acabamos de crear. Una vez que se encuentren, puede ejecutar el siguiente comando para comenzar a grabar sonido desde su micrófono, pasarlo a través de SoX y luego reproducirlo en el dispositivo de bucle invertido:

pacat -r -d alsa_input.pci-0000_00_14.2.analog-stereo --latency=1msec|sox -b 16 -e signed -c 2 -r 44100 -t raw - -b 16 -e signed -c 2 -r 44100 -t raw - noisered noise.prof 0.2|pacat -p -d alsa_output.2.analog-stereo --latency=1msec

(Cuando necesite sustituir los nombres de dispositivo correctos por los parámetros -d: el dispositivo de entrada para la primera invocación de pacat y la salida del dispositivo de bucle de retorno para la segunda).

Ahí lo tienes, casi listo! Como último paso, comience a grabar sonido con la aplicación que elija, luego inicie pavucontrol, cambie a la pestaña "Grabación" y configure el dispositivo de audio utilizado para la grabación (que se muestra como el botón gris a la derecha) en "Monitor de audio de bucle invertido". Dispositivo". ¡Ahora debería tener una grabación clara y sin ruidos!

cemper93
fuente
1
Este script simplifica el proceso gist.github.com/tiagoengel/334573f7c3b98c27356297d6b1996336
Thomas
2

La investigación muestra que no existe una forma conocida de hacer filtros de reducción de ruido en tiempo real con ningún subsistema Linux. Algunos sitios web apuntan a hardware que puede comprar, que debería ser mucho mejor que hacer un filtro de software.

Alternativamente, si esto es para una grabación, puede pasar el sonido a través de Audacity y usar el filtro de ruido allí.

Martin Owens -doctormo-
fuente
Lástima, me pregunto por qué no. Gracias por investigar
Vadim Peretokin
¡Seguro! No hay ninguna información en la página de documentación del módulo sobre cancelación de ruido. Solo hay un algoritmo AEC (cancelación de eco acústico) en el interior module-echo-cancel, que tiene varias implementaciones, como webrtc | Speex.
vskubriev
1

Aquí está, al menos, la forma del tono, implementa webrtc-aec en

http://wiki.gentoo.org/wiki/PulseAudio

webrtc-aec Sí Utiliza la biblioteca de procesamiento de audio webrtc.org para mejorar en gran medida las llamadas VoIP en aplicaciones que lo soportan mediante la cancelación de eco acústico, control de ganancia analógica, supresión de ruido y otros procesamientos.

Aquí hay un documento con fecha de 2013 sobre el tema (eliminación de ruido con pulseaudio no webrtc-aec específicamente) http://lac.linuxaudio.org/2013/papers/37.pdf

"Hemos presentado los primeros resultados de una solución de reducción de ruido / eco multicanal construida sobre PulseAudio y motivamos las decisiones de diseño. El trabajo ha resultado en una serie de mejoras en el marco de procesamiento de señal y cancelación de eco de PulseAudio, que han sido contribuyó durante el ciclo de desarrollo de la versión 3.0 / 4.0 y debería facilitar futuras soluciones integradas de audio Linux. El trabajo adicional incluye la optimización del código para la mezcla de flujo de audio, métodos de muestreo más eficientes y la implementación de un AEC eficiente en la tubería de procesamiento multicanal ".

usuario2330377
fuente
Lo que tenía en mente para un rápido uso era ajustar un perfil de ruido y eliminar el ruido en tiempo real usando sox y luego reproducir la salida de audio que luego puedo usar como flujo de entrada en pulso. Creo que pulse es capaz de crear y redirigir flujos de entrada y salida de esta manera. Es decir, el flujo de reproducción se puede redirigir como flujo de entrada a otra aplicación y el flujo de reproducción es por aplicación, no por dispositivo, por lo que no es necesario enrutarlo al hardware del dispositivo.
user2330377
Estoy probando esto usando pacmd para enumerar dispositivos pulseaudio, pacat para grabar y reproducir desde ellos y sox para hacer los efectos en tiempo real en la transmisión.
user2330377
¿Estaría interesado en publicar los guiones para ello?
Vadim Peretokin
0

No hay ninguna información en la página de documentación del módulo sobre cancelación de ruido. Solo hay un algoritmo AEC (Cancelación de eco acústico) dentro de module-echo-cancel, que tiene varias implementaciones, como webrtc | Speex.

Por lo tanto, debe comprar auriculares con micrófono con función de cancelación de ruido integrada tanto como sea posible.

Cuando probé la grabación de voz en ubuntu, encontré algunas cualidades particulares:

  • Skype, Telegram utiliza la entrada sin formato del dispositivo predeterminado (en mi caso, conectores de micrófono frontal y posterior). Si necesita cancelar un ruido en estas aplicaciones, debe comprar auriculares y micrófonos solo con la función integrada de cancelación de ruido

  • Si necesita usar llamadas de voz en el navegador, debe tener en cuenta que los navegadores tienen sus propias implementaciones de algoritmos de procesamiento de voz, por ejemplo, WebRTC.

  • También las aplicaciones web (sitios como talky, hangouts, seem.in, etc.) pueden tener sus propias implementaciones de algoritmos de procesamiento de voz, a pesar del hecho de que pueden basarse en el análisis de hangouts webrtc

vskubriev
fuente