Como fazer o Alsa escolher um dispositivo de som preferido automaticamente?

36

Eu comprei uma placa de som USB. Gostaria de configurar minha área de trabalho Linux para que ele prefira o dispositivo USB, se estiver conectado e alterne automaticamente à medida que o dispositivo estiver (des) conectado. É possível e como?

Petr Pudlák
fonte
O Debian usa o pulseaudio.
Braiam 5/08/13

Respostas:

36

Encontre seu cartão com

$ cat /proc/asound/cards

Para obter nomes de cartões ALSA válidos, use aplay:

$ aplay -l

e crie /etc/asound.confcom o seguinte:

pcm.!default {
    type hw
    card 1
}

ctl.!default {
    type hw           
    card 1
}

Substitua "cartão 1" pelo número ou nome do seu cartão determinado acima.

Como alternativa, você pode alterar a ordem dos seus cartões para que o seu cartão USB seja o cartão 0 e funcione sem edição asound.conf.

Matija Nalis
fonte
2
Tentei sua sugestão, mas quando o cartão USB está desconectado, o áudio para de funcionar completamente, em vez de mudar para o cartão embutido.
Petr Pudlák 11/08/13
2
Usando um RPI2, esta solução funcionou para mim. Tentei todo o resto, mas nada funcionou até que eu fiz este. (Tinha que usar o "cartão 0" no meu).
Rob Gibbons
2
Usando a configuração acima, o som no youtube em Palemoon não trabalho para mim, esta configuração funcionou: defaults.pcm.card 1 defaults.ctl.card 1 forum.palemoon.org/viewtopic.php?t=9661#p66016
aaditya1234
preso por este dia! e você acabou de salvar minha bunda!
alamin
2
NÃO use hackery esotérico de processamento em lote em respostas a pessoas normais. Em vez de escrever uma linha que extraia colunas da saída, descreva em palavras como encontrar as informações desejadas na saída completa.
Szczepan Hołyszewski
16

este é o método para selecionar a placa de som padrão no Alsa. Convém instalar o Alsa para que esse método funcione se você estiver usando o Pulse Audio.

cat / proc / asound / modules

listará seus módulos de som. A saída do comando será assim (por exemplo):

0 snd_hda_intel

1 snd_usb_intel

você pode facilmente entender qual é a sua placa de som USB de cima.

nano /etc/modprobe.d/alsa-base.conf

edite este alsa-base.conf de forma que o seu cartão preferido tenha um índice = -2 / 0 e o outro cartão tenha um índice = -1 / 1 (use -2 e -1)

opções snd_hda_intel index = -1

opções snd_usb_intel index = -2

neste caso, o dispositivo usb é o dispositivo preferido.

se você estiver tendo duas placas diferentes com o mesmo nome da saída, assim:

opções snd_hda_intel

opções snd_hda_intel

emita este comando para descobrir qual é qual:

cat / proc / asound / cards

edite os módulos desta maneira:

opções snd_hda_intel enable = 1 index = 0

opções snd_hda_intel enable = 0 index = 1

uma reinicialização pode ser necessária. para que você precise alternar manualmente as placas de som.

Ashildr
fonte
O que você quer dizer com "modificar a saída"? Como posso modificar a saída?
Petr Pudlák 11/08/13
Eu fiz as alterações necessárias no answer.try nesta versão. espero que isso ajude. os métodos podem variar de acordo com o sabor do linux que você usa.
Ashildr
Obrigado. Como posso verificar a configuração? Identifiquei as placas, adicionei as opções apropriadas, reiniciei, mas não vejo nenhuma alteração - ainda assim, a placa interna (intel) é a preferida.
Petr Pudlák
tente> opções snd-usb-intel enable = 1 index = 0 (ativar)> opções snd-hda-intel enable = 0 index = 1 (para desativar) ou> opções snd-hda-intel enable = 0 index = 0> opções snd-usb-intel enable = 1 index = 1 e reiniciar
Ashildr
ou seja, permitir usb desativar o outro usando enable = 0 ou 1, fazer isso vice-versa also.i'm não tenho certeza que irá trabalhar para you.reboot é desejo necessary.i u resolver yor problema
Ashildr
4

Também não consegui obter saída do meu dispositivo USB. Minha cat /proc/asound/modulessaída foi:

0 snd_hda_intel

1 snd_hda_intel

2 snd_usb_audio

Eu tentei as duas respostas descritas aqui, que não ajudaram (com muitas combinações de índices e muitas reinicializações). Acho que o problema foi o meu dispositivo USB inicializar após a inicialização. Seja como for, minha solução de trabalho está na lista negra de outros 2 dispositivos de som, atualizando /etc/modprobe.d/blacklist.confcomo:

blacklist snd_hda_intel
user533723
fonte
3

A resposta de Matija Nalis apenas metade funcionou para mim (o alsamixer mudou o padrão, mas outras coisas como aplay e firefox teimosamente ficaram com o padrão errado). Este exemplo do wiki debian funcionou para mim (no laptop CentOS-6):

defaults.pcm.!card Generic_1
defaults.ctl.!card Generic_1
defaults.pcm.!device 0
defaults.ctl.!device 0

Para constar: o ALSA está mal documentado, e especialmente esse material muito simples, como selecionar qual cartão usar é muito difícil. Pior, parece mudar entre os sistemas. Além disso, recebi a tag "Generic_1" em aplay -l, onde aparece como "card 1" na lista. Outras pessoas pareciam estar usando, então eu fiz o mesmo ... o que significa que não posso dizer.

Tel
fonte
1

Embora você possa alterar o cartão alsa padrão editando .asoundrc ou o sistema asound.conf, existem alguns problemas significativos nessa abordagem.

É frágil e requer que as reinicializações de aplicativos sejam respeitadas.

Se você deseja trocar as placas rapidamente, realmente precisa usar um servidor de som que abstraia os aplicativos da placa de som corretamente, como o pulseaudio.

Grant Diffey
fonte
Alguns aplicativos como o Skype beta ignoram isso e se conectam à placa ALSA padrão. Isso resulta em nenhum áudio para o Skype quando o HDMI é o primeiro dispositivo em vez do HDA.
Max N
-1

Aqui está uma variante das respostas de Matija Nalis e Tel. Isto é o que funcionou para mim:

~ / .asoundrc

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

(Odroid C0, Debian Jessie, áudio HDMI como placa 0 e USB Sound Card como placa 1 de acordo com aplay -l)

Nota: outros métodos não funcionaram para mim, pois / proc / asound / modules não existe e não existe um módulo de áudio HDMI na lista negra ou colocado em baixa prioridade, ele está incorporado no kernel. Parece que eu teria que recompilar o kernel sem suporte a áudio HDMI para desativá-lo completamente.

astooooooo
fonte
sudo modprobe $ soundcard_driver faria o que você deseja para / proc / asound / módulos
linuxdev2013
@ linuxdev2013 como você pode modificar um driver que não pode ser modificado? Como explicado acima, não é um módulo, ele está incorporado no kernel.
astooooooo