Suppression de bruit avec DeepFilterNet

Cette page est récente et contient donc peut-être encore quelques coquilles.

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)

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

Installation :

Configuration :

Lancement :

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: