BogaudioModules

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

commit 403d5117d0e52319ceefe632a5a8e5562ec9bb12
parent f3a9f835ed2d1d298a78846eece0e5c2d04e9b09
Author: Matt Demanett <matt@demanett.net>
Date:   Wed, 11 Sep 2019 23:49:38 -0400

Poly: WALK.

Diffstat:
Msrc/Walk.cpp | 49++++++++++++++++++++++++++++++++-----------------
Msrc/Walk.hpp | 15++++++++-------
2 files changed, 40 insertions(+), 24 deletions(-)

diff --git a/src/Walk.cpp b/src/Walk.cpp @@ -2,42 +2,57 @@ #include "Walk.hpp" void Walk::reset() { - _jumpTrigger.reset(); + for (int i = 0; i < maxChannels; ++i) { + _jumpTrigger[i].reset(); + } } void Walk::sampleRateChange() { - _slew.setParams(APP->engine->getSampleRate(), 100.0f, 10.0f); + for (int i = 0; i < maxChannels; ++i) { + _slew[i].setParams(APP->engine->getSampleRate(), 100.0f, 10.0f); + } +} + +int Walk::channels() { + return std::max( + 1, + std::max( + std::max(inputs[RATE_INPUT].getChannels(), inputs[JUMP_INPUT].getChannels()), + std::max(inputs[OFFSET_INPUT].getChannels(), inputs[SCALE_INPUT].getChannels()) + ) + ); } -void Walk::modulate() { +void Walk::modulateChannel(int c) { float rate = params[RATE_PARAM].getValue(); if (inputs[RATE_INPUT].isConnected()) { - rate *= clamp(inputs[RATE_INPUT].getVoltage() / 10.0f, 0.0f, 1.0f); + rate *= clamp(inputs[RATE_INPUT].getPolyVoltage(c) / 10.0f, 0.0f, 1.0f); } rate = 0.2f * powf(rate, 5.0f); - _walk.setParams(APP->engine->getSampleRate(), rate); + _walk[c].setParams(APP->engine->getSampleRate(), rate); - _offset = params[OFFSET_PARAM].getValue(); + _offset[c] = params[OFFSET_PARAM].getValue(); if (inputs[OFFSET_INPUT].isConnected()) { - _offset *= clamp(inputs[OFFSET_INPUT].getVoltage() / 5.0f, -1.0f, 1.0f); + _offset[c] *= clamp(inputs[OFFSET_INPUT].getPolyVoltage(c) / 5.0f, -1.0f, 1.0f); } - _offset *= 5.0f; + _offset[c] *= 5.0f; - _scale = params[SCALE_PARAM].getValue(); + _scale[c] = params[SCALE_PARAM].getValue(); if (inputs[SCALE_INPUT].isConnected()) { - _scale *= clamp(inputs[SCALE_INPUT].getVoltage() / 10.0f, 0.0f, 1.0f); + _scale[c] *= clamp(inputs[SCALE_INPUT].getPolyVoltage(c) / 10.0f, 0.0f, 1.0f); } } -void Walk::processChannel(const ProcessArgs& args, int _c) { - if (_jumpTrigger.process(inputs[JUMP_INPUT].getVoltage())) { - _walk.jump(); +void Walk::processChannel(const ProcessArgs& args, int c) { + if (_jumpTrigger[c].process(inputs[JUMP_INPUT].getPolyVoltage(c))) { + _walk[c].jump(); } - float out = _slew.next(_walk.next()); - out *= _scale; - out += _offset; - outputs[OUT_OUTPUT].setVoltage(out); + float out = _slew[c].next(_walk[c].next()); + out *= _scale[c]; + out += _offset[c]; + outputs[OUT_OUTPUT].setChannels(_channels); + outputs[OUT_OUTPUT].setVoltage(out, c); } struct WalkWidget : ModuleWidget { diff --git a/src/Walk.hpp b/src/Walk.hpp @@ -35,11 +35,11 @@ struct Walk : BGModule { NUM_LIGHTS }; - float _offset = 0.0f; - float _scale = 0.0f; - Trigger _jumpTrigger; - RandomWalk _walk; - bogaudio::dsp::SlewLimiter _slew; + float _offset[maxChannels] {}; + float _scale[maxChannels] {}; + Trigger _jumpTrigger[maxChannels]; + RandomWalk _walk[maxChannels]; + bogaudio::dsp::SlewLimiter _slew[maxChannels]; Walk() { config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); @@ -52,8 +52,9 @@ struct Walk : BGModule { void reset() override; void sampleRateChange() override; - void modulate() override; - void processChannel(const ProcessArgs& args, int _c) override; + int channels() override; + void modulateChannel(int c) override; + void processChannel(const ProcessArgs& args, int c) override; }; } // namespace bogaudio