ReSpeaker pour raspberry

Configuration ALSA

introduction ALSA

Alsa est le logiciel qui discute directement, enfin, presque directement avec la carte son. Néanmoins, nativement, il a une contrainte assez forte est que tout logiciel qui prend la main sur la sortie ou l’entrée audio le fait de façon exclusive. Ça veut dire que si j’ai une 2e application qui souhaite accéder à l’entrée ou à la sortie son, hé bien c’est cuit. Bon, heureusement, il y a une solution pour pallier à ce problème, et cela passe par le fichier de configuration.

A titre personnel, je reste moyennement fan d’ALSA qui nécessite un fichier de configuration parfois complexe comparé à PulseAudio. Mais celui-ci a aussi ses contraintes qu’on verra dans le prochain chapitre. En résumé, je dirai que si le raspberry est réservé pour une seule application (comme Rhasspy), ALSA fera très bien l’affaire. S’il doit y avoir plusieurs applications qui doivent accéder en simultanée, alors PulseAudio pourra être envisagé… si le hardware suit 🙂

configurer le respeaker avec ALSA

Aller, passons aux choses sérieuses. La première chose à faire c’est de savoir ce qu’ALSA voit comme périphériques d’entrée et de sortie.

Périphériques de sortie

Pour ça, on va utiliser l’outil aplay. Celui-ci permet de lire des fichiers wav mais aussi de lister les sorties sons disponibles.

La commande qui va nous intéresser est aplay -l (Lettre L en minuscule)

pi@raspberrypi:~ $ aplay -l
**** Liste des Périphériques Matériels PLAYBACK ****
carte 0: ALSA [bcm2835 ALSA], périphérique 0: bcm2835 ALSA [bcm2835 ALSA]
  Sous-périphériques: 7/7
  Sous-périphérique #0: subdevice #0
  Sous-périphérique #1: subdevice #1
  Sous-périphérique #2: subdevice #2
  Sous-périphérique #3: subdevice #3
  Sous-périphérique #4: subdevice #4
  Sous-périphérique #5: subdevice #5
  Sous-périphérique #6: subdevice #6
carte 0: ALSA [bcm2835 ALSA], périphérique 1: bcm2835 IEC958/HDMI [bcm2835 IEC958/HDMI]
  Sous-périphériques: 1/1
  Sous-périphérique #0: subdevice #0
carte 0: ALSA [bcm2835 ALSA], périphérique 2: bcm2835 IEC958/HDMI1 [bcm2835 IEC958/HDMI1]
  Sous-périphériques: 1/1
  Sous-périphérique #0: subdevice #0
carte 1: Device [USB2.0 Device], périphérique 0: USB Audio [USB Audio]
  Sous-périphériques: 1/1
  Sous-périphérique #0: subdevice #0
carte 2: seeed2micvoicec [seeed-2mic-voicecard], périphérique 0: bcm2835-i2s-wm8960-hifi wm8960-hifi-0 []
  Sous-périphériques: 1/1
  Sous-périphérique #0: subdevice #0
pi@raspberrypi:~ $

Alors qu’est-ce qu’on voit ? Déjà il voit 3 cartes (de 0 à 2).

  • La première a 2 périphériques. Le premier, c’est l’infâme sortie jack du raspberry. Le 2eme et 3eme, c’est la sortie son HDMI.
  • La 2eme carte est la sortie d’un petit haut parleur USB que j’ai connecté.
  • La 3eme carte est mon respeaker.

Pour accéder à ces différentes sorties, ALSA utilise cette syntaxe : plughw:X,Y ou X est le numéro de la carte et Y le numéro de périphérique. C’est pour ça qu’il est très important que tu notes ces informations. On utilisera plughw plutôt que hw afin d’éviter certaines incompatibilités avec un accès direct sans pré-traitement.

Périphériques d’entrée.

De la même façon, il existe un petit outil pour lister les périphériques d’entrées et enregistrer un son en .wav. C’est arecord.

Pour lister on fait :

arecord -l

Ce qui nous donne

pi@raspberrypi:~ $ arecord -l
**** Liste des Périphériques Matériels CAPTURE ****
carte 2: seeed2micvoicec [seeed-2mic-voicecard], périphérique 0: bcm2835-i2s-wm8960-hifi wm8960-hifi-0 []
  Sous-périphériques: 1/1
  Sous-périphérique #0: subdevice #0
pi@raspberrypi:~ $ 

Nous avons donc bien notre respeaker en entrée.

Un peu plus d’info

Il est en possible d’avoir un peu plus d’info en tapant aplay -L ou arecord -L

Le fichier /etc/asound.conf

Par défaut, les applications qui souhaitent utiliser ALSA pour l’audio vont utiliser le fichier /etc/asound.conf. En fait, on va passer par la librairie libasound qui va permettre d’optimiser un peu ALSA. Je ne rentrerai pas dans le détail, mais l’idée est là.

Par contre, il y a une petite astuce à connaitre quand on utilise le respeaker. Lors de l’installation, celui-ci remplace le fichier /etc/asound.conf par un lien symbolique vers le fichier /etc/voicecard/asound_Xmic.conf . Et il le fait à chaque redémarrage du raspberry.

Si tu es amené à la modifier, il vaut donc mieux en faire une copie de sauvegarde.

De façon générale, il n’est pas bon de supprimer définitivement un fichier à moins de savoir pourquoi et d’être sûr et certain qu’on ne l’utilisera plus jamais. Du coup, dans le doute, on en fait une copie de sauvegarde.

Donc ça donne :

sudo mv /etc/voicecard/asound_2mic.conf /etc/voicecard/asound_2mic.conf.save

Tu remplaceras évidemment asound_2mic.conf par le bon nom en fonction du respeaker que tu as installé. Si tu as un doute

ls -lsa /etc/asound.conf

voilà maintenant, on sait qu’en éditant /etc/asound.conf, en fait on modifie /etc/voicecard/asound_2mic.conf. Mais on a aussi notre copie de sauvegarde.

Alors le fichier de config fourni par seeed crée un périphérique de type dmix pour la sortie audio. Cela permet à plusieurs applications d’accéder en même temps à celle-ci car je le rappelle, par défaut, ALSA prend le contrôle exclusif des entrées/sorties audio. Et ensuite, défini ce périphérique virtuel comme périphérique standard.

Même chose pour l’entrée audio. Un périphérique de type dsnoop est créé pour l’entrée audio afin que celle-ci soit accessible par plusieurs applications.

Si jamais il n y a qu’une seule application qui doit accéder au raspberry, alors je te conseille plutôt ce fichier de configuration plus simple :

pcm.!default {
   type asym
   playback.pcm {
      type plug
      slave.pcm "hw:2,0"
   }
   capture.pcm {
      type plug
      slave.pcm "hw:2,0"
   }
}

Bien évidemment, tu remplaceras le numéro de carte et de périphérique par les bonnes valeurs que tu auras pris soin de noter précédemment.

le fichier .asoundrc

Il y a aussi une autre façon pour les applications d’accéder à ALSA, c’est en utilisant le fichier .asoundrc (attention le point est important) . Ce fichier, s’il existe, se situe dans le home de l’utilisateur. En fait, il fonctionne exactement de la même façon que le fichier asound.conf, sauf qu’il sera prioritaire. toutes les applications lancées par l’utilisateur utilisera en priorité ce fichier de config avant le fichier asound.conf.

Donc si un jour tu fais des modifs dans le fichier asound.conf et que tu ne constates pas de changement, avant de te taper la tête contre les murs, vérifie qu’il n’y a pas un fichier .asoundrc dans ton home qui te fait un pied de nez.

A savoir aussi que si tu utilises le raspberry avec l’interface graphique, à chaque fois que tu vas toucher l’icône son, il va te générer un fichier .asoundrc.

icône son

Voilà, tu es prévenu 🙂

Gestion du volume en lecture et enregistrement

Alors la gestion du volume en lecture ne concerne pas le 4 mic array qui n’a pas de sortie son.

Pour gérer les volumes, il y a un petit outil en mode texte qui va nous permettre de régler le volume des haut parleurs en sortie et du micro en entrée, c’est « alsamixer »

$ alsamixer

Comme on arrive sur la carte son du raspberry, on va faire « F6 »

Puis sélectionner la carte son dont on souhaite utiliser la sortie et taper sur la touche « Entrée ». Nous allons prendre en sortie son le ReSpeaker. Ce sera donc la carte N°2.

Réglage volume de sortie

Vérifie en haut à gauche que tu n’as pas eu les doigts palmés et que c’est bien notre respeaker qui a été sélectionné.

Si on élargit la fenêtre, on va voir qu’on a pas mal de chose à régler si on le souhaite. Je te laisse jouer avec, pour cet article, la seule chose à vérifier c’est que le volume de « Headphon » (le premier) est monté. Si ce n’est pas le cas, tu te déplaces avec les flèches gauche et droite pour arriver sur le bon canal, puis avec les flèches haut et bas, tu règles le niveau.

Réglage volume d’entrée

Par défaut, tu n’as que les canaux liés aux sorties audio. Mais si tu regardes la petite ligne en haut à gauche avec écrit « Vue », tu verras que tu auras la possibilité de voir aussi que les canaux d’enregistrement ou bien, tous les canaux.

Attention, il y a une petite ruse. Quand tu es en SSH avec putty et que tu fais F4 pour voir les canaux d’enregistrement, boom ! Ça te ferme alsamixer. Donc, l’alternative c’est de faire F5 et d’aller sur le ou les canaux d’enregistrement dont tu souhaites modifier le réglage.

Perso, j’ai activé le VNC donc voici un screen pour la partie capture

Alors oui, c’est un peu étrange et je ne me suis jamais trop penché sur le problème. Les seuls canaux qui vont nous intéresser sont Capture, Left Inp (Micro gauche) et Right Inp (micro droit). Pour le reste, là encore je te laisserai faire des tests.

Voilà ce que ça donne lorsqu’on fait F5 pour avoir à la fois l’enregistrement et la lecture.

Modifier le niveau d’enregistrement

Une fois qu’on est content des réglages, il faut sauvegarder tout ça

sudo alsactl store

Test de bon fonctionnement

Maintenant que tu as fait ça, on va vérifier que tu as bien du son en sortie.

aplay /usr/share/sounds/alsa/Front_Right.wav

Si tu entends une petite voix qui te dit « Front Right », alors c’est un premier pas vers la victoire, cela veut dire que tu as du son en sortie 🙂

Maintenant on va tester le micro

arecord toto.wav

Baragouine la phrase que tu veux (tant que ça dure au moins 5 secondes) puis fais un CTRL+C. Tu devrais avoir ceci :

pi@raspberrypi:~ $ arecord toto.wav
Capture WAVE 'toto.wav' : Unsigned 8 bit, Fréquence 8000 Hz, Mono
^CInterrompu par le signal Interrompre...
pi@raspberrypi:~ $

Il ne reste plus qu’à rejouer le son que tu viens d’enregistrer pour s’assurer que ça fonctionne :

aplay toto.wav

Ta douce voix devrait sortir de façon nasillarde du haut parleur connecté au respeaker 🙂

6 Comments

  1. Bonjour,
    Installation ReSpeaker
    J’ai bien du son en sortie mais impossible d’enregistrer
    arecord toto.wav
    ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM input
    arecord: main:828: erreur à l’ouverture audio: Aucun fichier ou dossier de ce type
    J’ai installer alsa-base et alsa-utils, mais rien n’y fait.

    Merci d’avance pour l’aide apportée
    Hervé

  2. Bonjour ced,
    J’ai un ResPeaker 2 Mics Pi HAT est je n’arrive pas à utiliser les leds. J’ai pourtant bien suivi ton tuto pour l’installer mais quand j’execute le python j’ai toujours la même erreur :

    pi@raspberrypi:~/mic_hat $ python pixels.py
    Traceback (most recent call last):
    File « pixels.py », line 5, in
    import apa102
    File « /home/pi/mic_hat/apa102.py », line 8, in
    import spidev
    ImportError: No module named spidev

    Je ne sais vraiment pas quoi faire. Avant j’étais sur Snips est les leds fonctionnait et maintenant je suis sur kalliope (que je conseille à tout le monde, c’est open source) et impossible de les faires fonctionner.

    Help me ! Please ! ^^

    • Bonjour Arthur, je n’ai pas approuvé ton premier message car il était trop grand et je compter le raccourir, premier point, et 2eme point j’étais en train de regarder de mon côté 🙂
      Je viens de refaire la manip et chez moi ça fonctionne. J’ai bien vu dans ton précédent message (non approuvé) que tu avais lancé l’installation de spidev. C’est donc un peu étrange.
      Laisse moi regarder encore un peu de mon côté, et je vais revenir vers toi 🙂

      Cédric

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.