Thank you for making FMOD, it is a joy to work in! I am using it for 7.1 surround sound mixing. I notice that the sides and rear channels are swapped when outputting from FMOD studio and Unreal. Notice in the screenshot how I am panning to left side in FMOD studio. FMOD studio shows the correct channel, which is channel 5. However, the audio output comes out as channel 7 (left rear). Note that I am also sending signal to the subwoofer channel 4, which is correctly routed.
I am using WASAPI with RME drivers using channels 1-8 as a WDM device. Platform settings are all set to 7.1. Metering channel order is set to “Standard” (L, R, C, LFE, Ls, Rs, Lsr, Rsr).
This channel routing mismatch is fine for development as I can easily adjust my audio mixer to match. But for packaging games, will the routing order be correct? What can I do to fix this routing issue in development as well?
The behavior you’re observing is expected, and is due to the difference in how Microsoft handles channel ordering vs most other platforms/driversg.
To elaborate, within FMOD 7.1 channels are ordered with the side channels first (Ls, Rs), and the rear channels second (Lsr, Rsr). FMOD will honor the channel order of whatever it outputs to (meaning that this shouldn’t be an issue in packaged games) - since you’re outputting using WASAPI, the channel ordering that you’re observing in your interface follows Microsoft’s rules. Microsoft defines their channel ordering in WAVEFORMATEXTENSIBLE with the rear channels (
SPEAKER_BACK_RIGHT) ordered before the side/surround channels (
SPEAKER_SIDE_RIGHT), which is why audio in channel 5 in FMOD Studio is in channel 7 in your interface. If you pan right instead, you should observe that channel 6 and channel 8 have been swapped as well.
That said, to clarify, are you only observing a difference in channel order in your interface, with no impact on the actual output? Or are channels actually playing to the wrong physical speakers? If the latter is true, while it could be issue with FMOD, it’s more likely to be an issue with your interface’s drivers, so I would recommend testing with a different output device/driver to see whether the issue is still present.