Gestion du son sous Linux

De Lea Linux
Aller à la navigation Aller à la recherche

Gestion du son sous Linux

Gestion du son sous Linux
Par Serge
Quand les pinguoins chantent!

Ce document traite des problèmes de son sous Linux. Il existe deux séries de drivers différents pour Linux :

  • OSS, intégré directement dans les sources du noyau jusqu'au version 2.4
  • ALSA, présent dans les sources du noyau depuis les versions 2.6, et que l'on peut récupérer sur http://www.alsa-project.com pour les kernels 2.4 ou 2.2.

OSS

Par défaut pour les kernels de version inférieure à la 2.6 (ie: 2.2 et 2.4), le support du son est OSS. L'installation de celui-ci n'est pas très compliquée. Sous les distributions comme la RedHat, Mandrake la détection des cartes est automatique la plupart du temps (au pire il faut lancer sndconfig en tant que root pour que cela le soit). Pour les autres distributions, le kernel est correctement configuré et tous les modules de cartes son sont déjà compilés. Il suffit juste alors pour activer la carte de passer par leurs utilitaires de configuration (sndconfig, ou autre), ou d'ajouter les entrées manuellement dans /etc/modules.conf (parfois conf.modules selon l'âge de la distribution).

Tout d'abord si votre carte est Plug'n Play sur bus ISA (très vieille carte son), veuillez lire la rubrique PnP car je suppose que votre carte PnP est correctement configurée.

Configuration du kernel

Vérifiez que le kernel est compilé avec comme options :

loadable module support YES
Kernel module support YES
config sound M (module)

et tous les supports des différentes cartes sons en M (par exemple config sounblaster M, config awe M ...).

Une fois votre kernel compilé (make dep, make clean, make zlilo ou bzImage et config de lilo) ainsi que les modules (make modules, make modules_install en ayant renommé le répertoire /lib/modules/version_kernel en /lib/modules/version_kernel-old par exemple avant le make modules_install ) (voir [../kernel/kernel.php3 rubrique noyau] ) on édite le fichier /etc/conf.modules.

Configuration /etc/modules.conf (ou conf.modules suivant votre distribution).

C'est ce fichier qui va permettre de charger les modules de votre carte son. La syntaxe est assez simple :

alias sound nom_module (par exemple nom_module=sb pour une soundblaster)
options sound io=0xADR irq=IRQ DMA0=dma8bits DMA1=dma16bits

(avec ADR l'adresse d'entrée sortie de la carte, 220 par exemple, IRQ l'irq (interruption) bien sûr, DMA0 et DMA1 les numéros des canaux DMA 8 et 16 bits)

Comme je ne connais pas toutes les cartes son et les modules par coeur, veuillez vous référer aussi au HOWTO sur le son, et les MINI-HOWTO pour les cartes son spécifiques pour des modules complémentaires (midi, wavetable etc...). Avec ce que je vous donne vous avez déjà le support PCM (son numérique pour lire les WAV, MP3 par exemple). Vous trouverez alors les options que l'on peut passer à chaque module et leur significations. La liste des HOWTO traduits en français est disponible [../docs/howto.php3 ici].

Pour tester si on utilise le bon module, on va le charger manuellement:

modprobe sound

ça devrait se charger sans problème ; sans messages d'erreurs. S'il y en a un, vérifiez votre /etc/conf.modules, peut-être que vous avez fourni de mauvaises options ou un mauvais module pour votre carte son (attention aux cartes son soi-disant compatibles Sound Blaster, comme celles à base de chipset crystal, charger le module pour crystal et non pas le SB).De même les dernières SoundBlaster (Live, Audigy etc..) n'utilise pas le module sb mais des nouveaux modules comme le emu10k1.

Une fois le module chargé, on peut tester le son, lancez alors une application qui joue du son comme par exemple mpg123 pour les mp3, workbone pour lire les CD ou tout autre application sous X comme XMMS.

S'il n'y a pas de son qui sort mais que vous n'avez aucune erreur, regardez aussi avec un mixer sous un WM que les volumes sonores ne sont pas à zéro aussi, et que votre lecteur CD est bien relié à la carte son. Vérifiez aussi que le plugin de sortie de XMMS est bien : oss, ou arts (si vous êtes sous KDE), ou esd (si vous êtes sous Gnome).

Si ça fonctionne : vous avez gagné ! Votre carte son est configurée.

Mais, une chose frustrante, c'est que vous avez une carte full duplex par exemple, mais OSS par défaut ne prend pas en charge le full duplex ! Quoi ce super OS ne prend pas en charge le full duplex ??? Si, rassurez-vous :) Deux solutions là, soit passez à la version commerciale de OSS, soit passez par ALSA qui de toute façon devient le driver son offciel du kernel maintenant (à partir du 2.6).

ALSA

Qu'est-ce donc? Non je vous entends rire ce n'est pas la préparation pour les flans ou gâteaux :)
C'est un nouveau support des cartes son pour Linux, full duplex, GPL et qui gère beaucoup mieux les ressources systèmes que son homologue OSS. Le développement de ce projet est extrêmement actif, on a à peu près une mise à jour toutes les deux semaines avec presque à chaque fois des supports pour de nouvelles cartes son. De plus il a l'excellente idée d'être (presque) 100% compatible avec les applications qui utilisent OSS. Bref je vous encourage vivement d'installer les drivers ALSA quelque soit la version de votre kernel.

Compilation des drivers ALSA

Avant de compiler quoi que ce soit, vérifiez quand même que votre distribution ne comporte pas déjà les drivers ALSA (ce qui le cas maintenant pour les distributions les plus connues) ou s'il n'existe pas déjà un "package" tout prêt pour votre distribution.

Bon tout d'abord, si vous avez un kernel inférieur à la version 2.6, allez sur leur site (www.alsa-project.org) et récupérez les Drivers, Library, Utilities, Tools, Firmware et OSS compat.Library dans leurs dernières versions (1.0.4 à l'heure où j'écris ces lignes).

Bon dans un répertoire de votre choix et en tant que root, on dézippe/détarre tout ça :

tar zxvf nom_du_tar.bz2

Avant de continuer, on va enlever toutes les entrées correspondantes au son dans /etc/modules.conf (si vous ne savez pas quelles lignes enlever, envoyez dans la liste de diffusion ou le forum votre /etc/modules.conf et on vous aidera (mais ce sont des lignes qui commencent par alias snd-card... ou alias sound-slot...).

Une fois cela fait, vous allez dans le répertoire des sources alsa-drivers, puis :

./configure options
make
make install

La plupart du temps un simple ./configure sans option suffit. Mais si vous vous apercevez qu'il vous manque le support midi ou autre, vous pouvez toujours forcer les options avec:

--with-isapnp=yes SI votre carte son est une carte ISA PnP (SBawe64, etc...)
--with-sequencer=yes Activer le support midi (surtout pour les cartes dites "WAVETABLE")
--with-oss=no Désactiver le support OSS (vivement déconseillé, 90% des applications utilisent un support OSS)
--with-debug=full Information de déboguage (si vous avez des bugs et que vous voulez les reporter à l'équipe de développement ALSA ou si vous êtes développeur)
--with-debug=detect
Pour activer le déboguage pour la détections des cartes son. Même remarque qu'au dessus si votre carte n'est pas détectée.

Une fois les drivers compilés, lancez le script ./snddevices pour créer les entrées nécessaires dans /dev.

Puis compilez les librairies, puis les utilitaires (dans cet ordre autrement ça ne passera pas) par le classique : ./configure && make && make install.

Configuration des modules ALSA.

Il existe un outils livré avec les drivers ALSA qui configure tout tout seul, alors pourquoi s'en priver!
Cet outil s'appelle alsaconf et il doit être installé si vous avez bien compilé/installé les Utilities. Si votre distribution ne vous fournit pas cet utilitaire, récupérez le téléchargeant juste les Utilities sur http://www.alsa-project.org.

Si maintenant alsaconf ne fonctionne pas, ou si vous voulez vraiment configurez le tout à la main on va entrer alors dans les détails. Tout d'abord il faut absolument que vous sachiez quelle est votre carte son précisément. Une référence "compatible sound blaster" ne suffit pas, il existe plus de 10 chipsets «compatibles sound blaster» qui pour ALSA sont 10 cartes différentes avec des modules différents. En fait ALSA dispose d'un module par chipset. Donc renseignez vous sur votre carte son (notice, site web du constructeur, etc...).

Une fois que vous savez qu'elle est votre carte son, vous allez la chercher ici: http://www.alsa-project.org/alsa-doc/ en choisissant en premier la marque dans la liste déroulante puis en cliquant sur "Détails" dans la colonne "Driver & doc" qui correspond à votre modèle de carte son.
Une fois arrivé sur la page de documentation, recherchez alors la rubrique "Setting up modprobe and kmod support" qui va vous donner les lignes à ajouter dans votre /etc/modules.conf, ajoutez-les et voilà!

Réglages et automatisation.

Un des problèmes les plus courants avec ALSA est que vous avez tout configuré, aucun message d'erreur mais vous n'avez aucun son! En fait cela est souvent normal car ALSA règle par défaut tout les volumes à zéro ET met en sourdine aussi tout les canaux de votre carte son. Pour remédier à ça et pour que les volumes soient conservés à chaque redémarrage vous devez dans un premier temps vous assurez que vous ayez un script de démarrage "ALSA" sur votre système. C'est surement le cas si ALSA est fournit dans votre distribution, autrement vous en trouverez de déjà tout fait alsasound dans le sous répertoire utils des sources de Drivers de ALSA.

Suivant votre distribution, installez ce script de démarrage ALSA pour les niveaux d'init que vous souhaitez. Si, c'est du chinois, lisez cette documentation.

Une fois ce script installé, démarrer alors le service ALSA via ce dernier (la lecture de la documentation précitée peut vous y aider. Lancez alors en tant que root et en console l'utilitaire alsamixer. Vous allez alors régler les volumes de chaque canal de votre carte son à votre convenance. Pour cela utilisez les flèches pour choisir le canal et régler son volume sans oublier de DEMUTER le canal en appuyant sur la touche M (si le canal est muté un M apparaît au dessus de l'indicateur de volume).

Une fois les volumes réglés comme vous le souhaitez, quittez alsamixer par ALT+X. Sauvegardez alors ces volumes pour le prochain redémarrage via la commande:

alsactl store .

De ce fait, tout vos réglages seront conservés lors du prochain reboot.

un petit mot sur les démons de son

Gnome et KDE utilisent chacun un démon de son, malheureusement différent : c'est ESD pour Gnome et ARTS pour KDE. Qu'est-ce que c'est ? C'est est un programme qui s'intercale entre le support son (OSS ou ALSA) et les applications, et qui permet par exemple à plusieurs amplications de jouer du son simultanément (on peut ainsi jouer un mp3 et entendre les sons système de son environnement en même temps, tout en recevant les notifications sonores de licq).

ESD

Pour ceux qui aiment bien Gnome et qui l'utilisent, je vous signale que celui-ci utilise par défaut ESD comme démon sonore, donc il faut l'activer avant tout !
Cochez la case correspondante dans la configuration de Gnome relative aux sons systèmes, il lancera alors ESD dès son démarrage. Attention : certaines applications ne savent pas utiliser ESD pour le son, donc ne vous étonnez pas de ne plus avoir de son sous certaines applications après avoir lancé ESD, d'autres demandent d'être recompilées pour utiliser ESD, pour d'autres comme XMMS un plugin suffit. ESD est nécessaire aussi pour Enlightenment (c'est d'ailleurs pour cela qu'il est nécessaire pour Gnome vu que E est (était) souvent le WM de gnome). ESD tourne sans problème à partir du moment où votre carte son fonctionne au départ. Lancez ESD sous un terminal/console et vous entendrez un « tu lu lu » indiquant que ESD est lancé et fonctionne. Il tourne alors en arrière plan comme daemon.

ARTS

ARTS est le démon de son de KDE. Selon votre distribution, il sera activé par défaut ou non. Pour l'activer ou le désactiver, lancez le panneau de configuration de KDE, dans la rubrique son vous trouverez une case à cocher pour activer arts au démarrage de KDE. En cliquant sur [OK] ou [Appliquer], le démon sera démarré automatiquement.
De la même façon que pour ESD, il faut généralement un plugin pour utiliser arts, par exemple avec xmms ou xine. Certains programmes (comme licq par exemple) peuvent utiliser un simple script soundwrap qui jouera le son via arts si celui-ci est présent, ou directement via les drivers son sinon. Si votre programme permet de configurer l'utilitaire qui joue les sons, vous pourrez l'utiliser ainsi à travers arts.

Enfin, pour certains programmes ne supportant pas arts (ou esd d'ailleurs) il sera nécessaire d'arrêter le démon afin qu'ils puissent faire du bruit !

Cette page est issue de la documentation 'pré-wiki' de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Serge Tchesmeli le 15/10/1999.

Copyright

Copyright © 15/10/1999, Serge Tchesmeli

Vous avez l'autorisation de copier, distribuer et/ou modifier ce document suivant les termes de la Licence pour documents libres, Version 1.1 publiée par la La Guilde des Doctorants. Pour plus d'informations consulter la LDL sur le site de La Guilde des Doctorants.