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