Advanced Linux Sound Architecture (Français)

From ArchWiki
État de la traduction: Cet article est la version francophone de Advanced Linux Sound Architecture. Date de la dernière traduction: 2022-03-10. Vous pouvez aider à synchroniser la traduction s'il y a eu des changements dans la version anglaise.

Advanced Linux Sound Architecture (ALSA) fournit des pilotes de cartes son pilotés par le noyau. Il remplace le système original Open Sound System (OSS).

Outre les pilotes de périphériques sonores, ALSA fournit également une bibliothèque pilotée par l'espace utilisateur pour les développeurs d'applications. Ceux-ci peuvent alors utiliser ces pilotes ALSA pour le développement d'API de haut niveau. Cela permet une interaction directe (noyau) avec les périphériques sonores par le biais des bibliothèques ALSA.

Installation

ALSA est un ensemble de modules intégrés au noyau Linux. Par conséquent, une installation manuelle n'est pas nécessaire.

udev détectera automatiquement votre matériel et sélectionnera les pilotes nécessaires au démarrage, par conséquent, votre son devrait déjà fonctionner. Cependant, il se peut que votre son soit initialement coupé. Si c'est le cas, consultez #Réactiver les canaux.

Privilèges de l'utilisateur

Habituellement, les utilisateurs locaux ont la permission de lire le son et de modifier les niveaux du mixeur.

Pour permettre aux utilisateurs distants d'utiliser ALSA, vous devez ajouter ces utilisateurs au groupe audio, mais cela n'est pas recommandé par défaut (consultez la note ci-dessous).

Note: L'ajout d'utilisateurs au groupe audio permet un accès direct aux périphériques. N'oubliez pas que cela permet aux applications de réserver exclusivement les périphériques de sortie. Cela peut perturber le mixage des logiciels ou le changement rapide d'utilisateur sur les systèmes multipostes. Par conséquent, l'ajout d'un utilisateur au groupe audio n'est pas recommandé par défaut, sauf si vous en avez spécifiquement besoin [1].

Utilitaires ALSA

Installez le paquet alsa-utils. Il contient (entre autre) les utilitaires alsamixer(1) et amixer(1). amixer est une commande shell permettant de modifier les paramètres audio, tandis que alsamixer fournit une interface plus intuitive basée sur ncurses pour la configuration des périphériques audio.

Si vous avez besoin du rééchantillonnage de haute qualité, installez le paquet alsa-plugins pour activer upmixing/downmixing et d'autres fonctionnalités avancées.

Compatibilité OSS

Note: Ceci est important si votre application se plaint de l'absence de /dev/dsp ou /dev/snd/seq.

ALSA a la capacité d'intercepter les appels OSS et de les réacheminer à travers ALSA. Cette couche d'émulation est utile, par exemple, pour les anciennes applications qui essaient d'ouvrir /dev/dsp et d'y écrire directement des données sonores. Sans OSS ou la bibliothèque d'émulation, /dev/dsp sera absent, et l'application ne produira aucun son.

Si vous voulez que les applications OSS fonctionnent avec dmix, installez également le paquet alsa-oss. Chargez ensuite les modules du noyau snd-seq-oss, snd-pcm-oss et snd-mixer-oss pour activer l'émulation OSS.

Compatibilité avec PulseAudio

apulseAUR vous permet d'utiliser ALSA pour les applications qui ne prennent en charge que PulseAudio pour le son. L'utilisation est simple :

$ apulse yourapplication

ALSA et systemd

Le paquet alsa-utils est livré avec les fichiers de configuration de l'unité systemd alsa-restore.service et alsa-state.service par défaut.

Ils sont automatiquement installés et activés lors de l'installation (via le lien symbolique fourni par le paquet vers sound.target). Les options sont les suivantes :

  • alsa-restore.service Lit /var/lib/alsa/asound.state au démarrage et écrit les valeurs mises à jour à l'arrêt, à condition que /etc/alsa/state-daemon.conf n'existe pas. Comme /etc/alsa/state-daemon.conf n'est pas créé sans une action consciente de l'utilisateur, c'est la méthode par défaut.
  • alsa-state.service (Re-)Démarre alsactl en mode daemon pour suivre en permanence, et faire persister, les changements de volume, à condition que l'utilisateur ait consciemment créé /etc/alsa/state-daemon.conf.

Évidemment, les deux méthodes s'excluent mutuellement. Vous pouvez opter pour l'une des deux approches en fonction de vos besoins. Pour modifier ces unités, consultez Systemd (Français)#Modifier les unités fournies. Vous pouvez vérifier leur état en utilisant systemctl.

Pour plus d'informations, consultez alsactl(1).

Microprogramme ALSA

Le paquet alsa-firmware contient le microprogramme qui peut être requis pour certaines cartes son (par exemple, une Creative SB0400 Audigy2).

sof-firmware et alsa-ucm-conf sont nécessaires pour quelques modèles d'ordinateurs portables plus récents (fin 2019/2020) qui implémentent leurs pilotes avec un microprogramme fourni par le projet Sound Open Firmware.

Réactiver les canaux

Par défaut, ALSA a mis tous les canaux en sourdine. Ceux-ci doivent être réactivés manuellement.

Réactiver le son avec amixer

Réactiver le volume principal de la carte son peut être fait en utilisant amixer :

$ amixer sset Master unmute
$ amixer sset Speaker unmute (haut-parleur désactivé)
$ amixer sset Headphone unmute (désactivation du casque)

Réactiver le son avec alsamixer

Réactiver la carte son peut être fait en utilisant alsamixer :

$ alsamixer

L'étiquette MM sous un canal indique que le canal est coupé, et OO indique qu'il est ouvert.

Faites défiler les canaux Master et PCM avec les touches et et réactivez-les en appuyant sur la touche m.

Utilisez la touche pour augmenter le volume et obtenir une valeur de 0 dB de gain. Le gain se trouve en haut à gauche à côté du champ Item:.

Note: Si le gain est réglé au-dessus de 0 dB, une distorsion audible peut devenir présente.

Réactiver le son 5.1/7.1

Pour obtenir un son 5.1 ou 7.1 surround complet, vous devrez probablement réactiver d'autres canaux tels que Front, Surround, Center, LFE, LFE (subwoofer) et LFE. (Il s'agit de noms de canaux avec Intel HD Audio, ils peuvent varier selon le matériel utilisé).

Note: Veuillez noter que cela ne permet pas de mixer automatiquement des sources stéréo (comme la plupart des musiques). Pour ce faire, consultez #Upmixing/downmixing.

Activer le microphone

Pour activer votre microphone, passez à l'onglet Capture avec F4 et activez un canal avec Space. Consultez Advanced Linux Sound Architecture/Troubleshooting#Microphone si le microphone ne fonctionne pas.

Testez vos modifications

Ensuite, testez pour consulter si le son fonctionne :

$ speaker-test -c 2

Changez -c pour l'adapter à votre configuration de haut-parleurs. Utilisez -c 8 pour 7.1, par exemple :

$ speaker-test -c 8

Si l'audio est envoyé vers le mauvais périphérique, essayez de le spécifier manuellement avec l'argument -D.

$ speaker-test -D default:PCH -c 8

-D accepte les noms de canaux PCM comme valeurs, qui peuvent être récupérés en exécutant la commande suivante :

$ aplay -L | grep :CARD
default:CARD=PCH # 'default:PCH' est le nom du canal PCM pour -D
sysdefault:CARD=PCH
front:CARD=PCH,DEV=0
surround21:CARD=PCH,DEV=0
surround40:CARD=PCH,DEV=0
surround41:CARD=PCH,DEV=0
surround50:CARD=PCH,DEV=0
surround51:CARD=PCH,DEV=0
surround71:CARD=PCH,DEV=0

Si cela ne fonctionne pas, consultez la section #Configuration ou la page Advanced Linux Sound Architecture/Troubleshooting.

Notes supplémentaires

  • Si votre système possède plus d'une carte son, vous pouvez passer de l'une à l'autre en appuyant sur F6.
  • Pour certaines cartes, la sortie numérique doit être coupée ou désactivée afin d'entendre le son analogique. Pour la Soundblaster Audigy LS, mettez en sourdine le canal marqué IEC958.
  • Certaines machines (comme le Thinkpad T61) possèdent un canal Speaker qui doit également être réactivé et réglé.
  • Certaines machines (comme un Dell E6400) peuvent également nécessiter que les canaux Front et Headphone soient réactivés et réglés.
  • Si vos réglages de volume semblent perdus après un redémarrage, essayez d'exécuter alsamixer en tant que root.

Configuration

Le fichier de configuration système est /etc/asound.conf, et le fichier de configuration par utilisateur est ~/.asoundrc.

Syntaxe de base

Les fichiers de configuration ALSA suivent une syntaxe simple consistant en des affectations hiérarchiques de valeurs aux paramètres (clés). La syntaxe est également présentée dans [2].

Assignations et séparateurs

Les affectations définissent la valeur d'une clé donnée. Il existe différents types et styles d'affectation.

Simple assignment
# This is a comment. Everything after the '#' symbol to the end of the line will be ignored by ALSA.
key = value # Equal signs are usually left out, since space can also be used as a separator.

key value # Equivalent to the example above.

Les séparateurs sont utilisés pour indiquer le début et la fin d'une affectation, mais l'utilisation de virgules ou d'espaces est également possible.

Separators
# The following three assignments are equivalent.
key value0; key valueN;
key value0, key valueN,
key value0 key valueN

key
value0
	key
valueN

Les affectations composées utilisent des accolades comme séparateurs.

Compound assignment
key {	subkey0 value0;
	subkeyN valueN;	}

key.subkey0 value0; # Equivalent to the example above.
key.subkeyN valueN;

Pour faciliter la lecture, il est recommandé d'utiliser le premier style pour les définitions comprenant plus de trois clés.

Les définitions de tableaux utilisent des parenthèses comme séparateurs.

Single array
key [	"value0";
	"valueN";	]

key.0 "value0"; # Equivalent to the example above
key.N "valueN";

Tout dépend des préférences de l'utilisateur en ce qui concerne les différents styles de configuration, mais il faut éviter de mélanger différents styles. Vous trouverez de plus amples informations sur la configuration de base dans [3].

Types de données

ALSA utilise différents types de données pour les valeurs des paramètres, qui doivent être définis dans le fichier de configuration de l'utilisateur. Certaines clés acceptent plusieurs types de données, alors que la plupart ne le font pas. Une liste des options de configuration et de leurs exigences respectives en matière de types de données pour les plugins PCM se trouve dans [4].

Modes d'opération

Il existe différents modes d'opération pour l'analyse des nœuds, le mode par défaut étant la fusion et la création. Si le mode d'opération est soit merge/create soit merge, la vérification du type est effectuée. Seules les affectations de même type peuvent être fusionnées, les chaînes de caractères ne peuvent donc pas être fusionnées avec des entiers. Essayer de définir une affectation simple dans le mode d'opération par défaut à un composé (et vice versa) ne fonctionnera pas non plus.

Préfixes des modes d'opération :

  • "+" -- fusionner et créer
  • "-" -- fusionner
  • "?" -- ne pas remplacer
  • "!" -- remplacer
Operation modes
# Merge/create - If a node does not exist, it is created. If it does exist and types match,
# subkeyN is merged into key.
key.subkeyN valueN;

# Merge/create - Equivalent to above
key.+subkeyN valueN;

# Merge - Node key.subkeyN must already exist and must have same data type
key.-subkeyN valueN;

# No override - Ignore new assignment if key.subkeyN node already exists
key.?subkeyN valueN;

# Override - Removes subkeyN and all keys below it, then creates node key.subkeyN
key.!subkeyN valueN;

Utiliser le mode d'opération override, quand c'est fait correctement, est généralement sûr, cependant il faut garder à l'esprit qu'il peut y avoir d'autres clés nécessaires dans un noeud pour un bon fonctionnement.

Attention: Remplacer le noeud pcm lui-même rendra certainement alsa inutilisable, puisque chaque définition de plugin sera supprimée. Par conséquent, n'utilisez pas !pcm.key à moins que vous ne fassiez une configuration à partir de zéro.
Exemple de définition du dispositif par défaut à l'aide du nœud "defaults"

En supposant que le noeud "defaults" est défini dans /usr/share/alsa/alsa.conf, où "defaults.pcm.card" et sa contrepartie "ctl" ont pour valeur "0" (type integer), l'utilisateur veut définir le périphérique pcm et de contrôle par défaut sur la (troisième) carte son "2" ou "SB" pour une carte son Azalia.

Defaults node
defaults.ctl.card 2; # Sets default device and control to third card (counting begins with 0).
defaults.pcm.card 2; # This does not change the data type.

defaults.ctl.+card 2; # Equivalent to above.
defaults.pcm.+card 2;

defaults.ctl.-card 2; # Same effect on a default setup, however if defaults node was removed or
defaults.pcm.-card 2; # type has been changed merge operation mode will result in no changes.

defaults.pcm.?card 2; # This does nothing, since this assignment already exists.
defaults.ctl.?card 2;

defaults.pcm.!card "SB"; # The override operation mode is necessary here, because of
defaults.ctl.!card "SB"; # different value types.

L'utilisation des guillemets doubles ici définit automatiquement le type de données des valeurs comme étant une chaîne de caractères, donc dans l'exemple ci-dessus, la définition de defaults.pcm.!card "2" aurait pour résultat de conserver le dernier périphérique par défaut, dans ce cas la carte 0. L'utilisation des guillemets doubles pour les chaînes de caractères n'est pas obligatoire tant qu'aucun caractère spécial n'est utilisé, ce qui idéalement ne devrait jamais être le cas. Cela peut ne pas être pertinent dans d'autres affectations.

Note: D'un point de vue configuration, cela n'équivaut pas à la définition d'un périphérique pcm "par défaut", puisque la plupart des utilisateurs y spécifient également le type d'adressage, qui peut en fait être le même, mais l'affectation elle-même diffère toujours. De plus, defaults.pcm.card est mentionné plusieurs fois dans les fichiers de configuration d'alsa, généralement comme une affectation de repli, où différentes variables d'environnement ont la priorité.

Emboîtement

Parfois, il peut être utile et même plus facile de lire en utilisant l'imbrication dans la configuration.

Nesting PCM plugins
pcm.azalia {	type hw; card 0	}
pcm.!default {	type plug; slave.pcm "azalia"	}

# is equivalent to

pcm.!default {	type plug; slave.pcm {	type hw; card 0;	}	}

# which is also equivalent to

pcm.!default.type plug;
pcm.default.slave.pcm.type hw;
pcm.default.slave.pcm.card 0;

Inclure les fichiers de configuration

Include other configuration files
</path/to/configuration-file> # Include a configuration file
<confdir:/path/to/configuration-file> # Reference to a global configuration directory

Définir la carte son par défaut

Astuce: Une explication de la terminologie liée à ALSA pour "carte", "périphérique" (une "carte" n'est pas un "périphérique"), "sous-dispositif", et plus encore, peut être trouvée sur Wikipedia:Advanced Linux Sound Architecture#Concepts. Wikipedia a également de nombreux articles sur des termes connexes, tels que PCM, et S/PDIF.

Réglage de la carte son par défaut via le nœud defaults

Pour mettre en pratique le exemple précédent concernant defaults.pcm.card et defaults.pcm. device en pratique, en supposant que nous avons 2 cartes avec les indices 0 et 1 respectivement et que nous souhaitons simplement changer la carte par défaut pour l'indice 1, conduirait à la configuration suivante dans /etc/asound.conf ou dans ~/.asoundrc spécifique à l'utilisateur pour changer à la fois la carte de lecture et la carte de contrôle du mixeur.

defaults.pcm.card 1
defaults.ctl.card 1

Configuration de l'ordre des index via les options du module du noyau

Si l'ordre de vos cartes son change au démarrage, vous pouvez spécifier leur ordre dans tout fichier se terminant par .conf dans /etc/modprobe.d (/etc/modprobe.d/alsa-base.conf est suggéré). Par exemple, si vous voulez que votre carte son mia soit #0 :

/etc/modprobe.d/alsa-base.conf
options snd_mia index=0
options snd_hda_intel index=1

Utilisez $ cat /proc/asound/modules pour obtenir les modules sonores chargés et leur ordre. Cette liste est généralement tout ce qui est nécessaire pour l'ordre de chargement. Utilisez $ lsmod | grep snd pour obtenir une liste des périphériques et modules. Cette configuration suppose que vous avez une carte son mia utilisant snd_mia et une carte (par exemple embarquée) utilisant snd_hda_intel.

Vous pouvez également fournir un index de -2 pour demander à ALSA de ne jamais utiliser une carte comme carte principale. Les distributions telles que Linux Mint et Ubuntu utilisent les paramètres suivants pour éviter que les pilotes USB et autres pilotes "anormaux" obtiennent l'index 0 :

/etc/modprobe.d/alsa-base.conf
options bt87x index=-2
options cx88_alsa index=-2
options saa7134-alsa index=-2
options snd-atiixp-modem index=-2
options snd-intel8x0m index=-2
options snd-via82xx-modem index=-2
options snd-usb-caiaq index=-2
options snd-usb-ua101 index=-2
options snd-usb-us122l index=-2
options snd-usb-usx2y index=-2
options snd-pcsp index=-2
options snd-usb-audio index=-2

Ces modifications nécessitent un redémarrage du système.

Consultez également [5].

Sélectionner le PCM par défaut via la variable d'environnement

Il est probablement suffisant de définir ALSA_CARD comme le nom du périphérique. D'abord, obtenez les noms avec aplay -l, puis définissez ALSA_CARD sur le nom qui vient après les deux points et avant la parenthèse ; par exemple, si vous avez

card 1 : HDMI [HDA ATI HDMI], device 3 : HDMI 0 [HDMI 0]

alors définissez ALSA_CARD=HDMI.

D'autres variables sont également vérifiées dans la configuration globale par défaut /usr/share/alsa/alsa.conf. En y recherchant les constructions de la forme vars [ ... ], on obtient le tableau suivant :

Nom de la variable Utilisé par
1 ALSA_CARD pcm.default , pcm.hw , pcm.plughw , ctl.sysdefault , ctl.hw , rawmidi.default , rawmidi.hw , hwdep.hw
2 ALSA_CTL_CARD ctl.sysdefault , ctl.hw
3 ALSA_HWDEP_CARD hwdep.default , hwdep.hw
4 ALSA_HWDEP_DEVICE hwdep.default , hwdep.hw
5 ALSA_PCM_CARD pcm.default , pcm.hw , pcm.plughw
6 ALSA_PCM_DEVICE pcm.hw , pcm.plughw
7 ALSA_RAWMIDI_CARD rawmidi.default , rawmidi.hw
8 ALSA_RAWMIDI_DEVICE rawmidi.default , rawmidi.hw

Vous pouvez également modifier ce comportement dans votre propre fichier de configuration, de préférence le fichier global (/etc/asound.conf). Ajoutez :

pcm.!default {
   type plug
   esclave.pcm {
       @func getenv
       vars [ ALSAPCM ]
       default "hw:Audigy2"
   }
}

Dans ce cas également, remplacez Audigy2 par le nom de votre appareil. Vous pouvez obtenir les noms avec aplay -l ou vous pouvez également utiliser des PCM comme surround51. Mais si vous avez besoin d'utiliser le microphone, c'est une bonne idée de sélectionner le PCM full-duplex par défaut.

Maintenant vous pouvez sélectionner la carte son au démarrage des programmes en changeant simplement la variable d'environnement ALSAPCM. Cela fonctionne bien pour tous les programmes qui ne permettent pas de sélectionner la carte, pour les autres assurez-vous de garder la carte par défaut. Par exemple, si vous avez écrit un downmix PCM appelé mix51to20, vous pouvez l'utiliser avec mplayer en utilisant la ligne de commande ALSAPCM=mix51to20 mplayer exemple_6_canal.wav.

Note: Prêtez attention au type d'adressage par défaut.

Méthode alternative

Astuce: Ce processus peut être partiellement automatisé en utilisant asoundconfAUR.

Tout d'abord, vous devez trouver la carte et l'identifiant du périphérique que vous souhaitez définir comme valeur par défaut :

$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Intel [HDA Intel], device 0: CONEXANT Analog [CONEXANT Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 1: Conexant Digital [Conexant Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: JamLab [JamLab], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: Audio [Altec Lansing XT1 - USB Audio], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
Attention: Définir simplement un type hw comme carte par défaut équivaut à s'adresser directement au matériel, ce qui rend le périphérique indisponible pour les autres applications. Cette méthode n'est recommandée que si elle fait partie d'une configuration plus sophistiquée ~/.asoundrc ou si l'utilisateur souhaite délibérément s'adresser directement à la carte son (sortie numérique via eic958 ou serveur de musique dédié par exemple).

Par exemple, la dernière entrée de cette liste a l'ID de carte 2 et l'ID de périphérique 0. Pour définir cette carte par défaut, vous pouvez utiliser le fichier système /etc/asound.conf ou le fichier utilisateur ~/.asoundrc. Vous devrez peut-être créer le fichier s'il n'existe pas. Insérez ensuite les options suivantes avec la carte correspondante.

pcm.!default {
   type hw
   card 2


ctl.!default {
   type hw
   card 2
}
Note: Pour la série U32U d'Asus, il semble que la carte doive être réglée sur 1 pour pcm et ctl

Dans la plupart des cas, il est recommandé d'utiliser des noms de cartes son plutôt que des références numériques. Les noms de cartes sont plus faciles à comprendre, et permettent également de surmonter le problème de l'ordre de démarrage. Par conséquent, l'exemple suivant serait correct pour l'exemple ci-dessus.

pcm.!default {
   type hw
   card Audio
}

ctl.!default {
   type hw
   card Audio
}

Pour obtenir les noms des cartes ALSA valides, utilisez aplay :

$ aplay -l | awk -F \ : '/,/{print $2}' | awk '{print $1}' | uniq
PCH

Vous pouvez également utiliser cat, qui peut renvoyer des périphériques inutilisés :

$ cat /proc/asound/card*/id
PCH
ThinkPadEC
Note: Cette méthode peut être problématique si votre système possède plusieurs cartes du même nom (ALSA)

Les options 'pcm' affectent la carte et le périphérique qui seront utilisés pour la lecture audio tandis que l'option 'ctl' affecte la carte utilisée par les utilitaires de contrôle comme alsamixer.

Les changements devraient prendre effet dès que vous (re)lancez une application (MPlayer etc.). Vous pouvez aussi tester avec une commande comme aplay.

$ aplay -D default:PCH your_favourite_sound.wav

Si vous recevez une erreur concernant la configuration de votre asound, vérifiez dans la upstream documentation les éventuelles modifications du format du fichier de configuration.

Vérifier que les modules sonores corrects sont chargés

Vous pouvez supposer que udev autodétectera correctement votre son. Vous pouvez le vérifier avec la commande :

$ lsmod | grep '^snd' | column -t
snd_hda_codec_hdmi     22378   4
snd_hda_codec_realtek  294191  1
snd_hda_intel          21738   1
snd_hda_codec          73739   3  snd_hda_codec_hdmi,snd_hda_codec_realtek,snd_hda_intel
snd_hwdep              6134    1  snd_hda_codec
snd_pcm                71032   3  snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec
snd_timer              18992   1  snd_pcm
snd                    55132   9  snd_hda_codec_hdmi,snd_hda_codec_realtek,snd_hda_intel,snd_hda_codec,snd_hwdep,snd_pcm,snd_timer
snd_page_alloc         7017    2  snd_hda_intel,snd_pcm

Si la sortie est similaire, vos pilotes de son ont été autodétectés avec succès.

Note: Depuis udev ≥ 171, les modules d'émulation OSS (snd_seq_oss, snd_pcm_oss, snd_mixer_oss) ne sont pas chargés par défaut : chargez-les manuellement, s'ils sont nécessaires.

Vous pouvez également vérifier que le répertoire /dev/snd/ contient les bons fichiers de périphériques :

$ ls -l /dev/snd
total 0
crw-rw---- 1 root audio 116, 0 Apr 8 14:17 controlC0
crw-rw---- 1 root audio 116, 32 Apr 8 14:17 controlC1
crw-rw---- 1 root audio 116, 24 Avr 8 14:17 pcmC0D0c
crw-rw---- 1 root audio 116, 16 Avr 8 14:17 pcmC0D0p
crw-rw---- 1 root audio 116, 25 Avr 8 14:17 pcmC0D1c
crw-rw---- 1 root audio 116, 56 Avr 8 14:17 pcmC1D0c
crw-rw---- 1 root audio 116, 48 Avr 8 14:17 pcmC1D0p
crw-rw---- 1 root audio 116, 1 Apr 8 14:17 seq
crw-rw---- 1 root audio 116, 33 Apr 8 14:17 timer
Note: Si vous demandez de l'aide sur IRC ou sur les forums, veuillez afficher la sortie des commandes ci-dessus, si nécessaire.

Si vous avez au moins les périphériques controlC0 et pcmC0D0p ou similaire, alors vos modules de sons ont été détectés et chargés correctement.

Si ce n'est pas le cas, vos modules de sons n'ont pas été détectés correctement. Pour résoudre ce problème, vous pouvez essayer de charger les modules manuellement :

  • Localisez le module correspondant à votre carte son : ALSA Soundcard Matrix. Le module sera préfixé par 'snd-' (par exemple : snd-via82xx).
  • Chargez le module.
  • Vérifiez les fichiers de périphériques dans /dev/snd. (consultez ci-dessus) et/ou essayez si alsamixer ou amixer ont une sortie raisonnable.
  • Configurez snd-NAME-OF-MODULE et snd-pcm-oss pour être chargés au démarrage.

Obtenir une sortie S/PDIF

S/PDIF est une interface audio numérique souvent utilisée pour connecter un ordinateur à un amplificateur numérique (tel qu'un home cinéma avec un son surround 5.1/7.1).

Note: Avec certaines cartes son, cela désactive la sortie du son analogique (par exemple Sound Blaster Audigy 2).

En fonction du shell que vous utilisez, ajoutez la ligne suivante au fichier de configuration de votre shell :

amixer -c 0 cset name='IEC958 Playback Switch' on

Vous pouvez consulter le nom de la sortie numérique de votre carte avec :

$ amixer scontrols

Égaliseur à l'échelle du système

Utilisation d'ALSAEqual (fournit une interface utilisateur)

Installez le paquet alsaequalAUR.

Après avoir installé le paquet, ajoutez ce qui suit à votre fichier de configuration ALSA :

/etc/asound.conf
ctl.equal {
    type equal;
}

pcm.plugequal {
    type equal;
    # Modify the line below if you do not
    # want to use sound card 0.
    #slave.pcm "plughw:0,0";
    # by default we want to play from more sources at time:
    slave.pcm "plug:dmix";
}

# pcm.equal {
# If you do not want the equalizer to be your
# default soundcard comment the following
# line and uncomment the above line. (You can
# choose it as the output device by addressing
# it with specific apps,eg mpg123 -a equal 06.Back_In_Black.mp3)
pcm.!default {
    type plug;
    slave.pcm plugequal;
}

Et vous êtes prêt à changer votre égaliseur en utilisant la commande

$ alsamixer -D equal

Notez que le fichier de configuration est différent pour chaque utilisateur (sauf indication contraire) ; il est enregistré dans ~/.alsaequal.bin. Donc si vous voulez utiliser ALSAEqual avec mpd ou un autre logiciel fonctionnant sous un autre utilisateur, vous pouvez le configurer en utilisant

$ su mpd -c 'alsamixer -D equal'

ou par exemple, vous pouvez créer un lien symbolique vers votre .alsaequal.bin dans son répertoire personnel.

Gestion des états ALSAEqual

Installez le paquet alsaequal-mgrAUR.

Configurez l'égaliseur comme d'habitude avec

$ alsamixer -D equal

Lorsque vous êtes satisfait de l'état, vous pouvez lui donner un nom ("foo" dans cet exemple) et le sauvegarder :

$ alsaequal-mgr save foo

L'état "foo" peut ensuite être restauré ultérieurement avec

$ alsaequal-mgr load foo

Cependant, ceci ne restaure que ~/.alsaequal.bin. Vous devez alors mettre à jour l'égaliseur par alsamixer -D equal.

Vous pouvez donc créer différents états d'égaliseur pour les jeux, les films, les genres musicaux, les applications de VoIP, etc. et les recharger si nécessaire.

Consultez la [page du projet https://xyne.dev/projects/alsaequal-mgr/] et le message d'aide pour plus d'options.

Utilisation de mbeq

mbeq est un égaliseur graphique multibande assez typique. [6]

Note: Cette méthode nécessite l'utilisation d'un plugin LADSPA qui peut être gourmand en ressources CPU pendant la lecture. De plus, cette méthode a été conçue pour un son stéréophonique (par exemple, un casque).

Installez les paquets alsa-plugins, ladspa et swh-plugins si vous ne les avez pas déjà.

Si vous n'avez pas encore créé un fichier ~/.asoundrc ou /etc/asound.conf, créez l'un ou l'autre et insérez ce qui suit :

/etc/asound.conf
pcm.eq {
    type ladspa

    # The output from the EQ can either go direct to a hardware device
    # (if you have a hardware mixer, e.g. SBLive/Audigy) or it can go
    # to the software mixer shown here.
    #slave.pcm "plughw:0,0"
    slave.pcm "plug:dmix"

    # Sometimes you may need to specify the path to the plugins,
    # especially if you have just installed them.  Once you have logged
    # out/restarted this should not be necessary, but if you get errors
    # about being unable to find plugins, try uncommenting this.
    #path "/usr/lib/ladspa"

    plugins [
    {
        label mbeq
        id 1197
        input {
            # The following setting is just an example, edit to your own taste:
            # bands: 50hz, 100hz, 156hz, 220hz, 311hz, 440hz, 622hz, 880hz, 1250hz, 1750hz, 25000hz,
            # 50000hz, 10000hz, 20000hz
            controls [ -5 -5 -5 -5 -5 -10 -20 -15 -10 -10 -10 -10 -10 -3 -2 ]
            }
        }
    ]
}

# Redirect the default device to go via the EQ - you may want to do
# this last, once you are sure everything is working.  Otherwise all
# your audio programs will break/crash if something has gone wrong.
pcm.!default {
    type plug
    slave.pcm "eq"
}

# Redirect the OSS emulation through the EQ too (when programs are running through "aoss")
pcm.dsp0 {
    type plug
    slave.pcm "eq"
}

Rééchantillonnage de haute qualité

Lorsque le mixage logiciel est activé, ALSA est obligé de tout rééchantillonner à la même fréquence (48 kHz par défaut lorsqu'il est pris en charge). Par défaut, il essaiera d'utiliser le convertisseur speexrate pour le faire, et se rabattra sur une interpolation linéaire de basse qualité s'il n'est pas disponible [7]. Ainsi, si vous obtenez une mauvaise qualité sonore à cause d'un mauvais rééchantillonnage, le problème peut être résolu en installant simplement le paquet alsa-plugins.

Pour un rééchantillonnage de qualité encore supérieure, vous pouvez modifier le convertisseur de taux par défaut en speexrate_medium ou speexrate_best. Les deux sont suffisamment performants pour que, dans la pratique, le choix de l'un ou l'autre n'ait pas d'importance. L'utilisation du meilleur convertisseur ne vaut généralement pas les cycles CPU supplémentaires qu'il requiert.

Pour changer le convertisseur par défaut, placez le contenu suivant dans votre ~/.asoundrc ou /etc/asound.conf :

/etc/asound.conf
defaults.pcm.rate_converter "speexrate_medium"
Note:
  • Il est également possible d'utiliser les convertisseurs libsamplerate, qui sont environ deux fois moins rapides que les convertisseurs speexrate mais ne permettent pas d'obtenir une qualité beaucoup plus élevée. Consultez discussion.
  • Il est également possible d'utiliser des rééchantillonneurs lavcrate [8] qui utilisent FFmpeg. Avec des tailles de filtre de lavcrate_faster:4 lavcrate_fast:8 lavcrate:16 lavcrate_high:32 lavcrate_higher:64. Les deux dernières options correspondent respectivement aux rééchantillonneurs de basse et moyenne qualité de Kodi.
  • Certaines applications (comme MPlayer et ses forks) font leur propre rééchantillonnage par défaut parce que certains pilotes ALSA ont un rapport de délai incorrect lorsque le rééchantillonnage est activé (ce qui entraîne une désynchronisation AV), donc changer ce paramètre n'aura aucun effet à moins que vous ne les configuriez pour utiliser le rééchantillonnage ALSA.

Upmixing/downmixing

Upmixing

Pour que des sources stéréo comme la musique puissent saturer un système sonore 5.1 ou 7.1, vous devez utiliser l'upmixing. Dans les temps plus sombres, cette opération était délicate et source d'erreurs, mais aujourd'hui, il existe des plugins qui permettent de s'acquitter facilement de cette tâche. Nous utiliserons le plugin upmix, inclus dans le paquet alsa-plugins.

Ensuite, ajoutez ce qui suit au fichier de configuration ALSA de votre choix (soit /etc/asound.conf ou ~/.asoundrc) :

pcm.upmix71 {
   type upmix
   slave.pcm "surround71
   delay 15
   channels 8
}

Vous pouvez facilement modifier cet exemple pour le mixage ascendant 7.1 en 5.1 ou 4.0.

L'exemple suivant ajoute un nouveau canal PCM que vous pouvez utiliser pour le mixage ascendant. Si vous voulez que toutes les sources sonores passent par ce canal, ajoutez-le par défaut en dessous de la définition précédente, comme suit

pcm.!default "plug:upmix71"

Le plugin permet automatiquement à plusieurs sources de passer par ce canal sans problème, donc le définir par défaut est un choix sûr. Si cela ne fonctionne pas, vous devez configurer votre propre dmixer pour le PCM upmixing comme ceci :

pcm.dmix6 {
   type asym
   playback.pcm {
       type dmix
       ipc_key 567829
       slave {
           pcm "hw:0,0
           canaux 6
       }
   }
}

et utilisez "dmix6" au lieu de "surround71". Si vous rencontrez des sauts ou un son déformé, envisagez d'augmenter la taille du tampon (à 32768, par exemple) ou utilisez un rééchantillonneur de haute qualité.

Downmixing

Si vous voulez downmixer des sources en stéréo parce que vous voulez, par exemple, regarder un film avec un son 5.1 sur un système stéréo, utilisez le plugin vdownmix, inclus dans le paquet alsa-plugins.

Encore une fois, dans votre fichier de configuration, ajoutez ceci :

pcm.!surround51 {
   type vdownmix
   slave.pcm "default
}
pcm.!surround40 {
   type vdownmix
   slave.pcm "par défaut
}
Note: Ce n'est peut-être pas suffisant pour que le downmixing fonctionne, consultez [9]. Vous devez donc ajouter pcm.!default "plug:surround51" ou pcm.!default "plug:surround40". Un seul plug vdownmix peut être utilisé ; si vous avez 7.1 canaux, vous devrez utiliser surround71 au lieu de la configuration ci-dessus. Un bon exemple, qui comprend une configuration permettant de faire fonctionner à la fois vdownmix et dmix, se trouve dans [10].

Dmix

Le mixage permet à plusieurs applications de produire du son en même temps. La plupart des cartes son dédiées prennent en charge le mixage matériel, qui est pris en charge par défaut s'il est disponible. Les cartes son intégrées à la carte mère (telles que Intel HD Audio), ne prennent généralement pas en charge le mixage matériel. Sur ces cartes, le mixage logiciel est effectué par un plugin ALSA appelé dmix. Cette fonction est activée automatiquement si le mixage matériel n'est pas disponible.

Note: Dmix est pris en charge par défaut pour les cartes son qui ne prennent pas en charge le mixage matériel. Dmix n'est pas activé par défaut pour la sortie numérique (S/PDIF) et nécessitera l'extrait de configuration ci-dessous.

Pour activer manuellement dmix, ajoutez ce qui suit à votre fichier de configuration ALSA :

/etc/asound.conf
pcm.dsp {
    type plug
    slave.pcm "dmix"
}

Trucs et astuces

Désactivation de l'auto-mute au démarrage

Le mode Auto-Mute peut être configuré au démarrage avec amixer. Par exemple, pour le désactiver :

# amixer -c 0 sset "Auto-Mute Mode" Disabled

Il est également possible d'utiliser l'interface graphique via alsamixer. Afin de sauvegarder les modifications, utilisez :

# alsactl store

ou

# alsactl daemon

Consultez ALSA et Systemd.

Connexion à chaud d'une carte son USB

Consultez Writing Udev rules for ALSA.

Sortie simultanée

Il se peut que vous souhaitiez diffuser de la musique simultanément sur des haut-parleurs externes connectés via un mini jack et sur des haut-parleurs internes. Pour ce faire, il suffit de réactiver l'élément Auto-Mute en utilisant alsamixer ou amixer :

$ amixer sset "Auto-Mute" unmute

puis réactiver d'autres éléments nécessaires, tels que Casque, Haut-parleur, Haut-parleur de basses...

Note: Si vous avez un grésillement dans le connecteur du casque (mini-jack) après, consultez Advanced Linux Sound Architecture/Troubleshooting#Crackling sound through mini-jack (headphones connector).

Contrôle du volume au clavier

Mappez les commandes suivantes à vos touches de volume : XF86AudioRaiseVolume, XF86AudioLowerVolume, XF86AudioMute.

Pour augmenter le volume :

amixer set Master 5%+

Pour baisser le volume :

amixer set Master 5%-

Pour activer/désactiver le volume :

amixer set Master toggle

Dispositif sonore virtuel utilisant snd-aloop

Vous pourriez vouloir une alternative jack pour créer un dispositif d'enregistrement ou de lecture virtuel afin de mélanger différentes sources, en utilisant le module snd-aloop :

modprobe snd-aloop

Listez vos nouveaux périphériques virtuels en utilisant :

aplay -l

Vous pouvez maintenant par exemple utiliser ffmpeg :

ffmpeg -f alsa -i hw:1,1,0 -f alsa -i hw:1,1,1 -filter_complex amerge output.mp3

Dans la phrase hw:R,W,N, R est le numéro de périphérique de votre carte virtuelle. W doit être réglé sur 1 pour les périphériques d'enregistrement, ou 0 pour la lecture. N est votre périphérique secondaire. Vous pouvez utiliser tous les périphériques virtuels disponibles et lire/arrêter en utilisant des applications comme mplayer :

mplayer -ao alsa:device=hw=1,0,0 fileA
mplayer -ao alsa:device=hw=1,0,1 fileB

Une autre chose que vous pourriez faire avec cette approche, est d'utiliser festival pour générer une voix dans un flux d'enregistrement en utilisant un script comme celui-ci :

#!/bin/sh
echo "$1"|iconv -f utf-8 -t iso-8859-1| text2wave > "_tmp_.wav" ;
mplayer -ao alsa:device=hw=2,0,0 "_tmp.wav" ;
rm "_tmp.wav" ;

Déboguer ALSA

Récupération de l'état du pilote

Le paquet alsa-utils contient également la commande alsa-info.sh, qui peut être utilisée pour recueillir des données détaillées sur le pilote ALSA et l'état de l'espace utilisateur.

Consultez ALSA bug tracking pour plus d'informations.

Reconfiguration des ports d'entrée/sortie

Le paquet alsa-tools contient l'outil hdajackretask, qui peut être utilisé (sur les cartes Intel HDA) pour reconfigurer les ports d'entrée/sortie de la carte son ; par exemple, pour transformer une prise de microphone en prise de casque.

Réinitialisation des codecs

Le pilote ALSA peut reconfigurer complètement les codecs attachés (les parties du système de son qui traitent réellement les flux audio), en faisant :

# echo 1 > /sys/class/sound/card/reconfig

Avant de faire cela, tous les processus utilisant le pilote ALSA (comme Pulseaudio ou JACK) doivent être arrêtés.

Détecter correctement le microphone branché dans un jack 3,5 mm (TRRS) à 4 broches

Sur certains ordinateurs portables modernes, vous pouvez avoir une prise casque 3,5 mm combinée, au lieu de deux prises séparées, qui peuvent ne pas être correctement détectées par défaut. Pour qu'ALSA détecte correctement l'état du plug-in sur votre prise 3.5mm, vous pouvez mettre la ligne suivante dans votre /etc/modprobe.d/alsa-base.conf :

options snd_hda_intel index=0 model=your_model_setting

Pour une liste complète des options à placer dans your_model_setting, consultez HD-Audio Codec-Specific Models ou sa source située à /usr/lib/modules/$(uname -r)/build/Documentation/sound/hd-audio/models.rst. (fourni par le paquet linux-docs).

Testé avec le Gigabyte Aero15 2017 (modèle P65), avec ALC255 et le modèle défini à dell-headset-multi.

Voir aussi