3 votes

Streaming audio en direct avec filtre anti-bruit sous Linux

Je dois retirer le bruit d'une source audio, mais cela doit se faire en direct. La voix obtenue ne doit pas nécessairement être parfaite, mais elle ne doit pas contenir trop de bruit.

Je me suis renseigné sur le sox, mais il semble avoir besoin d'une sorte de profil, ce qui m'obligerait à le passer deux fois par le sox.

Est-ce que quelqu'un sait comment faire passer une source audio à travers quelque chose comme sox ou ffmpeg live et faire un filtrage basique du vent/bruit ?

2voto

K3---rnc Points 268

Vous pouvez générer un profil de bruit pour SoX avec :

sox sample-input.wav --null noiseprof ~/noise.profile

Vous pouvez ensuite utiliser le profil pour filtrer votre enregistrement :

sox recording.wav filtered.wav noisered ~/noise.profile

Cela fonctionne parce que le bruit statique que votre microphone capte dépend généralement de votre installation (câblage) et est donc toujours à peu près le même dans le même environnement. Notez que SoX est considérablement plus mauvais que Audacity à supprimer le bruit. :(

De plus, vous pouvez utiliser les filtres audio de ffmpeg comme passe-haut / passe-bas pour diminuer les fréquences en dessous/au-dessus d'un certain seuil, ou utiliser compandant filtre pour compresser la gamme dynamique de l'enregistrement et/ou faire un porte-bruit .

Une fois que vous avez le profil du bruit, le pipeline complet du processus pourrait être :

ffmpeg -f alsa -i hw:0,0 -af 'highpass=300, lowpass=4000' -f wav - | sox -f wav -f wav - noisered ~/noise.profile | aplay

Notez que vous devez extraire le profil de l'enregistrement filtré par ffmpeg, si vous utilisez ces filtres.

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