Suppression de bruit avec DeepFilterNet
DeepFilterNet est un logiciel capable de supprimer les bruits de votre micro pour ne laisser passer que la voix. Dans son exemple, le développeur a un aspirateur allumé à côté de lui et on ne l'entend pas. Personnellement, j'ai testé avec une radio à deux mètres de moi qui diffuse de la musique : On ne l'entend pas dans le micro.
DeepFilterNet est fourni sous forme d'application (pour filtrer un fichier .wav) et de plugin PipeWire. Il nécessite donc PipeWire installé dans votre système si vous voulez filtrer votre micro. Si vous n'avez que PulseAudio, cela ne marchera pas. Vous trouverez donc aussi ci-dessous aussi les instructions (pour Ubuntu/Mint) pour passer de PulseAudio à PipeWire.
Installation de PipeWire
Si vous n'avez pas PipeWire, voici les instructions pour passer de PulseAudio à PipeWire pour Ubuntu (source)
- Ajoutez les dépôts ppa PipeWire :
sudo add-apt-repository ppa:pipewire-debian/pipewire-upstream
- Installation :
sudo apt update sudo apt install pipewire pipewire-audio-client-libraries
- Certains paquets peuvent être nécessaire si vous utilisez de l'audio via Blutooth, GStreamer ou JACK:
sudo apt install gstreamer1.0-pipewire libpipewire-0.3-{0,dev,modules} libspa-0.2-{bluetooth,dev,jack,modules} pipewire{,-{audio-client-libraries,pulse,media-session,bin,locales,tests}}
- Rechargez les services:
systemctl --user daemon-reload
- Désactivez PulseAudio :
systemctl --user --now disable pulseaudio.service pulseaudio.socket
- Activez PipeWire :
systemctl --user --now enable pipewire pipewire-pulse
- Vérifiez que l'audio passe bien par PipeWire:
pactl info
Vous devriez voir:
Nom du serveur : PulseAudio (on PipeWire 0.3.71)
Mais ce n'est sans doute pas suffisant. PipeWire a besoin de tourner avec une priorité CPU plus élevée, mais les règles sécurité du système l'en empêchent peut-être. Pour vérifier:
systemctl --user status pipewire pipewire-session-manager
Vous devez voir les deux services en status active (running). Cependant, si vous avez les erreurs suivantes:
pipewire[1532]: mod.rt: RTKit error: org.freedesktop.DBus.Error.AccessDenied pipewire[1532]: mod.rt: could not set nice-level to -11: Permission non accordée pipewire[1532]: mod.rt: RTKit error: org.freedesktop.DBus.Error.AccessDenied pipewire[1532]: mod.rt: could not make thread 1637 realtime using RTKit: Permission non accordée
Alors il faut assouplir les règles PolKit. Ce n'est sans doute pas très beau, mais ça fait le job: Modifiez le fichier /usr/share/polkit-1/actions/org.freedesktop.RealtimeKit1.policy
:
--- org.freedesktop.RealtimeKit1.policy.old 2023-06-07 09:43:10.009017345 +0200 +++ org.freedesktop.RealtimeKit1.policy 2023-06-07 09:43:32.673371573 +0200 @@ -11,7 +11,7 @@ <message>Authentication is required to grant an application high priority scheduling</message> <message xml:lang="tr">Sürecin yüksek öncelikli çalıştırılabilmesi için yetki gerekiyor</message> <defaults> - <allow_any>no</allow_any> + <allow_any>yes</allow_any> <allow_inactive>yes</allow_inactive> <allow_active>yes</allow_active> </defaults> @@ -23,7 +23,7 @@ <message>Authentication is required to grant an application realtime scheduling</message> <message xml:lang="tr">Sürecin gerçek zamanlı çalıştırılabilmesi için yetki gerekiyor</message> <defaults> - <allow_any>no</allow_any> + <allow_any>yes</allow_any> <allow_inactive>yes</allow_inactive> <allow_active>yes</allow_active> </defaults>
Et en redémarrant les deux services précédents, vous ne devriez plus avoir l'erreur.
Il est maintenant temps de passer à l'installation de DeepFilterNet lui-même.
Installation de DeepFilterNet
- Page officielle : https://github.com/Rikorose/DeepFilterNet
- Instruction d'installation du plugin PipeWire (que nous allons reprendre ici): https://github.com/Rikorose/DeepFilterNet/blob/main/ladspa/filter-chain-configs/deepfilter-mono-source.conf
Installation :
- Création des répertoires nécessaires:
mkdir -p ~/.ladspa/ mkdir -p ~/.config/pipewire/filter-chain.conf.d/
- Mise en place de la librairie de filtrage:
- Téléchargez le fichier
libdeep_filter_ladspa-x.x.x-x86_64-unknown-linux-gnu.so
et copiez-le dans~/.ladspa
sous le nomlibdeep_filter_ladspa.so
Configuration :
- Copiez le fichier https://raw.githubusercontent.com/Rikorose/DeepFilterNet/main/ladspa/filter-chain-configs/deepfilter-mono-source.conf dans
~/.config/pipewire/filter-chain.conf.d/
- Il faut maintenant modifier ce fichier:
- à la ligne plugin = …, mettez le chemin absolu du fichier
libdeep_filter_ladspa.so
. Exemple:plugin = /home/sebsauvage/.ladspa/libdeep_filter_ladspa.so
Vous ne devez pas utiliser
~
ou$HOME
.
- Si vous voulez un filtrage un peu moins fort, modifiez la ligne
"Attenuation Limit (dB)" 100
pour mettre la valeur que vous voulez. Entre 6 et 12 la réduction de bruit est faible. 18-24 est moyen. Je trouve que la valeur 60 marche bien (cela supprime le bruit de la frappe clavier et des clics souris). À 100 je trouve que la voix est un peu trop déformée.
Lancement :
- Lancez avec:
nohup pipewire -c filter-chain.conf &
- Vous devriez voir apparaître une ou plusieurs entrées virtuelles "DeepFilter Noise Cancelling Source" que vous pouvez utiliser comme micro dans vos applications.
En principe la source audio "DeepFilter Noise Canceling Source" sera disponible aux prochains redémarrage sans que vous n'ayez à faire de manipulations.
Avec un casque, vous pouvez écouter l'entrée micro avec:
pactl load-module module-loopback
Désactivez ensuite avec:
pactl unload-module module-loopback
Vous pouvez aussi vous amuser à comparer le spectogramme avec/sans ce filtre avec https://simplespectrogram.app/
Si vous modifiez le paramètre de filtrage (Attenuation Limit (dB)), il vous faudra redémarrer PipeWire et le module DeepFilterNet:
systemctl --user restart pipewire pipewire-pulse nohup pipewire -c filter-chain.conf &
puis re-sélectionnez comme micro par défaut "DeepFilter Noise Canceling Source".
Alternatives
Alternatives à DeepFilterNEt pour la suppression de bruit en temps réel:
- J'utilisais auparavant l'excellent NoiseTorch, mais il n'a plus l'air de fonctionner depuis certaines mises à jour : https://github.com/noisetorch/NoiseTorch