FMOD Studio api: How to enforce priority-based voice stealing when real channels are full?

(topic deleted by author)

Worded as it is currently, what you request is not possible.

Event instance limits and software channel limits are different things, and Studio API’s event stealing and the Core API’s virtual voice system are different systems that do different things and do not interact. A full discussion of them would be too long for this format, but the details important to your case are as follows:

  • The number of voices associated with a playing event instance can vary. It can be as low as zero (though an event instance with zero voices will of course be silent), and there is no upper limit (though if an event instance uses too many voices simultaneously, some of them will of course be virtualized). As a general rule, a voice is created each time a single instrument is triggered and begins playing, so usually an event instance uses a number of voices equal to the number of simultaneously-playing instances of single instruments in that event.
  • The virtual voice system concerns itself with how many active voices are playing, and virtualizes excess voices. It does not steal event instances.
  • The event instance stealing system concerns itself with how many event instances are playing, and steals excess event instances. It does not virtualize voices*.
  • The “max instances” and “stealing” property of an event instance, and the “max instances” property of a group bus," are used by the event instance stealing system, not the virtual voice system. The “max instances” properties of an event limits the maximum number of instances of that event that can exist contemporaneously, and the “max instances” property of a group bus limits the maximum number of event instances routed through that group bus that can be playing contemporaneously. Neither property limits the number of channels those event instances may use.
  • The “priority” property of events is only used by the Core API’s voice virtualization system; it is not used by the event instance stealing system.

So: Running out of active voices never causes event instances to be stolen, and the “priority” property of event instances doesn’t interact with event instance stealing. As such, there is no way to achieve the behavior you describe.

That being said, the behavior you describe is not necessarily the behavior you want. I’m not clear on whether your goal is conservation of resources or to keep your soundscape uncluttered, but if you’d describe what you want in more detail, I may be able to help you.


*Well… Technically the “virtualize” stealing behavior does cause a “stolen” event instance’s voices to be virtualized rather than the event instance to be stolen in the conventional manner, but that’s distinct from the virtualization applied by the virtual voice system, and so won’t help you in this case.