Élimination du bruit en temps réel avec PulseAudio?

66

Est-il possible de supprimer le bruit en temps réel avec PulseAudio, de sorte que la sortie audio qui en sort soit plus douce?

Vadim Peretokin
la source
c'est probablement possible, même si cela serait intensif et nécessiterait que quelqu'un écrive un filtre pour cela.
RolandiXor
2
@Vadi - J'ai ajouté une réponse qui pourrait vous aider si vous utilisez toujours Ubuntu ou tout autre distro basé sur PulseAudio. J'espère que cela fonctionne pour vous mon pote.
Luis Alvarado
Ce message semble faire quelque chose de similaire
akhmed

Réponses:

75

Module Pulseaudio module-echo-cancel

J'ai commencé à lire beaucoup de choses sur PulseAudio et sur les options "cachées" qu'il possédait afin de pouvoir en trouver une similaire à cette question. Celui que j’ai trouvé est le module de suppression de bruit, qui réduit considérablement le bruit statique sur le microphone, et même BEAUCOUP de bruit de fond. Vous avez ainsi l’avantage d’enregistrer uniquement votre propre voix avec une excellente qualité (Pour l’enregistrement audio par exemple). Pour ce faire, suivez ces étapes:

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

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

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

    capture d'écran

Vous trouverez plus d'informations à ce sujet sur la page Module d'écho

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

Si vous souhaitez définir par défaut le dispositif d'annulation d'écho, il suffit de transformer la ligne ci-dessus en:

load-module module-echo-cancel source_name=logitechsource

puis au bas du fichier, ajoutez

set-default-source logitechsource

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

Renommer l'appareil

Enfin, si vous ne souhaitez pas un nom très long dans les paramètres de son (lorsque vous souhaitez sélectionner un périphérique d'entrée / de 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 une fois, redémarrer pulseaudio. Le résultat final ressemble à ceci:

capture d'écran

Luis Alvarado
la source
6
Facile à faire et ne semble pas casser des choses - merci!
Vadim Peretokin
2
Excellente solution, travaillé hors de la boîte pour moi, merci
Rancho
1
Cela a coupé la plupart du bruit du ventilateur de mon ordinateur portable et mes enregistrements sonnent tellement mieux!
PJ Brunet
1
Holy moly - J'obtiens des résultats incroyables même avec un micro crado à 5 dollars que j'ai reçu d'eBay. Ce n'est pas de la qualité studio, mais c'est tout à fait correct pour les appels VoIP maintenant.
Raymond Morgan
2
Si vous voulez éviter que le module d'écho ajuste automatiquement le curseur de volume, vous pouvez le définir load-module module-echo-cancel aec_method=webrtc aec_args="analog_gain_control=0 digital_gain_control=1"selon gitlab.freedesktop.org/pulseaudio/pulseaudio/issues/224
joelostblom
16

C'est une vieille question, mais j'avais le même problème et après une recherche sur Google (où je trouvais principalement des personnes qui s'accordaient à dire que ce n'était pas possible) et après avoir lu des pages de manuel, j'ai développé une solution basée sur l'idée de user2330377.

Vous devez d’abord créer un profil de bruit pour SoX. Utilisez n’importe quel programme d’enregistrement audio pour enregistrer quelques secondes de bruit, puis cddans le répertoire dans lequel vous l’avez sauvegardé sox noise.wav -n noiseprof noise.prof.

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

sudo modprobe snd_aloop

Cela est nécessaire car pulseaudio, contrairement à Jack, ne peut pas connecter directement un logiciel audio ensemble; nous allons donc utiliser le périphérique de bouclage comme proxy.

Vous devez maintenant démarrer pamanet rechercher les noms de votre microphone (ou de tout autre périphérique d’enregistrement) et du périphérique de bouclage que nous venons de créer. Une fois que ceux-ci sont trouvés, vous pouvez exécuter la commande suivante pour commencer à enregistrer le son de votre microphone, en le transmettant via SoX, puis en le lisant 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érique corrects pour les paramètres -d - le périphérique d'entrée pour la première invocation de paquet et la sortie de périphérique en boucle pour le second.)

Voilà, c'est presque fini! Dans la dernière étape, commencez à enregistrer le son avec l'application de votre choix, puis démarrez-le pavucontrol, passez à l'onglet "Enregistrement" et réglez le périphérique audio utilisé pour l'enregistrement (affiché en tant que bouton gris à droite) sur "Moniteur de bouclage audio". Dispositif". Vous devriez maintenant avoir un enregistrement clair et sans bruit!

cemper93
la source
1
Ce script simplifie le processus gist.github.com/tiagoengel/334573f7c3b98c27356297d6b1996336
Thomas
2

Une enquête a montré qu’il n’existait aucun moyen connu de filtrage par réduction de bruit en temps réel avec un sous-système Linux. Certains sites Web pointent vers du matériel que vous pouvez acheter, ce qui devrait faire l’affaire bien mieux que de faire un filtre logiciel.

Alternativement, s'il s'agit d'un enregistrement, vous pouvez transmettre le son via Audacity et y utiliser le filtre de bruit.

Martin Owens -doctormo-
la source
Dommage, je me demande pourquoi pas. Merci d'avoir enquêté.
Vadim Peretokin le
Sûr! Il n'y a aucune information sur la page de documentation du module sur l'annulation de bruit. Il y a seulement un algorithme AEC (Acoustic Echo Cancellation) module-echo-cancelqui a plusieurs implémentations, comme webrtc | speex.
vskubriev
1

Voici à votre manière, implémentez webrtc-aec dans le

http://wiki.gentoo.org/wiki/PulseAudio

webrtc-aec Oui Utilise la bibliothèque de traitement audio webrtc.org pour améliorer considérablement les appels VoIP dans les applications qui le prennent en charge en effectuant la suppression de l'écho acoustique, le contrôle de gain analogique, la suppression du bruit et d'autres traitements.

Voici un article daté de 2013 sur le sujet (suppression du bruit avec pulseaudio et non pas spécifiquement webrtc-aec) http://lac.linuxaudio.org/2013/papers/37.pdf

"Nous avons présenté les premiers résultats d'une solution de réduction du bruit / écho multicanaux construite sur PulseAudio et motivé les décisions de conception. Les travaux ont abouti à de nombreuses améliorations du cadre de suppression et d'écho d'écho PulseAudio, qui ont été Nous avons également contribué à l'optimisation du code pour le mixage de flux audio, à des méthodes de rééchantillonnage plus efficaces et à la mise en œuvre d'un AEC efficace dans le pipeline de traitement multicanal. "

utilisateur2330377
la source
Ce que j'avais en tête, c’était de prendre un profil de bruit et d’éliminer le bruit en temps réel à l’aide de sox, puis de reproduire la sortie audio que je peux ensuite utiliser comme flux d’entrée en impulsions. Je crois que cette impulsion est capable de créer et de rediriger les flux d'entrée et de sortie de cette manière. C'est-à-dire que le flux de lecture peut être redirigé en tant que flux d'entrée vers une autre application et que le flux de lecture est appliqué par application et non par périphérique; il n'a donc pas besoin d'être routé vers le matériel du périphérique.
user2330377
Je me lance dans cette tâche en utilisant pacmd pour lister les périphériques pulseaudio, pacat pour enregistrer et lire de ceux-ci et sox pour créer les effets en temps réel sur le flux.
user2330377
Seriez-vous intéressé à poster les scripts pour cela?
Vadim Peretokin
0

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

Par conséquent, vous devez acheter autant que possible des écouteurs | microphones avec fonction d'annulation du bruit intégrée.

En testant l’enregistrement vocal à Ubuntu, j’ai trouvé des qualités particulières:

  • Skype, Telegram utilise une entrée brute du périphérique par défaut (dans mon cas, les prises jack avant-arrière / arrière). Si vous devez annuler un bruit dans cette application, vous devez acheter des microphones avec seulement la fonction d'annulation du bruit intégrée.

  • Si vous devez utiliser des appels vocaux dans un navigateur, vous devez garder à l’esprit que les navigateurs disposent de leurs propres implémentations d’algorithmes de traitement vocal, par exemple WebRTC.

  • De plus, les applications Web (sites tels que talky, hangouts, Look.in, etc.) peuvent avoir leurs propres implémentations d'algorithmes de traitement de la voix, même si elles peuvent être basées sur l' analyse de hangouts de webrtc.

vskubriev
la source