shaper_core.hpp (2737B)
1 #pragma once 2 3 #include "bogaudio.hpp" 4 5 namespace bogaudio { 6 7 struct ShaperCore { 8 enum Stage { 9 STOPPED_STAGE, 10 ATTACK_STAGE, 11 ON_STAGE, 12 DECAY_STAGE, 13 OFF_STAGE 14 }; 15 16 Param& _attackParam; 17 Param& _onParam; 18 Param& _decayParam; 19 Param& _offParam; 20 Param& _envParam; 21 Param& _signalParam; 22 Param& _triggerParam; 23 Param& _speedParam; 24 Param& _loopParam; 25 26 Input& _signalInput; 27 Input& _triggerInput; 28 Input* _attackInput; 29 Input* _onInput; 30 Input* _decayInput; 31 Input* _offInput; 32 Input* _envInput; 33 Input* _signalCVInput; 34 35 Output& _signalOutput; 36 Output& _envOutput; 37 Output& _invOutput; 38 Output& _triggerOutput; 39 Output* _attackOutput; 40 Output* _onOutput; 41 Output* _decayOutput; 42 Output* _offOutput; 43 44 float* _attackLights; 45 float* _onLights; 46 float* _decayLights; 47 float* _offLights; 48 49 bool _firstStep = true; 50 bool& _triggerOnLoad; 51 bool& _shouldTriggerOnLoad; 52 Trigger _trigger; 53 rack::dsp::PulseGenerator _triggerOuptutPulseGen; 54 Stage _stage; 55 float _stageProgress; 56 57 ShaperCore( 58 Param& attackParam, 59 Param& onParam, 60 Param& decayParam, 61 Param& offParam, 62 Param& envParam, 63 Param& signalParam, 64 Param& triggerParam, 65 Param& speedParam, 66 Param& loopParam, 67 68 Input& signalInput, 69 Input& triggerInput, 70 Input* attackInput, 71 Input* onInput, 72 Input* decayInput, 73 Input* offInput, 74 Input* envInput, 75 Input* signalCVInput, 76 77 Output& signalOutput, 78 Output& envOutput, 79 Output& invOutput, 80 Output& triggerOutput, 81 Output* attackOutput, 82 Output* onOutput, 83 Output* decayOutput, 84 Output* offOutput, 85 86 float* attackLights, 87 float* onLights, 88 float* decayLights, 89 float* offLights, 90 91 bool& triggerOnLoad, 92 bool& shouldTriggerOnLoad 93 ) : _attackParam(attackParam) 94 , _onParam(onParam) 95 , _decayParam(decayParam) 96 , _offParam(offParam) 97 , _envParam(envParam) 98 , _signalParam(signalParam) 99 , _triggerParam(triggerParam) 100 , _speedParam(speedParam) 101 , _loopParam(loopParam) 102 103 , _signalInput(signalInput) 104 , _triggerInput(triggerInput) 105 , _attackInput(attackInput) 106 , _onInput(onInput) 107 , _decayInput(decayInput) 108 , _offInput(offInput) 109 , _envInput(envInput) 110 , _signalCVInput(signalCVInput) 111 112 , _signalOutput(signalOutput) 113 , _envOutput(envOutput) 114 , _invOutput(invOutput) 115 , _triggerOutput(triggerOutput) 116 , _attackOutput(attackOutput) 117 , _onOutput(onOutput) 118 , _decayOutput(decayOutput) 119 , _offOutput(offOutput) 120 121 , _attackLights(attackLights) 122 , _onLights(onLights) 123 , _decayLights(decayLights) 124 , _offLights(offLights) 125 126 , _triggerOnLoad(triggerOnLoad) 127 , _shouldTriggerOnLoad(shouldTriggerOnLoad) 128 { 129 reset(); 130 } 131 132 void reset(); 133 void step(int c, int channels); 134 135 bool stepStage(Param& knob, Input* cv, bool slow, int c); 136 float levelParam(Param& knob, Input* cv, int c) const; 137 }; 138 139 } // namespace bogaudio