Walk2.hpp (2876B)
1 #pragma once 2 3 #include <atomic> 4 5 #include "bogaudio.hpp" 6 #include "dsp/buffer.hpp" 7 #include "dsp/noise.hpp" 8 #include "dsp/signal.hpp" 9 #include "Walk.hpp" 10 11 using namespace bogaudio::dsp; 12 13 extern Model* modelWalk2; 14 15 namespace bogaudio { 16 17 struct Walk2 : BGModule { 18 enum ParamsIds { 19 RATE_X_PARAM, 20 RATE_Y_PARAM, 21 OFFSET_X_PARAM, 22 OFFSET_Y_PARAM, 23 SCALE_X_PARAM, 24 SCALE_Y_PARAM, 25 JUMP_MODE_PARAM, 26 NUM_PARAMS 27 }; 28 29 enum InputsIds { 30 OFFSET_X_INPUT, 31 SCALE_X_INPUT, 32 RATE_X_INPUT, 33 OFFSET_Y_INPUT, 34 SCALE_Y_INPUT, 35 RATE_Y_INPUT, 36 JUMP_INPUT, 37 NUM_INPUTS 38 }; 39 40 enum OutputsIds { 41 OUT_X_OUTPUT, 42 OUT_Y_OUTPUT, 43 DISTANCE_OUTPUT, 44 NUM_OUTPUTS 45 }; 46 47 enum LightsIds { 48 JUMP_LIGHT, 49 SAMPLEHOLD_LIGHT, 50 TRACKHOLD_LIGHT, 51 NUM_LIGHTS 52 }; 53 54 const float historySeconds = 1.0f; 55 const int historyPoints = 100; 56 int _historySteps; 57 int _historyStep = 0; 58 59 float _offsetX = 0.0f, _offsetY = 0.0f; 60 float _scaleX = 0.0f, _scaleY = 0.0f; 61 RandomWalk _walkX, _walkY; 62 bogaudio::dsp::SlewLimiter _slewX, _slewY; 63 Trigger _jumpTrigger; 64 HistoryBuffer<float> _outsX, _outsY; 65 std::atomic<Vec*> _jumpTo; 66 Walk::JumpMode _jumpMode = Walk::JUMP_JUMPMODE; 67 float _lastOutX = 0.0f, _lastOutY = 0.0f; 68 69 enum TraceColor { 70 GREEN_TRACE_COLOR, 71 ORANGE_TRACE_COLOR, 72 RED_TRACE_COLOR, 73 BLUE_TRACE_COLOR 74 }; 75 bool _zoomOut = false; 76 bool _drawGrid = true; 77 TraceColor _traceColor = GREEN_TRACE_COLOR; 78 79 Walk2() 80 : _outsX(historyPoints, 0.0f) 81 , _outsY(historyPoints, 0.0f) 82 , _jumpTo(NULL) 83 { 84 config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); 85 configParam(RATE_X_PARAM, 0.0f, 1.0f, 0.1f, "Rate X", "%", 0.0f, 100.0f); 86 configParam(RATE_Y_PARAM, 0.0f, 1.0f, 0.1f, "Rate Y", "%", 0.0f, 100.0f); 87 configParam(OFFSET_X_PARAM, -1.0f, 1.0f, 0.0f, "Offset X", " V", 0.0f, 5.0f); 88 configParam(OFFSET_Y_PARAM, -1.0f, 1.0f, 0.0f, "Offset Y", " V", 0.0f, 5.0f); 89 configParam(SCALE_X_PARAM, 0.0f, 1.0f, 1.0f, "Scale X", "%", 0.0f, 100.0f); 90 configParam(SCALE_Y_PARAM, 0.0f, 1.0f, 1.0f, "Scale Y", "%", 0.0f, 100.0f); 91 configSwitch(JUMP_MODE_PARAM, 0.0f, 2.0f, 0.0f, "TRIG action", {"Jump", "Sample & hold", "Track & hold"}); 92 93 configInput(OFFSET_X_INPUT, "Offset X CV"); 94 configInput(SCALE_X_INPUT, "Scale X CV"); 95 configInput(RATE_X_INPUT, "Rate X CV"); 96 configInput(OFFSET_Y_INPUT, "Offset Y CV"); 97 configInput(SCALE_Y_INPUT, "Scale Y CV"); 98 configInput(RATE_Y_INPUT, "Rate Y CV"); 99 configInput(JUMP_INPUT, "Trigger"); 100 101 configOutput(OUT_X_OUTPUT, "X signal"); 102 configOutput(OUT_Y_OUTPUT, "Y signal"); 103 configOutput(DISTANCE_OUTPUT, "X/Y distance signal"); 104 } 105 106 void reset() override; 107 void sampleRateChange() override; 108 json_t* saveToJson(json_t* root) override; 109 void loadFromJson(json_t* root) override; 110 void modulate() override; 111 void processAlways(const ProcessArgs& args) override; 112 void processAll(const ProcessArgs& args) override; 113 }; 114 115 } // namespace bogaudio