diff options
author | Damien Zammit <damien@zamaudio.com> | 2015-06-16 02:20:36 +1000 |
---|---|---|
committer | Damien Zammit <damien@zamaudio.com> | 2015-06-16 02:20:36 +1000 |
commit | 43fa19c5558b6e644b80f1b933d39eb1a747e8af (patch) | |
tree | 1a4982737181f4017d7627c840c8e2d4de8b5b4f | |
parent | 78c5e0f61cbdee0cd112e29a9d1f0dcdcf52cd4e (diff) |
Fixed independent outlevels for graph followers
Signed-off-by: Damien Zammit <damien@zamaudio.com>
-rw-r--r-- | plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.cpp | 58 | ||||
-rw-r--r-- | plugins/ZaMultiCompX2/ZaMultiCompX2Plugin.hpp | 6 | ||||
-rw-r--r-- | plugins/ZaMultiCompX2/ZaMultiCompX2UI.cpp | 65 | ||||
-rw-r--r-- | plugins/ZaMultiCompX2/ZaMultiCompX2UI.hpp | 2 |
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]; }; // ----------------------------------------------------------------------- |