DADSRH.hpp (2993B)
1 #pragma once 2 3 #include "bogaudio.hpp" 4 #include "trigger_on_load.hpp" 5 #include "dadsrh_core.hpp" 6 7 extern Model* modelDADSRH; 8 9 namespace bogaudio { 10 11 struct DADSRH : TriggerOnLoadModule { 12 enum ParamsIds { 13 DELAY_PARAM, 14 ATTACK_PARAM, 15 DECAY_PARAM, 16 SUSTAIN_PARAM, 17 RELEASE_PARAM, 18 HOLD_PARAM, 19 ATTACK_SHAPE_PARAM, 20 DECAY_SHAPE_PARAM, 21 RELEASE_SHAPE_PARAM, 22 TRIGGER_PARAM, 23 MODE_PARAM, 24 LOOP_PARAM, 25 SPEED_PARAM, 26 RETRIGGER_PARAM, 27 NUM_PARAMS 28 }; 29 30 enum InputsIds { 31 TRIGGER_INPUT, 32 NUM_INPUTS 33 }; 34 35 enum OutputsIds { 36 ENV_OUTPUT, 37 INV_OUTPUT, 38 TRIGGER_OUTPUT, 39 NUM_OUTPUTS 40 }; 41 42 enum LightsIds { 43 DELAY_LIGHT, 44 ATTACK_LIGHT, 45 DECAY_LIGHT, 46 SUSTAIN_LIGHT, 47 RELEASE_LIGHT, 48 ATTACK_SHAPE1_LIGHT, 49 ATTACK_SHAPE2_LIGHT, 50 ATTACK_SHAPE3_LIGHT, 51 DECAY_SHAPE1_LIGHT, 52 DECAY_SHAPE2_LIGHT, 53 DECAY_SHAPE3_LIGHT, 54 RELEASE_SHAPE1_LIGHT, 55 RELEASE_SHAPE2_LIGHT, 56 RELEASE_SHAPE3_LIGHT, 57 NUM_LIGHTS 58 }; 59 60 DADSRHCore* _core[maxChannels] {}; 61 float _delayLights[maxChannels] {}; 62 float _attackLights[maxChannels] {}; 63 float _decayLights[maxChannels] {}; 64 float _sustainLights[maxChannels] {}; 65 float _releaseLights[maxChannels] {}; 66 67 DADSRH() { 68 config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); 69 configParam<EnvelopeSegmentParamQuantity>(DELAY_PARAM, 0.0f, 1.0f, 0.0f, "Delay", " s"); 70 configParam<EnvelopeSegmentParamQuantity>(ATTACK_PARAM, 0.0f, 1.0f, 0.14142f, "Attack", " s"); 71 configParam<EnvelopeSegmentParamQuantity>(DECAY_PARAM, 0.0f, 1.0f, SQUARE_ROOT_ONE_TENTH, "Decay", " s"); 72 configParam(SUSTAIN_PARAM, 0.0f, 1.0f, 0.5f, "Sustain", "%", 0.0f, 100.0f); 73 configParam<EnvelopeSegmentParamQuantity>(RELEASE_PARAM, 0.0f, 1.0f, SQUARE_ROOT_ONE_TENTH, "Release", " s"); 74 configParam<EnvelopeSegmentParamQuantity>(HOLD_PARAM, 0.0f, 1.0f, 0.44721f, "Hold", " s"); 75 configSwitch(ATTACK_SHAPE_PARAM, 1.0f, 3.0f, 1.0f, "Attack shape", {"Logarithmic", "Linear", "Exponential"}); 76 configSwitch(DECAY_SHAPE_PARAM, 1.0f, 3.0f, 1.0f, "Decay shape", {"Exponential", "Linear", "Logarithmic"}); 77 configSwitch(RELEASE_SHAPE_PARAM, 1.0f, 3.0f, 1.0f, "Release shape", {"Exponential", "Linear", "Logarithmic"}); 78 configButton(TRIGGER_PARAM, "Trigger"); 79 configSwitch(MODE_PARAM, 0.0f, 1.0f, 1.0f, "Mode", {"Triggered", "Gated"}); 80 configSwitch(LOOP_PARAM, 0.0f, 1.0f, 1.0f, "Loop", {"Loop", "Stop"}); 81 configSwitch(SPEED_PARAM, 0.0f, 1.0f, 1.0f, "Speed", {"Slow", "Normal"}); 82 configSwitch(RETRIGGER_PARAM, 0.0f, 1.0f, 1.0f, "Retrigger", {"Reset", "Resume attack"}); 83 84 configInput(TRIGGER_INPUT, "Trigger"); 85 86 configOutput(ENV_OUTPUT, "Envelope"); 87 configOutput(INV_OUTPUT, "Inverted envelope"); 88 configOutput(TRIGGER_OUTPUT, "End-of-cycle trigger"); 89 } 90 91 void reset() override; 92 int channels() override; 93 void addChannel(int c) override; 94 void removeChannel(int c) override; 95 void processChannel(const ProcessArgs& args, int c) override; 96 void postProcess(const ProcessArgs& args) override; 97 98 bool shouldTriggerOnNextLoad() override; 99 }; 100 101 } // namespace bogaudio