summaryrefslogtreecommitdiff
path: root/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp
diff options
context:
space:
mode:
authorDamien Zammit <damien@zamaudio.com>2014-04-22 21:09:12 +1000
committerDamien Zammit <damien@zamaudio.com>2014-04-22 21:09:12 +1000
commit4c15f1680f54bddfd1fa5ffcfd3e8d2612090cda (patch)
treeba801f36bad73f9ba90e941b4d3068314774e38d /plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp
parent786e6e91f735b9d3feaa0084df55f66cb0dd8b9a (diff)
Added individual thresholds to stereo multiband
Signed-off-by: Damien Zammit <damien@zamaudio.com>
Diffstat (limited to 'plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp')
-rw-r--r--plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp70
1 files changed, 51 insertions, 19 deletions
diff --git a/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp b/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp
index b33a831..c67724b 100644
--- a/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp
+++ b/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp
@@ -78,12 +78,30 @@ void ZaMultiCompX2Plugin::d_initParameter(uint32_t index, Parameter& parameter)
parameter.ranges.min = 1.0f;
parameter.ranges.max = 20.0f;
break;
- case paramThresh:
+ case paramThresh1:
parameter.hints = PARAMETER_IS_AUTOMABLE;
- parameter.name = "Threshold";
- parameter.symbol = "thr";
+ parameter.name = "Threshold 1";
+ parameter.symbol = "thr1";
parameter.unit = "dB";
- parameter.ranges.def = -12.0f;
+ parameter.ranges.def = -20.0f;
+ parameter.ranges.min = -60.0f;
+ parameter.ranges.max = 0.0f;
+ break;
+ case paramThresh2:
+ parameter.hints = PARAMETER_IS_AUTOMABLE;
+ parameter.name = "Threshold 2";
+ parameter.symbol = "thr2";
+ parameter.unit = "dB";
+ parameter.ranges.def = -18.0f;
+ parameter.ranges.min = -60.0f;
+ parameter.ranges.max = 0.0f;
+ break;
+ case paramThresh3:
+ parameter.hints = PARAMETER_IS_AUTOMABLE;
+ parameter.name = "Threshold 3";
+ parameter.symbol = "thr3";
+ parameter.unit = "dB";
+ parameter.ranges.def = -16.0f;
parameter.ranges.min = -60.0f;
parameter.ranges.max = 0.0f;
break;
@@ -279,8 +297,14 @@ float ZaMultiCompX2Plugin::d_getParameterValue(uint32_t index) const
case paramRatio:
return ratio;
break;
- case paramThresh:
- return thresdb;
+ case paramThresh1:
+ return thresdb[0];
+ break;
+ case paramThresh2:
+ return thresdb[1];
+ break;
+ case paramThresh3:
+ return thresdb[2];
break;
case paramMakeup1:
return makeup[0];
@@ -357,8 +381,14 @@ void ZaMultiCompX2Plugin::d_setParameterValue(uint32_t index, float value)
case paramRatio:
ratio = value;
break;
- case paramThresh:
- thresdb = value;
+ case paramThresh1:
+ thresdb[0] = value;
+ break;
+ case paramThresh2:
+ thresdb[1] = value;
+ break;
+ case paramThresh3:
+ thresdb[2] = value;
break;
case paramMakeup1:
makeup[0] = value;
@@ -439,7 +469,9 @@ void ZaMultiCompX2Plugin::d_setProgram(uint32_t index)
release = 80.0f;
knee = 0.0f;
ratio = 4.0f;
- thresdb = -12.0f;
+ thresdb[0] = -20.0f;
+ thresdb[1] = -18.0f;
+ thresdb[2] = -16.0f;
makeup[0] = 0.0f;
makeup[1] = 0.0f;
makeup[2] = 0.0f;
@@ -570,22 +602,22 @@ void ZaMultiCompX2Plugin::run_comp(int k, float inL, float inR, float *outL, flo
Rxg = sanitize_denormal(Rxg);
- if (2.f*(Lxg-thresdb)<-width) {
+ if (2.f*(Lxg-thresdb[k])<-width) {
Lyg = Lxg;
- } else if (2.f*fabs(Lxg-thresdb)<=width) {
- Lyg = Lxg + (1.f/ratio-1.f)*(Lxg-thresdb+width/2.f)*(Lxg-thresdb+width/2.f)/(2.f*width);
- } else if (2.f*(Lxg-thresdb)>width) {
- Lyg = thresdb + (Lxg-thresdb)/ratio;
+ } else if (2.f*fabs(Lxg-thresdb[k])<=width) {
+ Lyg = Lxg + (1.f/ratio-1.f)*(Lxg-thresdb[k]+width/2.f)*(Lxg-thresdb[k]+width/2.f)/(2.f*width);
+ } else if (2.f*(Lxg-thresdb[k])>width) {
+ Lyg = thresdb[k] + (Lxg-thresdb[k])/ratio;
}
Lyg = sanitize_denormal(Lyg);
- if (2.f*(Rxg-thresdb)<-width) {
+ if (2.f*(Rxg-thresdb[k])<-width) {
Ryg = Rxg;
- } else if (2.f*fabs(Rxg-thresdb)<=width) {
- Ryg = Rxg + (1.f/ratio-1.f)*(Rxg-thresdb+width/2.f)*(Rxg-thresdb+width/2.f)/(2.f*width);
- } else if (2.f*(Rxg-thresdb)>width) {
- Ryg = thresdb + (Rxg-thresdb)/ratio;
+ } else if (2.f*fabs(Rxg-thresdb[k])<=width) {
+ Ryg = Rxg + (1.f/ratio-1.f)*(Rxg-thresdb[k]+width/2.f)*(Rxg-thresdb[k]+width/2.f)/(2.f*width);
+ } else if (2.f*(Rxg-thresdb[k])>width) {
+ Ryg = thresdb[k] + (Rxg-thresdb[k])/ratio;
}
Ryg = sanitize_denormal(Ryg);