8. Son

8.1. Quelle carte son est la meilleure ?

Par « meilleure », j'entends « meilleure pour le jeu ». Les joueurs demandent une haute qualité sonore sans trop de paramétrage à effectuer. Les musiciens ont par contre d'autres exigences : le concept de « meilleure carte son » sera probablement différent pour eux. Si vous êtes un musicien, vous devriez consulter le « Guide pratique de la qualité du son sous Linux » (Linux Audio Quality HOWTO).

Maintenant que Linux commence à mûrir, cette question a perdu de son importance. Auparavant, les cartes son sans puce MIDI intégrée (la plupart des cartes son PCI) ne pouvaient pas interpréter le MIDI. C'était principalement un problème pour les jeux comme xdoom™ ou lxdoom™ qui utilisent musserv. De nos jours, il existe des émulateurs MIDI comme Timidity et des bibliothèques comme SDL qui ne requièrent pas de support MIDI matériel. Franchement, j'ai eu beaucoup de cartes et je n'ai pas constaté de différences en ce qui concerne le jeu. Si vous voulez des choses comme la conversion d'un enregistrement LP en format numérique, alors votre choix de carte son se portera sur un convertisseur analogique/numérique de niveau professionnel. Dans ce guide, nous supposerons que vous êtes plus un joueur qu'un ingénieur du son.

Votre décision devrait se baser sur la facilité de configuration. Si vous avez déjà une carte qui fonctionne bien, c'est suffisant. Si vous explorez le marché pour acheter une carte son, prenez quelque chose qui ne prend qu'une seconde à configurer. Les cartes PCI sont beaucoup plus faciles à gérer que les cartes ISA car vous ne devez pas indiquer à leur pilote quelles ressources système (IRQ, DMA, adresses d'entrée-sortie) utiliser. Certaines cartes ISA sont plug-n-play, comme la Creative AWE-64, et le noyau Linux a beaucoup évolué pour les auto-configurer.

Ma recommandation personnelle est une carte à base de es1370 ou es1371, qui utilise les pilotes son es1370 et es1371 sous Linux. Ces cartes vont de la plus ancienne Ensoniq es1370 à la plus récente Creative PCI-128. Ces cartes sont très bon marché et triviales à faire fonctionner sous Linux.

J'étais un grand fan des cartes son Creative Soundblaster AWE 32, AWE 64 et AWE 64 gold. Ces cartes ISA PnP sont bien prises en charge à la fois par OSS et par Alsa. Elles utilisent toutes la même puce de synthèse sonore E-mu 8000 qui leur permet de jouer 32 voix simultanément (elles ont 32 « canaux »). Elles sont ISA, mais plug-n-play. Quelques remarques : primo, le Soundblaster AWE HOWTO est très dépassé. Secundo, la AWE 64 et la AWE 64 gold peuvent jouer jusqu'à 64 voix simultanément, mais cela est fait en logiciel. Creative n'a jamais publié de pilote Linux pour ces cartes (ni n'ont publié d'informations de programmation à ce sujet), et les utilisateurs Linux ne peuvent donc pas utiliser les 32 canaux supplémentaires de la AWE 64 et de la AWE 64 gold. Pour eux, ces trois cartes sont complètement identiques (bien que la AWE 64 gold ait des connecteurs plaqués or, qui offrent une meilleure qualité de son que les connecteurs en acier habituels).

La Creative Soundblaster Live! est une carte son PCI extrêmement populaire de nos jours. Je n'en ai jamais possédé, et je ne peut donc pas vous donner mes impressions. Néanmoins, on a reporté à de nombreuses reprises des problèmes sérieux avec la Live! et les cartes mères AMD qui utilisent le southbridge 686b. Une recherche sur Google devrait produire un tas d'informations sur ce problème.

Un élément plus pertinent est les haut-parleurs, mais même ici la différence n'est pas énorme. J'ai eu des haut-parleurs Altec Lansing coûteux qui ne fonctionnent que légèrement mieux que les haut-parleurs bon marché. Tout dépend du prix que vous êtes disposé(e) à mettre, mais ne vous attendez pas à de grosses différences. Vous devriez vous procurer quelque chose avec un caisson de basses séparé : les différences sont perceptibles au prix de câbles d'alimentation et de connecteurs supplémentaires.

8.2. Pourquoi le son ne fonctionne-t-il pas ?

Tout d'abord, votre jeu n'est probablement pas en cause ; il s'agit probablement de votre configuration. À ma connaissance, il y a 3 possibilités pour faire fonctionner une carte son configurée sous Linux : les pilotes son libres OSS accompagnant le noyau Linux, les pilotes Alsa et les pilotes son OSS commerciaux. Personnellement, je préfère les pilotes OSS, mais beaucoup ne jurent que par Alsa. Les pilotes commerciaux sont bons quand vous avez du mal à faire fonctionner votre carte son avec des méthodes libres. Ne crachez pas dessus : ils sont très bon marché (du genre 10 ou 20 $), supportent des cartes son du dernier cri et évitent beaucoup d'essai-erreur lors du processus de configuration.

Il y a 5 choses qui peuvent mal se passer avec votre système son :

  1. interruption partagée

  2. pilote mal configuré

  3. quelque chose accède déjà à la carte son

  4. mauvais pilote utilisé

  5. problème de permissions

8.2.1. Interruption partagée

La première chose à faire est de savoir s'il y a un conflit d'IRQ. Les cartes ISA ne peuvent pas partager de canaux d'interruption. Les cartes PCI le peuvent, mais certains types de cartes à grande bande passante n'aiment tout simplement pas partager, en ce compris les cartes réseau et son. Pour déterminer si vous avez un conflit, tapez cat /proc/interrupts. J'obtiens comme sortie sur mon système :

    $ cat /proc/interrupts
               CPU0       CPU1
      0:   24185341          0          XT-PIC  timer
      1:     224714          0          XT-PIC  keyboard
      2:          0          0          XT-PIC  cascade
      5:    2478476          0          XT-PIC  soundblaster
      5:     325924          0          XT-PIC  eth0
     11:     131326          0          XT-PIC  aic7xxx
     12:    2457456          0          XT-PIC  PS/2 Mouse
     14:     556955          0          XT-PIC  ide0
    NMI:          0          0
    LOC:   24186046   24186026
    ERR:       1353
    

La seconde colonne est présente car j'ai 2 processeurs sur cette machine ; si vous n'en avez qu'un, vous n'aurez qu'une seule colonne CPU. Les nombres sur la gauche sont les IRQ attribuées et les chaînes de caractères sur la droite indiquent quel périphérique a été assigné à cette IRQ. Vous pouvez voir que j'ai un conflit entre la carte son (soundblaster) et la carte réseau. Elles partagent l'IRQ 5. En fait, j'ai créé cet exemple de toutes pièces car je voulais vous montrer à quoi ressemble un conflit d'IRQ. Mais si j'avais ce conflit, ni mon réseau ni mon son ne fonctionneraient correctement (ou ne fonctionneraient tout court !).

Si la carte son est une PCI, le plus simple est de simplement déplacer l'une des cartes dans un port différent et d'espérer que le BIOS trie tout correctement. Une méthode plus avancée serait d'aller dans le BIOS et d'attribuer des IRQ à des ports spécifiques. Les BIOS modernes en sont capables.

8.2.2. Pilote mal configuré

Parfois, une carte utilisera toujours une certaine IRQ (uniquement pour les cartes ISA). Alternativement, certaines cartes ISA peuvent être configurées pour utiliser une IRQ spécifique en utilisant des cavaliers sur la carte elle-même. Avec ce type de cartes, vous devez passer les IRQ, adresses mémoire et port d'entrée-sortie corrects au pilote.

C'est un sujet spécifique à la carte son, qui dépasse le cadre de ce guide.

8.2.3. Quelque chose accède déjà à votre carte son

Peut-être une application accède-t-elle déjà à votre carte son ? Par exemple, peut-être y a-t-il un lecteur MP3 qui est en mode pause… Si quelque chose accède déjà à votre carte, d'autres applications ne pourront l'utiliser. Même s'il a été conçu pour partager la carte entre des applications, je trouve que esd (le serveur de son de Enlightenment) ne fonctionne pas toujours correctement. Le meilleur outil est lsof, qui montre quels processus accèdent à un fichier. Votre carte son est représentée par /dev/dsp. À l'instant, j'écoute un MP3 (pas de Metallica bien sûr…) avec mp3blaster.

    # lsof /dev/dsp
    COMMAND    PID USER   FD   TYPE DEVICE SIZE   NODE NAME
    mp3blaste 1108    p    6w   CHR   14,3      662302 /dev/dsp
    

fuser est similaire, mais vous permet d'envoyer un signal à un processus quelconque accédant au fichier de périphérique.

    # fuser -vk /dev/dsp
    
                         USER        PID ACCESS COMMAND
    /dev/dsp             root       1225 f....  mp3blaster
                         root       1282 f....  mp3blaster
    

Après avoir saisi la commande, mp3blaster a été tué par un signal SIGKILL. Voyez les pages de manuel de lsof et fuser ; elles sont très utiles. Vous devrez les exécuter en tant que root car vous demandez des informations concernant des processus pouvant appartenir à root.

8.2.4. Mauvais pilote (ou aucun pilote) utilisé

Il n'y a que deux façons de configurer votre carte :

  1. La prise en charge doit être compilée directement dans le noyau

  2. Le bon pilote doit être chargé en mémoire

Vous pouvez trouver quel pilote utilise votre carte son en utilisant lsmod ou en examinant la sortie de dmesg. Étant donné que le son est de première importance pour moi, je le compile toujours dans mes noyaux. Si aucun pilote n'est chargé, vous devez déterminer ce qui a été compilé dans votre noyau. Ce n'est pas si facile. Il vaut mieux compiler votre noyau. À propos, sachez que la compilation de votre propre noyau est la première étape vers la compétence sous Linux. C'est pénible la première fois, mais une fois que c'est fait correctement, cela devient très facile, en particulier si vous conservez tous vos anciens fichiers .config et utilisez des choses comme make oldconfig. Voyez le « Guide pratique du noyau Linux » (Kernel-HOWTO) pour les détails.

Si vous n'avez pas compilé votre noyau vous-même, il est très probable que votre système soit configuré de sorte à charger les pilotes son sous forme de modules. C'est ainsi que fonctionnent les distributions. Compilez tout ce qui est possible sous forme de module et essayez de les charger tous. Ainsi, si vous ne voyez pas le pilote de votre carte son avec lsmod, votre carte n'est probablement pas encore configurée.

8.2.5. Problème de permissions

Si la carte son ne fonctionne que lorsque vous êtes root, vous avez probablement un problème de permissions. Si c'est le cas, sous root, examinez le groupe propriétaire de la carte son en utilisant ls -l /dev/dsp ; il s'agira probablement de audio. Ensuite, sous root, ajoutez votre utilisateur non-root au groupe audio dans /etc/group. Par exemple, j'ai ajouté les utilisateurs toto et lulu au groupe audio sur mon système :

    audio:x:29:toto,lulu
    

N'oubliez pas d'utiliser grpconv si vous utilisez les mots de passe masqués (shadow passwords), ce qui devrait être le cas sur la plupart des distributions récentes, afin de préserver une configuration de groupes cohérente. Ensuite, déconnectez-vous et reconnectez-vous comme utilisateur normal. Votre carte son devrait fonctionner à présent. Merci à James Barton pour m'avoir rappelé d'ajouter ceci à ce guide.

Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:01:17