From 0473e7bc5fb3f7747f2651431755054b533543dd Mon Sep 17 00:00:00 2001 From: Damien Zammit Date: Wed, 23 Apr 2014 00:15:20 +1000 Subject: Removed zipper noise from ZaMultiComp Signed-off-by: Damien Zammit --- plugins/ZaMultiComp/ZaMultiCompPlugin.cpp | 18 ++++++++++++------ plugins/ZaMultiComp/ZaMultiCompPlugin.hpp | 2 ++ plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp | 14 ++++++++++---- plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.hpp | 2 ++ 4 files changed, 26 insertions(+), 10 deletions(-) diff --git a/plugins/ZaMultiComp/ZaMultiCompPlugin.cpp b/plugins/ZaMultiComp/ZaMultiCompPlugin.cpp index fea6cc5..84f9b7f 100644 --- a/plugins/ZaMultiComp/ZaMultiCompPlugin.cpp +++ b/plugins/ZaMultiComp/ZaMultiCompPlugin.cpp @@ -83,7 +83,7 @@ void ZaMultiCompPlugin::d_initParameter(uint32_t index, Parameter& parameter) parameter.name = "Threshold"; parameter.symbol = "thr"; parameter.unit = "dB"; - parameter.ranges.def = 0.0f; + parameter.ranges.def = -16.0f; parameter.ranges.min = -80.0f; parameter.ranges.max = 0.0f; break; @@ -409,7 +409,7 @@ void ZaMultiCompPlugin::d_setProgram(uint32_t index) release = 80.0f; knee = 0.0f; ratio = 4.0f; - thresdb = 0.0f; + thresdb = -16.0f; makeup[0] = 0.0f; makeup[1] = 0.0f; makeup[2] = 0.0f; @@ -447,6 +447,7 @@ void ZaMultiCompPlugin::d_activate() a0[i] = a1[i] = a2[i] = 0.f; b1[i] = b2[i] = 0.f; w1[i] = w2[i] = 0.f; + z1[i] = z2[i] = 0.f; } } @@ -460,12 +461,17 @@ float ZaMultiCompPlugin::run_filter(int i, float in) in = sanitize_denormal(in); w1[i] = sanitize_denormal(w1[i]); w2[i] = sanitize_denormal(w2[i]); + z1[i] = sanitize_denormal(z1[i]); + z2[i] = sanitize_denormal(z2[i]); - float tmp = in - w1[i] * b1[i] - w2[i] * b2[i]; - float out = tmp * a0[i] + w1[i] * a1[i] + w2[i] * a2[i] + 1e-20f; + float out = in * a0[i] + w1[i] * a1[i] + w2[i] * a2[i] + - z1[i] * b1[i] - z2[i] * b2[i]; + out = sanitize_denormal(out); w2[i] = w1[i]; - w1[i] = sanitize_denormal(tmp); - return sanitize_denormal(out - 1e-20f); + z2[i] = z1[i]; + w1[i] = in; + z1[i] = out; + return out; } void ZaMultiCompPlugin::set_lp_coeffs(float fc, float q, float sr, int i, float gain=1.0) diff --git a/plugins/ZaMultiComp/ZaMultiCompPlugin.hpp b/plugins/ZaMultiComp/ZaMultiCompPlugin.hpp index 47f419d..d3d12ca 100644 --- a/plugins/ZaMultiComp/ZaMultiCompPlugin.hpp +++ b/plugins/ZaMultiComp/ZaMultiCompPlugin.hpp @@ -155,6 +155,8 @@ private: //Crossover filter states float w1[MAX_FILT]; float w2[MAX_FILT]; + float z1[MAX_FILT]; + float z2[MAX_FILT]; }; diff --git a/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp b/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp index c67724b..b9ce6d4 100644 --- a/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp +++ b/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp @@ -524,6 +524,7 @@ void ZaMultiCompX2Plugin::d_activate() a0[j][i] = a1[j][i] = a2[j][i] = 0.f; b1[j][i] = b2[j][i] = 0.f; w1[j][i] = w2[j][i] = 0.f; + z1[j][i] = z2[j][i] = 0.f; } } maxL = maxR = 0.f; @@ -540,12 +541,17 @@ float ZaMultiCompX2Plugin::run_filter(int i, int ch, float in) in = sanitize_denormal(in); w1[ch][i] = sanitize_denormal(w1[ch][i]); w2[ch][i] = sanitize_denormal(w2[ch][i]); + z1[ch][i] = sanitize_denormal(z1[ch][i]); + z2[ch][i] = sanitize_denormal(z2[ch][i]); - float tmp = in - w1[ch][i] * b1[ch][i] - w2[ch][i] * b2[ch][i]; - float out = tmp * a0[ch][i] + w1[ch][i] * a1[ch][i] + w2[ch][i] * a2[ch][i]; + float out = in * a0[ch][i] + w1[ch][i] * a1[ch][i] + w2[ch][i] * a2[ch][i] + - z1[ch][i] * b1[ch][i] - z2[ch][i] * b2[ch][i]; + out = sanitize_denormal(out); w2[ch][i] = w1[ch][i]; - w1[ch][i] = sanitize_denormal(tmp); - return sanitize_denormal(out); + z2[ch][i] = z1[ch][i]; + w1[ch][i] = in; + z1[ch][i] = out; + return out; } void ZaMultiCompX2Plugin::set_lp_coeffs(float fc, float q, float sr, int i, int ch, float gain=1.0) diff --git a/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.hpp b/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.hpp index f12ae15..5270206 100644 --- a/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.hpp +++ b/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.hpp @@ -172,6 +172,8 @@ private: //Crossover filter states float w1[2][MAX_FILT]; float w2[2][MAX_FILT]; + float z1[2][MAX_FILT]; + float z2[2][MAX_FILT]; }; -- cgit v1.2.3