BogaudioModules

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

commit 26d99514ba9b3b3836ce1a70de5c8fe12944a376
parent 2a3c438b220376bc39757f557c28a33a4f8ef8c8
Author: Matt Demanett <matt@demanett.net>
Date:   Sun,  8 Sep 2019 23:04:07 -0400

Poly: fold ModulatingBGModule into BGModule; add poly support; poly-fy SWITCH.

Diffstat:
Msrc/AD.cpp | 4++--
Msrc/AD.hpp | 6+++---
Msrc/ADSR.cpp | 4++--
Msrc/ADSR.hpp | 6+++---
Msrc/AMRM.cpp | 2+-
Msrc/AMRM.hpp | 2+-
Msrc/Additator.cpp | 4++--
Msrc/Additator.hpp | 6+++---
Msrc/AddrSeq.cpp | 6+++---
Msrc/AddrSeq.hpp | 10+++++-----
Msrc/Analyzer.cpp | 2+-
Msrc/Analyzer.hpp | 4++--
Msrc/AnalyzerXL.cpp | 2+-
Msrc/AnalyzerXL.hpp | 2+-
Msrc/Blank3.cpp | 4++--
Msrc/Blank3.hpp | 6+++---
Msrc/Blank6.cpp | 4++--
Msrc/Blank6.hpp | 6+++---
Msrc/Bool.cpp | 2+-
Msrc/Bool.hpp | 2+-
Msrc/CVD.cpp | 4++--
Msrc/CVD.hpp | 6+++---
Msrc/Clpr.cpp | 2+-
Msrc/Clpr.hpp | 4++--
Msrc/Cmp.cpp | 4++--
Msrc/Cmp.hpp | 6+++---
Msrc/DADSRH.hpp | 6+++---
Msrc/DADSRHPlus.hpp | 6+++---
Msrc/DGate.cpp | 4++--
Msrc/DGate.hpp | 6+++---
Msrc/Detune.cpp | 2+-
Msrc/Detune.hpp | 2+-
Msrc/EightFO.cpp | 4++--
Msrc/EightFO.hpp | 4++--
Msrc/EightOne.cpp | 6+++---
Msrc/EightOne.hpp | 10+++++-----
Msrc/FMOp.cpp | 4++--
Msrc/FMOp.hpp | 6+++---
Msrc/FlipFlop.cpp | 4++--
Msrc/FlipFlop.hpp | 6+++---
Msrc/Follow.cpp | 4++--
Msrc/Follow.hpp | 6+++---
Msrc/LFO.cpp | 4++--
Msrc/LFO.hpp | 4++--
Msrc/LLFO.cpp | 4++--
Msrc/LLFO.hpp | 4++--
Msrc/Lag.cpp | 2+-
Msrc/Lag.hpp | 4++--
Msrc/Lmtr.cpp | 2+-
Msrc/Lmtr.hpp | 4++--
Msrc/Manual.cpp | 4++--
Msrc/Manual.hpp | 6+++---
Msrc/Matrix88.cpp | 2+-
Msrc/Matrix88.hpp | 2+-
Msrc/Mix1.cpp | 4++--
Msrc/Mix1.hpp | 6+++---
Msrc/Mix4.cpp | 4++--
Msrc/Mix4.hpp | 6+++---
Msrc/Mix8.cpp | 4++--
Msrc/Mix8.hpp | 6+++---
Msrc/Mult.cpp | 2+-
Msrc/Mult.hpp | 2+-
Msrc/Mute8.cpp | 6+++---
Msrc/Mute8.hpp | 10+++++-----
Msrc/Noise.cpp | 2+-
Msrc/Noise.hpp | 2+-
Msrc/Nsgt.cpp | 2+-
Msrc/Nsgt.hpp | 4++--
Msrc/Offset.cpp | 2+-
Msrc/Offset.hpp | 2+-
Msrc/OneEight.cpp | 6+++---
Msrc/OneEight.hpp | 10+++++-----
Msrc/Pan.cpp | 4++--
Msrc/Pan.hpp | 6+++---
Msrc/Pressor.cpp | 2+-
Msrc/Pressor.hpp | 4++--
Msrc/Reftone.cpp | 2+-
Msrc/Reftone.hpp | 6+++---
Msrc/SampleHold.cpp | 4++--
Msrc/SampleHold.hpp | 6+++---
Msrc/Shaper.hpp | 6+++---
Msrc/ShaperPlus.hpp | 6+++---
Msrc/Slew.cpp | 2+-
Msrc/Slew.hpp | 4++--
Msrc/Stack.cpp | 2+-
Msrc/Stack.hpp | 2+-
Msrc/Sums.cpp | 2+-
Msrc/Sums.hpp | 2+-
Msrc/Switch.cpp | 79+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------
Msrc/Switch.hpp | 16+++++++++++-----
Msrc/Test.cpp | 4++--
Msrc/Test.hpp | 6+++---
Msrc/Test2.cpp | 4++--
Msrc/Test2.hpp | 6+++---
Msrc/UMix.cpp | 2+-
Msrc/UMix.hpp | 2+-
Msrc/VCA.cpp | 4++--
Msrc/VCA.hpp | 6+++---
Msrc/VCAmp.cpp | 4++--
Msrc/VCAmp.hpp | 6+++---
Msrc/VCM.cpp | 2+-
Msrc/VCM.hpp | 4++--
Msrc/VCO.cpp | 4++--
Msrc/VCO.hpp | 6+++---
Msrc/VU.cpp | 4++--
Msrc/VU.hpp | 6+++---
Msrc/Walk.cpp | 2+-
Msrc/Walk.hpp | 4++--
Msrc/Walk2.cpp | 2+-
Msrc/Walk2.hpp | 4++--
Msrc/XCO.cpp | 4++--
Msrc/XCO.hpp | 6+++---
Msrc/XFade.cpp | 4++--
Msrc/XFade.hpp | 6+++---
Msrc/analyzer_base.hpp | 2+-
Msrc/lfo_base.hpp | 2+-
Msrc/module.cpp | 21++++++++++++++++-----
Msrc/module.hpp | 16+++++++++-------
118 files changed, 336 insertions(+), 274 deletions(-)

diff --git a/src/AD.cpp b/src/AD.cpp @@ -35,12 +35,12 @@ void AD::modulate() { _envelope.setLinearShape(_linearMode); } -void AD::alwaysProcess(const ProcessArgs& args) { +void AD::always(const ProcessArgs& args) { lights[LOOP_LIGHT].value = _loopMode = params[LOOP_PARAM].getValue() > 0.5f; lights[LINEAR_LIGHT].value = _linearMode = params[LINEAR_PARAM].getValue() > 0.5f; } -void AD::processIfActive(const ProcessArgs& args) { +void AD::processChannel(const ProcessArgs& args, int _c) { _trigger.process(inputs[TRIGGER_INPUT].getVoltage()); if (!_on && (_trigger.isHigh() || (_loopMode && _envelope.isStage(ADSR::STOPPED_STAGE)))) { _on = true; diff --git a/src/AD.hpp b/src/AD.hpp @@ -10,7 +10,7 @@ extern Model* modelAD; namespace bogaudio { -struct AD : ModulatingBGModule { +struct AD : BGModule { enum ParamsIds { ATTACK_PARAM, DECAY_PARAM, @@ -66,8 +66,8 @@ struct AD : ModulatingBGModule { void sampleRateChange() override; bool active() override; void modulate() override; - void alwaysProcess(const ProcessArgs& args) override; - void processIfActive(const ProcessArgs& args) override; + void always(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/ADSR.cpp b/src/ADSR.cpp @@ -22,11 +22,11 @@ void ADSR::modulate() { _envelope.setLinearShape(_linearMode); } -void ADSR::alwaysProcess(const ProcessArgs& args) { +void ADSR::always(const ProcessArgs& args) { lights[LINEAR_LIGHT].value = _linearMode = params[LINEAR_PARAM].getValue() > 0.5f; } -void ADSR::processIfActive(const ProcessArgs& args) { +void ADSR::processChannel(const ProcessArgs& args, int _c) { _gateTrigger.process(inputs[GATE_INPUT].getVoltage()); _envelope.setGate(_gateTrigger.isHigh()); outputs[OUT_OUTPUT].setVoltage(_envelope.next() * 10.0f); diff --git a/src/ADSR.hpp b/src/ADSR.hpp @@ -7,7 +7,7 @@ extern Model* modelADSR; namespace bogaudio { -struct ADSR : ModulatingBGModule { +struct ADSR : BGModule { enum ParamsIds { ATTACK_PARAM, DECAY_PARAM, @@ -56,8 +56,8 @@ struct ADSR : ModulatingBGModule { void sampleRateChange() override; bool active() override; void modulate() override; - void alwaysProcess(const ProcessArgs& args) override; - void processIfActive(const ProcessArgs& args) override; + void always(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/AMRM.cpp b/src/AMRM.cpp @@ -1,7 +1,7 @@ #include "AMRM.hpp" -void AMRM::process(const ProcessArgs& args) { +void AMRM::processChannel(const ProcessArgs& args, int _c) { if (!(outputs[OUT_OUTPUT].isConnected() || outputs[RECTIFY_OUTPUT].isConnected())) { return; } diff --git a/src/AMRM.hpp b/src/AMRM.hpp @@ -42,7 +42,7 @@ struct AMRM : BGModule { configParam(DRYWET_PARAM, 0.0f, 1.0f, 1.0f, "Wet mix", "%", 0.0f, 100.0f); } - void process(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/Additator.cpp b/src/Additator.cpp @@ -128,13 +128,13 @@ void Additator::modulate() { } } -void Additator::alwaysProcess(const ProcessArgs& args) { +void Additator::always(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; } -void Additator::processIfActive(const ProcessArgs& args) { +void Additator::processChannel(const ProcessArgs& args, int _c) { if (_syncTrigger.next(inputs[SYNC_INPUT].getVoltage())) { _oscillator.syncToPhase(_phase == PHASE_SINE ? 0.0f : M_PI / 2.0f); } diff --git a/src/Additator.hpp b/src/Additator.hpp @@ -11,7 +11,7 @@ extern Model* modelAdditator; namespace bogaudio { -struct Additator : ModulatingBGModule { +struct Additator : BGModule { enum ParamsIds { FREQUENCY_PARAM, PARTIALS_PARAM, @@ -115,8 +115,8 @@ struct Additator : ModulatingBGModule { bool active() override; void modulate() override; float cvValue(Input& cv, bool dc = false); - void alwaysProcess(const ProcessArgs& args) override; - void processIfActive(const ProcessArgs& args) override; + void always(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/AddrSeq.cpp b/src/AddrSeq.cpp @@ -27,13 +27,13 @@ void AddrSeq::OutputParamQuantity::setDisplayValue(float v) { setValue(v); } -void AddrSeq::onReset() { +void AddrSeq::reset() { _step = 0; _clock.reset(); _reset.reset(); } -void AddrSeq::onSampleRateChange() { +void AddrSeq::sampleRateChange() { _timer.setParams(APP->engine->getSampleRate(), 0.001f); } @@ -58,7 +58,7 @@ void AddrSeq::dataFromJson(json_t* root) { } } -void AddrSeq::process(const ProcessArgs& args) { +void AddrSeq::processChannel(const ProcessArgs& args, int _c) { bool reset = _reset.process(inputs[RESET_INPUT].getVoltage()); if (reset) { _timer.reset(); diff --git a/src/AddrSeq.hpp b/src/AddrSeq.hpp @@ -77,15 +77,15 @@ struct AddrSeq : SelectOnClockModule { configParam<OutputParamQuantity>(OUT7_PARAM, -1.0f, 1.0f, 0.0f, "Step 7", " V"); configParam<OutputParamQuantity>(OUT8_PARAM, -1.0f, 1.0f, 0.0f, "Step 8", " V"); - onReset(); - onSampleRateChange(); + reset(); + sampleRateChange(); } - void onReset() override; - void onSampleRateChange() override; + void reset() override; + void sampleRateChange() override; json_t* dataToJson() override; void dataFromJson(json_t* root) override; - void process(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/Analyzer.cpp b/src/Analyzer.cpp @@ -62,7 +62,7 @@ void Analyzer::modulate() { _core.setParams(averageN, quality, window); } -void Analyzer::processIfActive(const ProcessArgs& args) { +void Analyzer::processChannel(const ProcessArgs& args, int _c) { for (int i = 0; i < 4; ++i) { _core.stepChannel(i, inputs[SIGNALA_INPUT + i]); diff --git a/src/Analyzer.hpp b/src/Analyzer.hpp @@ -50,7 +50,7 @@ struct Analyzer : AnalyzerBase { configParam(SMOOTH_PARAM, 0.0f, 1.0f, 0.5f, "Smoothing", " ms", 0.0f, 500.0f); configParam(QUALITY_PARAM, 1.0f, 3.0f, 1.0f, "Analysis quality"); configParam(WINDOW_PARAM, 1.0f, 3.0f, 1.0f, "Analysis window type"); - onReset(); + reset(); } virtual ~Analyzer() { reset(); @@ -61,7 +61,7 @@ struct Analyzer : AnalyzerBase { json_t* dataToJson() override; void dataFromJson(json_t* root) override; void modulate() override; - void processIfActive(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/AnalyzerXL.cpp b/src/AnalyzerXL.cpp @@ -123,7 +123,7 @@ void AnalyzerXL::modulate() { _core.setParams(averageN, _quality, _window); } -void AnalyzerXL::processIfActive(const ProcessArgs& args) { +void AnalyzerXL::processChannel(const ProcessArgs& args, int _c) { for (int i = 0; i < 8; ++i) { _core.stepChannel(i, inputs[SIGNALA_INPUT + i]); } diff --git a/src/AnalyzerXL.hpp b/src/AnalyzerXL.hpp @@ -46,7 +46,7 @@ struct AnalyzerXL : AnalyzerBase { json_t* dataToJson() override; void dataFromJson(json_t* root) override; void modulate() override; - void processIfActive(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/Blank3.cpp b/src/Blank3.cpp @@ -1,11 +1,11 @@ #include "Blank3.hpp" -void Blank3::onSampleRateChange() { +void Blank3::sampleRateChange() { _rms.setSampleRate(APP->engine->getSampleRate()); } -void Blank3::process(const ProcessArgs& args) { +void Blank3::processChannel(const ProcessArgs& args, int _c) { if (inputs[IN_INPUT].isConnected()) { _level = _rms.next(inputs[IN_INPUT].getVoltageSum()) / 5.0f; } diff --git a/src/Blank3.hpp b/src/Blank3.hpp @@ -32,11 +32,11 @@ struct Blank3 : BGModule { Blank3() { config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); - onSampleRateChange(); + sampleRateChange(); } - void onSampleRateChange() override; - void process(const ProcessArgs& args) override; + void sampleRateChange() override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/Blank6.cpp b/src/Blank6.cpp @@ -1,11 +1,11 @@ #include "Blank6.hpp" -void Blank6::onSampleRateChange() { +void Blank6::sampleRateChange() { _rms.setSampleRate(APP->engine->getSampleRate()); } -void Blank6::process(const ProcessArgs& args) { +void Blank6::processChannel(const ProcessArgs& args, int _c) { if (inputs[IN_INPUT].isConnected()) { _level = _rms.next(inputs[IN_INPUT].getVoltageSum()) / 5.0f; } diff --git a/src/Blank6.hpp b/src/Blank6.hpp @@ -32,11 +32,11 @@ struct Blank6 : BGModule { Blank6() { config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); - onSampleRateChange(); + sampleRateChange(); } - void onSampleRateChange() override; - void process(const ProcessArgs& args) override; + void sampleRateChange() override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/Bool.cpp b/src/Bool.cpp @@ -1,7 +1,7 @@ #include "Bool.hpp" -void Bool::process(const ProcessArgs& args) { +void Bool::processChannel(const ProcessArgs& args, int _c) { bool a = inputs[A_INPUT].getVoltage() > 1.0f; bool b = inputs[B_INPUT].getVoltage() > 1.0f; outputs[AND_OUTPUT].setVoltage(a && b ? 5.0f : 0.0f); diff --git a/src/Bool.hpp b/src/Bool.hpp @@ -34,7 +34,7 @@ struct Bool : BGModule { config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); } - void process(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/CVD.cpp b/src/CVD.cpp @@ -1,11 +1,11 @@ #include "CVD.hpp" -void CVD::onSampleRateChange() { +void CVD::sampleRateChange() { _delay.setSampleRate(APP->engine->getSampleRate()); } -void CVD::process(const ProcessArgs& args) { +void CVD::processChannel(const ProcessArgs& args, int _c) { float time = params[TIME_PARAM].getValue(); if (inputs[TIME_INPUT].isConnected()) { time *= clamp(inputs[TIME_INPUT].getVoltage() / 10.0f, 0.0f, 1.0f); diff --git a/src/CVD.hpp b/src/CVD.hpp @@ -44,11 +44,11 @@ struct CVD : BGModule { configParam(TIME_SCALE_PARAM, 0.0f, 2.0f, 1.0f, "Time scale", "", 10.0f, 0.1f); configParam(MIX_PARAM, -1.0f, 1.0f, 0.0f, "Dry wet mix", "%", 0.0f, 100.0f); - onSampleRateChange(); + sampleRateChange(); } - void onSampleRateChange() override; - void process(const ProcessArgs& args) override; + void sampleRateChange() override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/Clpr.cpp b/src/Clpr.cpp @@ -26,7 +26,7 @@ void Clpr::modulate() { _softKnee = params[KNEE_PARAM].getValue() > 0.5f; } -void Clpr::processIfActive(const ProcessArgs& args) { +void Clpr::processChannel(const ProcessArgs& args, int _c) { float leftInput = inputs[LEFT_INPUT].getVoltageSum(); float rightInput = inputs[RIGHT_INPUT].getVoltageSum(); float env = fabsf(leftInput + rightInput); diff --git a/src/Clpr.hpp b/src/Clpr.hpp @@ -9,7 +9,7 @@ extern Model* modelClpr; namespace bogaudio { -struct Clpr : ModulatingBGModule { +struct Clpr : BGModule { enum ParamsIds { THRESHOLD_PARAM, OUTPUT_GAIN_PARAM, @@ -55,7 +55,7 @@ struct Clpr : ModulatingBGModule { bool active() override; void modulate() override; - void processIfActive(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/Cmp.cpp b/src/Cmp.cpp @@ -1,12 +1,12 @@ #include "Cmp.hpp" -void Cmp::onReset() { +void Cmp::reset() { _thresholdState = LOW; _windowState = LOW; } -void Cmp::process(const ProcessArgs& args) { +void Cmp::processChannel(const ProcessArgs& args, int _c) { if (!( outputs[GREATER_OUTPUT].isConnected() || outputs[LESS_OUTPUT].isConnected() || diff --git a/src/Cmp.hpp b/src/Cmp.hpp @@ -56,11 +56,11 @@ struct Cmp : BGModule { configParam<ScaledSquaringParamQuantity<1>>(LAG_PARAM, 0.0f, 1.0f, 0.1f, "Lag", " s"); configParam(OUTPUT_PARAM, 0.0f, 1.0f, 0.0f, "Output"); - onReset(); + reset(); } - void onReset() override; - void process(const ProcessArgs& args) override; + void reset() override; + void processChannel(const ProcessArgs& args, int _c) override; void stepChannel( bool high, float highValue, diff --git a/src/DADSRH.hpp b/src/DADSRH.hpp @@ -127,17 +127,17 @@ struct DADSRH : TriggerOnLoadModule { _triggerOnLoad, _shouldTriggerOnLoad ); - onReset(); + reset(); } virtual ~DADSRH() { delete _core; } - void onReset() override { + void reset() override { _core->reset(); } - void process(const ProcessArgs& args) override { + void processChannel(const ProcessArgs& args, int _c) override { _core->step(); } diff --git a/src/DADSRHPlus.hpp b/src/DADSRHPlus.hpp @@ -138,17 +138,17 @@ struct DADSRHPlus : TriggerOnLoadModule { _triggerOnLoad, _shouldTriggerOnLoad ); - onReset(); + reset(); } virtual ~DADSRHPlus() { delete _core; } - void onReset() override { + void reset() override { _core->reset(); } - void process(const ProcessArgs& args) override { + void processChannel(const ProcessArgs& args, int _c) override { _core->step(); } diff --git a/src/DGate.cpp b/src/DGate.cpp @@ -1,14 +1,14 @@ #include "DGate.hpp" -void DGate::onReset() { +void DGate::reset() { _trigger.reset(); _triggerOuptutPulseGen.process(10.0); _stage = STOPPED_STAGE; _stageProgress = 0.0; } -void DGate::process(const ProcessArgs& args) { +void DGate::processChannel(const ProcessArgs& args, int _c) { float envelope = 0.0; bool complete = false; if ( diff --git a/src/DGate.hpp b/src/DGate.hpp @@ -52,11 +52,11 @@ struct DGate : TriggerOnLoadModule { configParam(LOOP_PARAM, 0.0f, 1.0f, 1.0f, "Loop"); configParam(TRIGGER_PARAM, 0.0f, 1.0f, 0.0f, "Trigger"); - onReset(); + reset(); } - void onReset() override; - void process(const ProcessArgs& args) override; + void reset() override; + void processChannel(const ProcessArgs& args, int _c) override; bool stepStage(Param& knob); bool shouldTriggerOnNextLoad() override { return _stage != STOPPED_STAGE; diff --git a/src/Detune.cpp b/src/Detune.cpp @@ -1,7 +1,7 @@ #include "Detune.hpp" -void Detune::process(const ProcessArgs& args) { +void Detune::processChannel(const ProcessArgs& args, int _c) { if (!(outputs[OUT_PLUS_OUTPUT].isConnected() || outputs[OUT_MINUS_OUTPUT].isConnected() || outputs[THRU_OUTPUT].isConnected())) { return; } diff --git a/src/Detune.hpp b/src/Detune.hpp @@ -42,7 +42,7 @@ struct Detune : BGModule { configParam(CENTS_PARAM, 0.0f, 50.0f, 0.0f, "Cents"); } - void process(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/EightFO.cpp b/src/EightFO.cpp @@ -78,11 +78,11 @@ void EightFO::modulate() { _phase0Offset = phaseOffset(params[PHASE0_PARAM], inputs[PHASE0_INPUT], basePhase0Offset); } -void EightFO::alwaysProcess(const ProcessArgs& args) { +void EightFO::always(const ProcessArgs& args) { lights[SLOW_LIGHT].value = _slowMode = params[SLOW_PARAM].getValue() > 0.5f; } -void EightFO::processIfActive(const ProcessArgs& args) { +void EightFO::processChannel(const ProcessArgs& args, int _c) { if (_resetTrigger.next(inputs[RESET_INPUT].getVoltage())) { _phasor.resetPhase(); } diff --git a/src/EightFO.hpp b/src/EightFO.hpp @@ -136,8 +136,8 @@ struct EightFO : LFOBase { void sampleRateChange() override; bool active() override; void modulate() override; - void alwaysProcess(const ProcessArgs& args) override; - void processIfActive(const ProcessArgs& args) override; + void always(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; Phasor::phase_delta_t phaseOffset(Param& p, Input& i, Phasor::phase_delta_t baseOffset); void updateOutput(bool useSample, Output& output, Phasor::phase_delta_t& offset, float& sample, bool& active); }; diff --git a/src/EightOne.cpp b/src/EightOne.cpp @@ -1,17 +1,17 @@ #include "EightOne.hpp" -void EightOne::onReset() { +void EightOne::reset() { _step = 0; _clock.reset(); _reset.reset(); } -void EightOne::onSampleRateChange() { +void EightOne::sampleRateChange() { _timer.setParams(APP->engine->getSampleRate(), 0.001f); } -void EightOne::process(const ProcessArgs& args) { +void EightOne::processChannel(const ProcessArgs& args, int _c) { bool reset = _reset.process(inputs[RESET_INPUT].getVoltage()); if (reset) { _timer.reset(); diff --git a/src/EightOne.hpp b/src/EightOne.hpp @@ -62,13 +62,13 @@ struct EightOne : SelectOnClockModule { configParam(DIRECTION_PARAM, 0.0f, 1.0f, 1.0f, "Direction"); configParam(SELECT_PARAM, 0.0f, 7.0f, 0.0f, "Select step"); - onReset(); - onSampleRateChange(); + reset(); + sampleRateChange(); } - void onReset() override; - void onSampleRateChange() override; - void process(const ProcessArgs& args) override; + void reset() override; + void sampleRateChange() override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/FMOp.cpp b/src/FMOp.cpp @@ -132,13 +132,13 @@ void FMOp::modulate() { } } -void FMOp::alwaysProcess(const ProcessArgs& args) { +void FMOp::always(const ProcessArgs& args) { lights[ENV_TO_LEVEL_LIGHT].value = params[ENV_TO_LEVEL_PARAM].getValue() > 0.5f; lights[ENV_TO_FEEDBACK_LIGHT].value = params[ENV_TO_FEEDBACK_PARAM].getValue() > 0.5f; lights[ENV_TO_DEPTH_LIGHT].value = params[ENV_TO_DEPTH_PARAM].getValue() > 0.5f; } -void FMOp::processIfActive(const ProcessArgs& args) { +void FMOp::processChannel(const ProcessArgs& args, int _c) { float envelope = 0.0f; if (_envelopeOn) { float gateIn = 0.0f; diff --git a/src/FMOp.hpp b/src/FMOp.hpp @@ -12,7 +12,7 @@ extern Model* modelFMOp; namespace bogaudio { -struct FMOp : ModulatingBGModule { +struct FMOp : BGModule { enum ParamsIds { RATIO_PARAM, FINE_PARAM, @@ -114,8 +114,8 @@ struct FMOp : ModulatingBGModule { void dataFromJson(json_t* root) override; bool active() override; void modulate() override; - void alwaysProcess(const ProcessArgs& args) override; - void processIfActive(const ProcessArgs& args) override; + void always(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/FlipFlop.cpp b/src/FlipFlop.cpp @@ -1,7 +1,7 @@ #include "FlipFlop.hpp" -void FlipFlop::onReset() { +void FlipFlop::reset() { _flipped1 = false; _flipped2 = false; _trigger1.reset(); @@ -10,7 +10,7 @@ void FlipFlop::onReset() { _resetTrigger2.reset(); } -void FlipFlop::process(const ProcessArgs& args) { +void FlipFlop::processChannel(const ProcessArgs& args, int _c) { channelStep( inputs[IN1_INPUT], inputs[RESET1_INPUT], diff --git a/src/FlipFlop.hpp b/src/FlipFlop.hpp @@ -43,11 +43,11 @@ struct FlipFlop : BGModule { FlipFlop() { config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); - onReset(); + reset(); } - void onReset() override; - void process(const ProcessArgs& args) override; + void reset() override; + void processChannel(const ProcessArgs& args, int _c) override; void channelStep( Input& triggerInput, Input& resetInput, diff --git a/src/Follow.cpp b/src/Follow.cpp @@ -1,11 +1,11 @@ #include "Follow.hpp" -void Follow::onSampleRateChange() { +void Follow::sampleRateChange() { _rms.setSampleRate(APP->engine->getSampleRate()); } -void Follow::process(const ProcessArgs& args) { +void Follow::processChannel(const ProcessArgs& args, int _c) { if (inputs[IN_INPUT].isConnected() && outputs[OUT_OUTPUT].isConnected()) { float response = params[RESPONSE_PARAM].getValue(); if (inputs[RESPONSE_INPUT].isConnected()) { diff --git a/src/Follow.hpp b/src/Follow.hpp @@ -41,11 +41,11 @@ struct Follow : BGModule { configParam(RESPONSE_PARAM, 0.0f, 1.0f, 0.3f, "Sensitivity", "%", 0.0f, 100.0f); configParam(SCALE_PARAM, 0.0f, 1.0f, 1.0f, "Scale", "%", 0.0f, 100.0f); - onSampleRateChange(); + sampleRateChange(); } - void onSampleRateChange() override; - void process(const ProcessArgs& args) override; + void sampleRateChange() override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/LFO.cpp b/src/LFO.cpp @@ -52,11 +52,11 @@ void LFO::modulate() { } } -void LFO::alwaysProcess(const ProcessArgs& args) { +void LFO::always(const ProcessArgs& args) { lights[SLOW_LIGHT].value = _slowMode = params[SLOW_PARAM].getValue() > 0.5f; } -void LFO::processIfActive(const ProcessArgs& args) { +void LFO::processChannel(const ProcessArgs& args, int _c) { if (_resetTrigger.next(inputs[RESET_INPUT].getVoltage())) { _phasor.resetPhase(); } diff --git a/src/LFO.hpp b/src/LFO.hpp @@ -85,8 +85,8 @@ struct LFO : LFOBase { void sampleRateChange() override; bool active() override; void modulate() override; - void alwaysProcess(const ProcessArgs& args) override; - void processIfActive(const ProcessArgs& args) override; + void always(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; void updateOutput(Phasor& wave, bool useSample, bool invert, Output& output, float& sample, bool& active); }; diff --git a/src/LLFO.cpp b/src/LLFO.cpp @@ -52,7 +52,7 @@ void LLFO::modulate() { _scale = params[SCALE_PARAM].getValue(); } -void LLFO::alwaysProcess(const ProcessArgs& args) { +void LLFO::always(const ProcessArgs& args) { lights[SLOW_LIGHT].value = _slowMode = params[SLOW_PARAM].getValue() > 0.5f; Wave wave = (Wave)params[WAVE_PARAM].getValue(); @@ -64,7 +64,7 @@ void LLFO::alwaysProcess(const ProcessArgs& args) { lights[PULSE_LIGHT].value = wave == PULSE_WAVE; } -void LLFO::processIfActive(const ProcessArgs& args) { +void LLFO::processChannel(const ProcessArgs& args, int _c) { if (_resetTrigger.next(inputs[RESET_INPUT].getVoltage())) { _phasor.resetPhase(); } diff --git a/src/LLFO.hpp b/src/LLFO.hpp @@ -83,8 +83,8 @@ struct LLFO : LFOBase { void sampleRateChange() override; bool active() override; void modulate() override; - void alwaysProcess(const ProcessArgs& args) override; - void processIfActive(const ProcessArgs& args) override; + void always(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/Lag.cpp b/src/Lag.cpp @@ -38,7 +38,7 @@ void Lag::modulate() { _slew.setParams(APP->engine->getSampleRate(), time, shape); } -void Lag::processIfActive(const ProcessArgs& args) { +void Lag::processChannel(const ProcessArgs& args, int _c) { outputs[OUT_OUTPUT].setVoltage(_slew.next(inputs[IN_INPUT].getVoltageSum())); } diff --git a/src/Lag.hpp b/src/Lag.hpp @@ -9,7 +9,7 @@ extern Model* modelLag; namespace bogaudio { -struct Lag : ModulatingBGModule { +struct Lag : BGModule { enum ParamsIds { TIME_PARAM, TIME_SCALE_PARAM, @@ -44,7 +44,7 @@ struct Lag : ModulatingBGModule { bool active() override; void modulate() override; - void processIfActive(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/Lmtr.cpp b/src/Lmtr.cpp @@ -33,7 +33,7 @@ void Lmtr::modulate() { _softKnee = params[KNEE_PARAM].getValue() > 0.5f; } -void Lmtr::processIfActive(const ProcessArgs& args) { +void Lmtr::processChannel(const ProcessArgs& args, int _c) { float leftInput = inputs[LEFT_INPUT].getVoltageSum(); float rightInput = inputs[RIGHT_INPUT].getVoltageSum(); float env = _detector.next(leftInput + rightInput); diff --git a/src/Lmtr.hpp b/src/Lmtr.hpp @@ -9,7 +9,7 @@ extern Model* modelLmtr; namespace bogaudio { -struct Lmtr : ModulatingBGModule { +struct Lmtr : BGModule { enum ParamsIds { THRESHOLD_PARAM, OUTPUT_GAIN_PARAM, @@ -60,7 +60,7 @@ struct Lmtr : ModulatingBGModule { void sampleRateChange() override; bool active() override; void modulate() override; - void processIfActive(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/Manual.cpp b/src/Manual.cpp @@ -1,12 +1,12 @@ #include "Manual.hpp" -void Manual::onReset() { +void Manual::reset() { _trigger.reset(); _pulse.process(10.0f); } -void Manual::process(const ProcessArgs& args) { +void Manual::processChannel(const ProcessArgs& args, int _c) { bool high = _trigger.process(params[TRIGGER_PARAM].getValue()) || _trigger.isHigh() || (_firstStep && _triggerOnLoad && _shouldTriggerOnLoad); if (high) { _pulse.trigger(0.001f); diff --git a/src/Manual.hpp b/src/Manual.hpp @@ -41,11 +41,11 @@ struct Manual : TriggerOnLoadModule { config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); configParam(TRIGGER_PARAM, 0.0f, 1.0f, 0.0f, "Trigger"); _triggerOnLoad = false; - onReset(); + reset(); } - void onReset() override; - void process(const ProcessArgs& args) override; + void reset() override; + void processChannel(const ProcessArgs& args, int _c) override; bool shouldTriggerOnNextLoad() override { return true; } diff --git a/src/Matrix88.cpp b/src/Matrix88.cpp @@ -1,7 +1,7 @@ #include "Matrix88.hpp" -void Matrix88::process(const ProcessArgs& args) { +void Matrix88::processChannel(const ProcessArgs& args, int _c) { for (int i = 0; i < 8; ++i) { int paramOffset = MIX11_PARAM + i * 8; float out = 0.0f; diff --git a/src/Matrix88.hpp b/src/Matrix88.hpp @@ -178,7 +178,7 @@ struct Matrix88 : BGModule { configParam(LEVEL_PARAM, 0.0f, 1.0f, 1.0f, "Level", "%", 0.0f, 100.0f); } - void process(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/Mix1.cpp b/src/Mix1.cpp @@ -1,11 +1,11 @@ #include "Mix1.hpp" -void Mix1::onSampleRateChange() { +void Mix1::sampleRateChange() { _channel->setSampleRate(APP->engine->getSampleRate()); } -void Mix1::process(const ProcessArgs& args) { +void Mix1::processChannel(const ProcessArgs& args, int _c) { _channel->next(false, false); outputs[OUT_OUTPUT].setVoltage(_channel->out); } diff --git a/src/Mix1.hpp b/src/Mix1.hpp @@ -50,14 +50,14 @@ struct Mix1 : BGModule { 1000.0f, &inputs[MUTE_INPUT] ); - onSampleRateChange(); + sampleRateChange(); } virtual ~Mix1() { delete _channel; } - void onSampleRateChange() override; - void process(const ProcessArgs& args) override; + void sampleRateChange() override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/Mix4.cpp b/src/Mix4.cpp @@ -1,7 +1,7 @@ #include "Mix4.hpp" -void Mix4::onSampleRateChange() { +void Mix4::sampleRateChange() { float sr = APP->engine->getSampleRate(); _channel1->setSampleRate(sr); _channel2->setSampleRate(sr); @@ -11,7 +11,7 @@ void Mix4::onSampleRateChange() { _rms.setSampleRate(sr); } -void Mix4::process(const ProcessArgs& args) { +void Mix4::processChannel(const ProcessArgs& args, int _c) { bool stereo = outputs[L_OUTPUT].isConnected() && outputs[R_OUTPUT].isConnected(); bool solo = params[MUTE1_PARAM].getValue() > 1.5f || diff --git a/src/Mix4.hpp b/src/Mix4.hpp @@ -88,7 +88,7 @@ struct Mix4 : BGModule { _channel2 = new MixerChannel(params[LEVEL2_PARAM], params[PAN2_PARAM], params[MUTE2_PARAM], inputs[IN2_INPUT], inputs[CV2_INPUT], inputs[PAN2_INPUT]); _channel3 = new MixerChannel(params[LEVEL3_PARAM], params[PAN3_PARAM], params[MUTE3_PARAM], inputs[IN3_INPUT], inputs[CV3_INPUT], inputs[PAN3_INPUT]); _channel4 = new MixerChannel(params[LEVEL4_PARAM], params[PAN4_PARAM], params[MUTE4_PARAM], inputs[IN4_INPUT], inputs[CV4_INPUT], inputs[PAN4_INPUT]); - onSampleRateChange(); + sampleRateChange(); _rms.setSensitivity(0.05f); } virtual ~Mix4() { @@ -98,8 +98,8 @@ struct Mix4 : BGModule { delete _channel4; } - void onSampleRateChange() override; - void process(const ProcessArgs& args) override; + void sampleRateChange() override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/Mix8.cpp b/src/Mix8.cpp @@ -1,7 +1,7 @@ #include "Mix8.hpp" -void Mix8::onSampleRateChange() { +void Mix8::sampleRateChange() { float sr = APP->engine->getSampleRate(); _channel1->setSampleRate(sr); _channel2->setSampleRate(sr); @@ -15,7 +15,7 @@ void Mix8::onSampleRateChange() { _rms.setSampleRate(sr); } -void Mix8::process(const ProcessArgs& args) { +void Mix8::processChannel(const ProcessArgs& args, int _c) { bool stereo = outputs[L_OUTPUT].isConnected() && outputs[R_OUTPUT].isConnected(); bool solo = params[MUTE1_PARAM].getValue() > 1.5f || diff --git a/src/Mix8.hpp b/src/Mix8.hpp @@ -132,7 +132,7 @@ struct Mix8 : BGModule { _channel6 = new MixerChannel(params[LEVEL6_PARAM], params[PAN6_PARAM], params[MUTE6_PARAM], inputs[IN6_INPUT], inputs[CV6_INPUT], inputs[PAN6_INPUT]); _channel7 = new MixerChannel(params[LEVEL7_PARAM], params[PAN7_PARAM], params[MUTE7_PARAM], inputs[IN7_INPUT], inputs[CV7_INPUT], inputs[PAN7_INPUT]); _channel8 = new MixerChannel(params[LEVEL8_PARAM], params[PAN8_PARAM], params[MUTE8_PARAM], inputs[IN8_INPUT], inputs[CV8_INPUT], inputs[PAN8_INPUT]); - onSampleRateChange(); + sampleRateChange(); _rms.setSensitivity(0.05f); } virtual ~Mix8() { @@ -146,8 +146,8 @@ struct Mix8 : BGModule { delete _channel8; } - void onSampleRateChange() override; - void process(const ProcessArgs& args) override; + void sampleRateChange() override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/Mult.cpp b/src/Mult.cpp @@ -1,7 +1,7 @@ #include "Mult.hpp" -void Mult::process(const ProcessArgs& args) { +void Mult::processChannel(const ProcessArgs& args, int _c) { int n = inputs[INA_INPUT].getChannels(); float* out = inputs[INA_INPUT].getVoltages(); outputs[OUTA1_OUTPUT].setChannels(n); diff --git a/src/Mult.hpp b/src/Mult.hpp @@ -35,7 +35,7 @@ struct Mult : BGModule { config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); } - void process(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/Mute8.cpp b/src/Mute8.cpp @@ -6,20 +6,20 @@ const float Mute8::maxDecibels = 0.0f; const float Mute8::minDecibels = Amplifier::minDecibels; const float Mute8::slewTimeMS = 5.0f; -void Mute8::onReset() { +void Mute8::reset() { for (int i = 0; i < 8; ++i) { _triggers[i].reset(); } } -void Mute8::onSampleRateChange() { +void Mute8::sampleRateChange() { float sampleRate = APP->engine->getSampleRate(); for (int i = 0; i < 8; ++i) { _slewLimiters[i].setParams(sampleRate, slewTimeMS, maxDecibels - minDecibels); } } -void Mute8::process(const ProcessArgs& args) { +void Mute8::processChannel(const ProcessArgs& args, int _c) { 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 @@ -85,13 +85,13 @@ struct Mute8 : BGModule { configParam(MUTE7_PARAM, 0.0f, 3.0f, 0.0f, "Mute 7"); configParam(MUTE8_PARAM, 0.0f, 3.0f, 0.0f, "Mute 8"); - onReset(); - onSampleRateChange(); + reset(); + sampleRateChange(); } - void onReset() override; - void onSampleRateChange() override; - void process(const ProcessArgs& args) override; + void reset() override; + void sampleRateChange() override; + void processChannel(const ProcessArgs& args, int _c) override; void stepChannel(int i, bool solo); }; diff --git a/src/Noise.cpp b/src/Noise.cpp @@ -1,7 +1,7 @@ #include "Noise.hpp" -void Noise::process(const ProcessArgs& args) { +void Noise::processChannel(const ProcessArgs& args, int _c) { if (outputs[BLUE_OUTPUT].isConnected()) { outputs[BLUE_OUTPUT].setVoltage(clamp(_blue.next() * 20.0f, -10.0f, 10.f)); } diff --git a/src/Noise.hpp b/src/Noise.hpp @@ -43,7 +43,7 @@ struct Noise : BGModule { config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); } - void process(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/Nsgt.cpp b/src/Nsgt.cpp @@ -38,7 +38,7 @@ void Nsgt::modulate() { _softKnee = params[KNEE_PARAM].getValue() > 0.5f; } -void Nsgt::processIfActive(const ProcessArgs& args) { +void Nsgt::processChannel(const ProcessArgs& args, int _c) { float leftInput = inputs[LEFT_INPUT].getVoltageSum(); float rightInput = inputs[RIGHT_INPUT].getVoltageSum(); float env = _detector.next(leftInput + rightInput); diff --git a/src/Nsgt.hpp b/src/Nsgt.hpp @@ -9,7 +9,7 @@ extern Model* modelNsgt; namespace bogaudio { -struct Nsgt : ModulatingBGModule { +struct Nsgt : BGModule { enum ParamsIds { THRESHOLD_PARAM, RATIO_PARAM, @@ -60,7 +60,7 @@ struct Nsgt : ModulatingBGModule { void sampleRateChange() override; bool active() override; void modulate() override; - void processIfActive(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/Offset.cpp b/src/Offset.cpp @@ -1,7 +1,7 @@ #include "Offset.hpp" -void Offset::process(const ProcessArgs& args) { +void Offset::processChannel(const ProcessArgs& args, int _c) { float offset = knobValue(params[OFFSET_PARAM], inputs[OFFSET_INPUT]); float scale = knobValue(params[SCALE_PARAM], inputs[SCALE_INPUT]); scale = scale < 0.0f ? -pow(scale, 2.0f) : pow(scale, 2.0f); diff --git a/src/Offset.hpp b/src/Offset.hpp @@ -32,7 +32,7 @@ struct Offset : DisableOutputLimitModule { configParam(SCALE_PARAM, -1.0f, 1.0f, 0.316f, "Scale", "%", 0.0f, 100.0f); } - void process(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; float knobValue(Param& knob, Input& cv) const; }; diff --git a/src/OneEight.cpp b/src/OneEight.cpp @@ -1,17 +1,17 @@ #include "OneEight.hpp" -void OneEight::onReset() { +void OneEight::reset() { _step = 0; _clock.reset(); _reset.reset(); } -void OneEight::onSampleRateChange() { +void OneEight::sampleRateChange() { _timer.setParams(APP->engine->getSampleRate(), 0.001f); } -void OneEight::process(const ProcessArgs& args) { +void OneEight::processChannel(const ProcessArgs& args, int _c) { bool reset = _reset.process(inputs[RESET_INPUT].getVoltage()); if (reset) { _timer.reset(); diff --git a/src/OneEight.hpp b/src/OneEight.hpp @@ -62,13 +62,13 @@ struct OneEight : SelectOnClockModule { configParam(DIRECTION_PARAM, 0.0f, 1.0f, 1.0f, "Direction"); configParam(SELECT_PARAM, 0.0f, 7.0f, 0.0f, "Select step"); - onReset(); - onSampleRateChange(); + reset(); + sampleRateChange(); } - void onReset() override; - void onSampleRateChange() override; - void process(const ProcessArgs& args) override; + void reset() override; + void sampleRateChange() override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/Pan.cpp b/src/Pan.cpp @@ -2,12 +2,12 @@ #include "Pan.hpp" #include "mixer.hpp" -void Pan::onSampleRateChange() { +void Pan::sampleRateChange() { _slew1.setParams(APP->engine->getSampleRate(), MixerChannel::panSlewTimeMS, 2.0f); _slew2.setParams(APP->engine->getSampleRate(), MixerChannel::panSlewTimeMS, 2.0f); } -void Pan::process(const ProcessArgs& args) { +void Pan::processChannel(const ProcessArgs& args, int _c) { if (!((inputs[IN1_INPUT].isConnected() || inputs[IN2_INPUT].isConnected()) && (outputs[L_OUTPUT].isConnected() || outputs[R_OUTPUT].isConnected()))) { return; } diff --git a/src/Pan.hpp b/src/Pan.hpp @@ -46,11 +46,11 @@ struct Pan : BGModule { configParam(PAN1_PARAM, -1.0f, 1.0f, 0.0f, "Panning 1", "%", 0.0f, 100.0f); configParam(PAN2_PARAM, -1.0f, 1.0f, 0.0f, "Panning 2", "%", 0.0f, 100.0f); - onSampleRateChange(); + sampleRateChange(); } - void onSampleRateChange() override; - void process(const ProcessArgs& args) override; + void sampleRateChange() override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/Pressor.cpp b/src/Pressor.cpp @@ -80,7 +80,7 @@ void Pressor::modulate() { _softKnee = params[KNEE_PARAM].getValue() > 0.5f; } -void Pressor::processIfActive(const ProcessArgs& args) { +void Pressor::processChannel(const ProcessArgs& args, int _c) { float leftInput = inputs[LEFT_INPUT].getVoltageSum() * _inLevel; float rightInput = inputs[RIGHT_INPUT].getVoltageSum() * _inLevel; float env = leftInput + rightInput; diff --git a/src/Pressor.hpp b/src/Pressor.hpp @@ -9,7 +9,7 @@ extern Model* modelPressor; namespace bogaudio { -struct Pressor : ModulatingBGModule { +struct Pressor : BGModule { enum ParamsIds { THRESHOLD_PARAM, RATIO_PARAM, @@ -91,7 +91,7 @@ struct Pressor : ModulatingBGModule { void sampleRateChange() override; bool active() override; void modulate() override; - void processIfActive(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/Reftone.cpp b/src/Reftone.cpp @@ -1,7 +1,7 @@ #include "Reftone.hpp" -void Reftone::process(const ProcessArgs& args) { +void Reftone::processChannel(const ProcessArgs& args, int _c) { // C4 -- the pitch.hpp reference frequency -- in knob values: const float referencePitch = 0.0f; const float referenceOctave = 4.0f; diff --git a/src/Reftone.hpp b/src/Reftone.hpp @@ -45,14 +45,14 @@ struct Reftone : BGModule { configParam(OCTAVE_PARAM, 1.0f, 8.0f, 4.0f, "Octave"); configParam(FINE_PARAM, -0.99f, 0.99f, 0.0f, "Fine tune", " cents", 0.0f, 100.0f); - onSampleRateChange(); + sampleRateChange(); } - void onSampleRateChange() override { + void sampleRateChange() override { _sine.setSampleRate(APP->engine->getSampleRate()); } - void process(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/SampleHold.cpp b/src/SampleHold.cpp @@ -5,7 +5,7 @@ #define RANGE_OFFSET "range_offset" #define RANGE_SCALE "range_scale" -void SampleHold::onReset() { +void SampleHold::reset() { _trigger1.reset(); _value1 = 0.0f; _trigger2.reset(); @@ -37,7 +37,7 @@ void SampleHold::dataFromJson(json_t* root) { } } -void SampleHold::process(const ProcessArgs& args) { +void SampleHold::processChannel(const ProcessArgs& args, int _c) { processChannel( lights[TRACK1_LIGHT], params[TRACK1_PARAM], diff --git a/src/SampleHold.hpp b/src/SampleHold.hpp @@ -65,13 +65,13 @@ struct SampleHold : BGModule { configParam(TRACK1_PARAM, 0.0f, 1.0f, 0.0f, "Track 1"); configParam(TRACK2_PARAM, 0.0f, 1.0f, 0.0f, "Track 2"); - onReset(); + reset(); } - void onReset() override; + void reset() override; json_t* dataToJson() override; void dataFromJson(json_t* root) override; - void process(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; void processChannel( Light& trackLight, Param& trackParam, diff --git a/src/Shaper.hpp b/src/Shaper.hpp @@ -95,17 +95,17 @@ struct Shaper : TriggerOnLoadModule { _triggerOnLoad, _shouldTriggerOnLoad ); - onReset(); + reset(); } virtual ~Shaper() { delete _core; } - void onReset() override { + void reset() override { _core->reset(); } - void process(const ProcessArgs& args) override { + void processChannel(const ProcessArgs& args, int _c) override { _core->step(); } diff --git a/src/ShaperPlus.hpp b/src/ShaperPlus.hpp @@ -102,17 +102,17 @@ struct ShaperPlus : TriggerOnLoadModule { _triggerOnLoad, _shouldTriggerOnLoad ); - onReset(); + reset(); } virtual ~ShaperPlus() { delete _core; } - void onReset() override { + void reset() override { _core->reset(); } - void process(const ProcessArgs& args) override { + void processChannel(const ProcessArgs& args, int _c) override { _core->step(); } diff --git a/src/Slew.cpp b/src/Slew.cpp @@ -15,7 +15,7 @@ void Slew::modulate() { _fall.setParams(APP->engine->getSampleRate(), fallTime, fallShape); } -void Slew::processIfActive(const ProcessArgs& args) { +void Slew::processChannel(const ProcessArgs& args, int _c) { float sample = inputs[IN_INPUT].getVoltageSum(); if (sample > _last) { if (!_rising) { diff --git a/src/Slew.hpp b/src/Slew.hpp @@ -9,7 +9,7 @@ extern Model* modelSlew; namespace bogaudio { -struct Slew : ModulatingBGModule { +struct Slew : BGModule { enum ParamsIds { RISE_PARAM, RISE_SHAPE_PARAM, @@ -49,7 +49,7 @@ struct Slew : ModulatingBGModule { bool active() override; void modulate() override; - void processIfActive(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; float time(Param& param, Input& input); float shape(Param& param); }; diff --git a/src/Stack.cpp b/src/Stack.cpp @@ -1,7 +1,7 @@ #include "Stack.hpp" -void Stack::process(const ProcessArgs& args) { +void Stack::processChannel(const ProcessArgs& args, int _c) { lights[QUANTIZE_LIGHT].value = params[QUANTIZE_PARAM].getValue() > 0.5f; if (!(outputs[OUT_OUTPUT].isConnected() || outputs[THRU_OUTPUT].isConnected())) { return; diff --git a/src/Stack.hpp b/src/Stack.hpp @@ -51,7 +51,7 @@ struct Stack : BGModule { configParam(QUANTIZE_PARAM, 0.0f, 1.0f, 1.0f, "Quantize"); } - void process(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/Sums.cpp b/src/Sums.cpp @@ -1,7 +1,7 @@ #include "Sums.hpp" -void Sums::process(const ProcessArgs& args) { +void Sums::processChannel(const ProcessArgs& args, int _c) { float a = inputs[A_INPUT].getVoltageSum(); float b = inputs[B_INPUT].getVoltageSum(); if (_disableOutputLimit) { diff --git a/src/Sums.hpp b/src/Sums.hpp @@ -36,7 +36,7 @@ struct Sums : DisableOutputLimitModule { config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); } - void process(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/Switch.cpp b/src/Switch.cpp @@ -1,37 +1,80 @@ #include "Switch.hpp" -void bogaudio::Switch::onReset() { - _trigger.reset(); +void bogaudio::Switch::reset() { + for (int i = 0; i < _channels; ++i) { + _trigger[i].reset(); + } +} + +bool bogaudio::Switch::active() { + return outputs[OUT1_OUTPUT].isConnected() || outputs[OUT2_OUTPUT].isConnected(); +} + +int bogaudio::Switch::channels() { + if (inputs[GATE_INPUT].isConnected()) { + return inputs[GATE_INPUT].getChannels(); + } + return 1; +} + +void bogaudio::Switch::channelsChanged(int before, int after) { + while (before < after) { + _trigger[before].reset(); + ++before; + } } -void bogaudio::Switch::process(const ProcessArgs& args) { - bool latched = params[LATCH_PARAM].getValue() > 0.5f; - lights[LATCH_LIGHT].value = latched; +void bogaudio::Switch::modulate() { + _latch = params[LATCH_PARAM].getValue() > 0.5f; +} + +void bogaudio::Switch::always(const ProcessArgs& args) { + lights[LATCH_LIGHT].value = _latch; +} - bool triggered = _trigger.process(params[GATE_PARAM].getValue() + inputs[GATE_INPUT].getVoltage()); - if (latched) { +void bogaudio::Switch::processChannel(const ProcessArgs& args, int c) { + bool triggered = _trigger[c].process(params[GATE_PARAM].getValue() + inputs[GATE_INPUT].getVoltage(c)); + if (_latch) { if (triggered) { - _latchedHigh = !_latchedHigh; + _latchedHigh[c] = !_latchedHigh[c]; } } else { - _latchedHigh = false; + _latchedHigh[c] = false; } - if (_latchedHigh || _trigger.isHigh()) { - outputs[OUT1_OUTPUT].setChannels(inputs[HIGH1_INPUT].getChannels()); - outputs[OUT1_OUTPUT].writeVoltages(inputs[HIGH1_INPUT].getVoltages()); + if (_latchedHigh[c] || _trigger[c].isHigh()) { + if (_channels == 1) { + outputs[OUT1_OUTPUT].setChannels(inputs[HIGH1_INPUT].getChannels()); + outputs[OUT1_OUTPUT].writeVoltages(inputs[HIGH1_INPUT].getVoltages()); + + outputs[OUT2_OUTPUT].setChannels(inputs[HIGH2_INPUT].getChannels()); + outputs[OUT2_OUTPUT].writeVoltages(inputs[HIGH2_INPUT].getVoltages()); + } + else { + outputs[OUT1_OUTPUT].setChannels(std::max(inputs[LOW1_INPUT].getChannels(), inputs[HIGH1_INPUT].getChannels())); + outputs[OUT1_OUTPUT].setVoltage(inputs[HIGH1_INPUT].getVoltage(c), c); - outputs[OUT2_OUTPUT].setChannels(inputs[HIGH2_INPUT].getChannels()); - outputs[OUT2_OUTPUT].writeVoltages(inputs[HIGH2_INPUT].getVoltages()); + outputs[OUT2_OUTPUT].setChannels(std::max(inputs[LOW2_INPUT].getChannels(), inputs[HIGH2_INPUT].getChannels())); + outputs[OUT2_OUTPUT].setVoltage(inputs[HIGH2_INPUT].getVoltage(c), c); + } } else { - outputs[OUT1_OUTPUT].setChannels(inputs[LOW1_INPUT].getChannels()); - outputs[OUT1_OUTPUT].writeVoltages(inputs[LOW1_INPUT].getVoltages()); + if (_channels == 1) { + outputs[OUT1_OUTPUT].setChannels(std::max(inputs[LOW1_INPUT].getChannels(), inputs[HIGH1_INPUT].getChannels())); + outputs[OUT1_OUTPUT].writeVoltages(inputs[LOW1_INPUT].getVoltages()); + + outputs[OUT2_OUTPUT].setChannels(std::max(inputs[LOW2_INPUT].getChannels(), inputs[HIGH2_INPUT].getChannels())); + outputs[OUT2_OUTPUT].writeVoltages(inputs[LOW2_INPUT].getVoltages()); + } + else { + outputs[OUT1_OUTPUT].setChannels(_channels); + outputs[OUT1_OUTPUT].setVoltage(inputs[LOW1_INPUT].getVoltage(c), c); - outputs[OUT2_OUTPUT].setChannels(inputs[LOW2_INPUT].getChannels()); - outputs[OUT2_OUTPUT].writeVoltages(inputs[LOW2_INPUT].getVoltages()); + outputs[OUT2_OUTPUT].setChannels(_channels); + outputs[OUT2_OUTPUT].setVoltage(inputs[LOW2_INPUT].getVoltage(c), c); + } } } diff --git a/src/Switch.hpp b/src/Switch.hpp @@ -33,18 +33,24 @@ struct Switch : BGModule { NUM_LIGHTS }; - Trigger _trigger; - bool _latchedHigh = false; + Trigger _trigger[maxChannels]; + bool _latchedHigh[maxChannels] {}; + bool _latch = false; Switch() { config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); configParam(GATE_PARAM, 0.0f, 10.0f, 0.0f, "Gate"); configParam(LATCH_PARAM, 0.0f, 1.0f, 0.0f, "Latch"); - onReset(); + reset(); } - void onReset() override; - void process(const ProcessArgs& args) override; + void reset() override; + bool active() override; + int channels() override; + void channelsChanged(int before, int after) override; + void modulate() override; + void always(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/Test.cpp b/src/Test.cpp @@ -1,10 +1,10 @@ #include "Test.hpp" -void Test::onReset() { +void Test::reset() { } -void Test::process(const ProcessArgs& args) { +void Test::processChannel(const ProcessArgs& args, int _c) { if (!(outputs[OUT_OUTPUT].isConnected() || outputs[OUT2_OUTPUT].isConnected())) { return; } diff --git a/src/Test.hpp b/src/Test.hpp @@ -252,7 +252,7 @@ struct Test : BGModule { configParam(PARAM1_PARAM, 0.0f, 1.0f, 0.5f, "param1"); configParam(PARAM2_PARAM, 0.0f, 1.0f, 0.5f, "param2"); configParam(PARAM3_PARAM, 0.0f, 1.0f, 0.5f, "param3"); - onReset(); + reset(); #ifdef SINE _table.generate(); @@ -331,8 +331,8 @@ struct Test : BGModule { #endif } - void onReset() override; - void process(const ProcessArgs& args) override; + void reset() override; + void processChannel(const ProcessArgs& args, int _c) override; float oscillatorPitch(float max = 10000.0); float oscillatorPitch2(float max = 10000.0); float ratio2(); diff --git a/src/Test2.cpp b/src/Test2.cpp @@ -5,10 +5,10 @@ #include "Test2.hpp" #include "pitch.hpp" -void Test2::onReset() { +void Test2::reset() { } -void Test2::process(const ProcessArgs& args) { +void Test2::processChannel(const ProcessArgs& args, int _c) { if (!outputs[OUT_OUTPUT].isConnected()) { return; } diff --git a/src/Test2.hpp b/src/Test2.hpp @@ -78,11 +78,11 @@ struct Test2 : BGModule { configParam(PARAM2B_PARAM, 0.0f, 1.0f, 0.0f, "param2b"); configParam(PARAM3B_PARAM, 0.0f, 1.0f, 0.0f, "param3b"); - onReset(); + reset(); } - void onReset() override; - void process(const ProcessArgs& args) override; + void reset() override; + void processChannel(const ProcessArgs& args, int _c) override; // float oscillatorPitch1A(); }; diff --git a/src/UMix.cpp b/src/UMix.cpp @@ -23,7 +23,7 @@ void UMix::dataFromJson(json_t* root) { } } -void UMix::process(const ProcessArgs& args) { +void UMix::processChannel(const ProcessArgs& args, int _c) { if (!outputs[OUT_OUTPUT].isConnected()) { return; } diff --git a/src/UMix.hpp b/src/UMix.hpp @@ -47,7 +47,7 @@ struct UMix : BGModule { json_t* dataToJson() override; void dataFromJson(json_t* root) override; - void process(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/VCA.cpp b/src/VCA.cpp @@ -5,13 +5,13 @@ bool VCA::LevelParamQuantity::isLinear() { return dynamic_cast<VCA*>(module)->isLinear(); } -void VCA::onSampleRateChange() { +void VCA::sampleRateChange() { float sampleRate = APP->engine->getSampleRate(); _levelSL1.setParams(sampleRate, 5.0f, 1.0f); _levelSL2.setParams(sampleRate, 5.0f, 1.0f); } -void VCA::process(const ProcessArgs& args) { +void VCA::processChannel(const ProcessArgs& args, int _c) { bool linear = isLinear(); lights[LINEAR_LIGHT].value = linear; channelStep(inputs[IN1_INPUT], outputs[OUT1_OUTPUT], params[LEVEL1_PARAM], inputs[CV1_INPUT], _amplifier1, _levelSL1, linear); diff --git a/src/VCA.hpp b/src/VCA.hpp @@ -51,12 +51,12 @@ struct VCA : BGModule { configParam<LevelParamQuantity>(LEVEL2_PARAM, 0.0f, 1.0f, 0.8f, "Level 2"); configParam(LINEAR_PARAM, 0.0f, 1.0f, 0.0f, "Linear"); - onSampleRateChange(); + sampleRateChange(); } inline bool isLinear() { return params[LINEAR_PARAM].getValue() > 0.5f; } - void onSampleRateChange() override; - void process(const ProcessArgs& args) override; + void sampleRateChange() override; + void processChannel(const ProcessArgs& args, int _c) 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 @@ -2,13 +2,13 @@ #include "VCAmp.hpp" #include "mixer.hpp" -void VCAmp::onSampleRateChange() { +void VCAmp::sampleRateChange() { float sampleRate = APP->engine->getSampleRate(); _levelSL.setParams(sampleRate, MixerChannel::levelSlewTimeMS, maxDecibels - minDecibels); _rms.setSampleRate(sampleRate); } -void VCAmp::process(const ProcessArgs& args) { +void VCAmp::processChannel(const ProcessArgs& args, int _c) { if (inputs[IN_INPUT].isConnected()) { float level = params[LEVEL_PARAM].getValue(); if (inputs[CV_INPUT].isConnected()) { diff --git a/src/VCAmp.hpp b/src/VCAmp.hpp @@ -42,12 +42,12 @@ struct VCAmp : BGModule { config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); configParam(LEVEL_PARAM, 0.0f, 1.0f, fabs(minDecibels) / (maxDecibels - minDecibels), "Level", " dB", 0.0f, maxDecibels - minDecibels, minDecibels); - onSampleRateChange(); + sampleRateChange(); _rms.setSensitivity(0.05f); } - void onSampleRateChange() override; - void process(const ProcessArgs& args) override; + void sampleRateChange() override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/VCM.cpp b/src/VCM.cpp @@ -5,7 +5,7 @@ bool VCM::LevelParamQuantity::isLinear() { return dynamic_cast<VCM*>(module)->isLinear(); } -void VCM::process(const ProcessArgs& args) { +void VCM::processChannel(const ProcessArgs& args, int _c) { bool linear = isLinear(); lights[LINEAR_LIGHT].value = linear; if (outputs[MIX_OUTPUT].isConnected()) { diff --git a/src/VCM.hpp b/src/VCM.hpp @@ -61,11 +61,11 @@ struct VCM : DisableOutputLimitModule { configParam<LevelParamQuantity>(LEVEL4_PARAM, 0.0f, 1.0f, 0.8f, "Level 4"); configParam<LevelParamQuantity>(MIX_PARAM, 0.0f, 1.0f, 0.8f, "Mix level"); configParam(LINEAR_PARAM, 0.0f, 1.0f, 0.0f, "Linear"); - onReset(); + reset(); } inline bool isLinear() { return params[LINEAR_PARAM].getValue() > 0.5f; } - void process(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; float channelStep(Input& input, Param& knob, Input& cv, Amplifier& amplifier, bool linear); }; diff --git a/src/VCO.cpp b/src/VCO.cpp @@ -49,11 +49,11 @@ void VCO::modulate() { _fmDepth = params[FM_PARAM].getValue(); } -void VCO::alwaysProcess(const ProcessArgs& args) { +void VCO::always(const ProcessArgs& args) { lights[SLOW_LIGHT].value = _slowMode = params[SLOW_PARAM].getValue() > 0.5f; } -void VCO::processIfActive(const ProcessArgs& args) { +void VCO::processChannel(const ProcessArgs& args, int _c) { if (_syncTrigger.next(inputs[SYNC_INPUT].getVoltage())) { _phasor.resetPhase(); } diff --git a/src/VCO.hpp b/src/VCO.hpp @@ -11,7 +11,7 @@ extern Model* modelVCO; namespace bogaudio { -struct VCO : ModulatingBGModule { +struct VCO : BGModule { enum ParamsIds { FREQUENCY_PARAM, FINE_PARAM, @@ -91,8 +91,8 @@ struct VCO : ModulatingBGModule { void sampleRateChange() override; bool active() override; void modulate() override; - void alwaysProcess(const ProcessArgs& args) override; - void processIfActive(const ProcessArgs& args) override; + void always(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; void setSampleRate(float sampleRate); void setFrequency(float frequency); }; diff --git a/src/VU.cpp b/src/VU.cpp @@ -1,7 +1,7 @@ #include "VU.hpp" -void VU::onSampleRateChange() { +void VU::sampleRateChange() { float sr = APP->engine->getSampleRate(); _lRms.setSampleRate(sr); _rRms.setSampleRate(sr); @@ -11,7 +11,7 @@ void VU::onSampleRateChange() { _rPeakSlew.setParams(sr, 750.0f, 1.0f); } -void VU::process(const ProcessArgs& args) { +void VU::processChannel(const ProcessArgs& args, int _c) { float left = inputs[L_INPUT].getVoltageSum(); float right = 0.0f; if (inputs[R_INPUT].isConnected()) { diff --git a/src/VU.hpp b/src/VU.hpp @@ -46,15 +46,15 @@ struct VU : BGModule { VU() { config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); - onSampleRateChange(); + sampleRateChange(); _lRms.setSensitivity(1.0f); _rRms.setSensitivity(1.0f); _lPeakRms.setSensitivity(0.025f); _rPeakRms.setSensitivity(0.025f); } - void onSampleRateChange() override; - void process(const ProcessArgs& args) override; + void sampleRateChange() override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/Walk.cpp b/src/Walk.cpp @@ -29,7 +29,7 @@ void Walk::modulate() { } } -void Walk::processIfActive(const ProcessArgs& args) { +void Walk::processChannel(const ProcessArgs& args, int _c) { if (_jumpTrigger.process(inputs[JUMP_INPUT].getVoltage())) { _walk.jump(); } diff --git a/src/Walk.hpp b/src/Walk.hpp @@ -10,7 +10,7 @@ extern Model* modelWalk; namespace bogaudio { -struct Walk : ModulatingBGModule { +struct Walk : BGModule { enum ParamsIds { RATE_PARAM, OFFSET_PARAM, @@ -53,7 +53,7 @@ struct Walk : ModulatingBGModule { void reset() override; void sampleRateChange() override; void modulate() override; - void processIfActive(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/Walk2.cpp b/src/Walk2.cpp @@ -84,7 +84,7 @@ void Walk2::modulate() { } } -void Walk2::processIfActive(const ProcessArgs& args) { +void Walk2::processChannel(const ProcessArgs& args, int _c) { Vec* jumpTo = _jumpTo; if (jumpTo != NULL) { _jumpTo = NULL; diff --git a/src/Walk2.hpp b/src/Walk2.hpp @@ -13,7 +13,7 @@ extern Model* modelWalk2; namespace bogaudio { -struct Walk2 : ModulatingBGModule { +struct Walk2 : BGModule { enum ParamsIds { RATE_X_PARAM, RATE_Y_PARAM, @@ -91,7 +91,7 @@ struct Walk2 : ModulatingBGModule { json_t* dataToJson() override; void dataFromJson(json_t* root) override; void modulate() override; - void processIfActive(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/XCO.cpp b/src/XCO.cpp @@ -82,11 +82,11 @@ void XCO::modulate() { _sineMix = level(params[SINE_MIX_PARAM], inputs[SINE_MIX_INPUT]); } -void XCO::alwaysProcess(const ProcessArgs& args) { +void XCO::always(const ProcessArgs& args) { lights[SLOW_LIGHT].value = _slowMode = params[SLOW_PARAM].getValue() > 0.5f; } -void XCO::processIfActive(const ProcessArgs& args) { +void XCO::processChannel(const ProcessArgs& args, int _c) { if (_syncTrigger.next(inputs[SYNC_INPUT].getVoltage())) { _phasor.resetPhase(); } diff --git a/src/XCO.hpp b/src/XCO.hpp @@ -11,7 +11,7 @@ extern Model* modelXCO; namespace bogaudio { -struct XCO : ModulatingBGModule { +struct XCO : BGModule { enum ParamsIds { FREQUENCY_PARAM, FINE_PARAM, @@ -150,8 +150,8 @@ struct XCO : ModulatingBGModule { void sampleRateChange() override; bool active() override; void modulate() override; - void alwaysProcess(const ProcessArgs& args) override; - void processIfActive(const ProcessArgs& args) override; + void always(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int _c) override; Phasor::phase_delta_t phaseOffset(Param& param, Input& input); float level(Param& param, Input& input); void setSampleRate(float sampleRate); diff --git a/src/XFade.cpp b/src/XFade.cpp @@ -1,11 +1,11 @@ #include "XFade.hpp" -void XFade::onSampleRateChange() { +void XFade::sampleRateChange() { _mixSL.setParams(APP->engine->getSampleRate(), 10.0f, 2.0f); } -void XFade::process(const ProcessArgs& args) { +void XFade::processChannel(const ProcessArgs& args, int _c) { bool linear = params[LINEAR_PARAM].getValue() > 0.5f; lights[LINEAR_LIGHT].value = linear; if (!outputs[OUT_OUTPUT].isConnected()) { diff --git a/src/XFade.hpp b/src/XFade.hpp @@ -46,11 +46,11 @@ struct XFade : BGModule { configParam(CURVE_PARAM, 0.0f, 1.0f, 0.5f, "Curve"); configParam(LINEAR_PARAM, 0.0f, 1.0f, 0.0f, "Linear"); - onSampleRateChange(); + sampleRateChange(); } - void onSampleRateChange() override; - void process(const ProcessArgs& args) override; + void sampleRateChange() override; + void processChannel(const ProcessArgs& args, int _c) override; }; } // namespace bogaudio diff --git a/src/analyzer_base.hpp b/src/analyzer_base.hpp @@ -122,7 +122,7 @@ struct AnalyzerCore { void stepChannel(int channelIndex, Input& input); }; -struct AnalyzerBase : ModulatingBGModule { +struct AnalyzerBase : BGModule { float _rangeMinHz = 0.0; float _rangeMaxHz = 0.0; float _rangeDb = 80.0f; diff --git a/src/lfo_base.hpp b/src/lfo_base.hpp @@ -13,7 +13,7 @@ struct PitchModeListener { virtual void pitchModeChanged() = 0; }; -struct LFOBase : ModulatingBGModule { +struct LFOBase : BGModule { bool _slowMode = false; PitchModeListener* _pitchModeListener = NULL; diff --git a/src/module.cpp b/src/module.cpp @@ -3,24 +3,35 @@ using namespace bogaudio; -void ModulatingBGModule::onReset() { +void BGModule::onReset() { _steps = _modulationSteps; reset(); } -void ModulatingBGModule::onSampleRateChange() { +void BGModule::onSampleRateChange() { _steps = _modulationSteps; sampleRateChange(); } -void ModulatingBGModule::process(const ProcessArgs& args) { - alwaysProcess(args); +void BGModule::process(const ProcessArgs& args) { + always(args); if (active()) { ++_steps; if (_steps >= _modulationSteps) { _steps = 0; + + int channelsBefore = _channels; + int channelsNow = channels(); + if (channelsBefore != channelsNow) { + _channels = channelsNow; + channelsChanged(channelsBefore, channelsNow); + } + modulate(); } - processIfActive(args); + + for (int i = 0; i < _channels; ++i) { + processChannel(args, i); + } } } diff --git a/src/module.hpp b/src/module.hpp @@ -7,13 +7,13 @@ using namespace rack; namespace bogaudio { struct BGModule : Module { -}; - -struct ModulatingBGModule : BGModule { int _modulationSteps; int _steps = 0; - ModulatingBGModule(int modulationSteps = 100) : _modulationSteps(modulationSteps) { + static constexpr int maxChannels = PORT_MAX_CHANNELS; + int _channels = 0; + + BGModule(int modulationSteps = 100) : _modulationSteps(modulationSteps) { _steps = _modulationSteps; } @@ -24,9 +24,11 @@ struct ModulatingBGModule : BGModule { virtual void reset() {} virtual void sampleRateChange() {} virtual bool active() { return true; } - virtual void modulate() = 0; - virtual void alwaysProcess(const ProcessArgs& args) {} - virtual void processIfActive(const ProcessArgs& args) = 0; + virtual int channels() { return 1; } + virtual void channelsChanged(int before, int after) {} + virtual void modulate() {} + virtual void always(const ProcessArgs& args) {} + virtual void processChannel(const ProcessArgs& args, int c) = 0; }; } // namespace bogaudio