FMOD multiple channel audio over dante asio virtual sound card



I’m currently trying to use fmod to play a 12 channel wav file using a dante virtual soundcard over asio. My fmod setup is the following:

init( 32, FMOD_INIT_NORMAL, 0 ));

The wav file I’m using is a test file, so it outputs on each of the channels sequentially with an interval between them of about 1 sec. What really happens with this setup is that I’m getting several channel outputs all at once, and then separate channels in random order.

At this point I’m not even sure whether FMOD supports that many channel outputs per file, and/or whether there is a way to map them.

Any help would be appreciated.


This would depend on your output mode.
If you are using directsound/wasapi, you are at the mercy of the Microsoft mapping order.
If you use ASIO, you can control the output channel destination, and ASIO is typically used for anything above a standard 7.1 mode.

You can set and get more information for ASIO with FMOD_ADVANCEDSETTINGS

ie here is some relevant stuff. The ASIOChannelList member should just be used for information, but it might help determine if you need to skip any channels, it should give you an idea of how to map your channels.
With ASIO you might not even have to use it, as it typically just allows raw mapping of 0 to 11 in your case , 1 for each speaker in order.

int             ASIONumChannels;            /* [r/w] Optional. Specify 0 to ignore. Number of channels available on the ASIO device. */
char          **ASIOChannelList;            /* [r/w] Optional. Specify 0 to ignore. Pointer to an array of strings (number of entries defined by ASIONumChannels) with ASIO channel names. */
FMOD_SPEAKER   *ASIOSpeakerList;            /* [r/w] Optional. Specify 0 to ignore. Pointer to a list of speakers that the ASIO channels map to.  This can be called after System::init to remap ASIO output. */

FMOD 4 supports up to 16 channels of output and input, so you should be safe with fmod’s internal settings.

FMOD 5 supports up to 32 FYI.


Hi Brett, and thanks for your answer.

Following your advice, my initialization (using ASIO) is:

memset( (void*)(&myAsioSettings), 0, sizeof(FMOD_ADVANCEDSETTINGS) );
myAsioSettings.ASIONumChannels = 16;
FMOD_SPEAKER mySpeakerList [] =
myAsioSettings.cbsize = sizeof(FMOD_ADVANCEDSETTINGS);
init( 100, FMOD_INIT_NORMAL, 0 ));

I’m only passing 5 elements to FMOD_SPEAKER in this example just to try things out, but no matter how many speakers I have in there, the behavior is the same as before.

Any ideas would be much appreciated.



Not that I could try, but some things to try:

  • call setAdvancedSettings() after init()
  • definitely add more speakers to ‘mySpeakerList’ (there’s only 5 now, instead of 16 like ASIONumChannels suggests)
  • try starting with (FMOD_SPEAKER)0 instead of 1?