diff options
author | Chris Robinson <[email protected]> | 2010-08-14 21:30:14 -0700 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2010-08-14 21:30:14 -0700 |
commit | b65bc4523653017dfc7b910ebafcb213714fcb0c (patch) | |
tree | b2c00466b501ba4bfb8039139b4eec2d7cea802d /Alc/mixer.c | |
parent | 94b7e5a227b03fb4c77064a09da834a63286c4e8 (diff) |
Add a corrective, click-remval sample value offset
This will hopefully be more effective and rebust at removing clicks and pops,
particularly from starts and stops in the middle of a sound. Based on an idea
by Ben Davis.
Diffstat (limited to 'Alc/mixer.c')
-rw-r--r-- | Alc/mixer.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/Alc/mixer.c b/Alc/mixer.c index 64b4a13a..08b501c4 100644 --- a/Alc/mixer.c +++ b/Alc/mixer.c @@ -534,6 +534,7 @@ ALvoid aluMixData(ALCdevice *device, ALvoid *buffer, ALsizei size) { float (*DryBuffer)[OUTPUTCHANNELS]; ALfloat (*Matrix)[OUTPUTCHANNELS]; + ALfloat *ClickRemoval; const ALuint *ChanMap; ALuint SamplesToDo; ALeffectslot *ALEffectSlot; @@ -597,6 +598,16 @@ ALvoid aluMixData(ALCdevice *device, ALvoid *buffer, ALsizei size) ProcessContext(NULL); //Post processing loop + ClickRemoval = device->ClickRemoval; + for(i = 0;i < SamplesToDo;i++) + { + for(c = 0;c < OUTPUTCHANNELS;c++) + { + ClickRemoval[c] -= ClickRemoval[c] / 256.0f; + DryBuffer[i][c] += ClickRemoval[c]; + } + } + ChanMap = device->DevChannels; Matrix = device->ChannelMatrix; switch(device->Format) |