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.
This commit is contained in:
Chris Robinson
2010-08-14 21:30:14 -07:00
parent 94b7e5a227
commit b65bc45236
3 changed files with 16 additions and 0 deletions
+3
View File
@@ -901,6 +901,9 @@ static ALCboolean UpdateDeviceParams(ALCdevice *device, const ALCint *attrList)
device->SamplesPlayed += oldRate-1;
device->SamplesPlayed /= oldRate;
for(i = 0;i < OUTPUTCHANNELS;i++)
device->ClickRemoval[i] = 0.0f;
for(i = 0;i < device->NumContexts;i++)
{
ALCcontext *context = device->Contexts[i];
+11
View File
@@ -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)
+2
View File
@@ -409,6 +409,8 @@ struct ALCdevice_struct
ALfloat PanningLUT[OUTPUTCHANNELS * LUT_NUM];
ALuint NumChan;
ALfloat ClickRemoval[OUTPUTCHANNELS];
// Contexts created on this device
ALCcontext **Contexts;
ALuint NumContexts;