ALSA (Advanced Linux Sound Architecture)

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.

Installation

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 :

  • alsa-base
  • alsa-utils

Tester avec xmms en utilisant la sortie alsa. Par exemple en utilisant “default”, “hw:0,0” et “hw:0,2”.

Configuration basique

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.

Exemple 1 : Modifier "default"

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
}

Exemple 2 : Créer un alias

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.

Note pour Livetux (Chipset NForce)

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 

Plugins

Les plugins permettent d'étendre les fonctionnalités d'ALSA.

La déclaration d'un plugin passe par deux étapes :

  • la définition d'un pcm
  • la définition d'un slave

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.

Exemple : conversion audio

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
                }
	}

Exemple : Dupliquer le flux audio sur plusieurs sorties

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 :

  • créer une pseudo sortie à 4 channels regroupant l'analogique et le numérique.
  • copier les flux sur l'ensemble des cannaux.
#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

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.

Sortie par défaut

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
}

Backup

  • /etc/asound.conf

Links

linux/config/alsa.txt · Dernière modification: 2011/01/08 14:43 par matthieu
Recent changes RSS feed Debian Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki