Real Voice Channels always limited at 32

Hey everyone,

I am having trouble increasing the active real voices in my project.

When I run the game in the editor it sounds fine, but in a build sounds will cut out as soon as there are more than 32 voices active.

In the FMOD platform settings I have increased both “Virtual Channel Count” and “Real Channel Count”, and have unticked “Use Defaults” to increase both of those as well. None of these changes do seem to have any effect when trying them in a build. Enabling the Debug Overlay does work, so I should be on the correct platform.

Is there anything I am missing? I read in a similar thread to set System::setSoftwareChannels and System::setAdvancedSettings in FMOD_ADVANCEDSETTINGS, but our programmer told me they are not doing any sort of explicit init like this at the moment.

Would appreciate any input as I am currently a bit stumped.

Thanks a lot!

Hi,

Could I get you to provide your Unity and FMOD for Unity version numbers? Additionally, could I get you to provide a screenshot of your FMOD Platform Specific settings for the Default and Editor platforms, and your build target platform?

Hey Louis,

thanks so much for your swift reply. We are using FMOD Studio version 2.02.07 and version 2.02.07 of FMOD Studio Unity Integration. Unity is on version 2022.2.1f1.

Attached are screenshots for the Editor and Default settings.

Thanks a lot for your help!


Editor Settings

Thanks for providing your versions and platform settings. This appears to be a known bug that was fixed in 2.02.09 - if possible, try updating to that version and seeing whether it fixes the issue.

Hello, I’m having the exact same issue with FMOD Studio Version 2.02.20, FMOD Studio Unity Integration version 2.02.20 on Unity 2021.3.7f1.

Just like OP explained, the active voices in the build cap out at 32, despite having set the “Virtual Channel Count” to 2048 and the “Real Channel Count” to 256 (as well as overriding the codec counts to 256) in FMODStudioSettings.

Also just like OP, I’m not setting the System::setSoftwareChannels or System::setAdvancedSettings anywhere in code.

If I use the command RuntimeManager.CoreSystem.getSoftwareChannels(out int maxChannels); to print out the number of channels, it does print out 256, but the actual limit still seems to be at 32 (I can’t hear newly invoked sounds in the build, but they’re audible in the editor.)

image

image

Is there anything that I could be missing here?

Thanks!

Thanks for providing such detailed info!

Unfortunately, I haven’t been able to reproduce the issue on 2.02.20 in a build with your settings. The most likely culprit would be if you’ve set any instance limits for your events or buses in Studio - if your virtual voice count continues to grow while the active voices stays at 32, you likely have the “Virtualize” stealing mode enabled on your events. If your virtual voice count instead doesn’t grow, you likely have one of the other modes enabled.

If you haven’t set any instance limits, how exactly are you handling the lifetimes of your events (i.e. event emitter, your own script)? Can I get you to provide a simple series of exact steps that reproduces the issue for you, so I can test it again on my end?

So, to provide some context: I bump into this problem when invoking singular instances of two different events (so, just two Event Instances in total). Neither of these events have stealing, or limited instance counts (same goes for all of my busses).

[1st - Music track]


The first event is a 2D 8 second loop that plays continuously. It is comprised of 98 Audio Tracks (.ogg files in each) and 26 parameters, some of which control the volumes of some tracks, while others control various effects. It is an extremely demanding event, to put it mildly. On top of that, it is set to Highest Priority (I’ve set it up this way so that the different tracks inside this event wouldn’t get virtualized and become out of sync – I am aware of how impractical this is, and would definitely appreciate any tips or alternative ways on how to deal with track synching in this situation).

[2nd - Swing SFX]


As for the second event - it is a 3D, Medium Priority, Multi Instrument Action. It has some effects with random modulation, but all in all, it’s a pretty straightforward one-shot event.

Naturally, if any more different instances are played in the build, none of them are audible, since the main music track is using up all the 32 real voice channels due to it being set to the Highest Priority.

I’m using custom code to invoke both of the events by simply using the following methods:
Instance = RuntimeManager.CreateInstance(Reference);
RuntimeManager.AttachInstanceToGameObject(Instance, _origin); (this is only for the 2nd event which has a spatializer component)
Instance.start();
I’m also listening to EVENT_CALLBACK_TYPE.STOPPED callbacks and once I receive them, I call the methods Instance.setUserData(IntPtr.Zero); and Instance.release(); to clean up the instances that have stopped playing.

Here’s some screenshots from a longer profiler sessions, in which you can see that the total voices count doesn’t increase over time. You’ll also note some random spikes - I’m still not sure what causes them exactly (there’s an audible pop at the end of the loop, which is not there when playing in the editor).

[Build profiling session]

[Editor profiling session]

And here’s a screenshot of my projects Mixing window, just in case.

If there’s anything else I can provide from my end, just let me know.

Thanks!

Hello again,

So, I’m working with another team where we’re also using FMOD with Unity. In this case the project is a lot more straightforward - there’s just has a bunch of different 3D medium-priority one-shots getting invoked in the scene, and the sounds starts cutting out when there are too many things happening at the same time in the build (while the editor sounds work just fine). In the FmodStudioSettings file, the real channel count is set to 128, yet when profiling the build, it is clear that instances are being limited to 32.

In this project, we’re using Unity 2022.3.10f1, FMOD Studio Unity integration 2.02.18 and FMOD Studio 2.02.16. The sounds are being invoked through code.

Is there any way to force a change in the real channel count when building the project? We desperately need to be able to fix this, as the 32 sound limit is just not cutting it.

Thanks for verifying with a different project.

Unfortunately, after another test I still haven’t been able to reproduce the issue. Based on what you’ve said I’m inclined to think that the issue is related to the “Default” platform settings not being overridden correctly. The simplest fix is likely to specifically make a platform setting for the platform you’re building for, and set the voice counts there instead of using the Default platform, so give that a try and let me know whether that resolves the issue.

To confirm a few more things:

  • If you check the Default platform file in the Assets/Plugins/FMOD/Resources/FMODStudioSettings.asset, do the voice counts have “Has Value” enabled?
  • You said using getSoftwareChannels returns 256, even when the actual limit is 32 - just to double check, this occurs even in a build?
  • If you hard-code the voice counts to your desired values at the start of RuntimeManager.Initialize(), does the issue persist?
  • If you enable “Use Defaults” for your codecs, does the issue persist?
1 Like

Hi again @Louis_FMOD, thanks for getting back to me.

Changing other options like “Debug Location” or “Live Update” in the default platform settings immediately got reflected in build, which led me to assume that the build was indeed using default platform settings, but I will try creating new platform settings and rebuilding tomorrow - will get back to you on this one.

I can’t see any voice counts settings per se, but if you’re referring to the VirtualChannelCount and RealChannelCount options, then there are a couple that have “Has Value” set to 1 (I’m not sure how to tell if it’s the default platform or not). I did at one point try setting every channel option in the file to 256 as well as enabling “Has Value” options to 1 and then rebuilding - it still left us with only 32 active voices.

Yes, 256 was being logged in the build.

Sorry, I’m not familiar with the RuntimeManager.Initialize() method. If you’re talking about the RuntimeManager.CoreSystem.init method, then I’ve tried invoking it the maxChannels parameter set to 256 - no luck there either. Here’s a full snippet of code:


        private const FMOD.INITFLAGS initFlags = FMOD.INITFLAGS.MEMORY_TRACKING;

        private void Awake()
        {
            RuntimeManager.CoreSystem.setSoftwareChannels(256);
            RuntimeManager.CoreSystem.init(256, initFlags, (IntPtr)null);
        }

Yes, I tried it with default values as well as custom ones.

Hi again,

Well, that actually worked! Although besides creating a new settings group, I also had to manually increase the codec counts as without that change the channels were still limited to 32. So, as far as I can tell it’s the codec count options that are not getting set correctly in the Default settings group.

If by any chance this is useful, I’m attaching copies of how my FMODStudioSettings file looked before and after creating a new settings group in Unity:

Thanks for your help!

Happy to hear that you managed to resolve it. Thanks for your settings assets - I’ll take a look and do some additional testing to see whether I can reproduce the issue.

Just to clarify, I’m referring to the method found in the FMOD for Unity script ./Assets/Plugins/FMOD/src/RuntimeManager.cs, which handles initializing the FMOD System used by the integration.

1 Like