AEC, l’echo cancellation avec pulseaudio

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 :

Config AEC
Config AEC

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 :

Mauvaise config AEC
Mauvaise config AEC

Tu constateras qu’aucune musique n’est envoyée dans notre module AEC pour traitement.

Résultat dans pavucontrol

Sortie audio

pavucontrol sortie audio
pavucontrol sortie audio

Entrée audio

pavucontrol entree audio
pavucontrol entree audio

On retrouve bien nos 2 périphériques « SortieAudioPourFiltre » et « MicroFiltre »

Soyez le premier à commenter

Poster un Commentaire

Votre adresse de messagerie ne sera pas publiée.


*


Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.