Un plugin de suppression du bruit en temps réel pour la voix basé sur RNNoise de Xiph. Plus d'informations sur la bibliothèque de base.
Le plugin est destiné à supprimer un large éventail d'origines de bruit (à partir du papier original) : ventilateurs d'ordinateur, bureau, foule, avion, voiture, train, construction.
D'après mes tests, les bruits de fond légers sont toujours supprimés, les sons forts, comme les clics d'un clavier mécanique, sont supprimés lorsqu'il n'y a pas de voix, mais leur volume est réduit uniquement lorsque la voix est présente.
Veuillez noter que ce plugin ne pourrait pas améliorer la qualité de la voix avec un mauvais microphone, il pourrait même aggraver les choses en classant à tort la voix comme un bruit, ce qui réduirait une qualité de voix déjà pas si bonne.
Le plugin fonctionne avec un ou plusieurs canaux, entrée audio 16 bits, 48 000 Hz.
❗ ❗ ❗ N'utilisez AUCUNE autre fréquence d'échantillonnage, utilisez UNIQUEMENT 48 000 Hz, assurez-vous que votre source audio est à 48 000 Hz et forcez-la à 48 000 Hz si ce n'est pas le cas.
Il existe une interface graphique minimaliste avec tous les paramètres et statistiques de diagnostic :
Dernières versions
VAD Threshold (%)
- si la probabilité que le son soit une voix est inférieure à ce seuil - il sera réduit au silence. Dans la plupart des cas, un seuil compris entre 85 et 95 % conviendrait. Sans le VAD, certains bruits forts peuvent encore être un peu audibles en l'absence de voix.VAD Grace Period (ms)
- pendant combien de temps après la dernière détection vocale, la sortie ne sera pas réduite au silence. Cela est utile lorsque les fins de mots/phrases sont coupées.Retroactive VAD Grace Period (ms)
- similaire à VAD Grace Period (ms)
mais pour les débuts de mots/phrases.Pour vérifier ou modifier les paramètres du micro, allez dans « Périphériques d'enregistrement » -> « Enregistrement » -> « Propriétés » du micro cible -> « Avancé ».
Pour activer le plugin dans Equalizer APO, sélectionnez "Plugins" -> "VST Plugin" et spécifiez la DLL du plugin.
Voir le guide détaillé fourni par @bssankaran.
Depuis la version 0.3.45
PipeWire utilise la configuration en fichiers divisés, ce qui rend extrêmement facile la configuration des plugins et la modification de la configuration.
Pour les anciennes versions de PipeWire, vous devrez copier /usr/share/pipewire/pipewire.conf
dans ~/.config/pipewire/pipewire.conf
puis ajouter la configuration ci-dessous aux context.modules
déjà existants.
Pour PipeWire >= 0.3.45
vous devez :
~/.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
par le chemin réel de la bibliothèquenoise_suppressor_mono
-> noise_suppressor_stereo
. Même si votre micro indique qu'il est stéréo, vous n'avez probablement pas besoin d'une sortie stéréo. Cela consommerait également 2x ressources.VAD Threshold (%)
, ...systemctl restart --user pipewire.service
Noise Canceling source
comme périphérique d'entrée.Pour plus d'informations, consultez la documentation PipeWire sur les chaînes de filtres.
Dépannage :
Solutions alternatives pour la configuration PipeWire/PulseAudio qui utilisent également RNNoise :
TLDR : utilisez PipeWire... ou suivez les instructions ci-dessous.
L'idée est :
sink_master
) et qui a un récepteur d'entrée (paramètre sink_name
, le récepteur sera créé).source
) au récepteur d'entrée du plugin ( sink
) avec 1 canal.Par exemple, pour créer un nouveau périphérique mono avec un son à réduction de bruit provenant de votre microphone, recherchez d'abord le nom de votre micro en utilisant par exemple :
pactl list sources short
Ensuite, créez le nouvel appareil en utilisant :
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
Cela doit être exécuté à chaque lancement de PulseAudio. Vous pouvez automatiser cela en créant un fichier dans ~/.config/pulse/default.pa
avec le contenu :
.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
L'ordre des paramètres dans control=50,200,0,0,0
est : VAD Threshold (%)
, VAD Grace Period (ms)
, Retroactive VAD Grace Period (ms)
, Placeholder1
, Placeholder2
.
Si vous êtes absolument sûr de vouloir une entrée stéréo, utilisez plutôt ces options :
label=noise_suppressor_stereo
channels=2
Si vous rencontrez des problèmes de crépitement audio ou de latence élevée/augmentante périodiquement, l'ajout latency_msec=1
au bouclage peut aider :
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
Vous devrez peut-être toujours définir l'entrée correcte pour l'application, cela peut être fait dans le panneau de mixage audio (si vous en avez un) dans l'onglet « Enregistrement » où vous devez définir « Moniteur de sortie nulle » comme source.
Lectures complémentaires :
À FAIRE, les contributions sont les bienvenues !
Le plugin est testé avec :
Je ne suis pas associé au travail original de RNNoise et je n'ai AUCUNE compréhension des réseaux neuronaux récurrents sur lesquels il est basé.
Les dépendances externes sont vendues via git-subrepo. Il n'est donc pas nécessaire d'utiliser des sous-modules et l'application de correctifs aux sous-dépôts est facile (pour le moment, nous avons plusieurs correctifs pour JUCE).
Les améliorations sont les bienvenues ! Cependant, si vous souhaitez apporter une contribution importante, ouvrez d'abord un problème.
Compilation pour x64 :
cmake -Bbuild-x64 -H. -GNinja -DCMAKE_BUILD_TYPE=Release
ninja -C build-x64
Compilation pour x32 :
cmake -D CMAKE_CXX_FLAGS=-m32 -D CMAKE_C_FLAGS=-m32 -Bbuild-x32 -H. -GNinja -DCMAKE_BUILD_TYPE=Release
ninja -C build-x32
Compilation croisée pour Windows x64 (les builds MinGW échouent actuellement en raison de certaines incompatibilités dans JUCE) :
cmake -Bbuild-mingw64 -H. -GNinja -DCMAKE_TOOLCHAIN_FILE=toolchains/toolchain-mingw64.cmake -DCMAKE_BUILD_TYPE=Release
ninja -C build-mingw64
Par défaut, tous les plugins pris en charge pour une plateforme sont en cours de construction. Vous pouvez délibérément désactiver les plugins avec les indicateurs CMake suivants :
BUILD_LADSPA_PLUGIN
BUILD_VST_PLUGIN
BUILD_VST3_PLUGIN
BUILD_LV2_PLUGIN
BUILD_AU_PLUGIN
(macOS uniquement)BUILD_AUV3_PLUGIN
(macOS uniquement)Par exemple:
cmake -DBUILD_VST_PLUGIN=OFF -DBUILD_LV2_PLUGIN=OFF
Ce projet est sous licence GNU General Public License v3.0 - voir le fichier LICENSE pour plus de détails.
Bibliothèques utilisées :