diff options
Diffstat (limited to 'plugins/ZamGateX2/ZamGateX2Plugin.cpp')
-rw-r--r-- | plugins/ZamGateX2/ZamGateX2Plugin.cpp | 44 |
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) |