Audio sous linux

Version imprimableEnvoyer par emailversion PDF

L'audio sous Linux

Préface

Le noyau Linux traite le son avec le module approprié. Il existe :

  • OSS
  • ALSA

Théoriquement, c'est l'un ou l'autre système qui est utilisé. Cependant il existe des passerelles qui permettent à toutes les applications, qui utilisent l'un ou l'autre module, de fonctionner correctement.

OSS

Oss (Open Sound System) est le systeme le plus ancien. Système qui se fait vieux, il est petit à petit remplacé par ALSA dans la plupart des applications. Les anciennes applications utilisent encore OSS pour envoyer le son au module approprié du Kernel.

ALSA

ALSA signifie "Advanced Linux Sound Architecture". Afin de faire fonctionner les anciennes applications écrites pour OSS, il existe dans ALSA une couche de compatibilité qui permet de faire croire à ces applications qu'elles utilisent OSS au lieu de ALSA.

Les serveurs de sons

Explications

En théorie, avec OSS ou ALSA, un seul son peut être joué à la fois.

Note : ceci est vrai pour OSS, mais ne l'est plus pour ALSA avec "dmix". Il existe, d'un point de vue logiciel, qu'un seul haut parleur. Cependant, certaines cartes permettent nativement le mixage de plusieurs sons ensemble. Par exemple la carte "Sound Blaster Live". La plupart des autres cartes d'un point de vue matériel ne peuvent pas jouer 2 sons en simultané, d'ou l'utilisation d'un serveur son.

ESD (esound)

ESD : "Esound", le serveur de son par défaut de Gnome (aptitude install esound). On peut forcer une application a l'utiliser en la faisant précéder de "esddsp", par exemple : "esddsp xmms" pour le lecteur xmms.

Arts

Arts : le serveur de son par défaut de KDE, (aptitude install arts). On peut forcer une application a l'utiliser en la faisant précéder de "artsdsp", par exemple : "artsdsp xmms" pour le lecteur xmms.

jackd

Jackd : celui-ci est destiné aux musiciens (pour la MAO). Tous ces programmes ont un même but : pouvoir jouer plusieurs sons en même temps, et les mêmes défauts, une latence plus ou moins importante et l'obligation pour les applications d'utiliser un plugin ou une astuce pour s'y connecter.

Je n'ai pas de son, que faire ?

1 - Vérifiez vos hauts parleurs, branchements, etc...

Dans environ 20% des cas sur le son, les enceintes n'étaient pas branchées.

2 - Vérifiez que rien n'est branché sur la sortie audio !

Exemple : comme des écouteurs ...

3 - Vérifiez le volume !

Dans alsamixer, MASTER, PCM doivent être à 80 % et sans MM (mute = sourdine en Français) au dessus ou en dessous. Souvent par défaut la sourdine est activée. Attention, certaines cartes (très rares) ont le mute inversé... Il faut donc avoir MM sur celles ci (pour changer la valeur MM en 00 utiliser la touche m du clavier).

4 - Désactivez les serveurs de son

Comme ESD (Menu > Préférences > Son > Décocher "Active le mixage son logiciel (ESD)"), ou jackd qui peuvent être la source de vos soucis.

5 - Vérification groupe audio

Vérifiez que l'utilisateur qui veut lire le son est bien membre du groupe "audio".

Pour vérifier, dans une console tapez :

groups

Vous aurez la liste des groupes auquel appartient l'utilisateur, dans le cas contraire il faut ajouter votre utilisateur à ce groupe :

 

adduser VotreUtilisateur audio

 

6 Si votre carte son est intégrée à votre carte mère, vérifiez qu'elle est bien activée dans le BIOS !

De plus, il se peut que votre carte son soit reliée à votre modem interne, dans le cas d'un ordinateur portable par exemple.

Allez dans le BIOS et vérifiez que l'option Internal modem est bien sur enabled (activé) !

7 : Commandes utiles et erreurs connues

Pour sauvegarder vos réglages :

 

alsactl store

 

Bien sûr google reste votre ami, de même que le site d'Alsa, passez voir les cartes son qui posent problème il y aura peut-être la vôtre.

Si les musiques semblent se jouer correctement mais que vous n'entendez rien, revérifiez les deux points précédents.

Si Linux ne détecte pas de carte son, il ne joue JAMAIS le son et affiche TOUJOURS une erreur ! Vérifiez que votre ordinateur n'est pas équipé de deux cartes sons et branchez vos enceintes sur l'autre (utiliser une carte son particulière est un autre problème résolu plus bas dans cette page).

Si vous avez un message d'erreur de type : "Not found or busy", vérifiez avec "lsof" (voir plus bas) afin de connaitre le logiciel qui occupe votre carte son.

Installer les modules son

Normalement il suffit de lancer :

 

dpkg-reconfigure alsa-base

 

et de se laisser guider.

Si votre carte n'est pas dans la liste, ça se complique, il va falloir utiliser google... Sinon, il faut désinstaller et réinstaller ALSA, voir plus bas la rubrique "Changer de carte son".

Note : les cartes son USB nécessitent snd_usb_audio.

Plusieurs cartes son

Vous avez plusieurs cartes son, mais problème : la carte principale qui est reconnue et utilisée par linux n'est pas celle que vous voulez utiliser.

Le problème se pose aussi avec les cartes TV, qui souvent s'identifient comme carte son principale, la vrai carte son passant en 2ème position, donc plus aucun son n'en sort... Le problème existe aussi pour les ordinateur récents qui proposent une sortie spdif (S/PDIF est une sortie coaxiale numérique qui peut se brancher directement sur un ampli 5.1).

Pour les sorties numériques avec ALSA voir aussi le lien Configurer une sortie numérique avec ALSA.

Choisir la bonne carte son

Tout d'abord informez vous sur les différentes solutions existantes ci-dessous, plus testez et appliquez celle qui vous convient le mieux.

1ere solution

Aller dans Système > Préférences > Son et de choisir la bonne carte.

2eme solution

Listez les cartes son reconnues par ALSA. Il suffit de taper la commande suivante :

 

asoundconf list

 

Taper ensuite la commande :

 

asoundconf set-default-card votrecarte

 

 où votrecarte est la carte son que vous voulez utiliser (le nom est celui retourné par la commande asoundconf list).

Exemple :

 

asoundconf set-default-card Audigy2

Il vous suffit alors de redémarrer.

3eme solution

Faire un :

 

aplay -l

puis regardez quel numéro a la carte qui vous interesse. Par exemple :

# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: External SB Live! 24-bit External, device 0: USB Audio USB Audio
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: AudioPCI Ensoniq AudioPCI, device 0: ES1371/1 ES1371 DAC2/ADC
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: AudioPCI Ensoniq AudioPCI, device 1: ES1371/2 ES1371 DAC1
Subdevices: 1/1
Subdevice #0: subdevice #0

Editez (ou créez) votre /etc/asound.conf pour y placer :

 

# On définit la sortie son
pcm.!default {
type hw
card 1 # numéro de la carte que vous voulez utiliser
}
# On définit le mixeur associé
ctl.!default {
type hw
card 1 # numéro de la carte que vous voulez utiliser
}

On utilise alors la 2eme carte !

Note : On peut aussi comme alternative mettre le device égal à : "hw:0,1" directement dans l'application (comme celles à base de XINE : Kaffeine, Amarok, VLC).

4eme solution

Enlevez la carte de l'unité centrale ou désactivez dans le bios la carte qui ne sert pas... radical et efficace. Cette méthode fonctionne aussi avec les cartes son Sound Blaster Live!. En général il suffit de désactiver le contrôleur AC97 dans le bios.

5eme solution

Modifier l'ordre des cartes dans /etc/modules.

Pour cela il faut ajouter un fichier /etc/modprobe.d/sound (par exemple) qui indique l'ordre des cartes son puis lancer la mise à jour des modules dans le système (redémarrage nécessaire après).

Ca donne : Fichier /etc/modprobe.d/sound :

 

# ordre des cartes son
alias snd-card-0 snd-intel8x0
alias snd-card-1 snd-ice1712
alias snd-card-2 snd-usb-audio
options snd-intel8x0 index=0
options snd-ice1712 index=1
options snd-usb-audio index=2

 

Puis mettre à jour les modules :

 

update-modules

6eme solution

Tout d'abord il faut connaitre le numéro de votre carte, faites un :

 

cat /proc/asound/cards

Qui par exemple retourne :

 

0 External : USB-Audio - SB Live! 24-bit External
Creative Technology SB Live! 24-bit External at usb-0000:00:1d.0-1, full speed
1 AudioPCI : ENS1371 - Ensoniq AudioPCI
Ensoniq AudioPCI ENS1371 at 0xd480, irq 225

0 External : USB-Audio - SB Live! 24-bit External Creative Technology SB Live! 24-bit External at usb-0000:00:1d.0-1, full speed 1 AudioPCI : ENS1371 - Ensoniq AudioPCI Ensoniq AudioPCI ENS1371 at 0xd480, irq 225

Éditez /etc/modprobe.d/alsa-base et changez l'ordre des modules son (ils commencent par snd) afin de mettre la carte favorite en premier, il faut changer par exemple :

install sound-slot-**0** modprobe snd-card-0
install sound-slot-**1** modprobe snd-card-1

et écrire ceci à la place :

install sound-slot-**1** modprobe snd-card-0
install sound-slot-**0** modprobe snd-card-1

Puis faire : update-modules pour appliquer les modifications.

7eme solution

Désactiver le lancement des modules de la carte son non-désirée.

Pour cela, repérer les modules lancés correspondant à vos cartes son avec la commande lsmod (ils commencent par "snd_").

On va donc faire un :

 

lsmod |grep snd_

Ensuite, éditer le fichier /etc/modprobe.d/blacklist, et ajouter les modules à désactiver.

Par exemple :

#modules son a desactiver
blacklist snd_via82xx_modem
blacklist snd_via82xx
blacklist snd_ac97_codec
blacklist snd_ac97_bus

Au redémarrage, seule la carte son désirée est utilisée. La seule difficulté qui peut être rencontrée est de désactiver les bons modules, mais rien n'empêche de faire plusieurs essais...

Changement materiel

Redéfinir le matériel par défaut utilisé par ALSA

Voir la liste du matériel : asoundconf list

Redéfinir la carte par défaut : asoundconf set-default-card VotreCarte

Pas de son : sortie occupée par ESD

Linux démarre, alsa initialise votre carte son, puis Gnome démarre et le serveur son ESD se lance.

ESD va donc monopoliser votre sortie son, pour émettre entre autre les "bips" de Gnome. Si vous souhaitez qu'une application utilise aussi le son, il faut qu'elle puisse se connecter au serveur son ESD, en général via un plugin. Par exemple après l'installation d'xmms, il faudra régler celui ci sur la sortie esound.

Il faut bien remarquer que, par défaut, une seule application à la fois peut accéder à la carte son. Et par défaut ESD, qui est une application comme une autre, est lancé et accède à la carte son.

Dans la majeure partie des cas, vous n'avez pas de son tout simplement car ESD "bouche" l'accès à la carte son. Vous n'entendrez que les sons Gnome et les applications utilisant une sortie ESD.

La première chose à faire est donc de tuer ESD : killall esd

Puis de regardez ce qui accède à la carte son. La commande ci-dessous vous indique les programmes qui utilisent OSS :
lsof /dev/dsp

La commande ci dessous vous indique les programmes utilisant ALSA : lsof /dev/snd/*

Lancer ESD que quand on a besoin de lui

Une bonne chose est de dire à ESD de se couper lorsqu'on a pas besoin de lui.

Editer /etc/esound/esd.conf et modifiez le fichier pour que ça ressemble à :

esd
auto_spawn=1
spawn_options=-terminate -nobeeps -as 2 -d default
spawn_wait_ms=100
# default options are used in spawned and non-spawned mode
default_options=

Relancez votre session pour appliquer les changements. 

Mais comme Gnome fait un bip quand on clic sur une icone, il faut désactiver le son quand on clique sur une icone (Menu Bureau > Préférences > sons).

Vous pouvez aussi essayer esddsp, qui reroute les applications non ESD vers ESD, par exemple :

esddsp mpg123 mon.mp3

Bien entendu, ça ne marchera pas avec toutes les applications, certaines ne le supportent pas.

Esddsp se trouve dans le paquet esound-clients : aptitude install esound-clients

Ecouter plusieurs sons en même temps sans ESD : ALSA DMIX

Ne suivez ces instructions que si vous avez du son ALSA qui fonctionne correctement (par exemple xmms joue sans problème avec le plugin ALSA).

Tout d'abord vous pouvez regarder les modules de son chargé dans le kernel :
lsmod | grep snd

Nous allons utiliser une fonctionnalité nouvelle d'ALSA, le mixage directement dans le driver son. Ce système s'appelle DMIX. Ce n'est pas sûr que ceci fonctionne avec toutes les cartes sons.

La première chose qu'on va faire, c'est dire à esd d'utiliser ALSA au lieu de OSS. Pour cela, nous allons installer esd version ALSA, qui va remplacer esd version ESS :

aptitude install libesd-alsa0

ensuite on va créer le fichier asound :

 

pcm.card0 {
type hw
card 0
}
pcm.!default {
type plug
slave.pcm "dmixer"

}
pcm.dmixer {
type dmix
ipc_key 1025
slave {
pcm "hw:0,0"
period_time 0
period_size 1024
buffer_size 4096
periods 128
rate 44100
}
bindings {
0 0
1 1
}
}

ensuite, on redémarre ALSA:

 

/etc/init.d/alsa-utils restart


Relancez votre session (pour ESD) et voilà, normalement vous devriez être capables d'entendre les clicks clicks de l'interface, écouter de la musique avec XMMS et jouer une vidéo avec totem, le tout en même temps. (il faut que les applications utilisent ESD ou ALSA, préférablement ALSA).

Si vous avez 2 (ou plus) cartes son, vous pouvez grâce à votre configuration asound.conf choisir laquelle utiliser.

Un petit :
aplay -l
pour lister les cartes, puis dans l'exemple du dessus, il suffit de changer card 0 par le numéro de carte qui vous interesse.

Il faut aussi changer :

pcm "hw:0,0"

en sachant que le premier nombre correspond au numéro de la carte, et le second a la sortie de la carte (device), en général 0.

Si vous obtenez un son qui crachote avec esd, changez dans esd.conf : "-d default" à la 3eme ligne par "-d dmixer".

Enfin, l'idéal, c'est de se passer complètement d'ESD en utilisant ALSA aussi pour les sons systeme.

Pour cela, il suffit de lancer "gstreamer-properties" (Menu Bureau > Préférences > Sélecteur de systèmes multimedia) et de choisir alsa, et de désactiver le serveur son de Gnome.

Seul point noir : les applications OSS doivent toujours accéder à la carte son que une par une.

Il faut donc éteindre tous les sons avant de lancer l'application en question (par exemple des jeux comme Enemy Territory ou Quake), ou tenter avec "aoss".

Dmix ne fonctionne pas

Erreur a la lecture d'un son

Selon les cartes sons, le "buffer" disponible n'est pas le même. Dans ce cas, vous pouvez avoir des erreurs du type "buffer size select failed: Invalid argument". Essayez donc dans une console :

alsaplayer -d ossmix

Puis, cherchez la ligne "BUFFER_SIZE: 6553" (6553, c'est un exemple) et utilisez cette valeur arrondie pour quelle soit un multiple de 2, dans votre fichier asound.conf : buffer_size 6552 ou mieux, buffer_size 4096 (les ordinateurs aiment bien les puissances de 16).

Vous pouvez aussi essayer de doubler le buffer, en indiquant "buffer_size 8192". Bien entendu il ne faut pas que cette valeur dépasse le buffer de votre carte son, sinon ça ne marchera pas.

Parfois, l'émulation OSS d'alsa n'est pas lancé, et les rares applications n'utilisant qu'OSS (Real et Skype pour les plus connues) ne marcherons pas.

Vous pouvez essayer de charger le module d'émulation OSS d'alsa :

sudo modprobe -v snd-pcm-oss

et si ça regle votre problème, il suffit d'ajouter snd-pcm-oss dans le fichier /etc/modules. Mais normalement ce n'est pas necessaire, et ça ne sert a rien si ALSA ne fonctionne pas !

Le son est de mauvaise qualité

Si le son crachote avec ESD, vous pouvez essayer de changez dans esd.conf "-d default" à la 3eme ligne par "-d dmixer" (voir plus haut).

Si le son est mauvais avec alsa, il faut essayer de jouer avec les valeurs period_size et buffer_size d'asound.conf, en utilisant toujours des valeurs multiples de 2.

Ainsi, il peux être judicieux de doubler period_size, en indiquant "period_size 2048". Vous pouvez aussi augmenter énormément buffer_size, il y'aura un petit décalage du son, mais une meilleur qualité et moins de "sauts", par exemple en indiquant "buffer_size 32768".

Il est également possible de tenter d'utiliser la carte son en 48Khz, certaines n'aiment pas le 44.1 réglé par défaut, en changant "rate 44100" par "rate 48000".

Jouez avec ces réglages, et essayez de trouver vos valeurs idéales. Il ne faut pas oublier de relancer alsa à chaque changement :

/etc/init.d/alsa restart

et sauvegardez vos réglage une fois que c'est impécable avec :

alsactl store

Si vous utilisez arts (KDE) avec une SoundBlaster Live et que vous avez un souffle de fond dans vos enceintes, il est possible que l'entrée digitale soit activée, même si vous n'y avez rien branché.

Pour la désactiver, lancez KMix, allez dans l'onglet "Switches" et décochez le bouton "SB Live Analog/Digital". L'effet devrait être immédiat. Ou encore lancez le controleur de volume, vérifiez dans l'onglet parametre que "SB live Analog/ digital output Jack" n'est pas coché.

Son qui grésille

Allez dans votre contrôleur de volume, en double cliquant sur le petit haut parleur en haut à droite de votre écran. Réduisez le PCM à 80% ou moins. Puis fermez la fenêtre. Votre son ne devrait plus grésiller. (si il n'y a pas de curseur PCM, allez dans Fichier > Changer de périphérique).

Kit 5.1 qui n'est que 2.0

A part certains médias (DVD...) on écoute surtout du 2.0, c'est a dire de la stéréo simple. Il y a moyen de faire du pseudo 5.1 avec ALSA, pas avec OSS. Il faut éditer le /etc/asound.conf, et ajouter :

 

pcm.duplicate {
type plug
slave.pcm "surround51"
slave.channels 6
route_policy duplicate
}

Après, il suffit de choisir "surround51" comme sortie son dans son application préférée !

Problèmes pour le son 5.1

Vous avez effectué la manipulation précédente et le son continue à sortir en 2.0 Faites un premier test avec ces deux commandes (en coupant ce qui utiliserait le périphérique sonore au préalable):

speaker-test -D surround51:0 -c 6 -t 2

speaker-test -D duplicate -c 6 -t 2

1ere solution

Vous devez spécifier au lecteur multimédia la sortie son principale, soit votre kit 5.1 et les sorties de votre carte son.

gstreamer-properties

Greffon de sortie par défaut => choisissez Personnalisé Périphérique => Choisissez votre carte son Pipeline => alsasink device=duplicate

Redémarrer ensuite alsa : /etc/init.d/alsa-utils restart

2eme solution

Les changements ne sont pas pris en compte dans la méthode précédente... ce n'est pas grave, il vous reste à tester si le son vers les sorties sont autorisées.

Lancez alsamixer et activez le son des sorties front, rear, LFE (pour les basses). Ou tout autre menu qui pourrait être susceptible de ressembler à votre kit d'enceintes.

Le son ne sort pas par mes enceintes arrières

Avez vous vérifié que le son joué était bien du 5.1 ? Essayer avec un DVD en mode 5.1, dans VLC par exemple il faut choisir dans AUDIO, le son SURROUND 5.1 pour l'activer correctement.

Flash

On peux dire à Flash (v7, car la v9 utilise alsa par défaut) d'utiliser ESD-ALSA et non OSS : Créer un lien :

ln -s /usr/lib/libesd.so.0 /usr/lib/libesd.so.1

réer certaines préférences pour ESD :

mkdir -p /tmp/.esd/ export LD_PRELOAD

Cela aura pour effet de lancer Real Player via aoss (si vous l'utilisez).

Note: libaoss.so se trouve dans le package alsa-oss.

Pour l'installer : aptitude install alsa-oss

KDE

Allez dans K > Centre de configuration de KDE > Son et multimedia > Système de son.

Dans le cadre Suspension automatique (pour que KDE 'rende' le controle du son aux autres applications) mettez 1 seconde. Ensuite dans Sons et multimédia > Notifications systèmes, Gestionnaire de fenetre, désactivez le son: nouvelle fenetre.

Il devrait vous suffir d'attendre 1 seconde après un son de KDE pour avoir le son wink Attention: apparement, si vous mettez sur 0, ca ne marche pas.

Voir aussi : Wiki Alsa : Dmix pour KDE

Liens externes

Le wiki ALSA sur dmix.

La page de documentation ALSA sur le plugin PCM.

Sources et crédits

Modifié et adapté à partir de la documentation Ubuntu, tiré de la page ci-dessous avant réécriture complète - afin de conserver ces informations : http://doc.ubuntu-fr.org/installation/son

SUR LE SITE D'UBUNTU : Contributeurs : D'après le http://forum.ubuntu-fr.org/viewtopic.php?id=2969 mini howto de ploum, modifié et agrémenté par http://forum.ubuntu-fr.org/profile.php?id=1378 Dawar.

Notez que http://forum.ubuntu-fr.org/viewtopic.php?pid=154609 Ploum a adapté son tuto pour Breezy.

Partie Problème pour le son 5.1 par ReVeNaNt Le contenu du wiki d'Ubuntu est sous double licence : http://creativecommons.org/licenses/by-sa/2.0/ CC BY-SA et http://fr.wikipedia.org/wiki/GNU_FDL GNU FDL

 

Sponsors