Upwards Volume Sidechain

NOTE: I’m using FMOD Studio 2.02.18


Within an event, I need the volume of one track to dynamically follow the volume signal output of another track.

In my case, I have a single sfx event comprised of multiple track layers; there is a primary track and secondary texture tracks. Not all of the audio files are the same length, so the secondary tracks need to follow the volume signal of the primary track so that they all share the same volume intensity and tail to silence when an audio signal ends on the primary track.

Volume knobs and “Gain” effects can only be sidechained downwards, so the only 2 current workarounds that I am aware of are…

  1. Parameter-driven Noise Gate: I found an existing thread that illustrates this, but this method only works in the mixer rather than within an event, so in my case doing so would require…
  • Create separate events for each layer that will be used for sidechaining and reference them in a single “main” event.
  • Create separate global parameters per event that will output a unique sidechain signal.
  • Configure the mixer logic for the sidechain output events/buses and the receiving modulated events/buses.

I dislike the above solution because it bloats the number of events/buses/parameters required (and is more confusing to maintain), when instead it should be achievable within a single event.

  1. “Compressor” effect gain knob: The gain knob on the compressor effect supports both upwards/downwards sidechain modulation, however the caveat is that the lower gain limit is only -30dB rather than -inf, so I had to use 2 of them in order for my secondary tracks to not be audible when the primary track has no audio.

Unless there is a better solution that I am unaware of, I think the most versatile solution that should be added as a feature is:

For any Volume/Gain knobs, add support for both upwards/downwards sidechain modulation and give the optional ability to clamp min (lower threshold) and max (upper threshold) sidechain values, so that if the audio goes above/below the threshold then the modulated knob will not go beyond the set clamped values.

It sounds like you might be complicating a problem that might not be a problem with some rethinking. It would be helpful to have more context. What is the event for? What are the layers? Are all these layers multis with assets of different lengths? If you went into more detail, we’d understand why you want your secondary layers to do what you want and possibly think of a better method.

I’m using “Upwards Volume Sidechaining” directly in FMOD because it’s a fast and flexible workflow for handling layers of a sound-effect / music. This thread is intended as a general technique discussion / feature request, I’m not asking for implementation advice specific to a certain sound. I’ll elaborate further to illustrate how this technique is useful and why there should be a simple way to achieve it in FMOD.

Within my single event, I’ve split each vertical layer of my sound into separate multi-instruments to maximize variations, so that you hear a different combination of layers each time that the event plays (this is important since it’s a sound that is repeated often). Each multi has assets of differing lengths due to the reason explained below in #2.

As a sound effect example…

  1. The player has a spell ability which can be charged to be more powerful. It takes 5 seconds to achieve a full charge, but the player can shoot the spell at any point during the charge.
  2. This sound consists of a primary layer (generic magic chargeup) + secondary layers for both the elemental type of spell (fire, water, etc) and the affinity of the caster (angelic, demonic, etc). The secondary layers start silent, and, as the spell is charged to become more powerful, they grow louder alongside the volume signal of the primary layer. By using volume signal sidechaining for this, it facilitates the work of the sound designer, in that the secondary layers don’t need to strictly be the same length as the primary layer (they could even be loops with start offset randomization to get further diversity of variations) and it doesn’t rely on manual automation which could be subject to change during the iteration process.
  3. The assets for the secondary layers could be sidechained in this way when rendered out in a DAW, but it’s faster to do and more flexible directly in FMOD.
  4. As an example where it would save time: Say the sounds were already implemented and the game-design team decides to change the charge duration of the spell and also there are new VFX fluctuations that the volume of each layer should respond to. Without FMOD sidechaining the sound designer has to redo all the secondary layer assets to match the new timing/fluctuations, whereas with FMOD sidechaining only the primary layer timing needs to be changed and FMOD will automatically handle the volume fluctuations based on the sidechain volume signal.

By letting FMOD handle upwards volume sidechaining, it makes iterating/experimenting with dynamic layer designs quick and easy, and less hassle to update potential timing changes.
But FMOD doesn’t currently seem to have a simple, clean way of doing this–using the gain of 2 “Compressor” effects is the best, but messy, way I’ve found so far.

I’m wondering if there is a better solution available that other users, or the FMOD team, know. Otherwise I still think the best option would be for the FMOD team to add support for upwards sidechaining for all volume knobs, with optional clamping if the sidechain signal goes beyond the thresholds (to prevent clipping, or if the layer should maintain a certain volume level when it’s not receiving a sidechain input).

Thank you for the detailed explanation, I can certainly see why upward sidechaining would be useful.
I think leveraging the compressor is probably the best approach for now. Not sure if this is feasible for you, but you could potentially create your own DSP plugin that supports positive gain sidechaining. If you modify the “fmod_gain” plugin that comes with the FMOD Engine examples to use “%” units instead of “dB” you can then build a gain plugin that supports positive sidechaining:

FMOD_DSP_INIT_PARAMDESC_FLOAT_WITH_MAPPING(p_gain, "Gain", "%", // <-- change to %
    "Gain in dB. -80 to 10. Default = 0", FMOD_GAIN_PARAM_GAIN_DEFAULT, gain_mapping_values, gain_mapping_scale);

You can then place that in your “%LOCALAPPDATA%\FMOD Studio\Plugins” directory, and use it in your FMOD Studio project by right clicking in the deck and selecting “Insert Effect → Plug-in Effects → FMOD → Gain”.

Might be overkill, but that would be the best workaround for now.
In any case, I’m not sure why gain/volume dials are capped at 0dB, I will pass your suggestion onto the Dev team. Thank you for bringing this to our attention!