summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Zammit <damien@zamaudio.com>2015-06-16 02:20:36 +1000
committerDamien Zammit <damien@zamaudio.com>2015-06-16 02:20:36 +1000
commit43fa19c5558b6e644b80f1b933d39eb1a747e8af (patch)
tree1a4982737181f4017d7627c840c8e2d4de8b5b4f
parent78c5e0f61cbdee0cd112e29a9d1f0dcdcf52cd4e (diff)
Fixed independent outlevels for graph followers
Signed-off-by: Damien Zammit <damien@zamaudio.com>
-rw-r--r--plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp58
-rw-r--r--plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.hpp6
-rw-r--r--plugins/ZaMultiCompX2/ZaMultiCompX2UI.cpp65
-rw-r--r--plugins/ZaMultiCompX2/ZaMultiCompX2UI.hpp2
4 files changed, 123 insertions, 8 deletions
diff --git a/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp b/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp
index aa735a8..dedb004 100644
--- a/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp
+++ b/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp
@@ -260,6 +260,33 @@ void ZaMultiCompX2Plugin::initParameter(uint32_t index, Parameter& parameter)
parameter.ranges.min = -45.0f;
parameter.ranges.max = 20.0f;
break;
+ case paramOutputLevelLow:
+ parameter.hints = kParameterIsOutput;
+ parameter.name = "Output low";
+ parameter.symbol = "outlo";
+ parameter.unit = "dB";
+ parameter.ranges.def = -45.0f;
+ parameter.ranges.min = -45.0f;
+ parameter.ranges.max = 20.0f;
+ break;
+ case paramOutputLevelMed:
+ parameter.hints = kParameterIsOutput;
+ parameter.name = "Output medium";
+ parameter.symbol = "outmed";
+ parameter.unit = "dB";
+ parameter.ranges.def = -45.0f;
+ parameter.ranges.min = -45.0f;
+ parameter.ranges.max = 20.0f;
+ break;
+ case paramOutputLevelHigh:
+ parameter.hints = kParameterIsOutput;
+ parameter.name = "Output high";
+ parameter.symbol = "outhi";
+ parameter.unit = "dB";
+ parameter.ranges.def = -45.0f;
+ parameter.ranges.min = -45.0f;
+ parameter.ranges.max = 20.0f;
+ break;
}
}
@@ -304,6 +331,9 @@ void ZaMultiCompX2Plugin::loadProgram(uint32_t index)
globalgain = 0.0;
outl = -45.0;
outr = -45.0;
+ outlevel[0] = -45;
+ outlevel[1] = -45;
+ outlevel[2] = -45;
break;
case 1:
attack = 10.0;
@@ -331,6 +361,9 @@ void ZaMultiCompX2Plugin::loadProgram(uint32_t index)
globalgain = 0.0;
outl = -45.0;
outr = -45.0;
+ outlevel[0] = -45.0;
+ outlevel[1] = -45.0;
+ outlevel[2] = -45.0;
break;
}
/* Default variable values */
@@ -424,6 +457,15 @@ float ZaMultiCompX2Plugin::getParameterValue(uint32_t index) const
case paramOutputLevelR:
return outr;
break;
+ case paramOutputLevelLow:
+ return outlevel[0];
+ break;
+ case paramOutputLevelMed:
+ return outlevel[1];
+ break;
+ case paramOutputLevelHigh:
+ return outlevel[2];
+ break;
default:
return 0.0f;
}
@@ -520,6 +562,15 @@ void ZaMultiCompX2Plugin::setParameterValue(uint32_t index, float value)
case paramOutputLevelR:
outr = value;
break;
+ case paramOutputLevelLow:
+ outlevel[0] = value;
+ break;
+ case paramOutputLevelMed:
+ outlevel[1] = value;
+ break;
+ case paramOutputLevelHigh:
+ outlevel[2] = value;
+ break;
}
}
@@ -849,6 +900,8 @@ void ZaMultiCompX2Plugin::run(const float** inputs, float** outputs, uint32_t fr
fil1[1] = run_filter(0, 1, inr);
tmp1[0] = run_filter(1, 0, fil1[0]);
tmp1[1] = run_filter(1, 1, fil1[1]);
+ outlevel[0] = to_dB(std::max(tmp1[0], tmp1[1]));
+
if (tog1)
run_comp(0, tmp1[0], tmp1[1], &outL[0], &outR[0]);
@@ -863,6 +916,8 @@ void ZaMultiCompX2Plugin::run(const float** inputs, float** outputs, uint32_t fr
fil3[1] = run_filter(4, 1, tmp3[1]);
tmp4[0] = run_filter(5, 0, fil3[0]);
tmp4[1] = run_filter(5, 1, fil3[1]);
+ outlevel[1] = to_dB(std::max(tmp4[0], tmp4[1]));
+
if (tog2)
run_comp(1, tmp4[0], tmp4[1], &outL[1], &outR[1]);
@@ -873,13 +928,14 @@ void ZaMultiCompX2Plugin::run(const float** inputs, float** outputs, uint32_t fr
fil4[1] = run_filter(6, 1, inr);
tmp5[0] = run_filter(7, 0, fil4[0]);
tmp5[1] = run_filter(7, 1, fil4[1]);
+ outlevel[2] = to_dB(std::max(tmp5[0], tmp5[1]));
+
if (tog3)
run_comp(2, tmp5[0], tmp5[1], &outL[2], &outR[2]);
tmp6[0] = tog3 ? outL[2] * from_dB(makeup[2]) : tmp5[0];
tmp6[1] = tog3 ? outR[2] * from_dB(makeup[2]) : tmp5[1];
-
outputs[0][i] = outputs[1][i] = 0.f;
if (listen1) {
listenmode = 1;
diff --git a/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.hpp b/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.hpp
index d945ed7..90734d2 100644
--- a/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.hpp
+++ b/plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.hpp
@@ -19,6 +19,7 @@
#define ZAMULTICOMPX2PLUGIN_HPP_INCLUDED
#include "DistrhoPlugin.hpp"
+#include <algorithm>
START_NAMESPACE_DISTRHO
@@ -68,6 +69,9 @@ public:
paramGlobalGain,
paramOutputLevelL,
paramOutputLevelR,
+ paramOutputLevelLow,
+ paramOutputLevelMed,
+ paramOutputLevelHigh,
paramCount
};
@@ -159,7 +163,7 @@ private:
float gainr[MAX_COMP],toggle[MAX_COMP],listen[MAX_COMP],maxL,maxR,outl,outr,xover1,xover2;
float old_yl[2][MAX_COMP], old_y1[2][MAX_COMP], old_yg[2][MAX_COMP];
float old_ll[2], old_l1[2];
- float limit;
+ float limit, outlevel[3];
bool resetl;
bool resetr;
// Crossover filter coefficients
diff --git a/plugins/ZaMultiCompX2/ZaMultiCompX2UI.cpp b/plugins/ZaMultiCompX2/ZaMultiCompX2UI.cpp
index 471498e..a7b5409 100644
--- a/plugins/ZaMultiCompX2/ZaMultiCompX2UI.cpp
+++ b/plugins/ZaMultiCompX2/ZaMultiCompX2UI.cpp
@@ -249,8 +249,7 @@ void ZaMultiCompX2UI::calc_compcurves() {
compy[k][i] = fCanvasArea.getY() + (1.-compy[k][i])*fCanvasArea.getHeight();
}
//dot follows curve:
- float out = std::max(fLedYellowValueL, fLedYellowValueR) - fMaster;
- compcurve((max_x - min_x)*from_dB(out), k, &dotx[k], &doty[k]);
+ compcurve((max_x - min_x)*from_dB(outlevel[k]), k, &dotx[k], &doty[k]);
dotx[k] = fCanvasArea.getX() + dotx[k]*fCanvasArea.getWidth();
doty[k] = fCanvasArea.getY() + (1. - doty[k])*fCanvasArea.getHeight();
}
@@ -334,6 +333,24 @@ void ZaMultiCompX2UI::parameterChanged(uint32_t index, float value)
repaint();
}
break;
+ case ZaMultiCompX2Plugin::paramOutputLevelLow:
+ if (outlevel[0] != value) {
+ outlevel[0] = value;
+ repaint();
+ }
+ break;
+ case ZaMultiCompX2Plugin::paramOutputLevelMed:
+ if (outlevel[1] != value) {
+ outlevel[1] = value;
+ repaint();
+ }
+ break;
+ case ZaMultiCompX2Plugin::paramOutputLevelHigh:
+ if (outlevel[2] != value) {
+ outlevel[2] = value;
+ repaint();
+ }
+ break;
case ZaMultiCompX2Plugin::paramMakeup1:
fKnobMakeup1->setValue(value);
if (fMakeup[0] != value)
@@ -384,12 +401,27 @@ void ZaMultiCompX2UI::parameterChanged(uint32_t index, float value)
break;
case ZaMultiCompX2Plugin::paramListen1:
fToggleListen1->setValue(value);
+ if (fListen[0] != value)
+ {
+ fListen[0] = value;
+ repaint();
+ }
break;
case ZaMultiCompX2Plugin::paramListen2:
fToggleListen2->setValue(value);
+ if (fListen[1] != value)
+ {
+ fListen[1] = value;
+ repaint();
+ }
break;
case ZaMultiCompX2Plugin::paramListen3:
fToggleListen3->setValue(value);
+ if (fListen[2] != value)
+ {
+ fListen[2] = value;
+ repaint();
+ }
break;
}
}
@@ -574,12 +606,18 @@ void ZaMultiCompX2UI::imageToggleClicked(ImageToggle* toggle, int)
setParameterValue(ZaMultiCompX2Plugin::paramToggle3, v);
fBypass[2] = v;
}
- else if (toggle == fToggleListen1)
+ else if (toggle == fToggleListen1) {
setParameterValue(ZaMultiCompX2Plugin::paramListen1, v);
- else if (toggle == fToggleListen2)
+ fListen[0] = v;
+ }
+ else if (toggle == fToggleListen2) {
setParameterValue(ZaMultiCompX2Plugin::paramListen2, v);
- else if (toggle == fToggleListen3)
+ fListen[1] = v;
+ }
+ else if (toggle == fToggleListen3) {
setParameterValue(ZaMultiCompX2Plugin::paramListen3, v);
+ fListen[2] = v;
+ }
else if (toggle == fToggleStereo)
setParameterValue(ZaMultiCompX2Plugin::paramStereoDet, v);
}
@@ -835,9 +873,23 @@ glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
glLineWidth(2);
int i,k;
+ int flip[3] = {1,1,1};
+ if (fListen[0]) {
+ flip[1] = 0;
+ flip[2] = 0;
+ }
+ if (fListen[1]) {
+ flip[0] = 0;
+ flip[2] = 0;
+ }
+ if (fListen[2]) {
+ flip[0] = 0;
+ flip[1] = 0;
+ }
for (k = 0; k < MAX_COMP; ++k) {
glColor4f((k==0)?1.f:0.235f, (k==1)?1.f:0.235f, (k==2)?1.f:0.235f, 1.0f);
- for (i = 2; i < COMPOINTS; ++i) {
+ if (flip[k]) {
+ for (i = 2; i < COMPOINTS; ++i) {
glBegin(GL_LINES);
if (compy[k][i-1] < fCanvasArea.getY() + fCanvasArea.getHeight()
&& compy[k][i-1] > fCanvasArea.getY()
@@ -857,6 +909,7 @@ glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
glVertex2i(dotx[k], doty[k]);
}
glEnd();
+ }
}
// reset color
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
diff --git a/plugins/ZaMultiCompX2/ZaMultiCompX2UI.hpp b/plugins/ZaMultiCompX2/ZaMultiCompX2UI.hpp
index 489f976..e4aa2d2 100644
--- a/plugins/ZaMultiCompX2/ZaMultiCompX2UI.hpp
+++ b/plugins/ZaMultiCompX2/ZaMultiCompX2UI.hpp
@@ -103,6 +103,7 @@ private:
float fLedYellowValueR;
DGL::Rectangle<int> fCanvasArea;
float fThresh[MAX_COMP];
+ float fListen[MAX_COMP];
float fRatio;
float fKnee;
float fMakeup[MAX_COMP];
@@ -112,6 +113,7 @@ private:
float compy[MAX_COMP][COMPOINTS];
float dotx[MAX_COMP];
float doty[MAX_COMP];
+ float outlevel[3];
};
// -----------------------------------------------------------------------