GĂ©rer le son Ă travers un terminal quel drĂŽle dâidĂ©e !
Je fus confronté à cette problématique dans un cadre un peu particulier, le contrÎle parental sur un Raspberry PI
.
Cela mâa amenĂ© Ă mâintĂ©resser Ă la commande amixer. amixer permet de contrĂŽler une carte son utilisant le couche ALSA. amixer supporte de multiples cartes son avec de multiples pĂ©riphĂ©riques.
Cet article va se concentrer sur le cas dâun Raspberry PI mais sâapplique Ă la plupart des distributions Linux.
Préalables
Le son sur un ordinateur cela peut sembler simple. Mais votre ordinateur possĂšde presque toujours plusieurs sorties son, par exemple les enceintes et la sortie casque.
Sur un Raspberry PI de base, vous avez les sorties HDMI et la sortie casque. Cependant, si vous utilisez un Pi 4 avec une interface graphique, il est probable que vous ayez investi dans un adaptateur son USB pour contourner le conflit existant entre certaines résolutions et la carte son embarquée.
Bref, quel que soit votre ordinateur et lâoutil que vous utiliserez, lâĂ©tape prĂ©alable sera dâidentifier la sortie audio que vous souhaitez contrĂŽler.
La couche ALSA
ALSA pour Advanced Linux Sound Architecture est un ensemble de logiciels pour enregistrer et jouer des sons, qui est incorporĂ© dans le noyau Linux. Le travail de cette couche est la configuration automatique des cartes son et la cohabitation aisĂ©e de plusieurs pĂ©riphĂ©riques son dans un mĂȘme systĂšme.
-
Les outils fournis avec ALSA
ALSA prend Ă©galement en charge dâautres fonctionnalitĂ©s :
- les synthétiseur MIDI intégré dans le matériel ;
- le mixage logiciel de plusieurs canaux ;
- les opérations full-duplex ;
- les pilotes (y compris les problématiques liés aux multiprocesseurs).
ALSA a une interface de programmation (API) trĂšs complĂšte (certains disent trop). Cependant ; lâAPI OSS peut ĂȘtre utilisĂ©e, ALSA possĂ©dant une couche dâĂ©mulation dâOSS (« Open Sound System »).
ALSA apporte également des outils :
*alsactl
 : AlsaControl permet de contrÎler les cartes son et de manipuler (charger et sauvegarder) les configurations ;
*alsamixer
 : permet de rĂ©gler les volumes des diffĂ©rents canaux, utilise ncurses pour lâaffichage ;
*aplay
 : permet de jouer un fichier.wav
 ;
*arecord
 : permet dâenregistrer un fichier.wav
Ă partir dâune sortie sonore ;
*aconnect
 : permet de connecter les deux ports MIDI existants sur le séquenceur ALSA.
alsamixer : Une solution « graphique » pour gérer le son depuis le terminal
alsamixer est probablement la solution la plus simple pour commencer⊠Le gros avantage, câest quâavec la touche F6 il est possible de choisir la carte son, câest trĂšs simple. De plus par la suite une fois que lâon a vu le numĂ©ro de la carte, il est possible dâouvrir lâinterface directement sur le bon pĂ©riphĂ©rique en utilisant la syntaxe suivante :
alsamixer -c 2 # Sélectionne la carte N°2
Les flÚches permettant de sélection le potentiomÚtre de votre choix (entrée, sortie, autre) ainsi que le volume.
LâinconvĂ©nient de cette solution Ă©tant quâil nâest pas possible de programmer le son via un script.
Liste des cartes disponibles (« F6 ») sur un Raspberry Pi 4
ayant une carte son USB supplémentaire.
amixer la version purement CLIâŠ
La plus grosse difficultĂ© avec cette version est lâidentification des cartes, une bonne solution est dâutiliser lâarborescence procfs comme suit :
cat /proc/asound/cards
0 [b1 ]: bcm2835_hdmi - bcm2835 HDMI 1
bcm2835 HDMI 1
1 [Headphones ]: bcm2835_headphonbcm2835 Headphones - bcm2835 Headphones
bcm2835 Headphones
2 [Device ]: USB-Audio - USB Audio Device
GeneralPlus USB Audio Device at usb-0000:01:00.0-1.2, full speed
amixer <options> [commande]
Les commandes disponibles étant :
Commande | Description |
---|---|
info | Affiche des informations sur le périphérique de mixage. |
scontrols | Affiche tous les états de base du mélangeur (Single controls) |
scontents | Affiche le contenu de toutes les états de base du mélangeur (commande par défaut) |
sset SCONTROL PARAMETER | DĂ©fini la valeur dâun Ă©tat de base du mĂ©langeur |
sget SCONTROL | Obtiens la valeur dâun Ă©tat de base du mĂ©langeur |
controls | Affiche toutes les états pour une carte donnée (sans option, toutes les cartes) |
contents | Afficher le contenu de toutes les commandes pour une carte donnée |
cset CONTROL PARAMETER  ⊠| DĂ©finit une valeur dâun contrĂŽleur de la carte. Lâidentifiant a ces composants : iface, name, index, device, subdevice, numid. Lâargument suivant spĂ©cifie la valeur du contrĂŽleur. |
cget CONTROL | Affiche le contenu du contrĂŽle de la carte. Lâidentifiant a la mĂȘme syntaxe que pour la commande cset. |
Les options disponibles étant :
Options | Description |
---|---|
-c , --card N | Sélectionne la carte donnée |
-D , --device N | Sélectionne le périphérique, la valeur par défaut est : 'default' |
-d , --debug | Mode de débogage |
-n , --nocheck | Ne pas effectuer la vérification plage sur les valeurs |
-v , --version | Affiche la version du programme |
-q , --quiet | Limite lâaffiche des rĂ©sultats |
-s , --stdin | Traite les commandes Ă partir de lâentrĂ©e standard (stdin ) puis les exĂ©cute en sĂ©quence. Lorsque cette option est donnĂ©e, les arguments de la ligne de commande sont ignorĂ©s. Seuls sset et cset sont acceptĂ©s. Les autres commandes sont ignorĂ©es. Attention, les commandes non valides sont Ă©galement ignorĂ©es sans erreurs. |
-R , --raw-volume | Utilise la valeur brute pour Ă©valuer la reprĂ©sentation en pourcentage. Câest le mode par dĂ©faut. |
-M , --mapped-volume | Utilise le volume mappĂ© pour Ă©valuer la reprĂ©sentation en pourcentage comme le fait alsamixer, permet un effet plus naturel pour lâoreille humaine. |
Affichage de lâaide pour votre version :
sudo amixer -h
Exemples
Les contrĂŽleurs
Afficher la liste contrĂŽleur disponibles
amixer controls
Exemple d'affichage (PI 4
)
numid=4,iface=MIXER,name='Master Playback Switch'
numid=3,iface=MIXER,name='Master Playback Volume'
numid=2,iface=MIXER,name='Capture Switch'
numid=1,iface=MIXER,name='Capture Volume'
Les informations
Les informations sur le pĂ©riphĂ©rique de mixage sâobtiennent comme suit :
amixer info
Qui donne par exemple sur un Raspberry PI 4Â :
Card default 'b1'/'bcm2835 HDMI 1'
Mixer name : 'Broadcom Mixer'
Components : ''
Controls : 2
Simple ctrls : 1
Sur un autre type de machine Linux, on obtient :
Card default 'pulse'/'PulseAudio'
Mixer name : 'PulseAudio'
Components : ''
Controls : 4
Simple ctrls : 2
Le volume
Mettre le son Ă 15%Â :
amixer sset "Master",0 15%
Mettre le son au maximum :
amixer sset "Master",0 100%
Allumer ou Ă©teindre le son
Couper le son
amixer sset "Master",0 off
Activer le son Ă la derniĂšre valeur
amixer sset "Master",0 on
Changer le volume du son depuis un autre utilisateur
Si vous souhaitez modifier le volume via la ligne de commande câest peut-ĂȘtre parce que vous souhaitez le faire Ă distance, Ă travers une connection SSH.
On va donc rĂ©utiliser ce quâon a vu dans le billet « écrire un message sur lâĂ©cran dâun autre ».
Sur Raspberry Pi OS
sudo su -l utilisateur_cible -c 'DISPLAY=:0.0 XAUTHORITY=${HOME}/XAUTHORITY alsamixer -c 2'
ou
sudo su -l "${TARGET_USER}" -c 'DISPLAY=:0.0 XAUTHORITY=${HOME}/XAUTHORITY amixer cset numid=3 40%'
Pour une machine sous Raspberry Pi OS
, on peut par exemple utiliser :
ssh "${ADMIN_USER:-pi}@${REMOTE_HOST}" "sudo su -l '${TARGET_USER}' -c 'DISPLAY=:0.0 XAUTHORITY=${HOME}/XAUTHORITY amixer cset numid=3 40%'"
En définissant au préalable :
REMOTE_HOST=« Adresse IP du Raspberry »
TARGET_USER=« Nom de l âutilisateur connectĂ© sur lâinterface graphique »
Pour une autre machine, il faudra définir :
ADMIN_USER=« Nom dâun utilisateur ayant les droits pour executer la commande sudo »
Références
- Manuel de amixer
- La page Wikipedia dâALSA et la version anglaise qui est plus Ă jour et plus complĂšte
- Le projet ALSA
- Le projet OSS
- Une documentation sur ALSA en français qui nâest pas trĂšs Ă jour, mais qui est plutĂŽt complĂšte.
- Proc asound documentation â Documentation de la hiĂ©rarchie :
/proc/asound
. - Sound configuration on Raspberry Pi with ALSA
኿