diff options
author | Damien Zammit <damien@zamaudio.com> | 2018-10-11 21:08:41 +1100 |
---|---|---|
committer | Damien Zammit <damien@zamaudio.com> | 2018-10-11 21:08:41 +1100 |
commit | 9050e4d40d35e133ffb3f9c5a9ce11f0b69d588c (patch) | |
tree | 5b0ac1e8a6adfbb79e82521092601636e727336d /plugins | |
parent | 23428b90ff9307f94e540bb31a85a81c55cda49d (diff) |
ZamGate/X2: Add toggle mode for shutting the gate instead of opening
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/ZamGate/ZamGatePlugin.cpp | 43 | ||||
-rw-r--r-- | plugins/ZamGate/ZamGatePlugin.hpp | 3 | ||||
-rw-r--r-- | plugins/ZamGate/ZamGateUI.cpp | 9 | ||||
-rw-r--r-- | plugins/ZamGate/ZamGateUI.hpp | 1 | ||||
-rw-r--r-- | plugins/ZamGateX2/ZamGateX2Plugin.cpp | 42 | ||||
-rw-r--r-- | plugins/ZamGateX2/ZamGateX2Plugin.hpp | 3 | ||||
-rw-r--r-- | plugins/ZamGateX2/ZamGateX2UI.cpp | 5 | ||||
-rw-r--r-- | plugins/ZamGateX2/ZamGateX2UI.hpp | 1 |
8 files changed, 90 insertions, 17 deletions
diff --git a/plugins/ZamGate/ZamGatePlugin.cpp b/plugins/ZamGate/ZamGatePlugin.cpp index aa81f92..575946f 100644 --- a/plugins/ZamGate/ZamGatePlugin.cpp +++ b/plugins/ZamGate/ZamGatePlugin.cpp @@ -100,6 +100,15 @@ void ZamGatePlugin::initParameter(uint32_t index, Parameter& parameter) parameter.ranges.min = -50.0f; parameter.ranges.max = 0.0f; break; + case paramOpenshut: + parameter.hints = kParameterIsAutomable | kParameterIsBoolean; + parameter.name = "Mode open/shut"; + parameter.symbol = "mode"; + parameter.unit = " "; + parameter.ranges.def = 0.0f; + parameter.ranges.min = 0.0f; + parameter.ranges.max = 1.0f; + break; case paramGainR: parameter.hints = kParameterIsOutput; parameter.name = "Gain Reduction"; @@ -157,6 +166,9 @@ float ZamGatePlugin::getParameterValue(uint32_t index) const case paramGateclose: return gateclose; break; + case paramOpenshut: + return openshut; + break; case paramGainR: return gainr; break; @@ -190,6 +202,9 @@ void ZamGatePlugin::setParameterValue(uint32_t index, float value) case paramGateclose: gateclose = value; break; + case paramOpenshut: + openshut = value; + break; case paramGainR: gainr = value; break; @@ -207,6 +222,7 @@ void ZamGatePlugin::loadProgram(uint32_t) gainr = 0.0; makeup = 0.0; sidechain = 0.0; + openshut = 0.0; gateclose = -50.f; outlevel = -45.0; activate(); @@ -272,16 +288,27 @@ void ZamGatePlugin::run(const float** inputs, float** outputs, uint32_t frames) pushsamplel(samplesl, in0); } absample = averageabs(samplesl); - if (absample < from_dB(thresdb)) { - gl -= rel; - if (gl < mingate) - gl = mingate; + if (openshut < 0.5) { + if (absample > from_dB(thresdb)) { + gl += att; + if (gl > 1.f) + gl = 1.f; + } else { + gl -= rel; + if (gl < mingate) + gl = mingate; + } } else { - gl += att; - if (gl > 1.f) - gl = 1.f; + if (absample > from_dB(thresdb)) { + gl -= att; + if (gl < mingate) + gl = mingate; + } else { + gl += rel; + if (gl > 1.f) + gl = 1.f; + } } - gatestatel = gl; outputs[0][i] = gl * from_dB(makeup) * in0; diff --git a/plugins/ZamGate/ZamGatePlugin.hpp b/plugins/ZamGate/ZamGatePlugin.hpp index f0898a5..84f867a 100644 --- a/plugins/ZamGate/ZamGatePlugin.hpp +++ b/plugins/ZamGate/ZamGatePlugin.hpp @@ -36,6 +36,7 @@ public: paramMakeup, paramSidechain, paramGateclose, + paramOpenshut, paramOutputLevel, paramGainR, paramCount @@ -118,7 +119,7 @@ protected: } // ------------------------------------------------------------------- - float attack,release,thresdb,makeup,sidechain,gateclose,gainr,outlevel; //parameters + float attack,release,thresdb,makeup,sidechain,gateclose,openshut,gainr,outlevel; //parameters void pushsamplel(float samples[], float sample); float averageabs(float samples[]); diff --git a/plugins/ZamGate/ZamGateUI.cpp b/plugins/ZamGate/ZamGateUI.cpp index 6b45ff4..c36f86e 100644 --- a/plugins/ZamGate/ZamGateUI.cpp +++ b/plugins/ZamGate/ZamGateUI.cpp @@ -99,6 +99,11 @@ ZamGateUI::ZamGateUI() fToggleSidechain->setId(ZamGatePlugin::paramSidechain); fToggleSidechain->setCallback(this); + fToggleMode = new ImageSwitch(this, fTogOff, fTogOn); + fToggleMode->setAbsolutePos(580, 61); + fToggleMode->setId(ZamGatePlugin::paramOpenshut); + fToggleMode->setCallback(this); + // set default values programLoaded(0); } @@ -128,6 +133,9 @@ void ZamGateUI::parameterChanged(uint32_t index, float value) case ZamGatePlugin::paramSidechain: fToggleSidechain->setDown(value > 0.5); break; + case ZamGatePlugin::paramOpenshut: + fToggleMode->setDown(value > 0.5); + break; case ZamGatePlugin::paramGainR: if (fLedRedValue != value) { @@ -154,6 +162,7 @@ void ZamGateUI::programLoaded(uint32_t) fKnobMakeup->setValue(0.0f); fKnobGateclose->setValue(-50.0f); fToggleSidechain->setDown(false); + fToggleMode->setDown(false); } // ----------------------------------------------------------------------- diff --git a/plugins/ZamGate/ZamGateUI.hpp b/plugins/ZamGate/ZamGateUI.hpp index 42d59c4..439778e 100644 --- a/plugins/ZamGate/ZamGateUI.hpp +++ b/plugins/ZamGate/ZamGateUI.hpp @@ -60,6 +60,7 @@ private: ScopedPointer<ZamKnob> fKnobAttack, fKnobRelease, fKnobThresh; ScopedPointer<ZamKnob> fKnobMakeup, fKnobGateclose; ScopedPointer<ImageSwitch> fToggleSidechain; + ScopedPointer<ImageSwitch> fToggleMode; Image fLedRedImg; float fLedRedValue; diff --git a/plugins/ZamGateX2/ZamGateX2Plugin.cpp b/plugins/ZamGateX2/ZamGateX2Plugin.cpp index 17b38de..78ac2c6 100644 --- a/plugins/ZamGateX2/ZamGateX2Plugin.cpp +++ b/plugins/ZamGateX2/ZamGateX2Plugin.cpp @@ -100,6 +100,15 @@ void ZamGateX2Plugin::initParameter(uint32_t index, Parameter& parameter) parameter.ranges.min = 0.0f; parameter.ranges.max = 1.0f; break; + case paramOpenshut: + parameter.hints = kParameterIsAutomable | kParameterIsBoolean; + parameter.name = "Mode open/shut"; + parameter.symbol = "mode"; + parameter.unit = " "; + parameter.ranges.def = 0.0f; + parameter.ranges.min = 0.0f; + parameter.ranges.max = 1.0f; + break; case paramGainR: parameter.hints = kParameterIsOutput; parameter.name = "Gain Reduction"; @@ -157,6 +166,9 @@ float ZamGateX2Plugin::getParameterValue(uint32_t index) const case paramSidechain: return sidechain; break; + case paramOpenshut: + return openshut; + break; case paramGainR: return gainr; break; @@ -190,6 +202,9 @@ void ZamGateX2Plugin::setParameterValue(uint32_t index, float value) case paramSidechain: sidechain = value; break; + case paramOpenshut: + openshut = value; + break; case paramGainR: gainr = value; break; @@ -209,6 +224,7 @@ void ZamGateX2Plugin::loadProgram(uint32_t) outlevel = -45.0; gateclose = -50.0; sidechain = 0.0; + openshut = 0.0; activate(); } @@ -290,14 +306,26 @@ void ZamGateX2Plugin::run(const float** inputs, float** outputs, uint32_t frames absampler = averageabs(samplesr); absample = std::max(absamplel, absampler); } - if (absample < from_dB(thresdb)) { - g -= rel; - if (g < mingate) - g = mingate; + if (openshut < 0.5) { + if (absample > from_dB(thresdb)) { + g += att; + if (g > 1.f) + g = 1.f; + } else { + g -= rel; + if (g < mingate) + g = mingate; + } } else { - g += att; - if (g > 1.f) - g = 1.f; + if (absample > from_dB(thresdb)) { + g -= att; + if (g < mingate) + g = mingate; + } else { + g += rel; + if (g > 1.f) + g = 1.f; + } } gatestate = g; diff --git a/plugins/ZamGateX2/ZamGateX2Plugin.hpp b/plugins/ZamGateX2/ZamGateX2Plugin.hpp index f645be2..5ded3d9 100644 --- a/plugins/ZamGateX2/ZamGateX2Plugin.hpp +++ b/plugins/ZamGateX2/ZamGateX2Plugin.hpp @@ -36,6 +36,7 @@ public: paramMakeup, paramSidechain, paramGateclose, + paramOpenshut, paramOutputLevel, paramGainR, paramCount @@ -118,7 +119,7 @@ protected: } // ------------------------------------------------------------------- - float attack,release,thresdb,makeup,gateclose,sidechain,gainr,outlevel; //parameters + float attack,release,thresdb,makeup,gateclose,sidechain,openshut,gainr,outlevel; //parameters void pushsamplel(float samples[], float sample); void pushsampler(float samples[], float sample); diff --git a/plugins/ZamGateX2/ZamGateX2UI.cpp b/plugins/ZamGateX2/ZamGateX2UI.cpp index e02e133..84ed600 100644 --- a/plugins/ZamGateX2/ZamGateX2UI.cpp +++ b/plugins/ZamGateX2/ZamGateX2UI.cpp @@ -99,6 +99,11 @@ ZamGateX2UI::ZamGateX2UI() fToggleSidechain->setId(ZamGateX2Plugin::paramSidechain); fToggleSidechain->setCallback(this); + fToggleMode = new ImageSwitch(this, fTogOff, fTogOn); + fToggleMode->setAbsolutePos(580, 61); + fToggleMode->setId(ZamGateX2Plugin::paramOpenshut); + fToggleMode->setCallback(this); + // set default values programLoaded(0); } diff --git a/plugins/ZamGateX2/ZamGateX2UI.hpp b/plugins/ZamGateX2/ZamGateX2UI.hpp index c1ee025..d334c55 100644 --- a/plugins/ZamGateX2/ZamGateX2UI.hpp +++ b/plugins/ZamGateX2/ZamGateX2UI.hpp @@ -59,6 +59,7 @@ private: ScopedPointer<ZamKnob> fKnobAttack, fKnobRelease, fKnobThresh; ScopedPointer<ZamKnob> fKnobMakeup, fKnobGateclose; ScopedPointer<ImageSwitch> fToggleSidechain; + ScopedPointer<ImageSwitch> fToggleMode; Image fLedRedImg; float fLedRedValue; |