# Change Master Output from stereo to Mono

**URL:** <https://qa.fmod.com/t/change-master-output-from-stereo-to-mono/16879>\
**Category:** Unity\
**Created:** [March 13, 2021, 11:56pm UTC](https://qa.fmod.com/t/change-master-output-from-stereo-to-mono/16879 "2021-03-13T23:56:49Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Author:** ![dafar](https://avatars.discourse-cdn.com/v4/letter/d/74df32/32.png) [@dafar](https://qa.fmod.com/u/dafar)\
**Post date:** [March 13, 2021, 11:56pm UTC](https://qa.fmod.com/t/change-master-output-from-stereo-to-mono/16879/1 "2021-03-13T23:56:49Z")

</div>

Hi,  
I want to create a button in Unity to switch (toggle) between stereo and mono output. Is this possible via c#?

Thanks! 🙂

---

<div class="post-metadata">

**Author:** ![aishi](https://yyz2.discourse-cdn.com/flex036/user_avatar/qa.fmod.com/aishi/32/82_2.png) [@aishi](https://qa.fmod.com/u/aishi)\
**Post date:** [March 14, 2021, 1:23am UTC](https://qa.fmod.com/t/change-master-output-from-stereo-to-mono/16879/2 "2021-03-14T01:23:07Z")

</div>

Hi, It looks like you can do this by setting the software format from the core system.

```
var core = FMODUnity.RuntimeManager.CoreSystem;
core.setSoftwareFormat(0, FMOD.SPEAKERMODE.MONO, 0);

```

Here’s the page in the documentation: [System::setSoftwareFormat](https://fmod.com/resources/documentation-api?version=2.0&page=core-api-system.html#system_setsoftwareformat)

---

<div class="post-metadata">

**Author:** ![dafar](https://avatars.discourse-cdn.com/v4/letter/d/74df32/32.png) [@dafar](https://qa.fmod.com/u/dafar)\
**Post date:** [March 14, 2021, 12:45pm UTC](https://qa.fmod.com/t/change-master-output-from-stereo-to-mono/16879/3 "2021-03-14T12:45:00Z")

</div>

Hi, Aishi!! Thanks for your help.

I tried to implement this button, but it’s not working.

I still have doubts related to what comes after FMOD.SPEAKERMODE.STEREO, \_\_\_\_

But anyway, even the mono didn’t work.

Here’s my code:

```
public void ToggleMonoStereo(bool isMono)
{
    if (!isMono)
    {
        MasterMono();
    }
    else
    {
        MasterStereo();
    }
}

public void MasterMono()
{
    var core = FMODUnity.RuntimeManager.CoreSystem;
    core.setSoftwareFormat(48000, FMOD.SPEAKERMODE.MONO, 0);
}

public void MasterStereo()
{
    var core = FMODUnity.RuntimeManager.CoreSystem;
    core.setSoftwareFormat(48000, FMOD.SPEAKERMODE.STEREO, 1);
}
```

---

<div class="post-metadata">

**Author:** ![mathew](https://yyz2.discourse-cdn.com/flex036/user_avatar/qa.fmod.com/mathew/32/431_2.png) [@mathew](https://qa.fmod.com/u/mathew)\
**Post date:** [March 16, 2021, 12:18am UTC](https://qa.fmod.com/t/change-master-output-from-stereo-to-mono/16879/4 "2021-03-16T00:18:07Z")

</div>

System::setSoftwareFormat only works when called before the System is initialized. The last parameter is only really relevant for FMOD.SPEAKERMODE.RAW, so you can leave it at 0.

---

<div class="post-metadata">

**Author:** ![dafar](https://avatars.discourse-cdn.com/v4/letter/d/74df32/32.png) [@dafar](https://qa.fmod.com/u/dafar)\
**Post date:** [March 16, 2021, 3:06am UTC](https://qa.fmod.com/t/change-master-output-from-stereo-to-mono/16879/5 "2021-03-16T03:06:46Z")

</div>

Thanks for the clarification, Mathew!

So it’s not possible to change from stereo to mono during runtime?

---

<div class="post-metadata">

**Author:** ![joseph](https://yyz2.discourse-cdn.com/flex036/user_avatar/qa.fmod.com/joseph/32/264_2.png) [@joseph](https://qa.fmod.com/u/joseph)\
**Post date:** [March 16, 2021, 5:21am UTC](https://qa.fmod.com/t/change-master-output-from-stereo-to-mono/16879/6 "2021-03-16T05:21:14Z")

</div>

> [@dafar](#):
>
> So it’s not possible to change from stereo to mono during runtime?

Yes and no.

As Mathew said, it’s not possible to change the channel count of your game’s output at runtime without destroying and rebuilding the Studio system.

However, it _is_ possible to make your game switch between outputting stereo format and outputting the same mono signal to both channels by using a combination of sends and return buses. In FMOD Studio:

1. Create a discrete global parameter with a minimum value of 1 and a maximum value of 2.
2. Create a group bus routed into your project’s master bus, and name it “Stereo.”
3. Take all the buses and events currently routed into your master bus, and route them into the Stereo bus.
4. Create a new return bus routed into your project’s master bus, and name it “Mono.”
5. Select the “Mono” return bus, and set its output format to mono.
6. Select the “Stereo” group bus, and add a pre-fader send to the Mono return bus to its signal chain.
7. Automate both the send and the fader on the global parameter you created back in step 1, such that when the global parameter is set to 1 the send’s volume is 0 dB and the fader’s volume is -oo dB, and when the global parameter is set to 2 the send’s volume is -oo dB and the return’s volume is 0 dB.

This setup will ensure that when the global parameter is set to 2, your game’s output will be stereo; but when the parameter is set to 1, your game’s output will be downmixed to mono and output equally on both channels. This should allow you to treat the output as switching between stereo and mono for most practical purposes.

Alternatively, if you prefer not to use a global parameter, you could instead set the send to -oo dB and the fader to 0 dB, and create a snapshot that sets the send to 0 dB and the fader to -oo dB when an instance of the snapshot is active.

---

<div class="post-metadata">

**Author:** ![dafar](https://avatars.discourse-cdn.com/v4/letter/d/74df32/32.png) [@dafar](https://qa.fmod.com/u/dafar)\
**Post date:** [March 16, 2021, 11:32am UTC](https://qa.fmod.com/t/change-master-output-from-stereo-to-mono/16879/7 "2021-03-16T11:32:49Z")

</div>

Thanks a ton, Joseph!! It worked perfectly for my needs!!

---

<div class="post-metadata">

**Author:** ![0100010](https://avatars.discourse-cdn.com/v4/letter/0/5f9b8f/32.png) [@0100010](https://qa.fmod.com/u/0100010)\
**Post date:** [March 27, 2024, 5:28am UTC](https://qa.fmod.com/t/change-master-output-from-stereo-to-mono/16879/8 "2024-03-27T05:28:26Z")

</div>

Sorry for bringing up an old thread, but this is exactly what I want to try in order to enable a Stereo toggle in my game that can be changed at runtime by the user. I think I figured how to do steps 1 - 6, but I am new to using FMod, and I am not sure how to do step 7. How do you automate a send and a fader and tie it to the global parameter? As in what do you click where in FMod studio and in what order in order to do that?

---

<div class="post-metadata">

**Author:** ![joseph](https://yyz2.discourse-cdn.com/flex036/user_avatar/qa.fmod.com/joseph/32/264_2.png) [@joseph](https://qa.fmod.com/u/joseph)\
**Post date:** [March 28, 2024, 12:13am UTC](https://qa.fmod.com/t/change-master-output-from-stereo-to-mono/16879/9 "2024-03-28T00:13:13Z")

</div>

> [@0100010](#):
>
> How do you automate a send and a fader and tie it to the global parameter? As in what do you click where in FMod studio and in what order in order to do that?

To automate a send or fader, first select the bus containing that fader or send in the mixer window, so that the send or fader is displayed in the deck. Then, right-click on the fader knob or send level knob in the deck, and select “Add Automation” fro mthe context menu. This adds an automation widget to the property.

Once you’ve added an automation widget to a property, you’ll need to add a parameter to it, and create an automation curve on that parameter. To add a parameter to an automation widget, click the “Add Curve” button, then select the global parameter you want to use, or click “New Parameter” and create a new global parameter that you intend to use.

To add an automation curve on that parameter after adding that parameter to the automation widget, click on the red dashed line to add an automation point, then click on the red line to add more automation points. Click and drag these points to various locations in order to define the shape of the automation curve. In your case, you want to automate the send’s level property such that it is 0 dB when the parameter is set to 1 and -oo dB when it is set to 2, and you want to automate the fader such that it is -oo dB when the global parameter is set to 1 and 0 dB when it is set to 2.

---

<div class="post-metadata">

**Author:** ![0100010](https://avatars.discourse-cdn.com/v4/letter/0/5f9b8f/32.png) [@0100010](https://qa.fmod.com/u/0100010)\
**Post date:** [March 28, 2024, 1:55am UTC](https://qa.fmod.com/t/change-master-output-from-stereo-to-mono/16879/10 "2024-03-28T01:55:47Z")

</div>

Thank you, is this correct?

 ![image](https://canada1.discourse-cdn.com/flex036/uploads/fmod/original/2X/3/311e563948edb15a7d3a0e1da6af9c9076461052.png)

---

<div class="post-metadata">

**Author:** ![joseph](https://yyz2.discourse-cdn.com/flex036/user_avatar/qa.fmod.com/joseph/32/264_2.png) [@joseph](https://qa.fmod.com/u/joseph)\
**Post date:** [March 28, 2024, 4:08am UTC](https://qa.fmod.com/t/change-master-output-from-stereo-to-mono/16879/11 "2024-03-28T04:08:06Z")

</div>

That looks correct, yes.

---

<div class="post-metadata">

**Author:** ![JosephGreaneyRG](https://avatars.discourse-cdn.com/v4/letter/j/aca169/32.png) [@JosephGreaneyRG](https://qa.fmod.com/u/JosephGreaneyRG)\
**Post date:** [May 30, 2024, 9:27am UTC](https://qa.fmod.com/t/change-master-output-from-stereo-to-mono/16879/12 "2024-05-30T09:27:39Z")

</div>

Hello, apologies for reviving this thread once more, we are also looking to add a similar user setting that allows players to play the game in mono.

In following these steps we noticed that this didn’t work for events using the 3D Object Spatializer. This makes sense because of how it’s routing works, but I was wondering if there were any workarounds for this while still allowing 3D object spatializers to be used.

We have tried destroying and rebuilding the studio system. This works but isn’t the most elegant solution, though it might work as a game setting that requires a restart to be applied.

I was wondering if you have any suggestions for our team?

Would it possible through code to make all 3D Object Spatializers use the fallback regular spatializer when the mono setting is active?

Thanks,  
Joe

---

<div class="post-metadata">

**Author:** ![joseph](https://yyz2.discourse-cdn.com/flex036/user_avatar/qa.fmod.com/joseph/32/264_2.png) [@joseph](https://qa.fmod.com/u/joseph)\
**Post date:** [May 31, 2024, 4:17am UTC](https://qa.fmod.com/t/change-master-output-from-stereo-to-mono/16879/13 "2024-05-31T04:17:54Z")

</div>

> [@JosephGreaneyRG](#):
>
> I was wondering if there were any workarounds for this while still allowing 3D object spatializers to be used.

There are not. Object spatializers, by definition, bypass all normal routing, so any solution that depends on the normal routing path cannot work.

You could potentially use return tracks within each event that uses an object spatializer such that one return track houses the object spatializer and another houses a non-object spatializer, then use sends automated on the global parameter to control which of those return tracks recieves an audible signal. That would allow you to switch between the object spatializer effect and the the non-object spatializer effect live by changing the parameter’s value. This workaround would, however, mean you would not gain the benefit of the object spatializer when using the non-object spatializer instead.

> [@JosephGreaneyRG](#):
>
> Would it possible through code to make all 3D Object Spatializers use the fallback regular spatializer when the mono setting is active?

No. The FMOD Engine does not support changing the effects in a signal path at run time; the closest alternative is to have multiple different routing paths and automate the gain of signals routed through them, as in the workaround I suggested above.

---

<div class="post-metadata">

**Author:** ![JosephGreaneyRG](https://avatars.discourse-cdn.com/v4/letter/j/aca169/32.png) [@JosephGreaneyRG](https://qa.fmod.com/u/JosephGreaneyRG)\
**Post date:** [June 4, 2024, 11:00am UTC](https://qa.fmod.com/t/change-master-output-from-stereo-to-mono/16879/14 "2024-06-04T11:00:46Z")

</div>

Thanks Joseph, the return tracks seems like a good solution for us, we’ve used something similar for another effect, so we’ll try it out as an option for this. Thanks!
