Hey,
I am encountering a bit of an issue trying to implement a time dilation on multiple instances. Initially the task was simple and I was able to to implement a global parameter and use it to automate the pitch of the main bus which speeds up and slows down the bus mimicing the time being sped up or slowed down. However, as the development continued, we wanted to the possibility of certain objects not being affected by time dilation, and went for an approach where a send/return bus is created to do the task and a parameter determines the volume of send bus audio, ie if an instance should be affected by relative time, the audio will be 1 and if it shouldn’t be, the volume is 0. Assuming the approach is correct, I found out that the return bus doesn’t allow macro change in pitch and instead can only adjust pitch without adjusting speed with the pitch shifter. It is kind of a backwards question but I am wondering if there is a way to adjust pitch like the macro, which I am assuimg is changing the sample rate in FMOD for return bus. Otherwise what would be a good approach to the problem? I’d appreciate any suggestion.
What you have observed is intended behavior, this is because return bus is designed for effects like reverb or EQ that don’t change timing, it’s not actually possible to directly apply time-variant pitch shifting to a bus’ submix, as time-variant pitch adjustment by definition also affects the speed at which the adjusted content plays, and therefore has to affect the rate at which the affected event instances’ timelines advance.
Instead of using a global parameter and pitch shifter effect, you could consider setting the event pitch into a local parameter and automate the pitch of each event instance on that parameter. That way, you will be able to have more control on deciding which objects are being affected by time dilation or not.
Hope this helps, let me know if you have any questions.
I see. Thanks for the response, however I am wondering if there could be a more optimised method to distinguish local time dilation and global, so the global parameter is applied to most instances, while a selected few have it overridden, as having it all managed locally would increase the number of processes quite a lot I believe, as I intende to make every movable object in the scene to have time dilation applied.
Unfortunately, it’s not possible to apply this on a per-instance basis. However, you could manage it on a per-event level by using a different parameter in certain events.
You could consider route all the events that you want controlled by the global parameter into the same group bus, and events you want to be controlled by a local parameter into a different bus. This reduces the processing overhead since FMOD can handle the pitch adjustments at the bus level instead of individually on each instance.
As of the time of writing (October of 2024), the Studio API does not support changing bus at run-time or on a per-instance basis.
Currently the only way to make an event behave differently on a per-instance basis is to design that behaviour into the event, typically by using local parameters to trigger or automate the markers, instruments, and properties within that event.