Fix air absorption

This commit is contained in:
Chris Robinson 2009-04-11 20:27:55 -07:00
parent c67fbd72dd
commit 65b69f3308

View File

@ -710,8 +710,21 @@ static ALvoid CalcSourceParams(const ALCcontext *ALContext,
break; break;
} }
// Source Gain + Attenuation and clamp to Min/Max Gain
DryMix = SourceVolume * flAttenuation;
DryMix = __min(DryMix,MaxVolume);
DryMix = __max(DryMix,MinVolume);
for(i = 0;i < MAX_SENDS;i++)
{
ALfloat WetMix = SourceVolume * RoomAttenuation[i];
WetMix = __min(WetMix,MaxVolume);
wetsend[i] = __max(WetMix,MinVolume);
wetgainhf[i] = 1.0f;
}
// Distance-based air absorption // Distance-based air absorption
if(ALSource->AirAbsorptionFactor > 0.0f && ALContext->DistanceModel != AL_NONE) if(ALSource->AirAbsorptionFactor > 0.0f && ALSource->DistanceModel != AL_NONE)
{ {
ALfloat dist = Distance-MinDist; ALfloat dist = Distance-MinDist;
ALfloat absorb; ALfloat absorb;
@ -727,19 +740,6 @@ static ALvoid CalcSourceParams(const ALCcontext *ALContext,
wetgainhf[i] *= absorb; wetgainhf[i] *= absorb;
} }
// Source Gain + Attenuation and clamp to Min/Max Gain
DryMix = SourceVolume * flAttenuation;
DryMix = __min(DryMix,MaxVolume);
DryMix = __max(DryMix,MinVolume);
for(i = 0;i < MAX_SENDS;i++)
{
ALfloat WetMix = SourceVolume * RoomAttenuation[i];
WetMix = __min(WetMix,MaxVolume);
wetsend[i] = __max(WetMix,MinVolume);
wetgainhf[i] = 1.0f;
}
//3. Apply directional soundcones //3. Apply directional soundcones
Angle = aluAcos(aluDotproduct(Direction,SourceToListener)) * 180.0f/M_PI; Angle = aluAcos(aluDotproduct(Direction,SourceToListener)) * 180.0f/M_PI;
if(Angle >= InnerAngle && Angle <= OuterAngle) if(Angle >= InnerAngle && Angle <= OuterAngle)