I’m using a system with 14 speakers and trying to assign a mono sound to only play out of an arbitrary speaker.

To start off, I’m using speakermode_raw and outputtype_asio because I’m using a fireface 800 to run the multispeaker setup. I’ve used setSoftwareFormat to make sure that numOutputChannels is 14 . . . like so:

I’m then allowing the user to click on a button per speaker (just like a speaker test). I’m looping through the speakers one at a time and setting their volumes to either full or zero using setSpeakerLevels. It looks like this: (numSpeakers is set to 14)

The weird issue I’m getting is that when I play through speaker 1, I also get speakers 9, 11 and 13 playing. Also, when playing through speaker 2, I get 2, 10,12 and 14. Speakers 3-8 isolate perfectly and speakers 9-14 don’t play anything if I try to isolate to just them. I’ve checked my loop using console output and the volume levels it’s trying to set are definitely correct.

Just an update, this issue was cause by the fact that FMOD_SPEAKER_NULL had the value of 8 (the 9th speaker). The value for FMOD_SPEAKER_NULL has been changed in the latest version (4.37.04) so now all 16 channels can be mapped to when using ASIO.

You are right to force cast with an integer, that’s what you do in RAW speakermode.

The part you are probably missing is FMOD_ADVANCEDSETTINGS to check the speaker map

See
[code:113ghco1]
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. */
[/code:113ghco1]

How did you fix up the speaker9 issue?
Mapping the upper speakers to the corresponding speaker ID is sufficient to enable all RAW Speakers, but speaker9 is still not playing. I’s always silent. Has anyone an idea?

I found the issue The problem is that FMOD_SPEAKER_MAX/FMOD_SPEAKER_NOSPEAKER is enum 8. That means an output at channel 8 is probably not valid.
Eventually, I’ve found a workaround. The idea is to leave channel 8 out of the scope. So we move the channel up just by one channel. After that you’ll need to take this change in the bahaviour in account. That means everytime you want to "talk" to channel 8 you’ll need to use channel 9.

well, there should not be a limitation on speaker 9 with my bugfix above. I would have expected a limitation at speaker 16 or something like that.
WIth this 10 channeled sound card over here it works pretty well. Let me explain what it does a bit more deeply:

that means if you want to control channel 1 you control channel 1, but if you want to control channel 8 you control channel 9. That means that is a shift by one to work around the issue. Actually, you need to take it in account whenever you setup anything for speakers in fmod. The remapping seems to work ok for me. As I said I don’t know how it works with more than 10 channels.

I didn’t actually try the ‘shift by 1’ mapping.
I was simply referring to the fact that I am seeing audio on channels 1-8 and 10-16 when using ‘standard’ mapping. I would expect that if we shifted it we would get only channel 16 missing, but I need 16 channels of audio so this is not a solution for me.