Que signifient les appareils ALSA tels que «hw: 0,0»? Comment puis-je savoir lequel utiliser?

65

J'ai cherché encore et encore et ne trouve aucune explication sur ce que "hw: 0,0" signifie. Comment déterminer le numéro de ma carte audio USB? MPD me demande d’entrer quelque chose comme ceci:

audio_output {
        type                    "alsa"
        name                    "Sound Card"
        device                  "hw:0,0"     # optional
        format                  "44100:16:2" # optional
}

Si je fais "alsamixer -c 1", il ouvre le contrôle du volume de la carte USB, mais cela ne m'aide vraiment pas.

Où puis-je trouver une liste de noms / numéros d'appareils sur mon système? Sont-ils résilients aux modifications matérielles? Si je retire la carte 2, la carte 3 devient-elle la carte 2? Existe-t-il d'autres moyens d'identifier les périphériques? Où puis-je trouver de la documentation pour cela?

endolithe
la source
alors qu'est-ce qui a fini par fonctionner?
Quack Quichotte
Passer à PulseAudio a fonctionné, en quelque sorte. :) Mais je devais être connecté localement et modifier le routage audio. Puis j'ai décidé que MPD était nul et a abandonné.
endolithe
En fait, "hw: 1,0" a probablement fonctionné, mais il est indiqué que l'appareil était en cours d'utilisation (par Pulse?). Je n'ai pas essayé l'autre méthode, mais j'espère que cela aidera les autres.
endolithe

Réponses:

50

La réponse de JohnT donne une bonne base. Je vais suivre avec comment trouver les périphériques sur votre système. Utilisez "aplay -l" pour obtenir une liste des périphériques de votre système. Le hw: X, Y vient de cette mise en correspondance de votre matériel - dans ce cas, X est la carte numéro, tandis que Y est le dispositif numéro.

$ aplay -l   # note lower-case "L" option
**** List of PLAYBACK Hardware Devices ****
card 0: T71Space [Terratec Aureon 7.1-Space], device 0: ICE1724 [ICE1724]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: T71Space [Terratec Aureon 7.1-Space], device 1: IEC1724 IEC958 [IEC1724 IEC958]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 0: T71Space [Terratec Aureon 7.1-Space], device 2: ICE1724 Surrounds [ICE1724 Surround PCM]
  Subdevices: 3/3
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2

Étant donné que ce sont des périphériques USB qui peuvent ne pas toujours recevoir les mêmes numéros de périphérique à chaque fois qu’ils sont branchés, le périphérique hw: X, Y peut changer. La réponse la plus simple est, pour un système de bureau, essayez les outils de configuration GNOME / KDE / Xfce et voyez s'ils sont assez intelligents pour accepter les modifications.

La manière complexe, si vous ne le faites pas avec un système de bureau, devient ... intéressante. Vous pourrez peut-être utiliser des alias de périphérique au lieu de "hw: X, Y" - c'est ce que montre le résultat de "aplay -L". Le "quelque chose: CARD = FOO, DEV = Y" est l'alias, et ne changera probablement pas entre les différents plug-ins de périphériques, où le X dans "hw: X, Y" pourrait. (En supposant que vous utilisez le même dongle USB à chaque fois.)

$ aplay -L
default:CARD=CK804
    NVidia CK804, NVidia CK804
    Default Audio Device
front:CARD=CK804,DEV=0                 # hw:0,0
    NVidia CK804, NVidia CK804
    Front speakers
surround40:CARD=CK804,DEV=0            # hw:0,1
    NVidia CK804, NVidia CK804
    4.0 Surround output to Front and Rear speakers

Ainsi, votre commande aplay deviendra "aplay -D front: CARD = CK804, DEV = 0 somefile.wav" et vous pourrez utiliser le même nom de périphérique dans votre .asoundrc.


Si vous avez besoin de quelque chose de plus stable à un niveau encore plus bas, les périphériques réels du noyau, udev est ce que vous voulez - c'est le système qui permet de connecter à chaud des périphériques dans le système. Vous pouvez écrire des règles pour udev (et voici la page de manuel ) qui permettront aux périphériques d’obtenir le même nom de périphérique lorsqu’ils sont branchés.

Quack Quack
la source
3
Aha! On m'avait dit aplay -L, ce qui ne donne pas le même résultat que aplay -l. soupir
endolith
1
Comment pouvez-vous dire que surround40:CARD=CK804,DEV=0c'est hw:0,1? Autant que je sache, il est hw:0,0indiqué qu'il se réfère à DEV=0, mais dans une configuration différente (4 canaux plutôt que 2 comme dans front:CARD=CK804,DEV=0).
zpon
19

hw:0,0spécifie le périphérique par défaut, sur la carte son par défaut. Pour accéder au premier périphérique de votre deuxième carte son, vous devez spécifier hw:1,0. Ceux-ci sont spécifiés dans votre .asoundrc. Plus sur tout cela ici .

John T
la source
5
Plus précisément ici: alsa-project.org/main/index.php/…
endolith