Title:
Proposal: Add duckingEffect[] Parameter to SoundShaders for Dynamic Volume Ducking
Category:
Audio Engine / Feature Request
Description:
I’d like to propose a new audio feature that enables dynamic volume ducking in Arma 3 via SoundShader configuration. The idea is to introduce a duckingEffect[] parameter to selected SoundShaders (such as explosions or other loud events), allowing them to temporarily reduce the global mix volume (or specific audio categories like “engine”, “ambient”, etc.) when triggered — effectively simulating a realistic loudness prioritization, similar to how sidechain compression works in middleware like FMOD or Wwise.
Goal & Motivation:
This feature aims to:
- Improve immersion and realism by reflecting how loud events mask or suppress other sounds.
- Provide audio designers greater control over the perceived loudness hierarchy without requiring engine scripting workarounds.
- Avoid psychoacoustic clutter during chaotic gameplay (e.g., large firefights with vehicles, explosions, etc.) by giving explosive or impactful sounds appropriate sonic dominance.
Proposed Syntax (SoundShader level):
duckingEffect[] = {attenuationDb, holdTimeSec, attackTimeSec, releaseTimeSec};
Example:
duckingEffect[] = {6, 1, 0.02, 3}; // -6dB after 0.02 seconds, holding for 1 second, with a 3-second release afterwards
- attenuationdB: Volume drop applied to target mix (e.g. masterVolume or selected bus (if possible))
- holdTimeSec: Duration of full dB attenuation
- attackTimeSec: Time it takes to get to full -6dB ducking in seconds
- releaseTimeSec: Time over which the volume smoothly returns to normal
Optional: Distance-Based Falloff
To add realism and natural behavior, the ducking effect could be scaled based on the listener’s distance from the sound source using the "range" parameter given by the triggering SoundShader:
Proposed formula:
actualDucking = maxDucking * (1 - clamp(distance / maxRange, 0, 1));
In other words, if the SoundShader-Distance to camera is 250 Meters, and the given Range within the Soundshader is 500: Ducking Strength = MaxDucking (6db) x (1- 250/500) = 3dB attenuation of Master or Bus.
This ensures that ducking is strongest near the event and diminishes with distance — e.g., a nearby explosion heavily suppresses engine or ambient sounds, while distant ones barely affect the mix.
Implementation Ideas:
- Runtime Volume Control via Engine:
- Ducking effect is calculated per sound instance based on distance
- Resulting value is applied to a shared internal RTPC (e.g. duckingMaster)
- Ducking affects either the global master output or defined bus groups (e.g. ambient, vehicle, weapons, if possible)
- Layered Ducking Queues:
- If multiple ducking sources trigger concurrently, the strongest effect dominates
- Ducking priority can be stack-based or max-based for performance and consistency
- Fade Curve Options (advanced):
- Optional additional parameter: fadeType = linear, exponential, etc. - Might be redundant if based on RangeCurve given in SoundShader parameters.
Why Not Script Workarounds?
While ducking can theoretically be faked via custom controllers and scripted RTPCs, it lacks precision, consistency, and scalability. A native implementation would:
- Be cleaner
- Perform better
- Integrate naturally with existing SoundShader logic
Backward Compatibility:
If the duckingEffect[] parameter is omitted, behavior remains unchanged. Legacy configs are unaffected.
Use Cases:
- Explosion muffles engine/ambient noise briefly
- Big-caliber weapons suppress environmental sounds
- Dynamic indoor firefights create more impactful, dramatic soundscapes
Conclusion:
Implementing duckingEffect[] would be a powerful and realistic addition to Arma 3’s audio system — simple in structure, impactful in result, and fully backward-compatible. It opens up an entire layer of dynamic sound balancing without breaking the current modding workflow.
Thanks for your time and consideration!