Le son sur le système Linux est géré par un jeu de circuits intégrés spécialisés (en|chipset) historiquement placé sur une carte d'extension appelée 'Carte son'. Mais il arrive de plus en plus fréquemment que cette carte son soit directement intégrée à la carte mère.
Pour connaître la ou les cartes son d'un ordinateur et leurs chipsets, on peut saisir les commandes suivantes dans un terminal : lspci | grep -i audio. (expl°|La commande lspci liste l'ensemble des informations du “bus PCI” qui assure la communication entre les différents éléments d'un ordinateur. Parmi ces informations, celles qui nous intéressent sont généralement identifiées par le terme “audio”, le paramètre -i de la commande lspci permet de ne pas tenir compte des majuscules ou minuscules)
Cela donne par exemple :
:~$ lspci | grep -i audio 00:14.2 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] SBx00 Azalia (Intel HDA) (rev 40) 01:05.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] RS880 HDMI Audio [Radeon HD 4200 Series] 04:06.0 Multimedia video controller: Conexant Systems, Inc. CX23880/1/2/3 PCI Video and Audio Decoder (rev 05) 04:06.2 Multimedia controller: Conexant Systems, Inc. CX23880/1/2/3 PCI Video and Audio Decoder [MPEG Port] (rev 05) 05:0d.1 Multimedia controller: Brooktree Corporation Bt878 Audio Capture (rev 11)
qui donne 2 cartes son (identifiées par Audio device) et leurs chipsets respectifs (SBx00 Azalia et RS880 HDMI).
il existe aussi des cartes son connectées en USB que l'on peut trouver par lsusb | grep -i audio.
Chaque carte son et/ou chipset a son propre langage de commande. Pour que le système d'exploitation Linux puisse communiquer avec le chipset et la carte son, il faut des interfaces qui vont traduire les commandes générales Linux en commandes spécifiques au chipset et à la carte. Ces interfaces s'appellent les 'pilotes' (en|driver) du chipset.
Afin de ne pas avoir à rechercher le driver spécifique à un chipset à chaque fois que Linux est installé sur un ordinateur, on les regroupe dans des ensembles de drivers.
L'ensemble de drivers utilisés par Ubuntu est intégré à un logiciel nommé ALSA (Advanced Linux Sound Architecture).
ALSA utilise le répertoire /proc/asound pour stocker toutes informations sur les cartes son avec lesquelles il peut dialoguer.
Pour obtenir la liste des cartes son utilisées par ALSA sur un ordinateur donné, saisir
cat /proc/asound/cards dans un terminal
:~$ cat /proc/asound/cards 0 [SB ]: HDA-Intel - HDA ATI SB HDA ATI SB at 0xfbbf8000 irq 16 1 [HDMI ]: HDA-Intel - HDA ATI HDMI HDA ATI HDMI at 0xfbde8000 irq 19
Les cartes son sont listées par numéro croissant en commençant par '0'. Dans notre exemple, on retrouve bien les 2 cartes son trouvées précédemment (elles sont identifiées par un '0' et un '1' en début de ligne).
Cette commande permet déjà de voir que la première carte son est une carte de type Sound Blaster identifiée par 'SB'.
La seconde carte est de type HDMI, identifiée par 'HDMI'.
Il existe aussi bien d'autres types de cartes comme les cartes MIDI, identifiées par 'MID'.
On voit aussi qu'il s'agit de cartes créées par la société 'ATI' et respectant la norme HDA développée par la société 'Intel'.
Enfin, la dernière information est le numéro de l'interruption matérielle qui lui est appliquée, identifiée par le terme irq
On retrouve la liste des modules Linux qui commandent les cartes son par cat /proc/asound/modules
:~$ cat /proc/asound/modules 0 snd_hda_intel 1 snd_hda_intel
Comme les deux cartes suivent la norme HDA de Intel, Linux a besoin du module correspondant ('snd_hda_intel') pour les utiliser.
Pour aller un peu plus loin, on peut voir les drivers utilisés par les chipsets par cat /proc/asound/cardX/codec#0 | grep -i codec, où le X est remplacé par le numéro de la carte.
Dans notre exemple, cela donne :
:~$ cat /proc/asound/card0/codec#0 | grep -i codec Codec: Realtek ALC892 :~$ cat /proc/asound/card1/codec#0 | grep -i codec Codec: ATI RS690/780 HDMI
Les drivers sont indiqués après 'Codec:'.
On peut aussi vérifier les entrées/sorties son (en|device) disponibles sur l'ordinateur par la commande cat /proc/asound/pcm
:~$ cat /proc/asound/pcm 00-00: ALC892 Analog : ALC892 Analog : playback 1 : capture 1 00-01: ALC892 Digital : ALC892 Digital : playback 1 00-02: ALC892 Alt Analog : ALC892 Alt Analog : capture 1 01-03: HDMI 0 : HDMI 0 : playback 1
Cette commande indique trois sorties possibles pour le son (identifiées par 'playback') : une sortie analogique (identifiée par 'Analog') et une sortie numérique (identifiée par 'Digital') pilotées par le driver ALC892, ainsi qu'une sortie numérique HDMI.
De plus, l'identifiant 'capture' indique que le pilote ALC892 permet la capture du son externe sur deux canaux ('Analog' et 'Alt analog').
Pour tout savoir sur le son sur Linux, le site ALSA donne toutes les indications sur ce projet.