Como descobrir ALSA capacidades do dispositivo de áudio de programação em Linux sem abrir o dispositivo
Pergunta
Como faço para descobrir as capacidades de dispositivos ALSA sem abrir o dispositivo pela primeira vez? O problema é que eu preciso para fornecer os parâmetros para a função snd_pcm_open()
de usar as funções de teste que para mim é bobagem. Por que perguntar se este é um dispositivo de reprodução ou registro, se eu tenho que dizer a ele para a função de abertura em primeiro lugar?
Como um exemplo, eu gostaria de listar todos os dispositivos de reprodução, mas a única maneira que eu posso pensar é que tentam abrir todos os dispositivos I encontrar (com snd_device_name_hint()
) e tentar abri-los no modo de reprodução e se eu conseguir abrir, está tudo bem.
O problema é que, com todas as possíveis variações (taxa de amostragem, canais, etc), haveria um grande número terrível de open () é preciso realizar para descobrir os parâmetros.
Solução
Use snd_ctl_next para iterar sobre todos os dispositivos, em seguida, snd_ctl_open para obter informações sobre o dispositivo -. Isso não é o mesmo que snd_pcm_open, o que poderia falhar se outro programa tem o dispositivo aberto ou se você tiver configurações ruins
É muito densa, mas aqui está um código-fonte aberto que itera sobre todos os dispositivos ALSA você pode olhar para: https://app.assembla.com/spaces/portaudio/git/source/master/src/hostapi/alsa/pa_linux_alsa.c -. procurar BuildDeviceList para começar
Outras dicas
Foi minha primeira requisitos para um linux / unix projetos onde eu preciso de saber sobre toda a capacidade dispositivos de áudio disponíveis. Então eu preciso usar estes dispositivos para a captura e reprodução de áudio. O que tenho feito é bastante simples. Há um comando linux / unix que é usado para encontrar os dispositivos através alsa utilidade em linux.
É:
aplay -l
Agora, o que eu fiz é apenas fazer um programa para dar o fora como como como este por alsa.
Para obter ajuda de todos eu fiz um (.so) biblioteca e um aplicativo de exemplo que demonstra o uso desta biblioteca em C ++.
A saída de minha biblioteca é como -
[root@~]# ./IdeaAudioEngineTest
HDA Intel plughw:0,0
HDA Intel plughw:0,2
Esta biblioteca também pode capturar e reproduzir os dados de áudio em tempo real.
Ele está disponível com documentação em IdeaAudio Biblioteca com Duplex Alsa Áudio
O fornecimento você pode executar um comando shell. Então aplay é seu amigo.
aplay -l
lista todas as placas de som e áudio digital dispositivos