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