summaryrefslogtreecommitdiff
path: root/plugins/ZamGateX2/ZamGateX2Plugin.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/ZamGateX2/ZamGateX2Plugin.cpp')
-rw-r--r--plugins/ZamGateX2/ZamGateX2Plugin.cpp44
1 files changed, 39 insertions, 5 deletions
diff --git a/plugins/ZamGateX2/ZamGateX2Plugin.cpp b/plugins/ZamGateX2/ZamGateX2Plugin.cpp
index 0e29d38..a342c39 100644
--- a/plugins/ZamGateX2/ZamGateX2Plugin.cpp
+++ b/plugins/ZamGateX2/ZamGateX2Plugin.cpp
@@ -82,6 +82,15 @@ void ZamGateX2Plugin::initParameter(uint32_t index, Parameter& parameter)
parameter.ranges.min = -30.0f;
parameter.ranges.max = 30.0f;
break;
+ case paramSidechain:
+ parameter.hints = kParameterIsAutomable | kParameterIsBoolean;
+ parameter.name = "Sidechain";
+ parameter.symbol = "sidechain";
+ 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";
@@ -103,6 +112,17 @@ void ZamGateX2Plugin::initParameter(uint32_t index, Parameter& parameter)
}
}
+void ZamGateX2Plugin::initAudioPort(bool input, uint32_t index, AudioPort& port)
+{
+ Plugin::initAudioPort(input, index, port);
+
+ if ((index == 2) && input) {
+ port.hints |= kAudioPortIsSidechain;
+ port.name = "Sidechain Input";
+ port.symbol = "sidechain_in";
+ }
+}
+
// -----------------------------------------------------------------------
// Internal data
@@ -122,6 +142,9 @@ float ZamGateX2Plugin::getParameterValue(uint32_t index) const
case paramMakeup:
return makeup;
break;
+ case paramSidechain:
+ return sidechain;
+ break;
case paramGainR:
return gainr;
break;
@@ -149,6 +172,9 @@ void ZamGateX2Plugin::setParameterValue(uint32_t index, float value)
case paramMakeup:
makeup = value;
break;
+ case paramSidechain:
+ sidechain = value;
+ break;
case paramGainR:
gainr = value;
break;
@@ -166,6 +192,8 @@ void ZamGateX2Plugin::loadProgram(uint32_t index)
gainr = 0.0;
makeup = 0.0;
outlevel = -45.0;
+ sidechain = 0.0;
+
activate();
}
@@ -227,13 +255,19 @@ void ZamGateX2Plugin::run(const float** inputs, float** outputs, uint32_t frames
gr = gatestater;
att = 1000.f / (attack * fs);
rel = 1000.f / (release * fs);
+ bool usesidechain = (sidechain < 0.5) ? false : true;
for(i = 0; i < frames; i++) {
- pushsamplel(samplesl, inputs[0][i]);
- pushsampler(samplesr, inputs[1][i]);
- absamplel = averageabs(samplesl);
- absampler = averageabs(samplesr);
- absample = std::max(absamplel, absampler);
+ if (usesidechain) {
+ pushsamplel(samplesl, inputs[2][i]);
+ absample = averageabs(samplesl);
+ } else {
+ pushsamplel(samplesl, inputs[0][i]);
+ pushsampler(samplesr, inputs[1][i]);
+ absamplel = averageabs(samplesl);
+ absampler = averageabs(samplesr);
+ absample = std::max(absamplel, absampler);
+ }
if (absample < from_dB(thresdb)) {
gr -= rel;
if (gr < 0.f)