AEC et réduction de bruit avec le ReSpeaker Mic Array v2.0

TP avec PulseAudio

On va donc refaire exactement la même chose sauf que cette fois-ci, nous allons utiliser PulseAudio.

On va donc commencer par l’installer, ainsi que pavucontrol qui est un outil pratique pour PulseAudio

sudo apt-get install pulseaudio pavucontrol

Et histoire d’être qu’il ne se relance pas tout seul

systemctl --user stop pulseaudio.socket
systemctl --user stop pulseaudio.service

Configuration de PulseAudio

La première chose que l’on va faire c’est faire un nouveau fichier de configuration ALSA. En effet, les applications qui souhaitent utiliser ALSA pour sortie son, nous devront les “rediriger” vers pulseaudio afin d’éviter que ça fasse des Chocapics. En effet, ALSA, contrairement à PulseAudio est un peu exclusif.

On renomme donc le fichier asound.conf actuel

sudo mv /etc/asound.conf /etc/asound.conf.alsa

On crée un nouveau fichier asound.conf

sudo nano /etc/asound.conf

Et on lui colle ça dedans

pcm.!default {
   type pulse
   fallback "sysdefault"
}
ctl.!default {
   type pulse
   fallback "sysdefault"
}

CTRL+O et CTROL+X pour sauvegarder et quitter.

Plutôt qu’éditer le fichier de configuration de PulseAudio, ce qui ne serait pas pratique sur le blog, on va le renommer et en créer un par défaut.

sudo mv /etc/pulse/default.pa /etc/pulse/default.pa.save

On en crée un nouveau tout neuf :

sudo nano /etc/pulse/default.pa

Et on lui colle ça dedans


#!/usr/bin/pulseaudio -nF
#
# This file is part of PulseAudio.
#

.fail

load-module module-device-restore
load-module module-stream-restore
load-module module-card-restore
load-module module-augment-properties
load-module module-switch-on-port-available

load-module module-alsa-sink device=hw:0,0 sink_name=monhdmi
load-module module-alsa-sink device=hw:2,0 sink_name=monrespeaker
load-module module-alsa-source device=hw:2,0 source_name=monmicro

### Automatically load driver modules depending on the hardware available
.ifexists module-udev-detect.so
load-module module-udev-detect
.else
### Use the static hardware detection module (for systems that lack udev support)
load-module module-detect
.endif

### Load several protocols
.ifexists module-esound-protocol-unix.so
load-module module-esound-protocol-unix
.endif
load-module module-native-protocol-unix

load-module module-default-device-restore
load-module module-rescue-streams
load-module module-always-sink
load-module module-intended-roles
#load-module module-suspend-on-idle
load-module module-role-cork

load-module module-filter-heuristics
load-module module-filter-apply


#load-module module-combine-sink sink_name=combine slaves=monhdmi,monrespeaker

#set-default-sink combine
#set-default-sink monhdmi
set-default-sink monrespeaker
set-default-source monmicro

Même chose que pour ALSA, on ne va pas s’attarder sur le fichier de config.

La première partie important est celle-ci

load-module module-alsa-sink device=hw:0,0 sink_name=monhdmi
load-module module-alsa-sink device=hw:2,0 sink_name=monrespeaker
load-module module-alsa-source device=hw:2,0 source_name=monmicro

On crée 2 sorties et 1 entrée. Il est très important que tu remplaces dans “device=hw:X,0” les X par le bon numéro de carte que tu avais bien pris soin de noter lors du TP avec ALSA.

Donc, on a 2 sorties, une qui s’appelle monhdmi et l’autre monrespeaker.

Il est aussi très important que ces 3 lignes apparaissent dans le fichier de config avant la partie module-udev-detect car sinon, il va déjà créer des sorties et ca fera des chocapics pour nos tests…

La seconde partie importante est celle-ci :

#load-module module-combine-sink sink_name=combine slaves=monhdmi,monrespeaker

#set-default-sink combine
#set-default-sink monhdmi
set-default-sink monrespeaker

set-default-source monmicro

J’ai préparé pour le dernier test une combinaison de nos 2 sorties audio. Néanmoins cette ligne est commentée car on ne va pas faire ce test tout de suite.

En suite, nous avons la commande set-default-sink qui permet de définir la sortie par défaut. Il y’en a 3 possibles mais une seule active à la fois. Nous allons donc tester la sortie respeaker en premier.

A savoir que PulseAudio doit être relancé après chaque modification. Je te conseille donc de mettre cette ligne de commande de côté car tu vas pas mal l’utiliser dans les minutes qui suivent

pulseaudio -k && pulseaudio --start

Pour savoir si toutes nos sorties sont bien créées, on peut exécuter la commande suivante :

pactl list short sinks

qui devrait te répondre

pi@raspberrypi:~ $ pactl list short sinks
0	monhdmi	module-alsa-sink.c	s16le 2ch 44100Hz	RUNNING
1	monrespeaker	module-alsa-sink.c	s24le 2ch 16000Hz	RUNNING
2	alsa_output.platform-soc_audio.analog-mono	module-alsa-card.c	s16le 1ch 44100Hz	IDLE
pi@raspberrypi:~ $ 

Test de bon fonctionnement du respeaker

Bon, déjà il faut s’assurer que pulseaudio est lancé avec ceci :

pulseaudio --start

Tu peux aussi vérifier la présence du processus avec cette commande

ps ax | grep pulseaudio

Voici le résultat

pi@raspberrypi:~/usb_4_mic_array $ ps ax | grep pulseaudio
 6940 ?        S<l    0:00 pulseaudio --start
 6951 pts/0    S+     0:00 grep --color=auto pulseaudio
pi@raspberrypi:~/usb_4_mic_array $ 

On constate que le processus pulseaudio est bien présent avec le PID 6940. La 2ème ligne n’est rien d’autre que notre commande de recherche qui s’auto-voit si je puis dire 🙂

On va aussi reconfigurer notre VLC pour être sûr et certain qu’il passe par pulseaudio. Normalement, ça devrait aussi marcher en laissant la config ALSA, mais on va jouer la sécurité.

Pour ça, on retourne dans “Outils” puis “Préférences” et l’onglet “Audio”

Dans “Module de sortie”, on sélectionne “Sortie audio Pulseaudio” et on clique sur enregistrer.

Avec Pulseaudio, il est très important de bien fermer VLC entre chaque modification et donc redémarrage de pulseaudio. Sinon, problèmes.

Ensuite, tu connais, tu sélectionnes ta musique dans VLC et tu vérifies que le son sort bien par le haut parleur du respeaker puisque c’est ce que nous avons configuré par défaut.

Configuration d’Audacity

Avant de faire les tests, nous allons aussi demander à audacity d’utiliser PulseAudio. Pour ça on lance Audacity et on sélectionne Pulse comme dans l’image ci-dessous

Test de l’AEC avec sortie son du respeaker

Normalement, Audacity et VLC sont ouverts, donc je te laisse faire ce premier test. Voici ce que j’obtiens comme résultat

Pas de surprise, j’ai la musique qui apparait sur le canal 5, donc l’AEC fonctionne sur le canal 0. On retrouve bien le même comportement qu’avec ALSA

Test de l’AEC avec sortie son HDMI

On ferme Audacity et VLC. On édite notre fichier de configuration Pulseaudio

sudo nano /etc/pulse/default.pa

et tout en bas du fichier, on commente la ligne qui crée la sortie monrespeaker et on décommente la ligne qui crée la sortie HDMI

#set-default-sink combine
set-default-sink monhdmi
#set-default-sink monrespeaker

set-default-source monmicro

on redémarre notre serveur PulseAudio

pulseaudio -k && pulseaudio --start

On relance audacity et VLC. Et on refait le test. Voici mon résultat :

De nouveau pas de surprise. on retrouve le comportement qu’on avait avec ALSA. Pas de son sur le canal 5, donc pas d’AEC sur le canal 0. Par contre, on voit que les autres algorithmes du respeaker ont essayé de faire ressortir la voix par rapport la musique. Il suffit de comparer le canal 0 et le canal 1.

Test de l’AEC avec sortie son combinée

On ferme Audacity et VLC. On édite notre fichier de configuration Pulseaudio

load-module module-combine-sink sink_name=combine slaves=monhdmi,monrespeaker

set-default-sink combine
#set-default-sink monhdmi
#set-default-sink monrespeaker
set-default-source monmicro

Là, on va décommenter la ligne load-module module-combine-sink. Cette ligne va nous permettre de lier la sortie HDMI et respeaker ensemble. Beaucoup plus simple qu’avec ALSA n’est ce pas ? 😀

Ensuite, on commente la sortie monhdmi et on décommente la sortie combine

On redémarre PulseAudio

pulseaudio -k && pulseaudio --start

On relance audacity et VLC. Et on refait le test. Voici mon résultat :

Et pas plus de rebondissement sur ce test. Le son sort par le respeaker et la sortie HDMI. Le canal 5 présente bien la musique donc l’AEC peut travailler.

Là encore, donc, même comportement qu’avec ALSA !

2 Comments

  1. Bonjour cedcox,
    Merci beaucoup pour tes guides très détaillés et qui plus est : écrits de manière sympa et ludique !
    Tu parles de temps en temps du respeaker core v2. J’en ai un en ma possession et je ne demandais si je pouvais avoir un avis dessus ?
    Il semble déjà plus musclé que le respeaker mic array, mais aussi équipe de plus de places dédiées au traitement de la voix (aec, doa, ns, wakeword, etc…)
    Que penses-tu de la bestiole ?
    J’aimerai tirer meilleur parti de ses capacités mais je ne sais pas trop par où commencer.
    Installer rhasspy dessus ou bien se baser sur respeakerd et dialoguer avec l’api rhasspy ?
    Comme tu le vois c’est un peu flou pour moi ^^

    En ce moment je l’utilise comme satellite rhasspy mais j’ai l’impression qu’on peut mieux faire

    Une idée ?
    Merci d’avance et merci pour tes guides !

    Jérôme

    • Bonjour Jerôme,

      Le respeaker core v2 est plus complet parce qu’il contient déjà de quoi faire tourner le système d’exploitation. C’est un “tout-en-un” qui regroupe un raspberry et un mic array v2 qui n’est qu’une carte son en quelque sorte.
      Après, je ne connais pas les caractéristiques techniques exactes du core v2, mais je pense que ça doit se rapprocher des mêmes composants que le mic array.
      Donc pour tes questions, je n’ai pas d’idées ou de piste pour un cas qui marchera mieux qu’un autre. Certainement les essayer 🙂

      Ced

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.