L’AEC dans pulseaudio
Alors, comment ajouter l’annulation de l’écho acoustique dans pulseaudio ? Et bien comme toute autre fonctionnalité de pulseaudio, avec un module 🙂 .
Et ce module porte bien son nom puisque c’est “module-echo-cancel” . On va voir uniquement les paramètres dont on a besoin mais si tu veux voir plus, c’est par ici
Pour ajouter un module, cela se fait dans le fichier /etc/pulse/default.pa .
sudo nano /etc/pulse/default.pa
Et tout à la fin du fichier, on ajoute ces lignes que l’on va détailler ensuite :
load-module module-echo-cancel source_name=MicroFiltre source_properties="device.description='MicroFiltre'" source_master=alsa_input.platform-soc_sound.analog-stereo sink_name=SortieAudioPourFiltre sink_properties="device.description='SortieAudioPourFiltre'" sink_master=alsa_output.platform-soc_sound.analog-stereo aec_method=webrtc use_master_format=1 aec_args="high_pass_filter=1 noise_suppression=0 analog_gain_control=0"
set-default-sink SortieAudioPourFiltre
set-default-source MicroFiltre
Remonte cette mâchoire qui est en train de tomber, tu vas voir, c’est très simple.
load-module module-echo-cancel
Simple, on demande à pulseaudio de charger le module d’annulation accoustic (AEC)
Paramètres périphérique d’entrée (micro)
source_name=MicroFiltre
Le nom de notre micro virtuel qui sortira ce qui vient du micro mais passé au filtre de l’AEC
source_properties=device.description=MicroFiltre
Parce que ce sera plus simple à trouver dans pavucontrol
source_master=alsa_input.platform-soc_sound.analog-stereo
Le nom du périphérique physique de notre micro. On obtiendra la liste des périphériques entrées audio avec la commande :
pi@raspi-dev:~ $ pactl list short sources
0 alsa_output.platform-soc_audio.analog-stereo.monitor module-alsa-card.c s16le 2ch 48000Hz RUNNING
1 alsa_output.platform-soc_sound.analog-stereo.monitor module-alsa-card.c s16le 2ch 48000Hz RUNNING
2 alsa_input.platform-soc_sound.analog-stereo module-alsa-card.c s16le 2ch 48000Hz RUNNING
Sans rentrer dans le détail du “monitor”, la ligne qui nous intéresse est celle qui contient “input” et donc la ligne 2; Nous avons donc le nom de notre périphérique d’entrée (micro).
Paramètres périphérique de sortie (Jack du respeaker)
Je ne vais pas détailler, mais c’est exactement le même principe avec sink_name, sink_properties et sink_master qui sont pour le périphérique de sortie.
Pour avoir le nom du périphérique de sortie audio, simple :
pi@raspi-dev:~ $ pactl list short sinks
0 alsa_output.platform-soc_audio.analog-stereo module-alsa-card.c s16le 2ch 48000Hz IDLE
1 alsa_output.platform-soc_sound.analog-stereo module-alsa-card.c s16le 2ch 48000Hz RUNNING
Oula ! Tu vas me dire que c’est pareil. Hé bien non 😉 . Regarde bien, il y en a un c’est “soc_audio” et l’autre c’est “soc_sound”. En fait, le périphérique soc_audio est la sortie Jack du raspberry, alors que “soc_sound”, c’est la sortie son de notre respeaker.
Si tu veux la liste complète des entrées et sorties :
pactl list-cards
Paramètres AEC
aec_method=webrtc
C’est l’algorithme utilisé par l’echo cancellation. Il en existe plusieurs mais disons que les 2 principaux sont webrtc (google) et speex.
use_master_format=1
On utilise le même format que la source. Le format c’est un peu l’équivalent de “Qualité CD” ou “Qualité téléphone” en quelque sorte.
aec_args='"high_pass_filter=1 noise_suppression=0 analog_gain_control=0"'
Quelques paramètres avec lesquels je te laisse jouer afin que tu puisses constater toi-même leurs actions sur la qualité de la sortie après filtrage.
Périphérique par défaut
set-default-sink SortieAudioPourFiltre
set-default-source MicroFiltre
On définit notre micro “filtré” comme micro par défaut, et notre sortie audio utilisée pour le filtre comme sortie audio par défaut
Ce qui nous donne plus ou moins ça :
Je vois déjà le bon élève du premier rang qui me demande pourquoi utiliser le sink (sortie audio) créé par notre module plutôt que tout bêtement la sortie audio de notre respeaker.
Tout simplement parce que schématiquement (j’ai simplifié mais l’idée est là), ça donnerait ça :
Tu constateras qu’aucune musique n’est envoyée dans notre module AEC pour traitement.
Résultat dans pavucontrol
Sortie audio
Entrée audio
On retrouve bien nos 2 périphériques “SortieAudioPourFiltre” et “MicroFiltre”
Poster un Commentaire