This is a really odd one, but I’ve got a lot of supporting documentation. It occurs in both FMOD 2.00.05 and 2.00.07, in both FMOD Studio and the Unity integration, both macOS and Windows.
One of my events has a loop with a transition timeline and a transition region below it to jump away when a parameter changes. If the parameter changes at the right moment, it causes FMOD to fail spectacularly. Here’s a video in a minimal example project demonstrating:
Video Example
In the example project, if I trigger a parameter change in either FMOD Studio or via the Unity integration at m. 47, playback in the event hangs and it logs the following continuously:
22:49:21 fmod_playback_timeline.cpp(2021), assert(): assertion: 'leadTransition->timeline().length() == TimeUnit::zero()' failed
22:49:21 "FMOD_ERROR (28): An error occurred that wasn't supposed to. Contact support."
22:49:21 "FMOD_ERROR /Users/raymond/jenkins/workspace/Build__2.0__Studio_Mac/studio/src/SoundSystem.cpp(415): mSystem->update()"
The event will continue to assert and will only stop once told to stop immediately. Stopping with fade out hangs indefinitely.
Even worse, whatever the error is affects the rest of FMOD. In FMOD Studio, the meters stay at the level they were at just before the error messages started and the playback cursor stopped.
In Unity, FMOD stops playing most other events. Each additional event played allocates a new voice yet those voices are never freed so they pile up. For our players, this causes almost all sound in the game to stop entirely, and most new sounds will not play audibly.
If running in the Unity Editor, it also caused Unity to crash:
Unity_2020-02-05-220417_MacBook-Pro-3.log (157.6 KB)
What is it about this event that is so problematic? Is there any sort of workaround to avoid the bug in question?
And here’s a video of it failing in Unity, where you can see how the metering is frozen and channel count is monotonically increasing with each new sound played. After I stop play mode, Unity crashes without fail, with the same crash log as attached.
Unity Example