DADSRHPlus.hpp (3692B)
1 #pragma once 2 3 #include "bogaudio.hpp" 4 #include "trigger_on_load.hpp" 5 #include "dadsrh_core.hpp" 6 7 extern Model* modelDADSRHPlus; 8 9 namespace bogaudio { 10 11 struct DADSRHPlus : 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 DELAY_INPUT, 32 ATTACK_INPUT, 33 DECAY_INPUT, 34 SUSTAIN_INPUT, 35 RELEASE_INPUT, 36 HOLD_INPUT, 37 TRIGGER_INPUT, 38 NUM_INPUTS 39 }; 40 41 enum OutputsIds { 42 DELAY_OUTPUT, 43 ATTACK_OUTPUT, 44 DECAY_OUTPUT, 45 SUSTAIN_OUTPUT, 46 RELEASE_OUTPUT, 47 ENV_OUTPUT, 48 INV_OUTPUT, 49 TRIGGER_OUTPUT, 50 NUM_OUTPUTS 51 }; 52 53 enum LightsIds { 54 DELAY_LIGHT, 55 ATTACK_LIGHT, 56 DECAY_LIGHT, 57 SUSTAIN_LIGHT, 58 RELEASE_LIGHT, 59 ATTACK_SHAPE1_LIGHT, 60 ATTACK_SHAPE2_LIGHT, 61 ATTACK_SHAPE3_LIGHT, 62 DECAY_SHAPE1_LIGHT, 63 DECAY_SHAPE2_LIGHT, 64 DECAY_SHAPE3_LIGHT, 65 RELEASE_SHAPE1_LIGHT, 66 RELEASE_SHAPE2_LIGHT, 67 RELEASE_SHAPE3_LIGHT, 68 NUM_LIGHTS 69 }; 70 71 DADSRHCore* _core[maxChannels] {}; 72 float _delayLights[maxChannels] {}; 73 float _attackLights[maxChannels] {}; 74 float _decayLights[maxChannels] {}; 75 float _sustainLights[maxChannels] {}; 76 float _releaseLights[maxChannels] {}; 77 78 DADSRHPlus() { 79 config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); 80 configParam<EnvelopeSegmentParamQuantity>(DELAY_PARAM, 0.0f, 1.0f, 0.0f, "Delay", " s"); 81 configParam<EnvelopeSegmentParamQuantity>(ATTACK_PARAM, 0.0f, 1.0f, 0.14142f, "Attack", " s"); 82 configParam<EnvelopeSegmentParamQuantity>(DECAY_PARAM, 0.0f, 1.0f, SQUARE_ROOT_ONE_TENTH, "Decay", " s"); 83 configParam(SUSTAIN_PARAM, 0.0f, 1.0f, 0.5f, "Sustain", "%", 0.0f, 100.0f); 84 configParam<EnvelopeSegmentParamQuantity>(RELEASE_PARAM, 0.0f, 1.0f, SQUARE_ROOT_ONE_TENTH, "Release", " s"); 85 configParam<EnvelopeSegmentParamQuantity>(HOLD_PARAM, 0.0f, 1.0f, 0.44721f, "Hold", " s"); 86 configSwitch(ATTACK_SHAPE_PARAM, 1.0f, 3.0f, 1.0f, "Attack shape", {"Logarithmic", "Linear", "Exponential"}); 87 configSwitch(DECAY_SHAPE_PARAM, 1.0f, 3.0f, 1.0f, "Decay shape", {"Exponential", "Linear", "Logarithmic"}); 88 configSwitch(RELEASE_SHAPE_PARAM, 1.0f, 3.0f, 1.0f, "Release shape", {"Exponential", "Linear", "Logarithmic"}); 89 configButton(TRIGGER_PARAM, "Trigger"); 90 configSwitch(MODE_PARAM, 0.0f, 1.0f, 1.0f, "Mode", {"Triggered", "Gated"}); 91 configSwitch(LOOP_PARAM, 0.0f, 1.0f, 1.0f, "Loop", {"Loop", "Stop"}); 92 configSwitch(SPEED_PARAM, 0.0f, 1.0f, 1.0f, "Speed", {"Slow", "Normal"}); 93 configSwitch(RETRIGGER_PARAM, 0.0f, 1.0f, 1.0f, "Retrigger", {"Reset", "Resume attack"}); 94 95 configInput(DELAY_INPUT, "Delay CV"); 96 configInput(ATTACK_INPUT, "Attack CV"); 97 configInput(DECAY_INPUT, "Decay CV"); 98 configInput(SUSTAIN_INPUT, "Sustain CV"); 99 configInput(RELEASE_INPUT, "Release CV"); 100 configInput(HOLD_INPUT, "Hold CV"); 101 configInput(TRIGGER_INPUT, "Trigger"); 102 103 configOutput(DELAY_OUTPUT, "Delay stage gate"); 104 configOutput(ATTACK_OUTPUT, "Attack stage gate"); 105 configOutput(DECAY_OUTPUT, "Decay stage gate"); 106 configOutput(SUSTAIN_OUTPUT, "Sustain stage gate"); 107 configOutput(RELEASE_OUTPUT, "Release stage gate"); 108 configOutput(ENV_OUTPUT, "Envelope"); 109 configOutput(INV_OUTPUT, "Inverted envelope"); 110 configOutput(TRIGGER_OUTPUT, "End-of-cycle trigger"); 111 } 112 113 void reset() override; 114 int channels() override; 115 void addChannel(int c) override; 116 void removeChannel(int c) override; 117 void processChannel(const ProcessArgs& args, int c) override; 118 void postProcess(const ProcessArgs& args) override; 119 120 bool shouldTriggerOnNextLoad() override; 121 }; 122 123 } // namespace bogaudio