summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Zammit <damien@zamaudio.com>2014-04-23 00:15:20 +1000
committerDamien Zammit <damien@zamaudio.com>2014-04-23 00:15:20 +1000
commit0473e7bc5fb3f7747f2651431755054b533543dd (patch)
treed2474f23f66a2778f1913bacfc16c9bf11203194
parent4c15f1680f54bddfd1fa5ffcfd3e8d2612090cda (diff)
Removed zipper noise from ZaMultiComp3.0
Signed-off-by: Damien Zammit <damien@zamaudio.com>
-rw-r--r--plugins/ZaMultiComp/ZaMultiCompPlugin.cpp18
-rw-r--r--plugins/ZaMultiComp/ZaMultiCompPlugin.hpp2
-rw-r--r--plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp14
-rw-r--r--plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.hpp2
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];
};