[alsa-devel] Discovery of device characteristics

Tim Hewett tghewett2 at onetel.com
Wed Feb 20 22:38:00 CET 2013


Many thanks for your reply.

I think today I may have found "the" solution, it seems to work at least.

The problem seems to be that the nested loops (each of which was testing sample rate, channel format and number of channels) were only calling snd_pcm_hw_params_any() at the top of the outer loop, so (e.g.) the next sample rate was tested after a previous one had been set. It seems that once one sample rate has been set, it isn't possible to test another one until the params are reset.

Now all the params are tested in the innermost loop, where snd_pcm_hw_params_any() is now called just before all the tests for each possible combination in isolation.

Separately I'm trying to find an API for being notified when devices are added/removed. If you (CC: anyone else) could point me in the right direction I'd be very grateful.



On 20 Feb 2013, at 20:28, Clemens Ladisch <clemens at ladisch.de> wrote:

> Tim Hewett wrote:
>> I'm writing software looking to discover the available sample rates,
>> channel formats etc. for a device. I have been taking the approach of
>> testing a sample rate from a list of potential rates, then setting the
>> device to that rate to then test the channel formats etc..
>> It works ok usually but keeps failing to detect that the device
>> supports 24-bit channel formats, both for SND_PCM_FORMAT_S24_LE/BE and
>> SND_PCM_FORMAT_S24_3LE/3BE. It detects the 16-bit formats without any
>> problem.
> Which device (driver) is this?
>> Online source taken from http://download.atmark-techno.com/misc/demos/usb-audio-a500-howto/hw_params.c
>> does detect the 24-bit format but doesn't set the sample rate first -
>> each characteristic is tested in isolation - snd_pcm_hw_params_any()
>> is called before each one.
> snd_pcm_hw_params_any() is called only once; the configurations space
> isn't reduced as long as no set* function is called.
>> I am wondering if my way is not the correct way to determine device
>> characteristics.
> Your way sounds correct, but the driver code that sets the parameter
> constraints might not be, or the device really doesn't support 24 bits
> at the sample rate you've set.
> Regards,
> Clemens

More information about the Alsa-devel mailing list