Alsa est le nouveau driver standard pour la gestion des cartes sons. Il remplace OSS. Cette page décrit comment installer Alsa et le configurer. De nombreux exemples décrivent l'utilisation des plugins.
Pour fonctionner, le support de Alsa doit avoir été configuré dans le Kernel Linux.
Dans un premier temps il faut que alsa soit activé dans le Kernel Linux soit en modules soit intégrés au kernel. C'est le cas des derniers kernels où alsa remplace OSS.
Pour le valider, regardez le contenu de /proc/asound/devices :
18: [0- 2]: digital audio playback 25: [0- 1]: digital audio capture 16: [0- 0]: digital audio playback 24: [0- 0]: digital audio capture 0: [0- 0]: ctl 33: : timer
Si ce n'est pas le cas vérifiez que alsa est compilé et chargé.
Installer les paquets :
Tester avec xmms en utilisant la sortie alsa. Par exemple en utilisant “default”, “hw:0,0” et “hw:0,2”.
Cette partie explique quelques possibilités de configuration basique. La configuration avancée avec Dmix est expliquée dans le chapitre suivant.
Le fichier de configuration de alsa est /etc/asound.conf. Ce fichier n'existe pas par défaut dans Debian. Pour information, la configuration de base de alsa est dans /usr/share/alsa/alsa.conf, il est recommandé de ne pas la modifier.
Par défaut, default utilise hw:0,0. Il est possible de le modifier en déclarant les lignes suivantes dans asound.conf :
pcm.!default { type hw card 0 } ctl.!default { type hw card 0 }
Pour livetux, je souhaite utiliser hw:0,2 (sortie numérique) par défaut :
pcm.!default { type hw card 0 device 2 } ctl.!default { type hw card 0 device 2 }
L'exemple suivant décrit la définition d'un alias.
pcm.NAME { type hw # Kernel PCM card INT/STR # Card name or number [device] INT # Device number (default 0) [subdevice] INT # Subdevice number, -1 first available (default -1) mmap_emulation BOOL # enable mmap emulation for ro/wo devices }
Par exemple, je définis la sortie nommée “spdif” sur la sortie numérique :
pcm.numerique { type hw card 0 device 2 } pcm.analogique { type hw card 0 device 0 }
Je peux ensuite écouter de la musique en sélectionnant la sortie “numerique” pour la sortie numérique ou “analogique” pour la sortie classique.
Attention : certains alias sont déjà utilisés dans la configuration de base (/usr/share/alsa/alsa.conf), il n'est pas possible d'utiliser les mêmes noms.
Pour émuler correctement OSS sur Projet Livetux il faut ajouter dans /etc/modprobe.d/alsa-base la ligne suivante :
options snd-pcm-oss adsp_map=2
Cette ligne permet d'attribuer le deuxième device (hw:0,2) à /dev/adsp.
Attention : ne pas oublier de recharger le driver ALSA puis de refaire les liens avec /usr/share/alsa-base/snddevices
> modprobe snd-pcm-oss > /usr/share/alsa-base/snddevices
Les plugins permettent d'étendre les fonctionnalités d'ALSA.
La déclaration d'un plugin passe par deux étapes :
C'est le slave qui définit le rendu du plugin. Une partie des options des plugins se définissent d'ailleurs dans le slave.
L'exemple suivant rééchantillone le flux en 48kHz.
pcm_slave.sl2 { pcm rate 48000 } pcm.rate_convert { type rate slave sl2 }
Pour utiliser la conversion, il faut ensuite utiliser “rate_convert” comme device de sortie alsa.
Noter que la configuration suivante est équivalente :
pcm.rate_convert { type rate slave { pcm rate 48000 } }
Le but de cet exemple et d'écouter la musique à la fois sur la sortie analogique et numérique. Pour cela, il faut effectuer deux opérations :
#Define all output in one virtual device pcm.tout_en_un { type multi slaves.a.pcm "hw:0,0" slaves.a.channels 2 slaves.b.pcm "hw:0,2" slaves.b.channels 2 bindings.0.slave a bindings.0.channel 0 bindings.1.slave a bindings.1.channel 1 bindings.2.slave b bindings.2.channel 0 bindings.3.slave b bindings.3.channel 1 } #Duplicate the stream to all channels pcm.duplique { type plug slave.pcm tout_en_un route_policy duplicate }
Comme pour les autres exemples, il faut utiliser la sortie “duplique” pour obtenir le son sur toutes les interfaces.
dmix est un plugin d'alsa qui permet d'effectuer du mixage multicanal sur une carte (ou un driver) qui ne supporte qu'un seul canal. Lorsque vous utilisez dmix, vous n'êtes plus obligé d'utiliser un serveur de son comme arts, esd ou jack.
De plus, dmix est inclus dans les dernières versions d'alsa.
Pour l'instant dmix ne semble pas supporter les groupes correctement, le ipc est créé avec le gid de l'utilisateur. Il y a visiblement quelque chose la dessus dans la version 0.10 de alsa http://www.alsa-project.org/changes/v1-0-10rc1--v1-0-10rc2.txt :
dmix and dsnoop configuration - added ipc_perm 0660 (to handle all users with audio group)
Exemple :
pcm.mixage_numerique { type dmix ipc_key 1025 ipc_key_add_uid false ipc_perm 0666 #need alsa 0.10 to use 0660 slave { pcm "numerique" } bindings { 0 0 1 1 } } pcm.mixage_analogique { type dmix ipc_key 1025 ipc_key_add_uid false ipc_perm 0666 #need alsa 0.10 to use 0660 slave { pcm "analogique" } bindings { 0 0 1 1 } }
Attention : Dmix ne supporte que les slaves hardware. Il n'est pas possible de rediriger dmix sur “duplique” de l'exemple précédent.
Remarque 2 : Il est possible d'utiliser la sortie Dmix en “Pass through” (avec xine par exemple). Le flux correctement transmit (Dolby Digital, DTS, …) mais le mixage n'est plus possible. Il faut donc stoper les autres flux audio, sinon vous risquez d'entendre de droles de bruits.
Enfin, il est possible de modifier la sortie par défaut (toujours dans /etc/asound.conf)
#change the default pcm.!default { type plug slave.pcm mixage_numerique }