Bienvenue invité ( Connexion | Inscription )
RÈGLES ET MEILLEURS LIENS
Les tutoriaux des distributions : Ubuntu | Mandriva | Suse | Debian | Gentoo | FreeBSD
Les liens importants : Pourquoi/Comment passer au libre ? | Choisir sa distributon | Débuter | Gestionnaire de démarrage | X (graphique) | Jeux
![]() ![]() |
16-08-2005 02:10:34
Message
#1
|
|
![]() #!/bin/bash echo "modo" Groupe : MODO Messages : 7 414 Inscrit : 04-09-2003 Lieu : Lannion, Rennes, Paris Membre n° 12 150 |
Sommaire
|
|
|
|
16-08-2005 02:12:02
Message
#2
|
|
![]() #!/bin/bash echo "modo" Groupe : MODO Messages : 7 414 Inscrit : 04-09-2003 Lieu : Lannion, Rennes, Paris Membre n° 12 150 |
La gestion du son est primordiale pour une bonne expérience multimédia, quel que soit l'OS. Sous Linux, le système de gestion des flux sonores était auparavant OSS (Open Sound System). Mais il avait certaines limitations (performances non optimales, difficultés de configuration, etc...) C'est dans ce contexte qu'a été créé ALSA (pour Advanced Linux Sound Architecture). ALSA est composé de 4 composants principaux :
Je vais par la suite décrire chacun de ces composants plus précisément, puis montrer comment configurer un système en utilisant ALSA. Quelques liens relatifs : http://www.alsa-project.org : site officiel du projet http://www.alsa-project.org/alsa-doc : liste de l'état du support des différentes cartes son http://alsa.opensrc.org : wiki officiel, contient vraiment beaucoup d'infos |
|
|
|
16-08-2005 02:13:58
Message
#3
|
|
![]() #!/bin/bash echo "modo" Groupe : MODO Messages : 7 414 Inscrit : 04-09-2003 Lieu : Lannion, Rennes, Paris Membre n° 12 150 |
Pour activer alsa dans le noyau, il faut activer la gestion du son (Device Drivers->Sound) et ALSA (Devices Drivers->Sound->Advanced Linux Sound Architecture). En général, sur les noyaux fournis avec les distributions Linux, c'est activé en module, il faut donc charger les modules "sound" et "soundcore", mais ne vous préoccupez pas d'eux ils sont chargés automatiquement lorsque l'on charge un driver. ALSA permet aussi de simuler le comportement de OSS et donc d'utiliser les programmes qui l'utilisent encore (certains jeux par exemple). Dans la configuration du noyau, ils s'apellent "OSS Mixer API", "OSS PCM (digital audio) API" et "OSS Sequencer API", les modules correspondant s'appellant "snd-mixer-oss", "snd-pcm-oss" et "snd-seq-oss". Note : en général ces modules sont intégrés aux packages noyaux des distributions. C'est sans doute la partie la plus importante... Les drivers permettent de faire reconnaître votre carte son à ALSA. Ils sont très nombreux et il est rare de ne pas trouver de support pour sa carte son. Cela va des vieilles cartes ISA aux cartes son USB en passant évidemment par toutes les cartes PCI... Les modules correspondant à ces drivers on un nom commençant obligatoirement par "snd-", ce qui les rend facile à repérer ("modprobe -l | grep snd-" ?). Note : En génréal les distributions linux fournissent un nombre important de ces modules avec leurs noyaux. Tous les accès aux systèmes sonores se font par cette bibliothèque (libasound.so). Cela permet notamment une configuration plus simple, et plus personalisée (notamment lecture du fichier .asoundrc dans le répertoire home de l'utilisateur). Ce mode de programmation permet aussi une meilleure gestion des système multiprocesseurs SMP et SMT (HyperThreading). Note : Cette bibliothèque s'installe en général en dépendance des utilitaires ci-dessous, mais voici le nom des paquet pour information (si vous savez pour d'autres distribs, dites-le gentoo : alsa-lib debian/ubuntu : libasound2 Les outils de base de alsa ("alsa-utils") permettent de gérer et de débugger ALSA. Ces outils sont : - aconnect : connexion de ports dans le séquenceur, permet aussi le listage des ports (options -i et -o) * alsamixer : mixer très complet en ligne de commande permettant de gérer la totalité des entrées/sorties disponibles de chaque driver. - amidi : lecture et écriture bas niveau des ports "RawMIDI", pour lire des .midi, utiliser aplaymidi/arecordmidi * aplay : lecture d'un fichier .wav par alsa... très utile pour faire des tests. - aplaymidi : lecture d'un fichier .midi par alsa * arecord : enregistrment d'un fichier .wav depuis alsa, utile pour faire de l'acquisition/enregistrement audio. - arecordmidi : enregistrement d'un fichier .midi depuis alsa - aseqdump : listage des évènements reçus par les ports séquenceurs (midi) de alsa - aseqnet : transport des ports séquenceurs par le réseau - iecset : gestion du statut des ports S/PDIF * speaker-test : test des haut-parleurs, permet de tester la bonne configuration de alsa * alsaconf : détection automatique de la carte son, chargement du module et configuration * alsactl : sauvegarde/chargement de l'état du mixer Il existe aussi quelques autres applis utiles : * aoss : permet de lancer les applications utilisant oss en passant par alsa - alsamixergui : un peu comme alsamixer, mais en graphique Il existe enfin les "alsa-tools" mais ces programmes seront inutiles pour la plupart des gens... Note 1 : voici les paquets requis pour avoir tout ceci sont : gentoo : alsa-utils (alsa-oss, alsamixergui, alsa-tools) debian : alsa-utils (alsa-oss, alsamixergui) Note 2 : je considère les programmes avec une étoile comme étant plus intéressants que les autres |
|
|
|
16-08-2005 02:15:36
Message
#4
|
|
![]() #!/bin/bash echo "modo" Groupe : MODO Messages : 7 414 Inscrit : 04-09-2003 Lieu : Lannion, Rennes, Paris Membre n° 12 150 |
La première chose à faire pour faire marcher sa carte son sous linux avec ALSA, c'est de trouver le driver correspondant à sa carte son. Pour cela deux solutions s'offrent à vous:
CODE $ lspci | grep "Multimedia audio"
Ensuite, allez sur la page des drivers http://www.alsa-project.org/alsa-doc , sélectionnez le vendeur et trouvez le nom du module (par exemple, pour une C-Media CMI8738, ce sera "snd-cmipci") Une fois le module trouvé, chargez-le CODE $ modprobe <module>
CODE $ dmesg | tail [...] intel8x0_measure_ac97_clock: measured 50182 usecs intel8x0: clocking to 48000
Par exemple, avec une Sound Blaster Live! 5.1, /proc/asound/cards contient ceci, une fois le driver snd-emu10k1 chargé : CODE $ cat /proc/asound/cards 0 [Live ]: EMU10K1 - SB Live [Unknown] SB Live [Unknown] (rev.10, serial:0x100a1102) at 0xd000, irq 169 À partir de là, c'est presque gagné, il reste encore à augmenter tous les volumes de la carte son avec la commande "alsamixer" (ne pas oublier d'enlever le muet de tous les canaux avec la touche M : il faut OO et non pas MM pour chaque volume). Maintenant vous pouvez tester si le son marche à l'aide de la commande "speaker-test" (neige audio) et "speaker-test -t 2" (fréquence fixe). Et voilà! Maintenant vous pouvez écouter de la musique avec tous les programmes compatibles alsa... Bon, puisque un programme OSS peut toujours pointer son nez, on charge les (3) modules correspondants à l'amulation oss, ce qui permet aux programmes OSS de marcher quand même (Mais il vaut quand même mieux configurer les logiciels pour utiliser alsa...). Les fichiers de configuration de alsa sont /etc/asound.conf et ~/.asoundrc Ils peuvent ne pas exister (l'un, l'autre, ou les 2), mais alsa essaye toujours de les charger dans l'ordre (ça marche comme un .bashrc quoi... |
|
|
|
16-08-2005 02:16:46
Message
#5
|
|||
![]() #!/bin/bash echo "modo" Groupe : MODO Messages : 7 414 Inscrit : 04-09-2003 Lieu : Lannion, Rennes, Paris Membre n° 12 150 |
(ou "mais pourquoi je peux pas écouter 2 sons à la fois?") Sur certaines cartes son (par exemple beaucoup de compatibles AC'97 de base intégrés aux cartes mères), il n'est pas possible d'écouter 2 flux audio (ou plus) simultanément. Les autres cartes son font ce qu'on appelle du "Hardware mixing" (mixage matériel, géré par la carte son directement), mais ceci est indisponible sur certaines, que ce soit pour des raisons matérielles (chip sonore ne le permettant pas) ou logiciel (driver n'utilisant pas 100% des capacités du chip sonore car il a été créé par reverse-engineering, c'est le cas du driver pour les cartes nForce)... Il faut donc faire du "Software mixing" (mixage logiciel). C'est possible de le faire de plusieurs façons : Un "serveur de son" est un logiciel qui collecte le son des différents programmes, les rassemble et crée une seule connexion au système sonore (à ALSA, quoi). Le seul inconvénient de ce système est qu'il n'est pas standard et qu'il faut donc utiliser une API spéciale pour l'utiliser (ce qui reviendrait donc à modifier à peu près tous les logiciels qui produisent du son pour qu'ils puissent l'utiliser). (Les serveurs de son induisent aussi quelques fois de la latence, ce qui peut être assez désagréable dans certains cas) Comme serveur de son, il y a notamment arts (le serveur de son de KDE) et esd (le serveur de son de enlightenmt). Pour utiliser un serveur de son, il faut tout d'abord le lancer. KDE lance le serveur arts (artsd) dès qu'il se lance, mais si on n'utilise pas KDE il faut le lancer à la main. (même chose pour esd) Et enfin configurer l'application que l'on souhaite utiliser pour qu'elle passe par le serveur de son. dmix est intégré à ALSA et fait le software mixing. L'avantage par rapport aux serveurs de son, c'est qu'il utilise l'interface alsa standard, et est donc compatible avec toutes les applis utilisant déjà ALSA. Aucune modification dans les programmes déjà écrits pour ALSA n'est donc nécécessaire, il faut juste configurer un peu ALSA. Il faut donc mettre ceci dans le fichier de conf de alsa : (/etc/asound.conf pour une configuration pour tout le monde) (~/.asoundrc pour un configuration perso)
On dit à alsa d'utiliser dmix par défaut (on utilise ici le dmix préconfiguré, voir plus loin pour des détails). |
||
|
|
|||
16-08-2005 02:18:10
Message
#6
|
|||||
![]() #!/bin/bash echo "modo" Groupe : MODO Messages : 7 414 Inscrit : 04-09-2003 Lieu : Lannion, Rennes, Paris Membre n° 12 150 |
(ou "Mon logiciel utilise OSS donc je ne peux pas utiliser dmix et avoir plusieurs flux audios simultanés :'( ") Pour résoudre ce problème, il faut utiliser aoss et configurer un peu ALSA :
On dit à alsa d'utiliser dmix pour les appels à /dev/dsp0 Cela ne suffit pas, il faut ensuite appeler le programme à l'aide de "aoss" : "aoss programme" Cela permet de passer par la configuration de alsa et de tout faire marcher... Note : certaines applications utilisent "mmap" pour accéder à la carte son, cela peut marcher assez mal. Quelques fois (par exemple sur mon PC) la configuration originale de dmix n'est pas optimale. Personellement, ce qui m'arrive, c'est que lorsque j'utilise la configuration "dmix" par défaut avec OSS, la lecture de la musique avec mplayer est très saccadée, et avec la plupart des applis il y a des petits problèmes... Enfin bref, pas top, quoi... Il est possible de configurer un périphérique de type dmix à la main avec quelques options différentes afin de régler ces petits problèmes...
Pour pouvoir utiliser notre périphérique perso, il suffit de changer "dmix" par "mix" dans "pcm.!default" et "pcm.dsp0". Les deux paramètres commentés ne changent pas grand chose chez moi, par contre buffer_size change radicalement le comportement de l'émulation OSS avec dmix. Faites différents tests pour savoir quelles sont les meilleurs réglages chez vous! |
||||
|
|
|||||
16-08-2005 02:18:56
Message
#7
|
|
![]() #!/bin/bash echo "modo" Groupe : MODO Messages : 7 414 Inscrit : 04-09-2003 Lieu : Lannion, Rennes, Paris Membre n° 12 150 |
ALSA permet d'utiliser simultanément plusieurs cartes son. Il suffit de regarder les noms ou les numéros dans /proc/asound/cards et d'utiliser ensuite le programme avec ce nom ou ce numéro. Par exmple moi j'ai ceci : CODE $ cat /proc/asound/cards 0 [Live ]: EMU10K1 - SB Live [Unknown] SB Live [Unknown] (rev.10, serial:0x100a1102) at 0xd000, irq 169 1 [AMD768 ]: ICH - AMD AMD768 AMD AMD768 with ALC200,200P at 0xe400, irq 169 La carte numéro 0 s'appelle "Live", la carte numéro 1 s'appelle "AMD768" Nous allons essayer de faire jouer un .wav avec aplay sur la carte numéro 1 (à savoir l'ALC200 compatible AC'97 de ma carte mère utilisant le module snd-intel8x0) Soit nous utilisons le nom de la carte ("AMD768") : CODE $ aplay -D hw:AMD768 Soit le numéro : CODE $ aplay -D hw:1 Et même si on veut le numéro du sous-système de la carte : CODE $ aplay -D hw:AMD768,0 $ aplay -D hw:1,0 Quelques programmes peuvent avoir une syntaxe différente, mais en général, c'est "[type]:[carte],[sous-système]" (par exemple mplayer demande d'écrire les ":" en "=" et les "," en ".") Pour configurer la carte son par défaut, il y a deux façons :
|
|
|
|
16-08-2005 02:19:19
Message
#8
|
|||||
![]() #!/bin/bash echo "modo" Groupe : MODO Messages : 7 414 Inscrit : 04-09-2003 Lieu : Lannion, Rennes, Paris Membre n° 12 150 |
Les jeux linux natifs récents utilisent quelques fois directement alsa, mais ce n'est pas toujours le cas...
NeverWinter Nigths utilise SDL, mais son cas un peu spécial : il inclue par défaut une version de libSDL qui n'utilise pas alsa. Pour utiliser votre propre libSDL, il faut éditer le script "nwn" à la racine du jeu et enlever "./lib:" de la ligne "LD_LIBRARY_PATH" ou supprimer le contenu du dossier lib du jeu (ou les 2 :))
UT2004 utilise OpenAL, mais la librairie incluse ne supporte ni alsa ni SDL, et la librairie SDL incluse ne supporte pas alsa... Il faut donc supprimer (renommer?) openal.so et libSDL-1.2.so, puis créer des liens symboliques : /usr/lib/libopenal.so -> openal.so et /usr/lib/libSDL.so -> libSDL-1.2.so.0 Il faut ensuite mettre (define devices '(sdl)) Pour pouvoir avoir un peu de son (mais pas exactement synchronisé... pas cool) |
||||
|
|
|||||
16-08-2005 02:19:51
Message
#9
|
|
![]() #!/bin/bash echo "modo" Groupe : MODO Messages : 7 414 Inscrit : 04-09-2003 Lieu : Lannion, Rennes, Paris Membre n° 12 150 |
réservé
|
|
|
|
16-08-2005 02:20:23
Message
#10
|
|
![]() #!/bin/bash echo "modo" Groupe : MODO Messages : 7 414 Inscrit : 04-09-2003 Lieu : Lannion, Rennes, Paris Membre n° 12 150 |
réservé
|
|
|
|
16-08-2005 02:20:44
Message
#11
|
|
![]() #!/bin/bash echo "modo" Groupe : MODO Messages : 7 414 Inscrit : 04-09-2003 Lieu : Lannion, Rennes, Paris Membre n° 12 150 |
réservé
|
|
|
|
16-08-2005 02:21:08
Message
#12
|
|
![]() #!/bin/bash echo "modo" Groupe : MODO Messages : 7 414 Inscrit : 04-09-2003 Lieu : Lannion, Rennes, Paris Membre n° 12 150 |
réservé
|
|
|
|
16-08-2005 02:21:34
Message
#13
|
|
![]() #!/bin/bash echo "modo" Groupe : MODO Messages : 7 414 Inscrit : 04-09-2003 Lieu : Lannion, Rennes, Paris Membre n° 12 150 |
réservé
|
|
|
|
16-08-2005 02:21:58
Message
#14
|
|
![]() #!/bin/bash echo "modo" Groupe : MODO Messages : 7 414 Inscrit : 04-09-2003 Lieu : Lannion, Rennes, Paris Membre n° 12 150 |
réservé
|
|
|
|
16-08-2005 02:23:25
Message
#15
|
|
![]() #!/bin/bash echo "modo" Groupe : MODO Messages : 7 414 Inscrit : 04-09-2003 Lieu : Lannion, Rennes, Paris Membre n° 12 150 |
réservé
|
|
|
|
16-08-2005 02:23:53
Message
#16
|
|
![]() #!/bin/bash echo "modo" Groupe : MODO Messages : 7 414 Inscrit : 04-09-2003 Lieu : Lannion, Rennes, Paris Membre n° 12 150 |
réservé
|
|
|
|
16-08-2005 02:24:26
Message
#17
|
|
![]() #!/bin/bash echo "modo" Groupe : MODO Messages : 7 414 Inscrit : 04-09-2003 Lieu : Lannion, Rennes, Paris Membre n° 12 150 |
réservé
|
|
|
|
16-08-2005 02:24:48
Message
#18
|
|
![]() #!/bin/bash echo "modo" Groupe : MODO Messages : 7 414 Inscrit : 04-09-2003 Lieu : Lannion, Rennes, Paris Membre n° 12 150 |
réservé
|
|
|
|
16-08-2005 02:26:07
Message
#19
|
|
![]() #!/bin/bash echo "modo" Groupe : MODO Messages : 7 414 Inscrit : 04-09-2003 Lieu : Lannion, Rennes, Paris Membre n° 12 150 |
réservé
|
|
|
|
16-08-2005 02:27:44
Message
#20
|
|
![]() #!/bin/bash echo "modo" Groupe : MODO Messages : 7 414 Inscrit : 04-09-2003 Lieu : Lannion, Rennes, Paris Membre n° 12 150 |
réservé
|
|
|
|
![]() ![]() |
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :
|
Version bas débit
![]() |
Nous sommes le : 06-07-2009 00:38:16 |
Partenaire : forum science






16-08-2005 02:10:34



