/////////////////////////////////////////////////// // dBiz revisited version of // // Pitch Shifter VCV Module // // Strum 2017 // /////////////////////////////////////////////////// #include "dBiz.hpp" namespace rack_plugin_dBiz { /////added fine out ///////////////////////////////////////////////// struct Transpose : Module { enum ParamIds { OCTAVE_SHIFT_1, OCTAVE_SHIFT_2, SEMITONE_SHIFT_1, SEMITONE_SHIFT_2, FINE_SHIFT_1, FINE_SHIFT_2, NUM_PARAMS }; enum InputIds { OCTAVE_SHIFT_1_INPUT, OCTAVE_SHIFT_2_INPUT, SEMITONE_SHIFT_1_INPUT, SEMITONE_SHIFT_2_INPUT, OCTAVE_SHIFT_1_CVINPUT, OCTAVE_SHIFT_2_CVINPUT, SEMITONE_SHIFT_1_CVINPUT, SEMITONE_SHIFT_2_CVINPUT, FINE_SHIFT_1_INPUT, FINE_SHIFT_2_INPUT, FINE_SHIFT_1_CVINPUT, FINE_SHIFT_2_CVINPUT, NUM_INPUTS }; enum OutputIds { OCTAVE_SHIFT_1_OUTPUT, OCTAVE_SHIFT_2_OUTPUT, SEMITONE_SHIFT_1_OUTPUT, SEMITONE_SHIFT_2_OUTPUT, FINE_SHIFT_1_OUTPUT, FINE_SHIFT_2_OUTPUT, NUM_OUTPUTS }; Transpose() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS) {} float octave_1_out = 0.0; float octave_2_out = 0.0; float semitone_1_out = 0.0; float semitone_2_out = 0.0; float fine_1_out = 0.0; float fine_2_out = 0.0; void step() override; }; ///////////////////////////////////////////////////// void Transpose::step() { octave_1_out = inputs[OCTAVE_SHIFT_1_INPUT].value + round(params[OCTAVE_SHIFT_1].value) + round(inputs[OCTAVE_SHIFT_1_CVINPUT].value/2); octave_2_out = inputs[OCTAVE_SHIFT_2_INPUT].value + round(params[OCTAVE_SHIFT_2].value) + round(inputs[OCTAVE_SHIFT_1_CVINPUT].value/2); semitone_1_out = inputs[SEMITONE_SHIFT_1_INPUT].value + round(params[SEMITONE_SHIFT_1].value)*(1.0/12.0) + round(inputs[SEMITONE_SHIFT_1_CVINPUT].value/2)*(1.0/12.0); semitone_2_out = inputs[SEMITONE_SHIFT_2_INPUT].value + round(params[SEMITONE_SHIFT_2].value)*(1.0/12.0) + round(inputs[SEMITONE_SHIFT_2_CVINPUT].value/2)*(1.0/12.0); fine_1_out = inputs[FINE_SHIFT_1_INPUT].value + (params[FINE_SHIFT_1].value)*(1.0/12.0) + (inputs[FINE_SHIFT_1_CVINPUT].value/2)*(1.0/2.0); fine_2_out = inputs[FINE_SHIFT_2_INPUT].value + (params[FINE_SHIFT_2].value)*(1.0/12.0) + (inputs[FINE_SHIFT_2_CVINPUT].value/2)*(1.0/2.0); outputs[OCTAVE_SHIFT_1_OUTPUT].value = octave_1_out; outputs[OCTAVE_SHIFT_2_OUTPUT].value = octave_2_out; outputs[SEMITONE_SHIFT_1_OUTPUT].value = semitone_1_out; outputs[SEMITONE_SHIFT_2_OUTPUT].value = semitone_2_out; outputs[FINE_SHIFT_1_OUTPUT].value = fine_1_out; outputs[FINE_SHIFT_2_OUTPUT].value = fine_2_out; } ////////////////////////////////////////////////////////////////// struct TransposeWidget : ModuleWidget { TransposeWidget(Transpose *module) : ModuleWidget(module) { box.size = Vec(15*4, 380); { SVGPanel *panel = new SVGPanel(); panel->box.size = box.size; panel->setBackground(SVG::load(assetPlugin(plugin,"res/Transpose.svg"))); addChild(panel); } //Screw addChild(Widget::create(Vec(15, 0))); addChild(Widget::create(Vec(15, 365))); // addParam(ParamWidget::create(Vec(4, 15), module, Transpose::OCTAVE_SHIFT_1, -4.5, 4.5, 0.0)); addParam(ParamWidget::create(Vec(4, 75), module, Transpose::OCTAVE_SHIFT_2, -4.5, 4.5, 0.0)); addParam(ParamWidget::create(Vec(4, 135), module, Transpose::SEMITONE_SHIFT_1, -6.5, 6.5, 0.0)); addParam(ParamWidget::create(Vec(4, 195), module, Transpose::SEMITONE_SHIFT_2, -6.5, 6.5, 0.0)); addParam(ParamWidget::create(Vec(4, 255), module, Transpose::FINE_SHIFT_1, -1, 1, 0.0)); addParam(ParamWidget::create(Vec(4, 315), module, Transpose::FINE_SHIFT_2, -1, 1, 0.0)); addInput(Port::create(Vec(3, 2+45), Port::INPUT, module, Transpose::OCTAVE_SHIFT_1_INPUT)); addInput(Port::create(Vec(3, 2+105), Port::INPUT, module, Transpose::OCTAVE_SHIFT_2_INPUT)); addInput(Port::create(Vec(3, 2+165), Port::INPUT, module, Transpose::SEMITONE_SHIFT_1_INPUT)); addInput(Port::create(Vec(3, 2+225), Port::INPUT, module, Transpose::SEMITONE_SHIFT_2_INPUT)); addInput(Port::create(Vec(3, 2+285), Port::INPUT, module, Transpose::FINE_SHIFT_1_INPUT)); addInput(Port::create(Vec(3, 2+345), Port::INPUT, module, Transpose::FINE_SHIFT_2_INPUT)); addInput(Port::create(Vec(33, 15), Port::INPUT, module, Transpose::OCTAVE_SHIFT_1_CVINPUT)); addInput(Port::create(Vec(33, 75), Port::INPUT, module, Transpose::OCTAVE_SHIFT_2_CVINPUT)); addInput(Port::create(Vec(33, 135), Port::INPUT, module, Transpose::SEMITONE_SHIFT_1_CVINPUT)); addInput(Port::create(Vec(33, 195), Port::INPUT, module, Transpose::SEMITONE_SHIFT_2_CVINPUT)); addInput(Port::create(Vec(33, 255), Port::INPUT, module, Transpose::FINE_SHIFT_1_CVINPUT)); addInput(Port::create(Vec(33, 315), Port::INPUT, module, Transpose::FINE_SHIFT_2_CVINPUT)); addOutput(Port::create(Vec(33, 2+45), Port::OUTPUT, module, Transpose::OCTAVE_SHIFT_1_OUTPUT)); addOutput(Port::create(Vec(33, 2+105), Port::OUTPUT, module, Transpose::OCTAVE_SHIFT_2_OUTPUT)); addOutput(Port::create(Vec(33, 2+165), Port::OUTPUT, module, Transpose::SEMITONE_SHIFT_1_OUTPUT)); addOutput(Port::create(Vec(33, 2+225), Port::OUTPUT, module, Transpose::SEMITONE_SHIFT_2_OUTPUT)); addOutput(Port::create(Vec(33, 2+285), Port::OUTPUT, module, Transpose::FINE_SHIFT_1_OUTPUT)); addOutput(Port::create(Vec(33, 2+345), Port::OUTPUT, module, Transpose::FINE_SHIFT_2_OUTPUT)); } }; } // namespace rack_plugin_dBiz using namespace rack_plugin_dBiz; RACK_PLUGIN_MODEL_INIT(dBiz, Transpose) { Model *modelTranspose = Model::create("dBiz", "Transpose", "Transpose", QUANTIZER_TAG); return modelTranspose; }