Apply attenuation EQ to many events at once

My use case is how to implement this situation:

  • When player is low health, low-pass is applied to almost all events with a few exceptions like heavy breathing.
  • When player is inside an open airlock, low-pass is applied to almost all events with a few exceptions like wind.
  • If the player is on low health AND close to an open airlock then heavy breathing would be affected by the open airlock attenuation, and the wind would be affected by low health.
  • There may be other things I want to do depending on complexity, like low-pass when crawling through vents (with the exception of movement SFX), high-pass when certain UI elements are showing, that sort of thing.

It would be good to also modify sends as well as EQs (e.g. to affect reverb), but for simplicity I’m happy enough with just EQ, even the same low-pass EQ.

What is the recommended way to do this? I’m using FMOD 2.03.

  • Group snapshots are a natural fit, except that it’s not possible to have a heirarchy of events that work for the different event/snapshot configurations. Maybe for the UI high-pass but not all the low-passes.
  • Effect chains with an EQ controlled by global parameters are an option, but then you’d end up hundreds of EQs and that would be a lot of CPU load.
  • There could be duplicate versions of each event that needs to be treated specially, then snapshots set up to play the correct one. Basically, a way to work around the restriction of heirarchical mixer groups.
    • E.g. a “Player Breathing” event on the “SFX” group + a “Clean Player Breathing” event on a “Clean Low Health SFX” mixer group. Likewise an “Airlock Wind” event on the “SFX” group and a “Clean Airlock Wind” event on a “Clean Airlock SFX” mixer group. Snapshots manage how these groups are muted/EQed… I think you could do it cleanly enough using shared FX chains.
  • I thought of a way of doing something similar without needing to duplicate events, but it’s even more complicated.
  • Maybe you can do something fancy from C# with the FMOD API somehow?

Before I experiment I wanted to just check first if there is a recommended way to do all of this?

There’s not one best way to do this, as every game has different requirements. The trick is to identify your game’s requirements, and design solution that fits them.

In your case, I suspect that you want to put effects on your group buses, and control the property values of those effects by using snapshots.

I know you said that snapshots won’t work - but you might not be aware that snapshots don’t affect every property in the mixer; rather, each snapshot affects only the subset of properties that you have explicitly scoped into that particular snapshot. For example, if you create an “inside an airlock” snapshot and scope the “cutoff” property of a lowpass effect into that snapshot, that snapshot will affect only that property, and will have no effect on other properties in the mixer, meaning that you can use a different snapshot to control those properties without the two snapshots interfering with each other. You can play either one, neither, or both snapshots at the same time, and it will all just work.

Does that address your situation?