BogaudioModules

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

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