De acordo com o Wiki da ALSA , com o título " Como escolher um pedido específico para várias placas instaladas ", ele afirma o seguinte:
Qual cartão é o número 0, 1 e, por padrão, é determinado pela ordem de carregamento do módulo. Isso é particularmente útil para escolher qual cartão se torna o padrão.
Portanto, em teoria, é possível escolher qual das várias placas instaladas se torna a placa 0, a padrão, garantindo que o módulo do driver seja carregado primeiro. (Nota: isso pressupõe que cada placa de som exija um driver diferente. Se você tiver duas placas de som do mesmo tipo, pule para a próxima seção.)
Há duas maneiras de conseguir isso: o índice "antigo" = opção do módulo de driver da placa e os slots alternativos (e novos) = opção do módulo snd.
Ele documenta dois métodos para fazer isso:
- O método "index =" mais antigo
- O novo método "slots ="
O primeiro é o que as instruções de instalação do Jasper recomendam. É também sobre o que a maioria das soluções por aí fala. No entanto, esse é o método mais antigo e pode não funcionar em imagens mais atuais do Raspbian Jessie.
Uma combinação dos dois métodos é o que funcionou para mim.
Primeiro, verifique em qual ordem seus cartões foram carregados:
$ cat /proc/asound/modules
0 snd_bcm2835
1 snd_usb_audio
A contagem dos cartões começa a partir de 0
modo que o padrão bcm2835
é carregado primeiro e meu cartão USB que contém o meu microfone é carregado depois.
Para reordenar meus cartões, primeiro criei um arquivo chamado /etc/modprobe.d/alsa-base.conf
. Pode ser nomeado como quiser, desde que termine .conf
. Adicionei o seguinte:
# This sets the index value of the cards but doesn't reorder.
options snd_usb_audio index=0
options snd_bcm2835 index=1
# Does the reordering.
options snd slots=snd_usb_audio,snd_bcm2835
Os comentários devem explicar o que cada linha faz. Depois de fazer isso, parece que você precisa reiniciar sua máquina para que ela funcione.
Depois de reiniciar, você poderá gravar algum áudio com a placa padrão, que agora deve ser o seu microfone:
$ arecord temp.wav
e, em seguida, reproduza-o, especificando o cartão como 1 e o dispositivo como 0, onde deve estar a saída do alto-falante:
aplay -D plughw:1,0 temp.wav
Inicialmente, apenas adicionei a linha slots
nela. Isso funcionou para tornar meu cartão USB o cartão padrão, mas foi indexado incorretamente. Por exemplo, depois de fazer isso, é assim que me /proc/asound/modules
pareço:
$ cat /proc/asound/modules
1 snd_usb_audio
2 snd_bcm2835
Idealmente, deve ficar assim:
0 snd_usb_audio
1 snd_bcm2835
E é por isso que eu também uso o index
método para conseguir isso.