dadsrh_core.hpp (4345B)
1 #pragma once 2 3 #include "bogaudio.hpp" 4 5 namespace bogaudio { 6 7 struct DADSRHCore { 8 enum Stage { 9 STOPPED_STAGE, 10 DELAY_STAGE, 11 ATTACK_STAGE, 12 DECAY_STAGE, 13 SUSTAIN_STAGE, 14 RELEASE_STAGE 15 }; 16 17 Param& _delayParam; 18 Param& _attackParam; 19 Param& _decayParam; 20 Param& _sustainParam; 21 Param& _releaseParam; 22 Param& _holdParam; 23 Param& _attackShapeParam; 24 Param& _decayShapeParam; 25 Param& _releaseShapeParam; 26 Param& _triggerParam; 27 Param& _modeParam; 28 Param& _loopParam; 29 Param& _speedParam; 30 Param& _retriggerParam; 31 32 Input* _delayInput; 33 Input* _attackInput; 34 Input* _decayInput; 35 Input* _sustainInput; 36 Input* _releaseInput; 37 Input* _holdInput; 38 Input& _triggerInput; 39 40 Output* _delayOutput; 41 Output* _attackOutput; 42 Output* _decayOutput; 43 Output* _sustainOutput; 44 Output* _releaseOutput; 45 Output& _envOutput; 46 Output& _invOutput; 47 Output& _triggerOutput; 48 49 float* _delayLights; 50 float* _attackLights; 51 float* _decayLights; 52 float* _sustainLights; 53 float* _releaseLights; 54 Light& _attackShape1Light; 55 Light& _attackShape2Light; 56 Light& _attackShape3Light; 57 Light& _decayShape1Light; 58 Light& _decayShape2Light; 59 Light& _decayShape3Light; 60 Light& _releaseShape1Light; 61 Light& _releaseShape2Light; 62 Light& _releaseShape3Light; 63 64 bool _firstStep = true; 65 bool& _triggerOnLoad; 66 bool& _shouldTriggerOnLoad; 67 Trigger _trigger; 68 rack::dsp::PulseGenerator _triggerOuptutPulseGen; 69 Stage _stage; 70 float _envelope, _stageProgress, _holdProgress, _releaseLevel; 71 72 DADSRHCore( 73 Param& delayParam, 74 Param& attackParam, 75 Param& decayParam, 76 Param& sustainParam, 77 Param& releaseParam, 78 Param& holdParam, 79 Param& attackShapeParam, 80 Param& decayShapeParam, 81 Param& releaseShapeParam, 82 Param& triggerParam, 83 Param& modeParam, 84 Param& loopParam, 85 Param& speedParam, 86 Param& retriggerParam, 87 88 Input* delayInput, 89 Input* attackInput, 90 Input* decayInput, 91 Input* sustainInput, 92 Input* releaseInput, 93 Input* holdInput, 94 Input& triggerInput, 95 96 Output* delayOutput, 97 Output* attackOutput, 98 Output* decayOutput, 99 Output* sustainOutput, 100 Output* releaseOutput, 101 Output& envOutput, 102 Output& invOutput, 103 Output& triggerOutput, 104 105 float* delayLights, 106 float* attackLights, 107 float* decayLights, 108 float* sustainLights, 109 float* releaseLights, 110 Light& attackShape1Light, 111 Light& attackShape2Light, 112 Light& attackShape3Light, 113 Light& decayShape1Light, 114 Light& decayShape2Light, 115 Light& decayShape3Light, 116 Light& releaseShape1Light, 117 Light& releaseShape2Light, 118 Light& releaseShape3Light, 119 120 bool& triggerOnLoad, 121 bool& shouldTriggerOnLoad 122 ) : _delayParam(delayParam) 123 , _attackParam(attackParam) 124 , _decayParam(decayParam) 125 , _sustainParam(sustainParam) 126 , _releaseParam(releaseParam) 127 , _holdParam(holdParam) 128 , _attackShapeParam(attackShapeParam) 129 , _decayShapeParam(decayShapeParam) 130 , _releaseShapeParam(releaseShapeParam) 131 , _triggerParam(triggerParam) 132 , _modeParam(modeParam) 133 , _loopParam(loopParam) 134 , _speedParam(speedParam) 135 , _retriggerParam(retriggerParam) 136 137 , _delayInput(delayInput) 138 , _attackInput(attackInput) 139 , _decayInput(decayInput) 140 , _sustainInput(sustainInput) 141 , _releaseInput(releaseInput) 142 , _holdInput(holdInput) 143 , _triggerInput(triggerInput) 144 145 , _delayOutput(delayOutput) 146 , _attackOutput(attackOutput) 147 , _decayOutput(decayOutput) 148 , _sustainOutput(sustainOutput) 149 , _releaseOutput(releaseOutput) 150 , _envOutput(envOutput) 151 , _invOutput(invOutput) 152 , _triggerOutput(triggerOutput) 153 154 , _delayLights(delayLights) 155 , _attackLights(attackLights) 156 , _decayLights(decayLights) 157 , _sustainLights(sustainLights) 158 , _releaseLights(releaseLights) 159 , _attackShape1Light(attackShape1Light) 160 , _attackShape2Light(attackShape2Light) 161 , _attackShape3Light(attackShape3Light) 162 , _decayShape1Light(decayShape1Light) 163 , _decayShape2Light(decayShape2Light) 164 , _decayShape3Light(decayShape3Light) 165 , _releaseShape1Light(releaseShape1Light) 166 , _releaseShape2Light(releaseShape2Light) 167 , _releaseShape3Light(releaseShape3Light) 168 169 , _triggerOnLoad(triggerOnLoad) 170 , _shouldTriggerOnLoad(shouldTriggerOnLoad) 171 { 172 reset(); 173 } 174 175 void reset(); 176 void step(int c, int channels); 177 178 float stepAmount(int c, Param& knob, Input* cv, bool slow, bool allowZero = false); 179 float knobTime(int c, Param& knob, Input* cv, bool slow, bool allowZero = false); 180 float knobAmount(int c, Param& knob, Input* cv) const; 181 }; 182 183 } // namespace bogaudio