O que significam dispositivos ALSA como "hw: 0,0"? Como faço para descobrir qual usar?

63

Pesquisei várias vezes e não consigo encontrar nenhuma explicação sobre o que "hw: 0,0" significa. Como determino o número da minha placa de áudio USB? O MPD exige que eu digite algo assim:

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

Se eu fizer "alsamixer -c 1", ele abrirá o controle de volume da placa USB, mas isso realmente não me ajuda.

Onde posso encontrar uma lista de nomes / números de dispositivos no meu sistema? Eles são resilientes a alterações de hardware? Se eu remover o cartão 2, o cartão 3 se tornará o cartão 2? Existem outras maneiras de identificar dispositivos? Onde posso encontrar documentação para isso?

endólito
fonte
então o que acabou funcionando?
quack quixote
Mudar para o PulseAudio funcionou, mais ou menos. :) Mas eu tinha que estar logado localmente e modificar o roteamento de áudio. Então eu decidi que o MPD é péssimo e desisti.
Endolith 12/10/2009
Na verdade, "hw: 1,0" provavelmente funcionou, mas dizia que o dispositivo estava em uso (pelo Pulse?) Eu não tentei o outro método, mas espero que isso ajude os outros.
Endolith 12/10/2009

Respostas:

48

A resposta de JohnT dá uma boa base. Vou seguir com como encontrar os dispositivos no seu sistema. Use "aplay -l" para obter uma lista dos dispositivos em seu sistema. O hw: X, Y vem desse mapeamento do seu hardware - nesse caso, X é o número do cartão , enquanto Y é o número do dispositivo .

$ 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

Como esses são dispositivos USB que nem sempre recebem os mesmos números de dispositivos sempre que são conectados, o dispositivo hw: X, Y pode mudar. A resposta mais simples é, para um sistema de desktop, experimentar as ferramentas de configuração do GNOME / KDE / Xfce e verificar se elas são inteligentes o suficiente para captar as alterações.

A maneira complexa, se você não estiver fazendo isso com um sistema de desktop, fica ... interessante. Você pode se safar do uso de aliases de dispositivo em vez de "hw: X, Y" - é o que mostra a saída de "aplay -L". O "algo: CARD = FOO, DEV = Y" é o alias e provavelmente não será alterado entre diferentes plug-ins de dispositivo, onde o X em "hw: X, Y" pode. (Supondo que você esteja usando o mesmo dongle USB de cada vez.)

$ 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

Portanto, seu comando aplay se tornaria "aplay -D front: CARD = CK804, DEV = 0 somefile.wav" e você poderá usar o mesmo nome de dispositivo no seu .asoundrc.


Se você precisar de algo mais estável em dispositivos de kernel reais de nível ainda mais baixo, o udev é o que você deseja - é o sistema que permite a conexão automática de dispositivos no sistema. Você pode escrever regras para o udev (e aqui está a página de manual ) que permitirá que os dispositivos obtenham o mesmo nome de dispositivo quando conectados.

charlatão quixote
fonte
3
Aha! Foi-me dito aplay -L, que não fornece a mesma saída que aplay -l. sigh
endolith 11/10/09
11
Como você pode dizer que surround40:CARD=CK804,DEV=0é hw:0,1? Tanto quanto posso dizer, é hw:0,0dado que se refere DEV=0, mas em uma configuração diferente (4 canais em vez de 2 como em front:CARD=CK804,DEV=0).
Zpon
19

hw:0,0especifica o dispositivo padrão, na placa de som padrão. Para acessar o primeiro dispositivo da sua segunda placa de som, você deve especificar hw:1,0. Estes são especificados no seu .asoundrc. Mais sobre tudo isso aqui .

John T
fonte
5
Especificamente aqui: alsa-project.org/main/index.php/...
endolith