Suggestion: steal release time

I think FMOD should have something similar to “Voice Steal Release Time” in UE4 concurrency settings. I found it super useful for a fantasy machine gun using a very long tail sound: with the polyphony (max count in UE4) set to 1, steal oldest, and the steal release time set to 0.3, it insures a very neat rafale shooting without abruptly cutting the previous sound, and allows for the long tail to develop only on the last sound. I think this option should be part of the scatterer instrument and the event macros.

concurrency

Ok, I’ve read an old answer from @joseph somewhere in the forum, saying the stealing wasn’t meant to be used in a creative way, so a smooth cut will not be implemented. I disagree, but why not.

However, a reason to implement it is because it’s in UE4 native audio. I mean, native audio in UE4 has awful behaviors! I pulled my hair out for hours trying to do something as simple as seamlessly transition from an music intro to a music loop. It seems to be almost impossible to do, even so The Legend of Zelda implemented this behavior in it’s main theme in 1986 (and probably before that, I can imagine).

By the way, have you seen this part where the UE guy talks about FMOD? His embarrassment is hilarious: https://youtu.be/qaOGv0gNSms?t=4823
But I should admit UE4 have more option than FMOD in regard to attenuation, spatialization and concurrency, steal release time being one of those.

If you want to achieve a smooth fade-out of a sound when playing a new instance of a sound, there are already ways to achieve that behavior in FMOD Studio, using combinations of AHDSR modulators, event instruments, trigger conditions, and command instruments.

Stealing is so called because it allows you to “steal” one voice or event instance in order to use it for something new. Gradually fading out one event instance or voice while starting to play another isn’t stealing the old instance, but playing two instances simultaneously; no stealing takes place. Failing to steal an instance when it is necessary to strictly limit the number of instances would undermine stealing’s usefulness as a tool for resource management.

That being said, I do understand that you want the start of one sound to trigger the fadeout of a different existing sound, and that you want a feature that allows you to achieve that behavior more conveniently to be part of playlist instruments and event macros. I’ll add that suggestion to our feature/improvement tracker. We won’t change how stealing works for the reasons I’ve already said, but we might be able to add (for example) a different feature that works in parallel to stealing and does what you want.

1 Like

In fact, after thinking twice, I don’t really get the argument. I’ll explain myself. If stealing is a tool for resource management but always makes a pop by abruptly cutting the sound, then sound designers will mostly avoid to use it, but rather use it as a safety net (ideally never triggering).

Eventually, why not leave the trade off to the sound designer, between an instant and hard steal, or a delayed, smoothed steal (with a temporary stealing voice count overload)? It would greatly expand the usefulness of this tool, in my opinion. And, after all, Epic made that choice in UE native sound system.

That is a very good point - if the resource management aspect is affecting the experience of the game then it can end up with sound designers not using it for either cases. Ideally this would be a fully fleshed out feature with “hard” and “soft” instance culling behaviour, but in the meantime it would be good to just allow fadeouts on stolen event instances as if STOP_ALLOWFADEOUT was called on them.

I’ve raised a feature suggestion to our dev team and it will hopefully be looked in to for a future release.

In the meantime, you could have a custom “soft” stealing behaviour system in place by monitoring the number of event instances for a particular event in a function and when the criteria has been met call STOP_ALLOWFADEOUT on the event instance of choice.

2 Likes

Thanks @richard_simms,
And even more so, I think the option should be present in async multi and scatterer. In fact, everywhere there’s a polyphony limit setting (because in those cases, stealing is used more as a creative tool than a ressource management tool).
I would imagine a knob for setting the steal release time (between 0 and a few seconds), 0 being the actuel hard culling. It would perform a standard fade out curve.

1 Like