diff options
author | Damien Zammit <damien@zamaudio.com> | 2015-11-10 21:24:59 +1100 |
---|---|---|
committer | Damien Zammit <damien@zamaudio.com> | 2015-11-10 21:24:59 +1100 |
commit | 71711fe975a262b9288a72a467562b941fdbae25 (patch) | |
tree | 3014dedf001ba1dc2fc4e203802923ee8a2eca55 | |
parent | ddfeec2128ee4133e7ae98bd9f75a1e66953bbe9 (diff) |
Fixed pops and clicks for good!
Signed-off-by: Damien Zammit <damien@zamaudio.com>
-rw-r--r-- | plugins/ZamDelay/ZamDelayPlugin.cpp | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/plugins/ZamDelay/ZamDelayPlugin.cpp b/plugins/ZamDelay/ZamDelayPlugin.cpp index 4e8f777..43d5b2d 100644 --- a/plugins/ZamDelay/ZamDelayPlugin.cpp +++ b/plugins/ZamDelay/ZamDelayPlugin.cpp @@ -299,7 +299,7 @@ float ZamDelayPlugin::runfilter(float in) void ZamDelayPlugin::run(const float** inputs, float** outputs, uint32_t frames) { uint32_t i; - float in, out; + float in; float srate = getSampleRate(); TimePosition t = getTimePosition(); float bpm = 120.f; @@ -320,7 +320,6 @@ void ZamDelayPlugin::run(const float** inputs, float** outputs, uint32_t frames) bpm = t.bbt.beatsPerMinute; if (sync > 0.5f) { delaytimeout = (float)t.bbt.beatType * 1000.f * 60.f / (bpm * powf(2., divisor - 1.)); - delaytime = delaytimeout; } } delaysamples = (int)(delaytimeout * srate) / 1000; @@ -343,36 +342,31 @@ void ZamDelayPlugin::run(const float** inputs, float** outputs, uint32_t frames) if (sync != syncold) { recalc = 1; } - if (drywet != drywetold) { - recalc = 1; - } if (delaytimeout != delaytimeoutold) { recalc = 1; } if (recalc) { tap[next] = delaysamples; - clearfilter(); } xfade = 0.f; for (i = 0; i < frames; i++) { in = inputs[0][i]; z[posz] = (1. - feedb) * in + feedb * fbstate; - out = 0.f; + fbstate = 0.f; int p = posz - tap[active]; // active line if (p<0) p += MAX_DELAY; - out += z[p]; + fbstate += z[p]; if (recalc) { xfade += 1.0f / (float)frames; - out *= (1.-xfade); + fbstate *= (1.-xfade); int p = posz - tap[next]; // next line if (p<0) p += MAX_DELAY; - out += z[p] * xfade; + fbstate += z[p] * xfade; } - fbstate = ((1. - drywet) * in) + drywet * -inv * runfilter(out); - outputs[0][i] = from_dB(gain) * fbstate; + outputs[0][i] = from_dB(gain) * (((1. - drywet) * in) + drywet * -inv * runfilter(fbstate)); if (++posz >= MAX_DELAY) { posz = 0; } |