diff options
author | Chris Robinson <[email protected]> | 2016-07-26 04:09:01 -0700 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2016-07-26 04:09:01 -0700 |
commit | a6f41e4cb085c12d7adca291624ac3c33bebd3cc (patch) | |
tree | 7c9bb603c0c9b10a0c874bb57ae21db0d2f58808 | |
parent | 25d1b7bdba7b0c68e9e8e6f727c991cb69f24f4a (diff) |
Remove the last use of ALfilterState_processSingle
-rw-r--r-- | Alc/effects/echo.c | 20 | ||||
-rw-r--r-- | OpenAL32/Include/alFilter.h | 17 | ||||
-rw-r--r-- | OpenAL32/alFilter.c | 1 |
3 files changed, 17 insertions, 21 deletions
diff --git a/Alc/effects/echo.c b/Alc/effects/echo.c index 163b6ecb..4d2fd6f4 100644 --- a/Alc/effects/echo.c +++ b/Alc/effects/echo.c @@ -124,10 +124,14 @@ static ALvoid ALechoState_process(ALechoState *state, ALuint SamplesToDo, const const ALuint tap1 = state->Tap[0].delay; const ALuint tap2 = state->Tap[1].delay; ALuint offset = state->Offset; - ALfloat smp; + ALfloat x[2], y[2], in, out; ALuint base; ALuint i, k; + x[0] = state->Filter.x[0]; + x[1] = state->Filter.x[1]; + y[0] = state->Filter.y[0]; + y[1] = state->Filter.y[1]; for(base = 0;base < SamplesToDo;) { ALfloat temps[128][2]; @@ -142,8 +146,14 @@ static ALvoid ALechoState_process(ALechoState *state, ALuint SamplesToDo, const // Apply damping and feedback gain to the second tap, and mix in the // new sample - smp = ALfilterState_processSingle(&state->Filter, temps[i][1]+SamplesIn[0][i+base]); - state->SampleBuffer[offset&mask] = smp * state->FeedGain; + in = temps[i][1] + SamplesIn[0][i+base]; + out = in*state->Filter.b0 + + x[0]*state->Filter.b1 + x[1]*state->Filter.b2 - + y[0]*state->Filter.a1 - y[1]*state->Filter.a2; + x[1] = x[0]; x[0] = in; + y[1] = y[0]; y[0] = out; + + state->SampleBuffer[offset&mask] = out * state->FeedGain; offset++; } @@ -166,6 +176,10 @@ static ALvoid ALechoState_process(ALechoState *state, ALuint SamplesToDo, const base += td; } + state->Filter.x[0] = x[0]; + state->Filter.x[1] = x[1]; + state->Filter.y[0] = y[0]; + state->Filter.y[1] = y[1]; state->Offset = offset; } diff --git a/OpenAL32/Include/alFilter.h b/OpenAL32/Include/alFilter.h index 5d5c2136..a682d3ba 100644 --- a/OpenAL32/Include/alFilter.h +++ b/OpenAL32/Include/alFilter.h @@ -78,23 +78,6 @@ inline void ALfilterState_clear(ALfilterState *filter) void ALfilterState_setParams(ALfilterState *filter, ALfilterType type, ALfloat gain, ALfloat freq_mult, ALfloat rcpQ); -inline ALfloat ALfilterState_processSingle(ALfilterState *filter, ALfloat sample) -{ - ALfloat outsmp; - - outsmp = filter->b0 * sample + - filter->b1 * filter->x[0] + - filter->b2 * filter->x[1] - - filter->a1 * filter->y[0] - - filter->a2 * filter->y[1]; - filter->x[1] = filter->x[0]; - filter->x[0] = sample; - filter->y[1] = filter->y[0]; - filter->y[0] = outsmp; - - return outsmp; -} - void ALfilterState_processC(ALfilterState *filter, ALfloat *restrict dst, const ALfloat *restrict src, ALuint numsamples); inline void ALfilterState_processPassthru(ALfilterState *filter, const ALfloat *src, ALuint numsamples) diff --git a/OpenAL32/alFilter.c b/OpenAL32/alFilter.c index da447c27..e7382919 100644 --- a/OpenAL32/alFilter.c +++ b/OpenAL32/alFilter.c @@ -37,7 +37,6 @@ extern inline struct ALfilter *LookupFilter(ALCdevice *device, ALuint id); extern inline struct ALfilter *RemoveFilter(ALCdevice *device, ALuint id); extern inline void ALfilterState_clear(ALfilterState *filter); extern inline void ALfilterState_processPassthru(ALfilterState *filter, const ALfloat *src, ALuint numsamples); -extern inline ALfloat ALfilterState_processSingle(ALfilterState *filter, ALfloat sample); extern inline ALfloat calc_rcpQ_from_slope(ALfloat gain, ALfloat slope); extern inline ALfloat calc_rcpQ_from_bandwidth(ALfloat freq_mult, ALfloat bandwidth); |