**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:**
1. 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)
2. 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
3. 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!