BogaudioModules

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

Edge.hpp (1691B)


      1 #pragma once
      2 
      3 #include "bogaudio.hpp"
      4 #include "signal.hpp"
      5 
      6 using namespace bogaudio::dsp;
      7 
      8 extern Model* modelEdge;
      9 
     10 namespace bogaudio {
     11 
     12 struct Edge : BGModule {
     13 	enum ParamsIds {
     14 		RISE_PARAM,
     15 		FALL_PARAM,
     16 		HOLD_PARAM,
     17 		NUM_PARAMS
     18 	};
     19 
     20 	enum InputsIds {
     21 		IN_INPUT,
     22 		NUM_INPUTS
     23 	};
     24 
     25 	enum OutputsIds {
     26 		HIGH_OUTPUT,
     27 		RISE_OUTPUT,
     28 		FALL_OUTPUT,
     29 		NUM_OUTPUTS
     30 	};
     31 
     32 	enum LightsIds {
     33 		HIGH_LIGHT,
     34 		NUM_LIGHTS
     35 	};
     36 
     37 	enum State {
     38 		LOW_STATE,
     39 		LOW2_STATE,
     40 		HIGH_STATE,
     41 		HIGH2_STATE
     42 	};
     43 
     44 	float _riseThreshold = 0.0f;
     45 	float _fallThreshold = 0.0f;
     46 	float _holdSeconds = 0.0f;
     47 	State _state[maxChannels] {};
     48 	Timer _timer[maxChannels];
     49 	rack::dsp::PulseGenerator _riseOutputPulseGen[maxChannels];
     50 	rack::dsp::PulseGenerator _fallOutputPulseGen[maxChannels];
     51 	int _highLightSum = 0;
     52 
     53 	Edge() {
     54 		config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS);
     55 		configParam(RISE_PARAM, -1.0f, 1.0f, 0.1f, "Rising threshold", " V", 0.0f, 10.0f);
     56 		configParam(FALL_PARAM, -1.0f, 1.0f, 0.01f, "Falling threshold", " V", 0.0f, 10.0f);
     57 		configParam<ScaledSquaringParamQuantity<1000>>(HOLD_PARAM, 0.0f, 1.0f, 0.031623f, "Hold/reset time", " ms");
     58 
     59 		configInput(IN_INPUT, "Signal");
     60 
     61 		configOutput(HIGH_OUTPUT, "High gate");
     62 		configOutput(RISE_OUTPUT, "Rising trigger");
     63 		configOutput(FALL_OUTPUT, "Falling trigger");
     64 	}
     65 
     66 	void reset() override;
     67 	int channels() override;
     68 	void addChannel(int c) override;
     69 	void modulate() override;
     70 	void processAlways(const ProcessArgs& args) override;
     71 	void processAll(const ProcessArgs& args) override;
     72 	void processChannel(const ProcessArgs& args, int c) override;
     73 	void postProcessAlways(const ProcessArgs& args) override;
     74 };
     75 
     76 } // namespace bogaudio