[alsa-devel] Non-interleaved multi-channel access, what's required? Oxygen driver...

olly at funkster.org olly at funkster.org
Mon Mar 30 15:32:03 CEST 2009

Hi all,

   Hope this is the right place for this. I'm working on an app that requires non-interleaved access to 6 output channels, but alas the driver for the card that I'm using (Asus Xonar D1, AV100 / C-Media Oxygen chipset) doesn't support the noninterleaved access type, giving "incorrect access type" in response to this command:

if ((err = snd_pcm_hw_params_set_access(playback_handle, hw_params, SND_PCM_ACCESS_RW_NONINTERLEAVED)) < 0)
    fprintf(stderr, "cannot set access type (%s)\n", snd_strerror (err));
    return false;

   In a bout of optimism, I simply added the SNDRV_PCM_INFO_NONINTERLEAVED flag to the .info part of the snd_pcm_hardware struct that's defined for the card in oxygen_pcm.c and recompiled the kernel, not expecting it to really work.

   To my surprise, it does work! But, only for the "default" card and with two channels. If I try to use any of the multi-channel devices (e.g. front, surround51) then each channel appears to alternate round the buffers for all the channels.

   So... how do I find out if this is a limitation of the hardware? Can I do anything to the multi-channel part of the driver to make non-interleaved access work correctly? Or is there some clever use of the .asoundrc that can make it do what I need to?

Many thanks in advance for any help,
Oliver Stephenson

Sent using funkster.org webmail service

More information about the Alsa-devel mailing list