I have an application written about 10 years ago using FMOD. The original program was written for a specific MOTU sound interface device and its ASIO drivers, and the outputs appeared on the optical output channels (ADAT A, channels 1-6). I think it was almost pure accident that the outputs appeared in the correct location (for us), in that I don’t see any logic for finding the ADAT A channels and using those for the output.
Now I need to use a different MOTU device and without making any software changes, my outputs (six of them) show up on “Main Out 1-2”, “Analog 1-2”, and “Analog 3-4”, but I need to get them on “ADAT A 1-2”, “ADAT A 3-4”, and “ADAT A 5-6”.
Can anyone give me some hints?
I can “see” the channels I want (from within the debugger) when I make a call to:
result = system->getAdvancedSettings(fmodSettings);
After that call, I can see the fmodSettings structure and from there can get into the ASIOChannelList element. That’s where I see all the possible output devices of the MOTU, like Main Out 1-2, S/PDIF 1-2, ADAT Optical A 1-2, etc.
I found some hints about using the ASIOSpeakerList element of fmodSettings, but the only example I’ve see sets that speaker list to fmod constants like FMOD_SPEAKER_MAX, and it seems like the speaker list values want to be between 0 and 15, which wouldn’t work with hardware that has upwards of 30 possible channels.
And just to be clear, all output channels are listed twice, presumably because they are stereo pairs. So above where I mentioned “Main Out 1-2”, that actually appears twice.
I’ve tried creating a ASIOSpeakerList filled in with 6 constants (since I’m using 5.1) and calling setAdvancedSettings(), but the code craps out once it goes into its main loop. Sort of like this:
FMOD_SPEAKER rcwSpeakerList [] = { (FMOD_SPEAKER)14, (FMOD_SPEAKER)15, (FMOD_SPEAKER)16, (FMOD_SPEAKER)17, (FMOD_SPEAKER)18, (FMOD_SPEAKER)19 };
where the constants (14, 15, …) are the index of the desired ADAT lines found with the debugger.
I’m sure the “right” answer is to update to the latest version of fmod, but that introduces all sorts of other potential issues. I’m hoping to make a simple change to keep this old code running on newer hardware. BTW, the fmod.h files lists the version as an int value of 0x00043602.