Un complemento de supresión de ruido en tiempo real para voz basado en RNNoise de Xiph. Más información sobre la biblioteca base.
El complemento está destinado a suprimir una amplia gama de orígenes de ruido (del documento original): ventiladores de computadora, oficina, multitud, avión, automóvil, tren, construcción.
En mis pruebas, siempre se suprime el ruido de fondo leve, los sonidos fuertes, como el clic de un teclado mecánico, se suprimen mientras no hay voz, sin embargo, solo se reduce el volumen cuando hay voz presente.
Tenga en cuenta que este complemento no puede mejorar la calidad de la voz con un micrófono defectuoso, incluso podría empeorar las cosas al clasificar erróneamente la voz como un ruido que reduciría la ya no tan buena calidad de voz.
El complemento funciona con uno o más canales, entrada de audio de 16 bits y 48000 Hz.
❗ ❗ ❗ NO utilice ninguna otra frecuencia de muestreo, utilice SÓLO 48000 Hz, asegúrese de que su fuente de audio sea de 48000 Hz y fuercela a que sea de 48000 Hz si no es así.
Hay una GUI minimalista con todos los parámetros y estadísticas de diagnóstico:
Últimos lanzamientos
VAD Threshold (%)
: si la probabilidad de que el sonido sea una voz es inferior a este umbral, se silenciará. En la mayoría de los casos, el umbral entre 85% y 95% estaría bien. Sin el VAD, es posible que algunos ruidos fuertes aún sean un poco audibles cuando no hay voz.VAD Grace Period (ms)
: durante cuánto tiempo después de la última detección de voz no se silenciará la salida. Esto ayuda cuando se cortan los finales de palabras/oraciones.Retroactive VAD Grace Period (ms)
: similar al VAD Grace Period (ms)
pero para inicios de palabras/oraciones.Para verificar o cambiar la configuración del micrófono, vaya a "Dispositivos de grabación" -> "Grabación" -> "Propiedades" del micrófono de destino -> "Avanzado".
Para habilitar el complemento en Equalizer APO, seleccione "Complementos" -> "Complemento VST" y especifique la DLL del complemento.
Consulte la guía detallada proporcionada por @bssankaran.
Desde la versión 0.3.45
PipeWire utiliza la configuración de archivos divididos, lo que hace que sea extremadamente fácil configurar complementos y modificar la configuración.
Para una versión anterior de PipeWire, tendría que copiar /usr/share/pipewire/pipewire.conf
en ~/.config/pipewire/pipewire.conf
y luego agregar la siguiente configuración a context.modules
ya existente.
Para PipeWire >= 0.3.45
deberías:
~/.config/pipewire/pipewire.conf.d/
~/.config/pipewire/pipewire.conf.d/99-input-denoising.conf
context.modules = [
{ name = libpipewire-module-filter-chain
args = {
node.description = "Noise Canceling source"
media.name = "Noise Canceling source"
filter.graph = {
nodes = [
{
type = ladspa
name = rnnoise
plugin = /path/to/librnnoise_ladspa.so
label = noise_suppressor_mono
control = {
"VAD Threshold (%)" = 50.0
"VAD Grace Period (ms)" = 200
"Retroactive VAD Grace (ms)" = 0
}
}
]
}
capture.props = {
node.name = "capture.rnnoise_source"
node.passive = true
audio.rate = 48000
}
playback.props = {
node.name = "rnnoise_source"
media.class = Audio/Source
audio.rate = 48000
}
}
}
]
/path/to/librnnoise_ladspa.so
a la ruta real de la bibliotecanoise_suppressor_mono
-> noise_suppressor_stereo
. Incluso si su micrófono dice que es estéreo, probablemente no necesite salida estéreo. También consumiría el doble de recursos.VAD Threshold (%)
, ...systemctl restart --user pipewire.service
Noise Canceling source
como dispositivo de entradaPara obtener más información, consulte la documentación de PipeWire sobre cadenas de filtros.
Solución de problemas:
Soluciones alternativas para la configuración de PipeWire/PulseAudio que también utilizan RNNoise:
TLDR: use PipeWire... o siga las instrucciones a continuación.
La idea es:
sink_master
) y tiene un receptor de entrada (parámetro sink_name
, se creará el receptor).source
) al receptor de entrada del complemento ( sink
) con 1 canal.Por ejemplo, para crear un nuevo dispositivo mono con audio con reducción de ruido desde su micrófono, primero busque el nombre de su micrófono usando, por ejemplo:
pactl list sources short
Luego, crea el nuevo dispositivo usando:
pacmd load-module module-null-sink sink_name=mic_denoised_out rate=48000
pacmd load-module module-ladspa-sink sink_name=mic_raw_in sink_master=mic_denoised_out label=noise_suppressor_mono plugin=/path/to/librnnoise_ladspa.so control=50,20,0,0,0
pacmd load-module module-loopback source= < your_mic_name > sink=mic_raw_in channels=1 source_dont_move=true sink_dont_move=true
Esto debe ejecutarse cada vez que se inicia PulseAudio. Puedes automatizar esto creando un archivo en ~/.config/pulse/default.pa
con el contenido:
.include /etc/pulse/default.pa
load-module module-null-sink sink_name=mic_denoised_out rate=48000
load-module module-ladspa-sink sink_name=mic_raw_in sink_master=mic_denoised_out label=noise_suppressor_mono plugin=/path/to/librnnoise_ladspa.so control=50,200,0,0,0
load-module module-loopback source=your_mic_name sink=mic_raw_in channels=1 source_dont_move=true sink_dont_move=true
set-default-source mic_denoised_out.monitor
El orden de las configuraciones en control=50,200,0,0,0
es: VAD Threshold (%)
, VAD Grace Period (ms)
, Retroactive VAD Grace Period (ms)
, Placeholder1
, Placeholder2
.
Si está absolutamente seguro de que desea una entrada estéreo, utilice estas opciones:
label=noise_suppressor_stereo
channels=2
Si tiene problemas con el audio entrecortado o una latencia alta o que aumenta periódicamente, agregar latency_msec=1
al loopback podría ser útil:
load-module module-loopback source=your_mic_name sink=mic_raw_in channels=1 source_dont_move=true sink_dont_move=true latency_msec=1
pacmd load-module module-remap-source source_name=denoised master=mic_denoised_out.monitor channels=1
Es posible que aún necesite configurar la entrada correcta para la aplicación; esto se puede hacer en el panel del mezclador de audio (si tiene uno) en la pestaña "Grabación", donde debe configurar el "Monitor de salida nula" como fuente.
Lectura adicional:
TODO, ¡las contribuciones son bienvenidas!
El complemento se prueba con:
No estoy asociado con el trabajo original de RNNoise y NO tengo ningún conocimiento de las redes neuronales recurrentes en las que se basa.
Las dependencias externas se venden a través de git-subrepo. De modo que no es necesario utilizar submódulos y parchear los subrepos es fácil (por el momento tenemos varios parches para JUCE).
¡Las mejoras son bienvenidas! Sin embargo, si desea contribuir con algo importante, primero abra una edición.
Compilando para x64:
cmake -Bbuild-x64 -H. -GNinja -DCMAKE_BUILD_TYPE=Release
ninja -C build-x64
Compilando para x32:
cmake -D CMAKE_CXX_FLAGS=-m32 -D CMAKE_C_FLAGS=-m32 -Bbuild-x32 -H. -GNinja -DCMAKE_BUILD_TYPE=Release
ninja -C build-x32
Compilación cruzada para Windows x64 (las compilaciones de MinGW están fallando en este momento debido a ciertas incompatibilidades en JUCE):
cmake -Bbuild-mingw64 -H. -GNinja -DCMAKE_TOOLCHAIN_FILE=toolchains/toolchain-mingw64.cmake -DCMAKE_BUILD_TYPE=Release
ninja -C build-mingw64
De forma predeterminada, se están creando todos los complementos compatibles con una plataforma. Puede desactivar deliberadamente los complementos con las siguientes opciones de CMake:
BUILD_LADSPA_PLUGIN
BUILD_VST_PLUGIN
BUILD_VST3_PLUGIN
BUILD_LV2_PLUGIN
BUILD_AU_PLUGIN
(solo macOS)BUILD_AUV3_PLUGIN
(solo macOS)Por ejemplo:
cmake -DBUILD_VST_PLUGIN=OFF -DBUILD_LV2_PLUGIN=OFF
Este proyecto tiene la licencia pública general GNU v3.0; consulte el archivo de LICENCIA para obtener más detalles.
Bibliotecas utilizadas: