BogaudioModules

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

CVD.hpp (1337B)


      1 #pragma once
      2 
      3 #include "bogaudio.hpp"
      4 #include "dsp/signal.hpp"
      5 
      6 using namespace bogaudio::dsp;
      7 
      8 extern Model* modelCVD;
      9 
     10 namespace bogaudio {
     11 
     12 struct CVD : BGModule {
     13 	enum ParamsIds {
     14 		TIME_PARAM,
     15 		TIME_SCALE_PARAM,
     16 		MIX_PARAM,
     17 		NUM_PARAMS
     18 	};
     19 
     20 	enum InputsIds {
     21 		TIME_INPUT,
     22 		MIX_INPUT,
     23 		IN_INPUT,
     24 		NUM_INPUTS
     25 	};
     26 
     27 	enum OutputsIds {
     28 		OUT_OUTPUT,
     29 		NUM_OUTPUTS
     30 	};
     31 
     32 	struct Engine {
     33 		DelayLine delay;
     34 		CrossFader mix;
     35 
     36 		Engine() : delay(1000.0f, 10000.0f) {}
     37 
     38 		void sampleRateChange();
     39 	};
     40 	Engine* _engines[maxChannels] {};
     41 
     42 	CVD() {
     43 		config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS);
     44 		configParam(TIME_PARAM, 0.0f, 1.0f, 0.5f, "Time base", " s");
     45 		configParam(TIME_SCALE_PARAM, 0.0f, 2.0f, 1.0f, "Time scale", "", 10.0f, 0.1f);
     46 		paramQuantities[TIME_SCALE_PARAM]->snapEnabled = true;
     47 		configParam(MIX_PARAM, -1.0f, 1.0f, 0.0f, "Dry wet mix", "%", 0.0f, 100.0f);
     48 		configBypass(IN_INPUT, OUT_OUTPUT);
     49 
     50 		configInput(TIME_INPUT, "Time CV");
     51 		configInput(MIX_INPUT, "Dry/wet CV");
     52 		configInput(IN_INPUT, "Signal");
     53 
     54 		configOutput(OUT_OUTPUT, "Signal");
     55 	}
     56 
     57 	void sampleRateChange() override;
     58 	int channels() override;
     59 	void addChannel(int c) override;
     60 	void removeChannel(int c) override;
     61 	void modulateChannel(int c) override;
     62 	void processChannel(const ProcessArgs& args, int c) override;
     63 };
     64 
     65 } // namespace bogaudio