#include "Bidoo.hpp" #include "BidooComponents.hpp" #include "dsp/digital.hpp" #include "dsp/ringbuffer.hpp" #include "dep/filters/pitchshifter.h" #include "dsp/fir.hpp" #define BUFF_SIZE 256 #define OVERLAP 4 using namespace std; namespace rack_plugin_Bidoo { struct CURT : Module { enum ParamIds { PITCH_PARAM, MODE_PARAM, NUM_PARAMS }; enum InputIds { INPUT, PITCH_INPUT, NUM_INPUTS }; enum OutputIds { OUTPUT, NUM_OUTPUTS }; enum LightIds { NUM_LIGHTS }; DoubleRingBuffer in_Buffer; DoubleRingBuffer out_Buffer; float bins[OVERLAP][BUFF_SIZE]; int index=-1; int readSteps=0; int writeSteps=0; SchmittTrigger modeTrigger; bool mode=0; CURT() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { for(int i=0; i=(BUFF_SIZE/OVERLAP)) { index=(index+1)%OVERLAP; for(int i=0; i=((float)BUFF_SIZE*params[PITCH_PARAM].value/(float)OVERLAP))) { if ((index%2==0) || (mode)) { for(int i=0; i(Vec(RACK_GRID_WIDTH, 0))); addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); addParam(ParamWidget::create(Vec(8, 100), module, CURT::PITCH_PARAM, 0.2f, 2.0f, 1.0f)); addInput(Port::create(Vec(10, 150.0f), Port::INPUT, module, CURT::PITCH_INPUT)); addParam(ParamWidget::create(Vec(8, 190.0f), module, CURT::MODE_PARAM, 0.0f, 1.0f, 0.0f)); addInput(Port::create(Vec(10, 242.66f), Port::INPUT, module, CURT::INPUT)); addOutput(Port::create(Vec(10, 299), Port::OUTPUT, module, CURT::OUTPUT)); } }; } // namespace rack_plugin_Bidoo using namespace rack_plugin_Bidoo; RACK_PLUGIN_MODEL_INIT(Bidoo, CURT) { Model *modelCURT = Model::create("Bidoo", "cuRt", "cuRt .......", EFFECT_TAG); return modelCURT; }