How do I find out the capabilities of ALSA devices without opening the device first? Problem is, I need to supply the parameters to the snd_pcm_open()
function to use the test functions which to me is silly. Why ask whether this is a playback or record device if I have to tell it to the open function first?
As an example, I would like to list all playback devices but the only way I can think of is trying to open every device I find (with snd_device_name_hint()
) and try to open them in playback mode and if I manage to open, everything is fine.
Problem is, with all the possible variations (sample rate, channels, etc) there would be an awful large number of open()'s I need to perform to find out the parameters.
Use snd_ctl_next to iterate over all devices, then snd_ctl_open to get info about the device - this is not the same as snd_pcm_open, which could fail if another program has the device open or if you have bad settings.
It's quite dense, but here's some open-source code that iterates over all ALSA devices you could look at: https://app.assembla.com/spaces/portaudio/git/source/master/src/hostapi/alsa/pa_linux_alsa.c - search for BuildDeviceList to get started.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With