BogaudioModules

BogaudioModules for VCV Rack
Log | Files | Refs | README | LICENSE

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