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.
snd_usb_audio
Infelizmente, tenho dois dispositivos chamados .Depois de tentar depurar os problemas da alsa para este projeto e colocar os dois alto-falantes do microfone usb e bcm2835 funcionando, acho que há um problema básico com o qual todos os conselhos da ALSA que recebi não lidam.
O diretório / usr / share / alsa / cards não possui um arquivo bcm2835.conf. O arquivo de diretório / usr / share / alsa alsa.conf deixa muitos stubs que precisam ser especificados. A menos que um cartão para bcm2835 seja fornecido, a inicialização do Jasper.py exibe muitas mensagens de erro supostamente não fatais. Ao criar um arquivo bcm2835.conf, você pode se livrar das mensagens irritantes.
Parece-me que este é um bug da Jessie; realmente deve haver um arquivo que resolva essas mensagens de erro. Parece-me preguiçoso que o programador jessie que lida com a ALSA não tenha criado um que seja testado.
Não trabalhei em todas as mensagens de erro, mas suspeito que outras mensagens também sejam causadas por isso.
Outro caso de não ter uma versão madura é a falha na verificação de firmware antigo durante a inicialização. O firmware antigo no meu jessie resultou em uma área de trabalho que não respondia ao teclado ou mouse, que é um impedimento para o uso do jessie com o firmware antigo, a menos que você conheça ssh. Não é uma situação ingênua do usuário.
fonte