BogaudioModules

BogaudioModules for VCV Rack
Log | Files | Refs | README | LICENSE

commit 9e6d92045b9f9e88be4fbc49bb3195deec52dae2
parent faaf76c582218dd07c6e5cf4d7cc934ca081a6c4
Author: Matt Demanett <matt@demanett.net>
Date:   Mon, 30 Dec 2019 16:55:55 -0500

Revised module process* methods.

Diffstat:
Msrc/AD.cpp | 4++--
Msrc/AD.hpp | 4++--
Msrc/ADSR.cpp | 4++--
Msrc/ADSR.hpp | 4++--
Msrc/ASR.cpp | 4++--
Msrc/ASR.hpp | 4++--
Msrc/Additator.cpp | 2+-
Msrc/Additator.hpp | 2+-
Msrc/Bool.cpp | 4+---
Msrc/Bool.hpp | 2+-
Msrc/Edge.cpp | 6++++--
Msrc/Edge.hpp | 3++-
Msrc/FMOp.cpp | 4++--
Msrc/FMOp.hpp | 4++--
Msrc/FlipFlop.cpp | 4+---
Msrc/FlipFlop.hpp | 2+-
Msrc/LLFO.cpp | 2+-
Msrc/LLFO.hpp | 2+-
Msrc/LVCO.cpp | 2+-
Msrc/LVCO.hpp | 2+-
Msrc/Mix1.cpp | 4++--
Msrc/Mix1.hpp | 4++--
Msrc/Mono.cpp | 4+---
Msrc/Mono.hpp | 2+-
Msrc/Mumix.cpp | 2+-
Msrc/Mumix.hpp | 2+-
Msrc/Mute8.cpp | 4+---
Msrc/Mute8.hpp | 2+-
Msrc/Noise.cpp | 4+---
Msrc/Noise.hpp | 2+-
Msrc/PolyCon.cpp | 4+---
Msrc/PolyCon.hpp | 2+-
Msrc/PolyMult.cpp | 4+---
Msrc/PolyMult.hpp | 2+-
Msrc/SampleHold.cpp | 10++++------
Msrc/SampleHold.hpp | 4++--
Msrc/Sums.cpp | 4+---
Msrc/Sums.hpp | 2+-
Msrc/Switch.cpp | 4++--
Msrc/Switch.hpp | 4++--
Msrc/Unison.cpp | 4+---
Msrc/Unison.hpp | 2+-
Msrc/VCA.cpp | 4+---
Msrc/VCA.hpp | 2+-
Msrc/VCAmp.cpp | 6++----
Msrc/VCAmp.hpp | 2+-
Msrc/module.cpp | 4+++-
Msrc/module.hpp | 4+++-
48 files changed, 73 insertions(+), 90 deletions(-)

diff --git a/src/AD.cpp b/src/AD.cpp @@ -83,7 +83,7 @@ void AD::modulateChannel(int c) { _linearMode = params[LINEAR_PARAM].getValue() > 0.5f; } -void AD::processAll(const ProcessArgs& args) { +void AD::processAlways(const ProcessArgs& args) { _attackLightSum = _decayLightSum = 0; } @@ -109,7 +109,7 @@ void AD::processChannel(const ProcessArgs& args, int c) { _decayLightSum += e.envelope.isStage(ADSR::DECAY_STAGE); } -void AD::postProcess(const ProcessArgs& args) { +void AD::postProcessAlways(const ProcessArgs& args) { lights[ATTACK_LIGHT].value = _attackLightSum / (float)_channels; lights[DECAY_LIGHT].value = _decayLightSum / (float)_channels; } diff --git a/src/AD.hpp b/src/AD.hpp @@ -83,9 +83,9 @@ struct AD : BGModule { void addChannel(int c) override; void removeChannel(int c) override; void modulateChannel(int c) override; - void processAll(const ProcessArgs& args) override; + void processAlways(const ProcessArgs& args) override; void processChannel(const ProcessArgs& args, int c) override; - void postProcess(const ProcessArgs& args) override; + void postProcessAlways(const ProcessArgs& args) override; }; } // namespace bogaudio diff --git a/src/ADSR.cpp b/src/ADSR.cpp @@ -70,7 +70,7 @@ void ADSR::modulateChannel(int c) { e.envelope.setLinearShape(_linearMode); } -void ADSR::processAll(const ProcessArgs& args) { +void ADSR::processAlways(const ProcessArgs& args) { _attackLightSum = _decayLightSum = _sustainLightSum = _releaseLightSum = 0; } @@ -88,7 +88,7 @@ void ADSR::processChannel(const ProcessArgs& args, int c) { _releaseLightSum += e.envelope.isStage(dsp::ADSR::RELEASE_STAGE); } -void ADSR::postProcess(const ProcessArgs& args) { +void ADSR::postProcessAlways(const ProcessArgs& args) { lights[ATTACK_LIGHT].value = _attackLightSum / (float)_channels; lights[DECAY_LIGHT].value = _decayLightSum / (float)_channels; lights[SUSTAIN_LIGHT].value = _sustainLightSum / (float)_channels; diff --git a/src/ADSR.hpp b/src/ADSR.hpp @@ -75,9 +75,9 @@ struct ADSR : BGModule { void removeChannel(int c) override; void modulate() override; void modulateChannel(int c) override; - void processAll(const ProcessArgs& args) override; + void processAlways(const ProcessArgs& args) override; void processChannel(const ProcessArgs& args, int c) override; - void postProcess(const ProcessArgs& args) override; + void postProcessAlways(const ProcessArgs& args) override; }; } // namespace bogaudio diff --git a/src/ASR.cpp b/src/ASR.cpp @@ -81,7 +81,7 @@ void ASR::modulateChannel(int c) { _linearMode = params[LINEAR_PARAM].getValue() > 0.5f; } -void ASR::processAll(const ProcessArgs& args) { +void ASR::processAlways(const ProcessArgs& args) { _attackLightSum = _releaseLightSum = 0; } @@ -107,7 +107,7 @@ void ASR::processChannel(const ProcessArgs& args, int c) { _releaseLightSum += e.envelope.isStage(ADSR::RELEASE_STAGE) || e.envelope.isStage(ADSR::SUSTAIN_STAGE); } -void ASR::postProcess(const ProcessArgs& args) { +void ASR::postProcessAlways(const ProcessArgs& args) { lights[ATTACK_LIGHT].value = _attackLightSum / (float)_channels; lights[RELEASE_LIGHT].value = _releaseLightSum / (float)_channels; } diff --git a/src/ASR.hpp b/src/ASR.hpp @@ -78,9 +78,9 @@ struct ASR : BGModule { void addChannel(int c) override; void removeChannel(int c) override; void modulateChannel(int c) override; - void processAll(const ProcessArgs& args) override; + void processAlways(const ProcessArgs& args) override; void processChannel(const ProcessArgs& args, int c) override; - void postProcess(const ProcessArgs& args) override; + void postProcessAlways(const ProcessArgs& args) override; }; } // namespace bogaudio diff --git a/src/Additator.cpp b/src/Additator.cpp @@ -187,7 +187,7 @@ void Additator::modulateChannel(int c) { } } -void Additator::processAll(const ProcessArgs& args) { +void Additator::processAlways(const ProcessArgs& args) { Phase phase = params[PHASE_PARAM].getValue() > 1.5f ? PHASE_COSINE : PHASE_SINE; lights[SINE_LIGHT].value = phase == PHASE_SINE; lights[COSINE_LIGHT].value = phase == PHASE_COSINE; diff --git a/src/Additator.hpp b/src/Additator.hpp @@ -128,7 +128,7 @@ struct Additator : BGModule { float balanceParam(int c); float filterParam(int c); void modulateChannel(int c) override; - void processAll(const ProcessArgs& args) override; + void processAlways(const ProcessArgs& args) override; void processChannel(const ProcessArgs& args, int c) override; float cvValue(int c, Input& cv, bool dc = false); }; diff --git a/src/Bool.cpp b/src/Bool.cpp @@ -1,9 +1,7 @@ #include "Bool.hpp" -void Bool::processChannel(const ProcessArgs& args, int c) { - assert(c == 0); - +void Bool::processAll(const ProcessArgs& args) { for (int i = 0, cn = std::max(1, inputs[A_INPUT].getChannels()); i < cn; ++i) { bool a = inputs[A_INPUT].getPolyVoltage(i) > 1.0f; bool b = inputs[B_INPUT].getPolyVoltage(i) > 1.0f; diff --git a/src/Bool.hpp b/src/Bool.hpp @@ -30,7 +30,7 @@ struct Bool : BGModule { config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS); } - void processChannel(const ProcessArgs& args, int c) override; + void processAll(const ProcessArgs& args) override; }; } // namespace bogaudio diff --git a/src/Edge.cpp b/src/Edge.cpp @@ -25,9 +25,11 @@ void Edge::modulate() { _holdSeconds *= _holdSeconds; } -void Edge::processAll(const ProcessArgs& args) { +void Edge::processAlways(const ProcessArgs& args) { _highLightSum = 0; +} +void Edge::processAll(const ProcessArgs& args) { outputs[HIGH_OUTPUT].setChannels(_channels); outputs[RISE_OUTPUT].setChannels(_channels); outputs[FALL_OUTPUT].setChannels(_channels); @@ -88,7 +90,7 @@ void Edge::processChannel(const ProcessArgs& args, int c) { outputs[FALL_OUTPUT].setVoltage(_fallOutputPulseGen[c].process(st) * 5.0f, c); } -void Edge::postProcess(const ProcessArgs& args) { +void Edge::postProcessAlways(const ProcessArgs& args) { lights[HIGH_LIGHT].value = _highLightSum / (float)_channels; } diff --git a/src/Edge.hpp b/src/Edge.hpp @@ -61,9 +61,10 @@ struct Edge : BGModule { int channels() override; void addChannel(int c) override; void modulate() override; + void processAlways(const ProcessArgs& args) override; void processAll(const ProcessArgs& args) override; void processChannel(const ProcessArgs& args, int c) override; - void postProcess(const ProcessArgs& args) override; + void postProcessAlways(const ProcessArgs& args) override; }; } // namespace bogaudio diff --git a/src/FMOp.cpp b/src/FMOp.cpp @@ -163,7 +163,7 @@ void FMOp::modulateChannel(int c) { } } -void FMOp::processAll(const ProcessArgs& args) { +void FMOp::processAlways(const ProcessArgs& args) { _attackLightSum = _decayLightSum = _sustainLightSum = _releaseLightSum = 0; } @@ -253,7 +253,7 @@ void FMOp::processChannel(const ProcessArgs& args, int c) { _releaseLightSum += e.envelope.isStage(dsp::ADSR::RELEASE_STAGE); } -void FMOp::postProcess(const ProcessArgs& args) { +void FMOp::postProcessAlways(const ProcessArgs& args) { lights[ATTACK_LIGHT].value = _attackLightSum / (float)_channels; lights[DECAY_LIGHT].value = _decayLightSum / (float)_channels; lights[SUSTAIN_LIGHT].value = _sustainLightSum / (float)_channels; diff --git a/src/FMOp.hpp b/src/FMOp.hpp @@ -128,9 +128,9 @@ struct FMOp : BGModule { void removeChannel(int c) override; void modulate() override; void modulateChannel(int c) override; - void processAll(const ProcessArgs& args) override; + void processAlways(const ProcessArgs& args) override; void processChannel(const ProcessArgs& args, int c) override; - void postProcess(const ProcessArgs& args) override; + void postProcessAlways(const ProcessArgs& args) override; }; } // namespace bogaudio diff --git a/src/FlipFlop.cpp b/src/FlipFlop.cpp @@ -13,9 +13,7 @@ void FlipFlop::reset() { } } -void FlipFlop::processChannel(const ProcessArgs& args, int c) { - assert(c == 0); - +void FlipFlop::processAll(const ProcessArgs& args) { for (int i = 0, n = std::max(1, inputs[IN1_INPUT].getChannels()); i < n; ++i) { channelStep( i, diff --git a/src/FlipFlop.hpp b/src/FlipFlop.hpp @@ -42,7 +42,7 @@ struct FlipFlop : BGModule { } void reset() override; - void processChannel(const ProcessArgs& args, int c) override; + void processAll(const ProcessArgs& args) override; void channelStep( int c, int channels, diff --git a/src/LLFO.cpp b/src/LLFO.cpp @@ -70,7 +70,7 @@ void LLFO::modulateChannel(int c) { setFrequency(params[FREQUENCY_PARAM], inputs[PITCH_INPUT], _phasor[c], c); } -void LLFO::processAll(const ProcessArgs& args) { +void LLFO::processAlways(const ProcessArgs& args) { Wave wave = (Wave)params[WAVE_PARAM].getValue(); lights[SINE_LIGHT].value = wave == SINE_WAVE; lights[TRIANGLE_LIGHT].value = wave == TRIANGLE_WAVE; diff --git a/src/LLFO.hpp b/src/LLFO.hpp @@ -82,7 +82,7 @@ struct LLFO : LFOBase { void addChannel(int c) override; void modulate() override; void modulateChannel(int c) override; - void processAll(const ProcessArgs& args) override; + void processAlways(const ProcessArgs& args) override; void processChannel(const ProcessArgs& args, int c) override; }; diff --git a/src/LVCO.cpp b/src/LVCO.cpp @@ -64,7 +64,7 @@ void LVCO::modulateChannel(int c) { e.sineActive = _wave == SINE_WAVE; } -void LVCO::processAll(const ProcessArgs& args) { +void LVCO::processAlways(const ProcessArgs& args) { Wave wave = (Wave)params[WAVE_PARAM].getValue(); lights[SINE_LIGHT].value = wave == SINE_WAVE; lights[TRIANGLE_LIGHT].value = wave == TRIANGLE_WAVE; diff --git a/src/LVCO.hpp b/src/LVCO.hpp @@ -70,7 +70,7 @@ struct LVCO : VCOBase { bool active() override; void modulate() override; void modulateChannel(int c) override; - void processAll(const ProcessArgs& args) override; + void processAlways(const ProcessArgs& args) override; void processChannel(const ProcessArgs& args, int c) override; }; diff --git a/src/Mix1.cpp b/src/Mix1.cpp @@ -34,7 +34,7 @@ void Mix1::removeChannel(int c) { _engines[c] = NULL; } -void Mix1::processAll(const ProcessArgs& args) { +void Mix1::processAlways(const ProcessArgs& args) { _rmsSum = 0.0f; } @@ -46,7 +46,7 @@ void Mix1::processChannel(const ProcessArgs& args, int c) { outputs[OUT_OUTPUT].setVoltage(e.out, c); } -void Mix1::postProcess(const ProcessArgs& args) { +void Mix1::postProcessAlways(const ProcessArgs& args) { _rms = _rmsSum / (float)_channels; } diff --git a/src/Mix1.hpp b/src/Mix1.hpp @@ -44,9 +44,9 @@ struct Mix1 : BGModule { int channels() override; void addChannel(int c) override; void removeChannel(int c) override; - void processAll(const ProcessArgs& args) override; + void processAlways(const ProcessArgs& args) override; void processChannel(const ProcessArgs& args, int c) override; - void postProcess(const ProcessArgs& args) override; + void postProcessAlways(const ProcessArgs& args) override; }; } // namespace bogaudio diff --git a/src/Mono.cpp b/src/Mono.cpp @@ -23,9 +23,7 @@ void Mono::modulate() { _levelAmp.setLevel(level); } -void Mono::processChannel(const ProcessArgs& args, int c) { - assert(c == 0); - +void Mono::processAll(const ProcessArgs& args) { _activeChannels = inputs[POLY_INPUT].getChannels(); float out = 0.0f; for (int c = 0; c < _activeChannels; ++c) { diff --git a/src/Mono.hpp b/src/Mono.hpp @@ -47,7 +47,7 @@ struct Mono : BGModule { void sampleRateChange() override; void modulate() override; - void processChannel(const ProcessArgs& args, int c) override; + void processAll(const ProcessArgs& args) override; }; } // namespace bogaudio diff --git a/src/Mumix.cpp b/src/Mumix.cpp @@ -33,7 +33,7 @@ void Mumix::modulate() { } } -void Mumix::processAll(const ProcessArgs& args) { +void Mumix::processAlways(const ProcessArgs& args) { for (int i = 0; i < 8; ++i) { _amplifiers[i].setLevel(_slewLimiters[i].next(_muted[i] ? minDecibels : maxDecibels)); } diff --git a/src/Mumix.hpp b/src/Mumix.hpp @@ -65,7 +65,7 @@ struct Mumix : MatrixBaseModule { bool active() override; int channels() override; void modulate() override; - void processAll(const ProcessArgs& args) override; + void processAlways(const ProcessArgs& args) override; void processChannel(const ProcessArgs& args, int c) override; }; diff --git a/src/Mute8.cpp b/src/Mute8.cpp @@ -23,9 +23,7 @@ void Mute8::sampleRateChange() { } } -void Mute8::processChannel(const ProcessArgs& args, int c) { - assert(c == 0); - +void Mute8::processAll(const ProcessArgs& args) { bool solo = false; for (int i = 0; i < 8; ++i) { solo = solo || params[MUTE1_PARAM + i].getValue() > 1.5f; diff --git a/src/Mute8.hpp b/src/Mute8.hpp @@ -88,7 +88,7 @@ struct Mute8 : BGModule { void reset() override; void sampleRateChange() override; - void processChannel(const ProcessArgs& args, int c) override; + void processAll(const ProcessArgs& args) override; void stepChannel(int i, bool solo); }; diff --git a/src/Noise.cpp b/src/Noise.cpp @@ -16,9 +16,7 @@ void Noise::dataFromJson(json_t* root) { } } -void Noise::processChannel(const ProcessArgs& args, int c) { - assert(c == 0); - +void Noise::processAll(const ProcessArgs& args) { for (int i = 0; i < _noiseChannels; ++i) { if (outputs[BLUE_OUTPUT].isConnected()) { outputs[BLUE_OUTPUT].setChannels(_noiseChannels); diff --git a/src/Noise.hpp b/src/Noise.hpp @@ -42,7 +42,7 @@ struct Noise : BGModule { json_t* dataToJson() override; void dataFromJson(json_t* root) override; - void processChannel(const ProcessArgs& args, int c) override; + void processAll(const ProcessArgs& args) override; }; } // namespace bogaudio diff --git a/src/PolyCon.cpp b/src/PolyCon.cpp @@ -1,9 +1,7 @@ #include "PolyCon.hpp" -void PolyCon::processChannel(const ProcessArgs& args, int c) { - assert(c == 0); - +void PolyCon::processAll(const ProcessArgs& args) { int cn = clamp(params[CHANNELS_PARAM].getValue(), 1.0f, 16.0f); if (inputs[CHANNELS_INPUT].isConnected()) { cn = inputs[CHANNELS_INPUT].getChannels(); diff --git a/src/PolyCon.hpp b/src/PolyCon.hpp @@ -79,7 +79,7 @@ struct PolyCon : BGModule { configParam(CHANNEL16_PARAM, -1.0f, 1.0f, 0.0f, "Channel 16", "V", 0.0f, 10.0f); } - void processChannel(const ProcessArgs& args, int c) override; + void processAll(const ProcessArgs& args) override; }; } // namespace bogaudio diff --git a/src/PolyMult.cpp b/src/PolyMult.cpp @@ -1,9 +1,7 @@ #include "PolyMult.hpp" -void PolyMult::processChannel(const ProcessArgs& args, int c) { - assert(c == 0); - +void PolyMult::processAll(const ProcessArgs& args) { int cn = clamp(params[CHANNELS_PARAM].getValue(), 1.0f, 16.0f); if (inputs[CHANNELS_INPUT].isConnected()) { cn = inputs[CHANNELS_INPUT].getChannels(); diff --git a/src/PolyMult.hpp b/src/PolyMult.hpp @@ -31,7 +31,7 @@ struct PolyMult : BGModule { configParam(CHANNELS_PARAM, 1.0f, 16.0f, 1.0f, "Polyphony channels"); } - void processChannel(const ProcessArgs& args, int c) override; + void processAll(const ProcessArgs& args) override; }; } // namespace bogaudio diff --git a/src/SampleHold.cpp b/src/SampleHold.cpp @@ -46,10 +46,8 @@ void SampleHold::dataFromJson(json_t* root) { } } -void SampleHold::processChannel(const ProcessArgs& args, int c) { - assert(c == 0); - - processChannel( +void SampleHold::processAll(const ProcessArgs& args) { + handleChannel( params[TRACK1_PARAM], params[INVERT1_PARAM], _trigger1, @@ -60,7 +58,7 @@ void SampleHold::processChannel(const ProcessArgs& args, int c) { _value1, outputs[OUT1_OUTPUT] ); - processChannel( + handleChannel( params[TRACK2_PARAM], params[INVERT2_PARAM], _trigger2, @@ -73,7 +71,7 @@ void SampleHold::processChannel(const ProcessArgs& args, int c) { ); } -void SampleHold::processChannel( +void SampleHold::handleChannel( Param& trackParam, Param& invertParam, Trigger* trigger, diff --git a/src/SampleHold.hpp b/src/SampleHold.hpp @@ -67,8 +67,8 @@ struct SampleHold : BGModule { void reset() override; json_t* dataToJson() override; void dataFromJson(json_t* root) override; - void processChannel(const ProcessArgs& args, int c) override; - void processChannel( + void processAll(const ProcessArgs& args) override; + void handleChannel( Param& trackParam, Param& invertParam, Trigger* trigger, diff --git a/src/Sums.cpp b/src/Sums.cpp @@ -1,9 +1,7 @@ #include "Sums.hpp" -void Sums::processChannel(const ProcessArgs& args, int c) { - assert(c == 0); - +void Sums::processAll(const ProcessArgs& args) { for (int i = 0, cn = std::max(1, inputs[A_INPUT].getChannels()); i < cn; ++i) { float a = inputs[A_INPUT].getPolyVoltage(i); float b = inputs[B_INPUT].getPolyVoltage(i); diff --git a/src/Sums.hpp b/src/Sums.hpp @@ -32,7 +32,7 @@ struct Sums : DisableOutputLimitModule { config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS); } - void processChannel(const ProcessArgs& args, int c) override; + void processAll(const ProcessArgs& args) override; }; } // namespace bogaudio diff --git a/src/Switch.cpp b/src/Switch.cpp @@ -22,7 +22,7 @@ void bogaudio::Switch::modulate() { _latch = params[LATCH_PARAM].getValue() > 0.5f; } -void bogaudio::Switch::processAll(const ProcessArgs& args) { +void bogaudio::Switch::processAlways(const ProcessArgs& args) { _high1LightSum = 0; _low1LightSum = 0; _high2LightSum = 0; @@ -80,7 +80,7 @@ void bogaudio::Switch::processChannel(const ProcessArgs& args, int c) { } } -void bogaudio::Switch::postProcess(const ProcessArgs& args) { +void bogaudio::Switch::postProcessAlways(const ProcessArgs& args) { lights[HIGH1_LIGHT].value = _high1LightSum / (float)_channels; lights[LOW1_LIGHT].value = _low1LightSum / (float)_channels; lights[HIGH2_LIGHT].value = _high2LightSum / (float)_channels; diff --git a/src/Switch.hpp b/src/Switch.hpp @@ -54,9 +54,9 @@ struct Switch : BGModule { int channels() override; void channelsChanged(int before, int after) override; void modulate() override; - void processAll(const ProcessArgs& args) override; + void processAlways(const ProcessArgs& args) override; void processChannel(const ProcessArgs& args, int _c) override; - void postProcess(const ProcessArgs& args) override; + void postProcessAlways(const ProcessArgs& args) override; }; } // namespace bogaudio diff --git a/src/Unison.cpp b/src/Unison.cpp @@ -11,9 +11,7 @@ void Unison::modulate() { _cents /= 100.0f; } -void Unison::processChannel(const ProcessArgs& args, int c) { - assert(c == 0); - +void Unison::processAll(const ProcessArgs& args) { float pitch = inputs[PITCH_INPUT].getVoltage(); float gate = inputs[GATE_INPUT].getVoltage(); outputs[PITCH_OUTPUT].setChannels(_channels); diff --git a/src/Unison.hpp b/src/Unison.hpp @@ -37,7 +37,7 @@ struct Unison : BGModule { } void modulate() override; - void processChannel(const ProcessArgs& args, int c) override; + void processAll(const ProcessArgs& args) override; }; } // namespace bogaudio diff --git a/src/VCA.cpp b/src/VCA.cpp @@ -13,9 +13,7 @@ void VCA::sampleRateChange() { } } -void VCA::processChannel(const ProcessArgs& args, int c) { - assert(c == 0); - +void VCA::processAll(const ProcessArgs& args) { bool linear = isLinear(); channelStep(inputs[IN1_INPUT], outputs[OUT1_OUTPUT], params[LEVEL1_PARAM], inputs[CV1_INPUT], _amplifier1, _levelSL1, linear); channelStep(inputs[IN2_INPUT], outputs[OUT2_OUTPUT], params[LEVEL2_PARAM], inputs[CV2_INPUT], _amplifier2, _levelSL2, linear); diff --git a/src/VCA.hpp b/src/VCA.hpp @@ -51,7 +51,7 @@ struct VCA : BGModule { inline bool isLinear() { return params[LINEAR_PARAM].getValue() > 0.5f; } void sampleRateChange() override; - void processChannel(const ProcessArgs& args, int c) override; + void processAll(const ProcessArgs& args) override; void channelStep(Input& input, Output& output, Param& knob, Input& cv, Amplifier* amplifier, bogaudio::dsp::SlewLimiter* levelSL, bool linear); }; diff --git a/src/VCAmp.cpp b/src/VCAmp.cpp @@ -10,14 +10,12 @@ void VCAmp::sampleRateChange() { } } -void VCAmp::processChannel(const ProcessArgs& args, int c) { - assert(c == 0); - +void VCAmp::processAll(const ProcessArgs& args) { if (inputs[IN_INPUT].isConnected()) { int n = inputs[IN_INPUT].getChannels(); outputs[OUT_OUTPUT].setChannels(n); float rmsSum = 0.0f; - for (; c < n; ++c) { + for (int c = 0; c < n; ++c) { float level = params[LEVEL_PARAM].getValue(); if (inputs[CV_INPUT].isConnected()) { level *= clamp(inputs[CV_INPUT].getPolyVoltage(c), 0.0f, 10.0f) / 10.0f; diff --git a/src/VCAmp.hpp b/src/VCAmp.hpp @@ -45,7 +45,7 @@ struct VCAmp : BGModule { } void sampleRateChange() override; - void processChannel(const ProcessArgs& args, int c) override; + void processAll(const ProcessArgs& args) override; }; } // namespace bogaudio diff --git a/src/module.cpp b/src/module.cpp @@ -20,7 +20,7 @@ void BGModule::process(const ProcessArgs& args) { onSampleRateChange(); } - processAll(args); + processAlways(args); if (active()) { ++_steps; if (_steps >= _modulationSteps) { @@ -51,9 +51,11 @@ void BGModule::process(const ProcessArgs& args) { } } + processAll(args); for (int i = 0; i < _channels; ++i) { processChannel(args, i); } postProcess(args); } + postProcessAlways(args); } diff --git a/src/module.hpp b/src/module.hpp @@ -33,11 +33,13 @@ struct BGModule : Module { virtual void channelsChanged(int before, int after) {} virtual void addChannel(int c) {} virtual void removeChannel(int c) {} + virtual void processAlways(const ProcessArgs& args) {} // called before modulate()! virtual void modulate() {} virtual void modulateChannel(int c) {} virtual void processAll(const ProcessArgs& args) {} - virtual void processChannel(const ProcessArgs& args, int c) = 0; + virtual void processChannel(const ProcessArgs& args, int c) {} virtual void postProcess(const ProcessArgs& args) {} + virtual void postProcessAlways(const ProcessArgs& args) {} // modulate() may not have been called. }; } // namespace bogaudio