diff options
author | Chris Robinson <[email protected]> | 2013-11-10 02:48:03 -0800 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2013-11-10 02:48:03 -0800 |
commit | 4386ee32ce24a19bcb0577322d5b12a9db7c69f2 (patch) | |
tree | e5cba9d40b80c16baf5ce8f3d04e0de3d207e2f7 /Alc/effects/chorus.c | |
parent | a603dd55ffb9ea3e863ae3f15b1346e06035438f (diff) |
Use one long buffer for the chorus and flanger delay lines
Diffstat (limited to 'Alc/effects/chorus.c')
-rw-r--r-- | Alc/effects/chorus.c | 32 |
1 files changed, 13 insertions, 19 deletions
diff --git a/Alc/effects/chorus.c b/Alc/effects/chorus.c index cced4c23..4945faf2 100644 --- a/Alc/effects/chorus.c +++ b/Alc/effects/chorus.c @@ -33,8 +33,7 @@ typedef struct ALchorusState { DERIVE_FROM_TYPE(ALeffectState); - ALfloat *SampleBufferLeft; - ALfloat *SampleBufferRight; + ALfloat *SampleBuffer[2]; ALuint BufferLength; ALuint offset; ALuint lfo_range; @@ -53,11 +52,9 @@ typedef struct ALchorusState { static ALvoid ALchorusState_Destruct(ALchorusState *state) { - free(state->SampleBufferLeft); - state->SampleBufferLeft = NULL; - - free(state->SampleBufferRight); - state->SampleBufferRight = NULL; + free(state->SampleBuffer[0]); + state->SampleBuffer[0] = NULL; + state->SampleBuffer[1] = NULL; } static ALboolean ALchorusState_deviceUpdate(ALchorusState *state, ALCdevice *Device) @@ -72,21 +69,18 @@ static ALboolean ALchorusState_deviceUpdate(ALchorusState *state, ALCdevice *Dev { void *temp; - temp = realloc(state->SampleBufferLeft, maxlen * sizeof(ALfloat)); - if(!temp) return AL_FALSE; - state->SampleBufferLeft = temp; - - temp = realloc(state->SampleBufferRight, maxlen * sizeof(ALfloat)); + temp = realloc(state->SampleBuffer[0], maxlen * sizeof(ALfloat) * 2); if(!temp) return AL_FALSE; - state->SampleBufferRight = temp; + state->SampleBuffer[0] = temp; + state->SampleBuffer[1] = state->SampleBuffer[0] + maxlen; state->BufferLength = maxlen; } for(it = 0;it < state->BufferLength;it++) { - state->SampleBufferLeft[it] = 0.0f; - state->SampleBufferRight[it] = 0.0f; + state->SampleBuffer[0][it] = 0.0f; + state->SampleBuffer[1][it] = 0.0f; } return AL_TRUE; @@ -167,8 +161,8 @@ static void Process##Func(ALchorusState *state, const ALuint SamplesToDo, \ const ALfloat *restrict SamplesIn, ALfloat (*restrict out)[2]) \ { \ const ALuint bufmask = state->BufferLength-1; \ - ALfloat *restrict leftbuf = state->SampleBufferLeft; \ - ALfloat *restrict rightbuf = state->SampleBufferRight; \ + ALfloat *restrict leftbuf = state->SampleBuffer[0]; \ + ALfloat *restrict rightbuf = state->SampleBuffer[1]; \ ALuint offset = state->offset; \ const ALfloat feedback = state->feedback; \ ALuint it; \ @@ -251,8 +245,8 @@ static ALeffectState *ALchorusStateFactory_create(ALchorusStateFactory *UNUSED(f SET_VTABLE2(ALchorusState, ALeffectState, state); state->BufferLength = 0; - state->SampleBufferLeft = NULL; - state->SampleBufferRight = NULL; + state->SampleBuffer[0] = NULL; + state->SampleBuffer[1] = NULL; state->offset = 0; state->lfo_range = 1; |