BogaudioModules

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

LVCO.hpp (1723B)


      1 #pragma once
      2 
      3 #include "bogaudio.hpp"
      4 #include "vco_base.hpp"
      5 
      6 extern Model* modelLVCO;
      7 
      8 namespace bogaudio {
      9 
     10 struct LVCO : VCOBase {
     11 	enum ParamsIds {
     12 		FREQUENCY_PARAM,
     13 		SLOW_PARAM,
     14 		WAVE_PARAM,
     15 		FM_DEPTH_PARAM,
     16 		NUM_PARAMS
     17 	};
     18 
     19 	enum InputsIds {
     20 		PITCH_INPUT,
     21 		FM_INPUT,
     22 		SYNC_INPUT,
     23 		NUM_INPUTS
     24 	};
     25 
     26 	enum OutputsIds {
     27 		OUT_OUTPUT,
     28 		NUM_OUTPUTS
     29 	};
     30 
     31 	enum LightsIds {
     32 		SINE_LIGHT,
     33 		SAW_LIGHT,
     34 		PULSE_25_LIGHT,
     35 		TRIANGLE_LIGHT,
     36 		SQUARE_LIGHT,
     37 		PULSE_10_LIGHT,
     38 		NUM_LIGHTS
     39 	};
     40 
     41 	enum Wave {
     42 		UNINITIALIZED_WAVE,
     43 		SINE_WAVE,
     44 		TRIANGLE_WAVE,
     45 		SAW_WAVE,
     46 		SQUARE_WAVE,
     47 		PULSE_25_WAVE,
     48 		PULSE_10_WAVE
     49 	};
     50 
     51 	Wave _wave = UNINITIALIZED_WAVE;
     52 	bool _resetOnWaveChange = false;
     53 
     54 	LVCO()
     55 	: VCOBase(
     56 		FREQUENCY_PARAM,
     57 		-1,
     58 		PITCH_INPUT,
     59 		SYNC_INPUT,
     60 		FM_INPUT
     61 	)
     62 	{
     63 		config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS);
     64 		configParam<VCOFrequencyParamQuantity>(FREQUENCY_PARAM, -3.0f, 6.0f, 0.0f, "Frequency", " Hz");
     65 		configButton(SLOW_PARAM, "Slow mode");
     66 		configSwitch(WAVE_PARAM, 0.0f, 5.0f, 0.0f, "Waveform", {"Sine", "Triangle", "Saw", "Square", "25% Pulse", "10% Pulse"});
     67 		configParam(FM_DEPTH_PARAM, 0.0f, 1.0f, 0.0f, "FM depth", "%", 0.0f, 100.0f);
     68 
     69 		configInput(PITCH_INPUT, "Pitch (1V/octave)");
     70 		configInput(FM_INPUT, "Frequency modulation");
     71 		configInput(SYNC_INPUT, "Sync");
     72 
     73 		configOutput(OUT_OUTPUT, "Signal");
     74 	}
     75 
     76 	json_t* saveToJson(json_t* root) override;
     77 	void loadFromJson(json_t* root) override;
     78 	bool active() override;
     79 	void modulateAlways() override;
     80 	void modulate() override;
     81 	void modulateChannel(int c) override;
     82 	void processAlways(const ProcessArgs& args) override;
     83 	void processChannel(const ProcessArgs& args, int c) override;
     84 };
     85 
     86 } // namespace bogaudio