summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Zammit <damien@zamaudio.com>2018-10-11 21:08:41 +1100
committerDamien Zammit <damien@zamaudio.com>2018-10-11 21:08:41 +1100
commit9050e4d40d35e133ffb3f9c5a9ce11f0b69d588c (patch)
tree5b0ac1e8a6adfbb79e82521092601636e727336d
parent23428b90ff9307f94e540bb31a85a81c55cda49d (diff)
ZamGate/X2: Add toggle mode for shutting the gate instead of opening
-rw-r--r--plugins/ZamGate/ZamGatePlugin.cpp43
-rw-r--r--plugins/ZamGate/ZamGatePlugin.hpp3
-rw-r--r--plugins/ZamGate/ZamGateUI.cpp9
-rw-r--r--plugins/ZamGate/ZamGateUI.hpp1
-rw-r--r--plugins/ZamGateX2/ZamGateX2Plugin.cpp42
-rw-r--r--plugins/ZamGateX2/ZamGateX2Plugin.hpp3
-rw-r--r--plugins/ZamGateX2/ZamGateX2UI.cpp5
-rw-r--r--plugins/ZamGateX2/ZamGateX2UI.hpp1
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;