You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

89 lines
2.1KB

  1. #include "Bidoo.hpp"
  2. #include "BidooComponents.hpp"
  3. #include "dsp/digital.hpp"
  4. #include "dsp/ringbuffer.hpp"
  5. #include "dep/filters/pitchshifter.h"
  6. #define BUFF_SIZE 128
  7. using namespace std;
  8. namespace rack_plugin_Bidoo {
  9. struct CURT : Module {
  10. enum ParamIds {
  11. PITCH_PARAM,
  12. NUM_PARAMS
  13. };
  14. enum InputIds {
  15. INPUT,
  16. PITCH_INPUT,
  17. NUM_INPUTS
  18. };
  19. enum OutputIds {
  20. OUTPUT,
  21. NUM_OUTPUTS
  22. };
  23. enum LightIds {
  24. NUM_LIGHTS
  25. };
  26. DoubleRingBuffer<float,BUFF_SIZE> in_Buffer;
  27. DoubleRingBuffer<float,BUFF_SIZE> out_Buffer;
  28. CURT() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {
  29. }
  30. ~CURT() {
  31. }
  32. void step() override;
  33. };
  34. void CURT::step() {
  35. in_Buffer.push(inputs[INPUT].value/10.0f);
  36. if (in_Buffer.full()) {
  37. //pShifter->process(clamp(params[PITCH_PARAM].value + inputs[PITCH_INPUT].value ,0.5f,2.0f), in_Buffer.startData(), out_Buffer.endData());
  38. out_Buffer.endIncr(BUFF_SIZE);
  39. in_Buffer.clear();
  40. }
  41. if (out_Buffer.size()>0) {
  42. outputs[OUTPUT].value = *out_Buffer.startData() * 5.0f;
  43. out_Buffer.startIncr(1);
  44. }
  45. }
  46. struct CURTWidget : ModuleWidget {
  47. CURTWidget(CURT *module) : ModuleWidget(module) {
  48. setPanel(SVG::load(assetPlugin(plugin, "res/CURT.svg")));
  49. addChild(Widget::create<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0)));
  50. addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0)));
  51. addChild(Widget::create<ScrewSilver>(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH)));
  52. addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH)));
  53. addParam(ParamWidget::create<BidooBlueKnob>(Vec(8, 100), module, CURT::PITCH_PARAM, 0.5f, 2.0f, 1.0f));
  54. addInput(Port::create<PJ301MPort>(Vec(10, 150.66f), Port::INPUT, module, CURT::PITCH_INPUT));
  55. addInput(Port::create<PJ301MPort>(Vec(10, 242.66f), Port::INPUT, module, CURT::INPUT));
  56. addOutput(Port::create<PJ301MPort>(Vec(10, 299), Port::OUTPUT, module, CURT::OUTPUT));
  57. }
  58. };
  59. } // namespace rack_plugin_Bidoo
  60. using namespace rack_plugin_Bidoo;
  61. RACK_PLUGIN_MODEL_INIT(Bidoo, CURT) {
  62. Model *modelCURT = Model::create<CURT, CURTWidget>("Bidoo", "cuRt", "cuRt .......", EFFECT_TAG);
  63. return modelCURT;
  64. }