Scale the WetGain parameter directly instead of on each application

This commit is contained in:
Chris Robinson 2011-07-05 14:00:11 -07:00
parent 0903a7f1e0
commit 21574f7e16
2 changed files with 8 additions and 9 deletions

View File

@ -323,7 +323,8 @@ ALvoid CalcNonAttnSourceParams(ALsource *ALSource, const ALCcontext *ALContext)
} }
} }
for(i = 0;i < NumSends;i++) for(i = 0;i < NumSends;i++)
ALSource->Params.Send[i].WetGain = WetGain[i] * ListenerGain; ALSource->Params.Send[i].WetGain = WetGain[i] * ListenerGain /
ALSource->NumChannels;
/* Update filter coefficients. Calculations based on the I3DL2 /* Update filter coefficients. Calculations based on the I3DL2
* spec. */ * spec. */

View File

@ -75,7 +75,6 @@ static void Mix_Hrtf_##T##_##sampler(ALsource *Source, ALCdevice *Device, \
ALuint OutPos, ALuint SamplesToDo, ALuint BufferSize) \ ALuint OutPos, ALuint SamplesToDo, ALuint BufferSize) \
{ \ { \
const ALuint NumChannels = Source->NumChannels; \ const ALuint NumChannels = Source->NumChannels; \
const ALfloat scaler = 1.0f/NumChannels; \
const T *RESTRICT data = srcdata; \ const T *RESTRICT data = srcdata; \
ALfloat (*RESTRICT DryBuffer)[MAXCHANNELS]; \ ALfloat (*RESTRICT DryBuffer)[MAXCHANNELS]; \
ALfloat *RESTRICT ClickRemoval, *RESTRICT PendingClicks; \ ALfloat *RESTRICT ClickRemoval, *RESTRICT PendingClicks; \
@ -195,14 +194,14 @@ static void Mix_Hrtf_##T##_##sampler(ALsource *Source, ALCdevice *Device, \
value = sampler(data + pos*NumChannels + i, NumChannels,frac);\ value = sampler(data + pos*NumChannels + i, NumChannels,frac);\
value = lpFilter1PC(WetFilter, i, value); \ value = lpFilter1PC(WetFilter, i, value); \
\ \
WetClickRemoval[0] -= value*WetSend * scaler; \ WetClickRemoval[0] -= value * WetSend; \
} \ } \
for(BufferIdx = 0;BufferIdx < BufferSize;BufferIdx++) \ for(BufferIdx = 0;BufferIdx < BufferSize;BufferIdx++) \
{ \ { \
value = sampler(data + pos*NumChannels + i, NumChannels,frac);\ value = sampler(data + pos*NumChannels + i, NumChannels,frac);\
value = lpFilter1P(WetFilter, i, value); \ value = lpFilter1P(WetFilter, i, value); \
\ \
WetBuffer[OutPos] += value*WetSend * scaler; \ WetBuffer[OutPos] += value * WetSend; \
\ \
frac += increment; \ frac += increment; \
pos += frac>>FRACTIONBITS; \ pos += frac>>FRACTIONBITS; \
@ -214,7 +213,7 @@ static void Mix_Hrtf_##T##_##sampler(ALsource *Source, ALCdevice *Device, \
value = sampler(data + pos*NumChannels + i, NumChannels,frac);\ value = sampler(data + pos*NumChannels + i, NumChannels,frac);\
value = lpFilter1PC(WetFilter, i, value); \ value = lpFilter1PC(WetFilter, i, value); \
\ \
WetPendingClicks[0] += value*WetSend * scaler; \ WetPendingClicks[0] += value * WetSend; \
} \ } \
OutPos -= BufferSize; \ OutPos -= BufferSize; \
} \ } \
@ -244,7 +243,6 @@ static void Mix_##T##_##sampler(ALsource *Source, ALCdevice *Device, \
ALuint OutPos, ALuint SamplesToDo, ALuint BufferSize) \ ALuint OutPos, ALuint SamplesToDo, ALuint BufferSize) \
{ \ { \
const ALuint NumChannels = Source->NumChannels; \ const ALuint NumChannels = Source->NumChannels; \
const ALfloat scaler = 1.0f/NumChannels; \
const T *RESTRICT data = srcdata; \ const T *RESTRICT data = srcdata; \
ALfloat (*DryBuffer)[MAXCHANNELS]; \ ALfloat (*DryBuffer)[MAXCHANNELS]; \
ALfloat *ClickRemoval, *PendingClicks; \ ALfloat *ClickRemoval, *PendingClicks; \
@ -336,14 +334,14 @@ static void Mix_##T##_##sampler(ALsource *Source, ALCdevice *Device, \
value = sampler(data + pos*NumChannels + i, NumChannels,frac);\ value = sampler(data + pos*NumChannels + i, NumChannels,frac);\
\ \
value = lpFilter1PC(WetFilter, i, value); \ value = lpFilter1PC(WetFilter, i, value); \
WetClickRemoval[0] -= value*WetSend * scaler; \ WetClickRemoval[0] -= value * WetSend; \
} \ } \
for(BufferIdx = 0;BufferIdx < BufferSize;BufferIdx++) \ for(BufferIdx = 0;BufferIdx < BufferSize;BufferIdx++) \
{ \ { \
value = sampler(data + pos*NumChannels + i, NumChannels,frac);\ value = sampler(data + pos*NumChannels + i, NumChannels,frac);\
\ \
value = lpFilter1P(WetFilter, i, value); \ value = lpFilter1P(WetFilter, i, value); \
WetBuffer[OutPos] += value*WetSend * scaler; \ WetBuffer[OutPos] += value * WetSend; \
\ \
frac += increment; \ frac += increment; \
pos += frac>>FRACTIONBITS; \ pos += frac>>FRACTIONBITS; \
@ -355,7 +353,7 @@ static void Mix_##T##_##sampler(ALsource *Source, ALCdevice *Device, \
value = sampler(data + pos*NumChannels + i, NumChannels,frac);\ value = sampler(data + pos*NumChannels + i, NumChannels,frac);\
\ \
value = lpFilter1PC(WetFilter, i, value); \ value = lpFilter1PC(WetFilter, i, value); \
WetPendingClicks[0] += value*WetSend * scaler; \ WetPendingClicks[0] += value * WetSend; \
} \ } \
OutPos -= BufferSize; \ OutPos -= BufferSize; \
} \ } \