summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Zammit <damien@zamaudio.com>2019-07-09 22:24:30 +1000
committerDamien Zammit <damien@zamaudio.com>2019-07-09 22:24:30 +1000
commitd77ee3f22922df9190d16fe1914c29edec563c88 (patch)
tree414d4cfdca49e3edcf6a0e0db3c6030b2e806440
parent1fa7b123380e8dea288d6f5be3c580c30ff46c65 (diff)
LR4 equivalentsvf-lr4
-rw-r--r--plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp37
-rw-r--r--plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.hpp2
2 files changed, 20 insertions, 19 deletions
diff --git a/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp b/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp
index 079cfc6..b20aa39 100644
--- a/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp
+++ b/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp
@@ -722,7 +722,7 @@ void ZaMultiCompX2Plugin::activate()
for (j = 0; j < 2; j++)
old_ll[j]=old_l1[j]=0.f;
- for (type = 0; type < 3; type++) {
+ for (type = 0; type < 4; type++) {
for (i = 0; i < MAX_FILT; i++) {
for (layer = 0; layer < 2; layer++) {
simper[type][i][layer].k = 0.f;
@@ -751,11 +751,8 @@ void ZaMultiCompX2Plugin::activate()
void ZaMultiCompX2Plugin::linear_svf_set_xover(struct linear_svf *self, float sample_rate, float cutoff, float resonance, int hp)
{
- double w;
-
self->k = 1. / resonance;
- w = M_PI * cutoff / sample_rate;
- self->g = tan(w);
+ self->g = tan(M_PI * cutoff / sample_rate);
switch (hp) {
case 0:
self->m0 = 1.;
@@ -807,17 +804,19 @@ void ZaMultiCompX2Plugin::calc_lr4(float f, int i)
{
float srate = getSampleRate();
- linear_svf_set_xover(&simper[0][i][0], srate, f, 0.7071068, 0); // lp layer0
- linear_svf_set_xover(&simper[0][i][1], srate, f, 0.7071068, 0); // lp layer1
- linear_svf_set_xover(&simper[1][i][0], srate, f, 0.7071068, 1); // hp layer0
- linear_svf_set_xover(&simper[1][i][1], srate, f, 0.7071068, 1); // hp layer1
- linear_svf_set_xover(&simper[2][i][0], srate, f, 0.7071068, 2); // bp layer0
- linear_svf_set_xover(&simper[2][i][1], srate, f, 0.7071068, 2); // bp layer1
+ linear_svf_set_xover(&simper[0][i][0], srate, f, 0.54, 0); // lp layer0
+ linear_svf_set_xover(&simper[0][i][1], srate, f, 1.34, 0); // lp layer1
+ linear_svf_set_xover(&simper[1][i][0], srate, f, 0.54, 1); // hp layer0
+ linear_svf_set_xover(&simper[1][i][1], srate, f, 1.34, 1); // hp layer1
+ linear_svf_set_xover(&simper[2][i][0], srate, f, 0.54, 0); // lp layer2
+ linear_svf_set_xover(&simper[2][i][1], srate, f, 1.34, 0); // lp layer3
+ linear_svf_set_xover(&simper[3][i][0], srate, f, 0.54, 1); // hp layer2
+ linear_svf_set_xover(&simper[3][i][1], srate, f, 1.34, 1); // hp layer3
}
void ZaMultiCompX2Plugin::run_lr4(int i, float in, float *outlo, float *outhi)
{
- float lo, hi, ap;
+ float lo0, lo1, lo2, hi0, hi1, hi2;
/*
lo = run_linear_svf_xover(&simper[0][i][0], in);
ap = run_linear_svf_xover(&simper[2][i][0], lo);
@@ -827,13 +826,15 @@ void ZaMultiCompX2Plugin::run_lr4(int i, float in, float *outlo, float *outhi)
ap = run_linear_svf_xover(&simper[2][i][1], hi);
*outhi = run_linear_svf_xover(&simper[1][i][1], ap);
*/
- ap = run_linear_svf_xover(&simper[2][i][0], in);
- lo = run_linear_svf_xover(&simper[0][i][0], ap);
- *outlo = run_linear_svf_xover(&simper[0][i][1], lo);
+ lo0 = run_linear_svf_xover(&simper[0][i][0], in);
+ lo1 = run_linear_svf_xover(&simper[0][i][1], lo0);
+ lo2 = run_linear_svf_xover(&simper[2][i][0], lo1);
+ *outlo = run_linear_svf_xover(&simper[2][i][1], lo2);
- ap = run_linear_svf_xover(&simper[2][i][1], in);
- hi = run_linear_svf_xover(&simper[1][i][0], ap);
- *outhi = run_linear_svf_xover(&simper[1][i][1], hi);
+ hi0 = run_linear_svf_xover(&simper[1][i][0], in);
+ hi1 = run_linear_svf_xover(&simper[1][i][1], hi0);
+ hi2 = run_linear_svf_xover(&simper[3][i][0], hi1);
+ *outhi = run_linear_svf_xover(&simper[3][i][1], hi2);
}
void ZaMultiCompX2Plugin::run_comp(int k, float inL, float inR, float *outL, float *outR)
diff --git a/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.hpp b/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.hpp
index f775e0c..bfb2ac7 100644
--- a/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.hpp
+++ b/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.hpp
@@ -180,7 +180,7 @@ Stereo version of ZaMultiComp, with individual threshold controls for each band
double s[2];
};
- struct linear_svf simper[3][MAX_FILT][2];
+ struct linear_svf simper[4][MAX_FILT][2];
void linear_svf_set_xover(struct linear_svf *self, float sample_rate, float cutoff, float resonance, int hi);
void linear_svf_reset(struct linear_svf *self);
float run_linear_svf_xover(struct linear_svf *self, float in);