BogaudioModules

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

commit 1ab16d5d4517dfc9adfd5d92f6dd8ac8ff197171
parent 824d74f8b1d721944863b74938819f9442471aa8
Author: Matt Demanett <matt@demanett.net>
Date:   Mon,  9 Sep 2019 00:25:58 -0400

Poly: FLIPFLOP.

Diffstat:
Msrc/FlipFlop.cpp | 96++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------
Msrc/FlipFlop.hpp | 23+++++++++++++----------
2 files changed, 71 insertions(+), 48 deletions(-)

diff --git a/src/FlipFlop.cpp b/src/FlipFlop.cpp @@ -2,60 +2,80 @@ #include "FlipFlop.hpp" void FlipFlop::reset() { - _flipped1 = false; - _flipped2 = false; - _trigger1.reset(); - _resetTrigger1.reset(); - _trigger2.reset(); - _resetTrigger2.reset(); + for (int i = 0; i < maxChannels; ++i) { + _flipped1[i] = false; + _trigger1[i].reset(); + _resetTrigger1[i].reset(); + + _flipped2[i] = false; + _trigger2[i].reset(); + _resetTrigger2[i].reset(); + } } -void FlipFlop::processChannel(const ProcessArgs& args, int _c) { - channelStep( - inputs[IN1_INPUT], - inputs[RESET1_INPUT], - outputs[A1_OUTPUT], - outputs[B1_OUTPUT], - _trigger1, - _resetTrigger1, - _flipped1 - ); - channelStep( - inputs[IN2_INPUT], - inputs[RESET2_INPUT], - outputs[A2_OUTPUT], - outputs[B2_OUTPUT], - _trigger2, - _resetTrigger2, - _flipped2 - ); +void FlipFlop::processChannel(const ProcessArgs& args, int c) { + assert(c == 0); + + for (int i = 0, n = std::max(1, inputs[IN1_INPUT].getChannels()); i < n; ++i) { + channelStep( + i, + n, + inputs[IN1_INPUT], + inputs[RESET1_INPUT], + outputs[A1_OUTPUT], + outputs[B1_OUTPUT], + _trigger1, + _resetTrigger1, + _flipped1 + ); + } + + for (int i = 0, n = std::max(1, inputs[IN2_INPUT].getChannels()); i < n; ++i) { + channelStep( + i, + n, + inputs[IN2_INPUT], + inputs[RESET2_INPUT], + outputs[A2_OUTPUT], + outputs[B2_OUTPUT], + _trigger2, + _resetTrigger2, + _flipped2 + ); + } } void FlipFlop::channelStep( + int c, + int channels, Input& triggerInput, Input& resetInput, Output& aOutput, Output& bOutput, - PositiveZeroCrossing& trigger, - Trigger& resetTrigger, - bool& flipped + PositiveZeroCrossing* trigger, + Trigger* resetTrigger, + bool* flipped ) { - bool triggered = trigger.next(triggerInput.getVoltage()); - resetTrigger.process(resetInput.getVoltage()); - if (resetTrigger.isHigh()) { - flipped = false; + bool triggered = trigger[c].next(triggerInput.getVoltage(c)); + resetTrigger[c].process(resetInput.getPolyVoltage(c)); + if (resetTrigger[c].isHigh()) { + flipped[c] = false; } else if (triggered) { - flipped = !flipped; + flipped[c] = !flipped[c]; } - if (flipped) { - aOutput.setVoltage(0.0f); - bOutput.setVoltage(5.0f); + if (flipped[c]) { + aOutput.setChannels(channels); + aOutput.setVoltage(0.0f, c); + bOutput.setChannels(channels); + bOutput.setVoltage(5.0f, c); } else { - aOutput.setVoltage(5.0f); - bOutput.setVoltage(0.0f); + aOutput.setChannels(channels); + aOutput.setVoltage(5.0f, c); + bOutput.setChannels(channels); + bOutput.setVoltage(0.0f, c); } } diff --git a/src/FlipFlop.hpp b/src/FlipFlop.hpp @@ -34,12 +34,12 @@ struct FlipFlop : BGModule { NUM_LIGHTS }; - bool _flipped1; - bool _flipped2; - PositiveZeroCrossing _trigger1; - Trigger _resetTrigger1; - PositiveZeroCrossing _trigger2; - Trigger _resetTrigger2; + bool _flipped1[maxChannels] {}; + bool _flipped2[maxChannels] {}; + PositiveZeroCrossing _trigger1[maxChannels]; + Trigger _resetTrigger1[maxChannels]; + PositiveZeroCrossing _trigger2[maxChannels]; + Trigger _resetTrigger2[maxChannels]; FlipFlop() { config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); @@ -47,15 +47,18 @@ struct FlipFlop : BGModule { } void reset() override; - void processChannel(const ProcessArgs& args, int _c) override; + int channels() override { return 1; } + void processChannel(const ProcessArgs& args, int c) override; void channelStep( + int c, + int channels, Input& triggerInput, Input& resetInput, Output& aOutput, Output& bOutput, - PositiveZeroCrossing& trigger, - Trigger& resetTrigger, - bool& flipped + PositiveZeroCrossing* trigger, + Trigger* resetTrigger, + bool* flipped ); };