Stack.hpp (1702B)
1 #pragma once 2 3 #include "bogaudio.hpp" 4 #include "dsp/pitch.hpp" 5 6 using namespace bogaudio::dsp; 7 8 extern Model* modelStack; 9 10 namespace bogaudio { 11 12 struct Stack : BGModule { 13 enum ParamsIds { 14 SEMIS_PARAM, 15 OCTAVE_PARAM, 16 FINE_PARAM, 17 QUANTIZE_PARAM, 18 NUM_PARAMS 19 }; 20 21 enum InputsIds { 22 CV_INPUT, 23 IN_INPUT, 24 NUM_INPUTS 25 }; 26 27 enum OutputsIds { 28 THRU_OUTPUT, 29 OUT_OUTPUT, 30 NUM_OUTPUTS 31 }; 32 33 const float _minCVOut = semitoneToCV(24.0); // C1 34 const float _maxCVOut = semitoneToCV(120.0); // C9 35 36 float _semitones[maxChannels] {}; 37 float _lastSemitones[maxChannels]; 38 float _lastInCV[maxChannels]; 39 float _lastFine[maxChannels]; 40 float _outCV[maxChannels] {}; 41 42 Stack() { 43 config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS); 44 configParam(SEMIS_PARAM, 0.0f, 11.0f, 0.0f, "Semitones"); 45 paramQuantities[SEMIS_PARAM]->snapEnabled = true; 46 configParam(OCTAVE_PARAM, -3.0f, 3.0f, 0.0f, "Octaves"); 47 paramQuantities[OCTAVE_PARAM]->snapEnabled = true; 48 configParam(FINE_PARAM, -0.99f, 0.99f, 0.0f, "Fine tune", " cents", 0.0f, 100.0f); 49 configSwitch(QUANTIZE_PARAM, 0.0f, 1.0f, 1.0f, "Quantize", {"Disabled", "Enabled"}); 50 51 configInput(CV_INPUT, "Interval CV"); 52 configInput(IN_INPUT, "Pitch (1V/octave)"); 53 54 configOutput(THRU_OUTPUT, "Pitch through (1V/octave)"); 55 configOutput(OUT_OUTPUT, "Pitch transposed (1V/octave)"); 56 57 for (int i = 0; i < maxChannels; ++i) { 58 _lastSemitones[i] = -1000.0f; 59 _lastInCV[i] = -1000.0f; 60 _lastFine[i] = -1000.0f; 61 } 62 } 63 64 bool active() override; 65 int channels() override; 66 void modulateChannel(int c) override; 67 void processChannel(const ProcessArgs& args, int c) override; 68 void processBypass(const ProcessArgs& args) override; 69 }; 70 71 } // namespace bogaudio