Hold value during playback parameter question

Hey Community & Team FMOD,

I’d like to hear your thoughts on a workflow involving global and local parameters, and the Hold Value during Playback flag.

Here’s the situation which we need to fix:

  • Our game has different playback speeds, and the audio assets used for the various velocities are triggered by setting a global parameter for playback speed in code.
  • This parameter is used as trigger condition for the instruments that play the different assets.
  • Since the slower assets are longer than the faster ones, we sometimes observe that, when switching the global parameter back to a lower speed, we hear a ghost tail of the low speed assets (due to switching to the lower speed asset while the event is playing).

My intuition was to fix this by setting the global parameter to Hold value during playback, but I found out already that the proper way of doing it would be to use a local parameter instead, and automating this local parameter with the global parameter that is changed through code.

I tested this on small scale and it works fine.

Now, I have a lot of events that reference the global parameter, and I’m looking for the safest way to replace it with the local version, and adding automation.

Here’s my proposed workflow.

I’d like to hear your opinion on it, especially if you think there’s a better or safer way to do it :slight_smile:

  • Create a new local parameter with the same value range, and with Hold value during playback enabled.
  • Substitute all references to the currently used global parameter with the new local parameter (from the parameter browser).
  • Add automation to the local parameter, tying it to the global parameter which is still the one being set by code.

My biggest doubt: I only need to add automation to the local parameter once (in any event), since it will be used throughout in all occurences?

Looking forward to hearing your thoughts!

While the workflow you describe would work, it would require a lot of work on your part. Here’s an alternative that should produce the same outcome while requiring much less time and effort:

  1. Turn your existing global parameter into a local parameter. Optionally, rename it.
  2. Create a new global parameter.
  3. Automate the local parameter (i.e.: the old global parameter) on the new global parameter.

This produces the same end product as your workflow (everything being automated on a local parameter that’s automated on a global parameter), but saves you from having to go through all references to an existing parameter and replace them with references to a new parameter - which would likely involve a lot of repetitive copying and pasting. You already have the automation curves and everything set up; changing the global parameter to a local parameter will allow you to take advantage of that.

That’s right. Every instance of a parameter uses the same automation - so if you automate a local parameter on a global parameter once, every instance of that local parameter will be automated on that global parameter.

It’s easy to see this in the parameters browser window, which allows you to see your parameters as they’re defined outside of any event.