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?