137 votes

Suppression du bruit en temps réel avec PulseAudio ?

Est-il possible d'éliminer le bruit en temps réel avec PulseAudio, afin que le son qui sort soit plus lisse ?

187voto

Bob Points 940

Module Pulseaudio module-echo-cancel

J'ai commencé à lire beaucoup de choses sur PulseAudio et les options "cachées" qu'il propose afin de trouver une option similaire à cette question. Celle que j'ai trouvée est le module de suppression du bruit, qui réduit considérablement tout bruit statique sur le microphone et même BEAUCOUP de bruit de fond, vous donnant ainsi l'avantage d'enregistrer uniquement votre propre voix avec une excellente qualité (pour un enregistrement audio par exemple). Pour ce faire, suivez les étapes suivantes :

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

  2. Ajoutez la ligne suivante n'importe où dans le fichier, mais je recommande presque à la fin où vous trouverez un commentaire sur l'annulation de l'écho (~ligne 140) :

    load-module module-echo-cancel
  3. Rechargez PulseAudio ( pulseaudio -k ) ou redémarrez simplement l'ordinateur. Vous devriez être en mesure de sélectionner la nouvelle option d'annulation du bruit dans la section Périphérique d'entrée :

    screenshot

Vous pouvez trouver plus d'informations à ce sujet sur le site Page du module d'annulation de l'écho

Définir l'entrée par défaut

Si vous souhaitez par défaut le dispositif d'annulation d'écho transforme simplement la ligne ci-dessus en :

load-module module-echo-cancel source_name=logitechsource

et ensuite, au bas du fichier, ajoutez

set-default-source logitechsource

Dans ce cas, j'ai nommé la source logitechsource mais vous pouvez le nommer comme vous le souhaitez et simplement redémarrer pulseaudio.

Renommer le dispositif

Enfin, si vous ne voulez pas avoir un nom super long dans les Paramètres du son (lorsque vous voulez sélectionner un périphérique d'entrée/sortie). Ma suggestion est de renommer le périphérique d'entrée comme ceci :

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

Et encore, en redémarrant pulseaudio. Le résultat final ressemble à ceci :

screenshot

UPDATE - Documentation complète Trouvé ici Merci à clémente

18voto

cemper93 Points 280

C'est une vieille question, mais j'ai eu le même problème et après quelques recherches sur Google (où j'ai surtout trouvé des gens qui étaient d'accord pour dire que ce n'était pas possible) et la lecture de quelques pages de manuel, j'ai maintenant développé une solution basée sur l'idée de l'utilisateur 2330377.

Vous devez d'abord créer un profil de bruit pour SoX. Il suffit d'utiliser n'importe quel programme d'enregistrement audio pour enregistrer quelques secondes de bruit, puis cd dans le répertoire où vous l'avez enregistré et faites sox noise.wav -n noiseprof noise.prof .

Ensuite, vous devez créer un périphérique de bouclage ALSA :

sudo modprobe snd_aloop

Ceci est nécessaire car pulseaudio, contrairement à Jack, ne peut pas connecter directement les logiciels audio entre eux ; nous utiliserons donc le périphérique loopback comme proxy.

Maintenant, vous devez commencer paman et trouvez les noms de votre microphone (ou autre dispositif d'enregistrement) et du dispositif de bouclage que nous venons de créer. Une fois ces noms trouvés, vous pouvez exécuter la commande suivante pour commencer à enregistrer le son de votre microphone, le faire passer par SoX et le lire sur le périphérique de bouclage :

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

(Où vous devez substituer les noms de périphériques corrects pour les paramètres -d -- le périphérique d'entrée pour la première invocation de pacat et la sortie du périphérique de bouclage pour la seconde).

Voilà, c'est presque terminé ! Pour terminer, commencez à enregistrer du son avec l'application de votre choix, puis lancez pavucontrol Dans l'onglet "Enregistrement", passez à l'onglet "Enregistrement" et réglez le périphérique audio utilisé pour l'enregistrement (affiché comme le bouton gris à droite) sur "Moniteur du périphérique audio de bouclage". Vous devriez maintenant avoir un enregistrement clair et sans bruit !

3voto

vskubriev Points 797

La page de documentation du module ne contient aucune information sur la suppression du bruit. Il y a seulement l'algorithme AEC (Acoustic Echo Cancellation) dans le module-echo-cancel, qui a plusieurs implémentations, comme webrtc | speex.

C'est pourquoi vous devriez, dans la mesure du possible, acheter des écouteurs et des microphones avec une fonction intégrée de suppression du bruit.

En testant l'enregistrement vocal dans ubuntu, j'ai trouvé quelques qualités particulières :

  • Skype et Telegram utilisent l'entrée brute du périphérique par défaut (dans mon cas, les prises micro avant et arrière). Si vous avez besoin d'annuler un bruit dans ces applications, vous devez acheter des écouteurs/microphones avec une fonction intégrée d'annulation du bruit.

  • Si vous avez besoin d'utiliser des appels vocaux dans un navigateur, vous devez garder à l'esprit que les navigateurs ont leurs propres implémentations d'algorithmes de traitement de la voix, par exemple WebRTC.

  • De même, les applications web (sites comme talky, hangouts, appear.in, etc.) peuvent avoir leurs propres implémentations d'algorithmes de traitement de la voix, même si elles peuvent être basées sur webrtc. analyse de la fréquentation

2voto

karim samir Points 51

Solution simple sur ubuntu LTS ou les distros basées sur debian il s'agit d'un script en ligne qui active la fonction d'annulation du bruit qui est déjà dans pulse audio (l'audio par défaut sur debian).

wget -qO - https://gist.githubusercontent.com/grigio/cb93c3e8710a6f045a3dd9456ec01799/raw/94f07c7d75bcf5dd9b08a9c3034844223ec6fbe1/fix-microphone-background-noise.sh | sudo bash && pulseaudio -k

vous pouvez également exécuter ces commandes en mode séquentiel (c'est la même chose)

sudo cp /etc/pulse/default.pa /etc/pulse/default.pa.bak
sudo cat <<EOT >> /etc/pulse/default.pa
load-module module-echo-cancel source_name=noechosource sink_name=noechosink
set-default-source noechosource
set-default-sink noechosink
EOT

1voto

Jonathan Peterson Points 133

Il existe un plugin de suppression du bruit pour le module-ladspa-sink :

Ici vous pouvez trouver un tutoriel pour l'installation sur Fedora, et 2 exemples d'enregistrements pour avoir une idée des effets du plugin :

Sur Ubuntu :

  1. Télécharger le linux_rnnoise_bin_x64.tar.gz

  2. À partir de l'archive, copiez le bin/ladspa/librnnoise_ladspa.so Par exemple, pour /usr/local/lib/librnnoise_ladspa.so ou n'importe où ailleurs.

  3. Trouvez le nom de votre entrée en utilisant pactl list sources short . Par exemple, mon microphone s'appelle alsa_input.usb-046d_0994_4A365E20-02.mono-fallback

  4. Exécutez les commandes suivantes pour activer l'annulation du bruit (avant d'exécuter ces commandes, remplacez l'icône de l'ordinateur par celle de l'ordinateur. /usr/local/lib/librnnoise_ladspa.so y alsa_input.usb-046d_0994_4A365E20-02.mono-fallback à vos valeurs déterminées dans les étapes 2. et 3.) :

    pacmd load-module module-null-sink sink_name=mic_denoised_out
    pacmd load-module module-ladspa-sink sink_name=mic_raw_in \
        sink_master=mic_denoised_out label=noise_suppressor_mono \
        plugin=/usr/local/lib/librnnoise_ladspa.so \
        control=50
    pacmd load-module module-loopback \
        source=alsa_input.usb-046d_0994_4A365E20-02.mono-fallback \
        sink=mic_raw_in channels=1 source_dont_move=true sink_dont_move=true
    pacmd load-module module-remap-source source_name=denoised \
        master=mic_denoised_out.monitor channels=1
  5. Dans votre application d'enregistrement vocal, vous allez configurer l'entrée audio à partir de Null output o Remapped monitor of null output et tester (j'ai utilisé Skype Echo)

  6. Pour rendre les changements permanents, ajoutez les commandes de l'étape 4 dans le fichier /etc/pulse/default.pa en omettant le pacmd au début de chaque ligne.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X