Confused about how spatial sound modes like Windows Sonic interacts with FMOD

Hi there, I’ve encountered a few strange issues that seem to be related to surround sound modes and spatial sound modes like Windows Sonic for Headphones.

For context, I’m working on a top down isometric shooter. The game is releasing on PC and most consoles.

Issue 1:
When we first started testing on console a month or two ago, I noticed major issues with the mix. It was quite alarming because everything sounded very unbalanced mix-wise after I had spent so long trying to get the optimal mix whilst doing everything on PC.

After recording a playthrough on one of the consoles into the profiler, I noticed that there were 8 channels of audio being recorded instead of the usual 2. I realised that by default, each platform in FMOD has a different surround speaker mode set, most of them were “not” set to Headphones by default (and were either 5.1 or 7.1). So my assumption is that the game was automatically upmixing to 5.1 or 7.1 and completely wrecking the game mix. Wasn’t sure exactly why this was, but forcing all the platforms to use “headphones” as the surround speaker mode fixed the issue. But it left me wondering why that would be a default scenario.

Perhaps there were other ways to go about ensuring that the game mix remains the same even without having to force each platform to “headphones” mode? Am I right in thinking that another way to fix this without changing the default speaker mode would be to set the output of all events specifically to stereo instead of automatic? Would love some clarification around why this was happening.

Issue 2
In the last week I’ve tested on Xbox One and noticed that it sounds awful when connecting the headphones to the controller (compared to how its sounded with all other consoles). Initially I thought it just must be due to a really bad headphone amp in the controller, but have since realised that’s not the reason (I’m very glad for that). I noticed in our Xbox One dev kit, headset audio was set to “Windows Sonic for Headphones”. Perhaps this is set by default on dev kits, because nobody changed that… but when I changed it to “stereo uncompressed” it fixed the issue and now it sounds how it should.

What I’m confused about though is what exactly these modes such as Windows Sonic are doing to the game mix? Why is it completely destroying the game mix? Even the menu music which doesn’t have a spatializer on the event sounded terrible with this mode on. If that’s the case, I just don’t understand what the point of these modes are if they’re completely changing the mix for all sounds. I’m assuming there’s something I’m missing here so would love any clarification. My worry is that there are people out there that may use these settings without realising, or for whatever reason just use these settings which will result in a very bad audio experience.

Looking forward to hearing some clarification!

Hello, could I please get some support on this, really hoping to figure this out asap!

For a consistent stereo mix across all platforms, this would be the best approach. Generally we suggest that you create multiple speaker configurations in the platform settings for your project, and a corresponding mix for each platform and speaker configuration you want to support.
Perhaps we could change all of the platforms defaults to stereo to ensure a consistent mix is the default behavior- I will discuss this with the Dev team.

Windows Sonic is an object spatializer maintained by Microsoft. If you are using our object spatializer effect we will route the output signal away from the main mixer and into Windows Sonic. Enabling that Windows Sonic option on the physical device enables the object spatialization system on all non-stereo sounds, instead of just the sounds that we explicitly send to the object spatializer. If you are outputting stereo, it shouldn’t go through Windows Sonic, but we will need to confirm that this the case- we are currently in the process of moving our office so we won’t be able to confirm until next week.

Understood. Yeah it caught us off guard quite a bit to be honest as we left the default speaker mode to default and took us a while to figure out why the consoles sounded so horrible. I think having it default to stereo makes a lot more sense.

I am not using the object spatializer at all, only the regular spatializer. But also, for all UI/music, I’m not using any spatializer at all. The main menu for our game for example has music, menu ambience, and UI buttons. These are all stereo sounds and none of the events are using a spatializer (or any device). Yet with windows sonic enabled, the mix sounds drastically different (much worse). Not sure if this is a bug or if there is something else at play here, but something really doesn’t seem right.

Will await to hear from you again, thanks Jeff!

Thank you for your patience- I have verified my previous claim:

Windows Sonic is only activating if the speaker layout is greater than stereo, regardless of whether you are using object spatializers. This is a hardware feature that we have no control over, outside of avoiding this behavior by forcing the speaker layout to stereo.
Even though all of your banks, assets, buses etc are stereo, if the speaker mode is set to something else then everything is going to upmix/downmix as required, and in this case, enable Windows Sonic.

You can force the speaker layout in our integrations or the API:

  • For Unreal, set the Gamecore platform’s Speaker Mode to “Stereo”.
  • For Unity, set the Gamecore Project Platform: Surround Speaker Mode to “Stereo”
  • For C++, call System::setSoftwareFormat with FMOD_SPEAKERMODE_STEREO:
    FMOD::Studio::System* system = NULL;
    FMOD::Studio::System::create(&system);
    
    FMOD::System* coreSystem = NULL;
    system->getCoreSystem(&coreSystem);
    coreSystem->setSoftwareFormat(0, FMOD_SPEAKERMODE_STEREO, 0);
    

Can you please try forcing the speaker layout to stereo and let me know if the mix is still different with Windows Sonic enabled on the devkit?

Thanks Jeff.

Can I just confirm with you, is the “Speaker Layout” that you’re referring to different from the FMOD platform settings “Surround Speaker Mode”? (which is already set to Headphones). And if not, what is the difference exactly? Confused and surprised that there could be multiple places where this would affect the mix.

EDIT: So Xbox is already set to Stereo in the Unity settings, does that mean the Devkit is overriding the settings?

The output mode is set to auto, I’m not sure what that’s doing.

Will wait to hear back from you for clarification.

Yes, they are different things, but they need to match or the mix will sound wrong. The “Surround Speaker Mode” sets the Channel Format used by spatializers, as well as the output format for any events/buses that are set to “Platform”. Everything in the mixer is set to “Platform” by default, so the default behavior is for this setting to also control the Master Bus’s final output.

More importantly, even if everything is set to “Platform” and your Master Bus is outputting stereo, that has no bearing at all on the number of channels that will be sent to the OS. This is determined by the “Speaker Mode” option in the case of our Unity integration.

If the layout is stereo, then it should be outputting stereo and you shouldn’t be getting Winsonic spatialization. Can you please tell me what versions of GDK and the FMOD Unity integration you are using?

The Output Mode is the platform-specific output type FMOD will use. “Auto” would be the default, which is WASAPI.

This is really helpful, thanks Jeff.

So does that mean if the default SSM setting in FMOD was set to Headphones, but in Unity it was something higher than Stereo (ie. 5.1) there will always be automatic upmixing?

And does that mean if it was vice versa, ie. in FMOD set to 5.1, but set to Stereo in Unity, it’ll be automatically downmixed in every scenario?

Perhaps I’m getting confused, but how would you go about setting these two settings to ensure that the player is hearing the correct mix based on what type of speaker system they’re using? (Assuming the game has been specifically mixed for each category - not sure how you’d even go about doing this). Is that what the events/buses set to “Platform” are for? Am I making sense?

We’re using versions:
GDKXUpdate4-10.0.25398.1940
FMOD 2.02.21

Hi Jeff, I’m coming back to this and I just want to get a clarification from you. You mention there being both “Surround Speaker Mode” and also “Speaker Layout”. But with the Unity integration, there is only “Surround Speaker Mode”. I can’t find any Speaker Mode. So am I correct in thinking that there is both the “Surround Speaker Mode” inside of FMOD, and also the “Surround Speaker Mode” in the Unity integration (but its called “Speaker Layout” in Unreal or in C++)? Or do I have that wrong?

And if they are indeed named the same thing when using Unity, then which setting are you referring to above when talking about setting the channel format used by spatializers? I would assume it’s specific to the setting inside FMOD?

image

I’m assuming that they are indeed named the exact same thing when using Unity, because this Unity warning uses the term “Speaker Mode” even though the checkbox is titled “Surround Speaker Mode”. Very confusing!

Looking forward to hearing from you!

Correct.

Also correct.

Generally you make it configurable in your audio settings, save the user’s preference to disk, and reboot the game with the new platform preference and corresponding banks. We don’t currently provide support for this kind of speaker layout switching in the Unity or Unreal integrations, which only package one set of banks when building.

In the case of Unity, you can ship any number of banks in your StreamingAssets directory, or using addressables/asset bundles. You would also need to modify the integration to override the speaker layout in RuntimeManager.Initialize to use the selected speaker layout in the coreSystem.setSoftwareFormat call.

Yep, “Speaker Layout” is the Core API equivalent as the Unity integration’s “Surround Speaker Mode”.

The FMOD Studio platform “Surround Speaker Mode” setting sets the Channel Format used by spatializers. The Unity “Surround Speaker Mode” must match the FMOD “Surround Speaker Mode” or the mix will sound wrong. I will create a task to update the warning to say “surround speaker mode”, thank you for bringing this to our attention!

Hi Jeff, I forgot to get back to you on this one. But thanks again so much for the responses that cleared it up for me!

1 Like