#pragma once #include "bogaudio.hpp" #include "dsp/envelope.hpp" extern Model* modelADSR; namespace bogaudio { struct ADSR : Module { enum ParamsIds { ATTACK_PARAM, DECAY_PARAM, SUSTAIN_PARAM, RELEASE_PARAM, LINEAR_PARAM, NUM_PARAMS }; enum InputsIds { GATE_INPUT, NUM_INPUTS }; enum OutputsIds { OUT_OUTPUT, NUM_OUTPUTS }; enum LightsIds { ATTACK_LIGHT, DECAY_LIGHT, SUSTAIN_LIGHT, RELEASE_LIGHT, LINEAR_LIGHT, NUM_LIGHTS }; const int modulationSteps = 100; int _modulationStep = 0; bool _linearMode = false; SchmittTrigger _gateTrigger; bogaudio::dsp::ADSR _envelope; ADSR() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { onReset(); onSampleRateChange(); } void onReset() override; void onSampleRateChange() override; void step() override; }; } // namespace bogaudio