BogaudioModules

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

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