How downmixing from 5.1 and 7.1 works in FMOD Studio? And why is there such difference between Studio and engine?

Hi! According to the User Manual, “if you set your FMOD Studio project to be 5.1 Surround, but the player only has stereo speakers, FMOD automatically maps the outputs to the two available speakers”.
So I have a question regarding this topic.
I tested downmixing in FMOD Studio and in Unity with FMOD plugin, and I got really different results there. As far as I understand, in Unity, FMOD downmixes 5.1 to stereo according to the ATSC standard, using this formulae:
Lo= L + C/sqrt(2) + Ls/sqrt(2)
Ro= R + C/sqrt(2) + Rs/sqrt(2)

But in FMOD Studio I got different results. First of all, all sounds that have been placed behind the listener, (from -180° to -90° and from 90° to 180°) downmix in antiphase. For example, when sound was placed at 180° degrees, two channels had the same amplitude, but one of them had reversed phase.
Also, somehow, sound from Rs exists in L output channel and vice versa.

So, my questions are:
What downmix formulae does FMOD really use?
Shouldn’t the differences between downmixing algorithms in Studio and in the Engine be considered a bug, and why is there such a difference?

The standard 5.1 -> 2.0 downmix in FMOD is as you describe, this is what happens when you have a 5.1 bus feed into a 2.0 bus.

At the output if FMOD detects the sound card requires stereo (based on the Windows control panel setting) and the Studio project is configured for 5.1 a special downmix occurs. We use the SRS circle surround encoder to create a Dolby PL2 compatible matrix encoded stereo signal. Basically this means if you have a stereo device, you’ll hear stereo, if you have a Dolby PL2 equipped receiver it can decode back to 5.1. This is why you a seeing the phase discrepancy.

It’s expected that Unity (on Windows) is performing the same 5.1 -> 2.0 downmix as FMOD Studio does. If Unity is on Windows and you aren’t seeing this, check that the speaker mode setting in the FMOD Unity plugin settings is correctly set to 5.1.

1 Like

Thanks for the clarification. I think maybe I’ve got different results for Studio and Unity because I’ve tested this on Unity on Mac.
So, I have two more questions.

  1. Is there any way to force FMOD Studio and FMOD in Unity or UE4 not to use SRS encoder and use Lo/Ro algorithm for 5.1 to stereo downmix on output bus? I’m asking because maybe matrix encoding is good for some applications, but for me, ATSC surround downmix just sounds much better in stereo.

  2. What algorithms FMOD uses for 7.1 to stereo and 7.1 to 5.1 downmix on the output bus? I’m asking because it seems kind of strange for me that when your project setting is 7.1 and your audio interface requires stereo, when you place your sound at 150° direction (where right rear surround speaker should be placed), it’s not only going to the right stereo channel, but some portion of it goes to the left stereo channel, and vice versa.

Thanks!

  1. No, there isn’t a way to stop SRS and instead get 5.1 -> 2.0. ** SRS is only available for Mac and Win however.

  2. In 5.1 the two surround channels are at 110 degrees, where as in 7.1 the surrounds are at 90 and the rears are at 150, so there is some signal distribution during the downmix.

Thanks for the reply.
By the way, don’t you think that FMOD Studio should provide an option to disable SRS, because I think it’s not cool that while mixing for other platforms (not only Mac and Win) the way you hear the mix in Studio differs from the one you’ll hear on your target platform?
And do I get it right, 7.1 to 5.1 and to 2.0 downmix works exactly the same way on all available platforms and in FMOD Studio?

We will be removing SRS in v1.11, and yes the only special case is 5.1 -> 2.0 on Win / Mac.

Hello,

could you update this post by stating how the latest 2.02 version handles 5.1 to stereo downmixing?

Thank you!

In 2.02 SRS is gone, we do have a Dolby PL2 downmix available for the 5.1 → 2.0 special case, but you must enable this with FMOD_INIT_PREFER_DOLBY_DOWNMIX.

The default is a simple downmix matrix that looks like this:

{ 1, 0, 0.707, 0, 0.707, 0 }
{ 0, 1, 0.707, 0, 0, 0.707 }