aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2009-12-10 18:37:36 -0800
committerChris Robinson <[email protected]>2009-12-10 18:37:36 -0800
commit56cc03860378e2758370b773b2a6f1b4e086b49a (patch)
tree052977e85ad193a8099423542e877f2f6b6bf965
parent4c83c689a803f3b0186f96d893d7ed903ce2c456 (diff)
Improve initial decay calculations for sends to reverb
-rw-r--r--Alc/ALu.c19
1 files changed, 8 insertions, 11 deletions
diff --git a/Alc/ALu.c b/Alc/ALu.c
index de0273a1..f54dfaf5 100644
--- a/Alc/ALu.c
+++ b/Alc/ALu.c
@@ -746,19 +746,16 @@ static ALvoid CalcSourceParams(const ALCcontext *ALContext, ALsource *ALSource)
Slot->effect.type == AL_EFFECT_EAXREVERB)
{
/* Apply a decay-time transformation to the wet path,
- * based on the attenuation of the dry path. This should
- * better approximate the statistical attenuation model
- * for the reverb effect.
+ * based on the attenuation of the dry path.
*
- * This simple equation converts the distance attenuation
- * into the time it would take to reach -60 dB. From
- * there it establishes an origin (0.333s; the decay time
- * that will produce equal attenuation) and applies the
- * current decay time. Finally, it converts the result
- * back to an attenuation for the reverb path.
+ * Using the approximate (effective) source to listener
+ * distance, the initial decay of the reverb effect is
+ * calculated and applied to the wet path.
*/
- WetGain[i] *= pow(10.0f, log10(flAttenuation) * 0.333f /
- Slot->effect.Reverb.DecayTime);
+ WetGain[i] *= pow(10.0, effectiveDist /
+ (SPEEDOFSOUNDMETRESPERSEC *
+ Slot->effect.Reverb.DecayTime) *
+ -60.0 / 20.0);
WetGainHF[i] *= pow(10.0,
log10(Slot->effect.Reverb.AirAbsorptionGainHF) *