Number of active voices is always limited to 32

Hi everyone,

I’m currently doing experiments with the maximum number of active voices.
It seems that for my game, a value of 64-128 would be ideal. Unfortunately, Fmod always caps the number of active voices to 32. Am I doing something wrong here?

First, here’s the profiler screenshot. If I read the chart correctly, Fmod limits the active voices to 32, and there is a large number of virtual voices.

Here’s part of my initialization code (C#):

 FMOD.Studio.System.create(out var sys);
 sys.getCoreSystem(out var coreSystem);
 coreSystem.setSoftwareChannels(256 );
 sys.initialize(256, flags, coreFlags, IntPtr.Zero);

Where does the 32 voices limit come from? I have also disabled the limits on event instances in Fmod Studio - no change.


Turns out I had a “setSoftwareFormat” call in there. If setSoftwareFormat happens before the setSoftwareChannels call, then setSoftwareChannels does not work.

After moving the call, I now get more actual voices. However, the number is still limited. I have both the number of actual voices and the number of virtual voices set to 256, but Fmod is still making some voices virtual:


Why is that happening? With a limit of 256 voices and only 110 voices playing, I would assume that no voices should be made virtual.

The order of calling setSoftwareFormat and setSoftwareChannels should have no impact on one another, they are both simple functions that record your preferences to be applied during System::init.

Overall voice limit, including virtual voices is limited by the number passed to System::init. Real (software) voices are limited by System::setSoftwareChannels and System::setAdvancedSettings. In FMOD_ADVANCEDSETTINGS there are limits for each codec type, i.e. FADPCM, Vorbis, etc, when exceeded cause virtual voices.

Voices can also be made virtual if their Event has the “virtualize” stealing behavior and has reached its max polyphony.

Finally if a voice is silent, it will go virtual to save resources.

Thank you for the detailed explanation.

It turned out to be a codec problem. Activating the option “decompress samples” during bank loading fixed it.