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.

146 lines
5.9KB

  1. ///////////////////////////////////////////////////
  2. // dBiz revisited version of
  3. //
  4. // Pitch Shifter VCV Module
  5. //
  6. // Strum 2017
  7. //
  8. ///////////////////////////////////////////////////
  9. #include "dBiz.hpp"
  10. namespace rack_plugin_dBiz {
  11. /////added fine out /////////////////////////////////////////////////
  12. struct Transpose : Module {
  13. enum ParamIds {
  14. OCTAVE_SHIFT_1,
  15. OCTAVE_SHIFT_2,
  16. SEMITONE_SHIFT_1,
  17. SEMITONE_SHIFT_2,
  18. FINE_SHIFT_1,
  19. FINE_SHIFT_2,
  20. NUM_PARAMS
  21. };
  22. enum InputIds {
  23. OCTAVE_SHIFT_1_INPUT,
  24. OCTAVE_SHIFT_2_INPUT,
  25. SEMITONE_SHIFT_1_INPUT,
  26. SEMITONE_SHIFT_2_INPUT,
  27. OCTAVE_SHIFT_1_CVINPUT,
  28. OCTAVE_SHIFT_2_CVINPUT,
  29. SEMITONE_SHIFT_1_CVINPUT,
  30. SEMITONE_SHIFT_2_CVINPUT,
  31. FINE_SHIFT_1_INPUT,
  32. FINE_SHIFT_2_INPUT,
  33. FINE_SHIFT_1_CVINPUT,
  34. FINE_SHIFT_2_CVINPUT,
  35. NUM_INPUTS
  36. };
  37. enum OutputIds {
  38. OCTAVE_SHIFT_1_OUTPUT,
  39. OCTAVE_SHIFT_2_OUTPUT,
  40. SEMITONE_SHIFT_1_OUTPUT,
  41. SEMITONE_SHIFT_2_OUTPUT,
  42. FINE_SHIFT_1_OUTPUT,
  43. FINE_SHIFT_2_OUTPUT,
  44. NUM_OUTPUTS
  45. };
  46. Transpose() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS) {}
  47. float octave_1_out = 0.0;
  48. float octave_2_out = 0.0;
  49. float semitone_1_out = 0.0;
  50. float semitone_2_out = 0.0;
  51. float fine_1_out = 0.0;
  52. float fine_2_out = 0.0;
  53. void step() override;
  54. };
  55. /////////////////////////////////////////////////////
  56. void Transpose::step() {
  57. octave_1_out = inputs[OCTAVE_SHIFT_1_INPUT].value + round(params[OCTAVE_SHIFT_1].value) + round(inputs[OCTAVE_SHIFT_1_CVINPUT].value/2);
  58. octave_2_out = inputs[OCTAVE_SHIFT_2_INPUT].value + round(params[OCTAVE_SHIFT_2].value) + round(inputs[OCTAVE_SHIFT_1_CVINPUT].value/2);
  59. 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);
  60. 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);
  61. 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);
  62. 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);
  63. outputs[OCTAVE_SHIFT_1_OUTPUT].value = octave_1_out;
  64. outputs[OCTAVE_SHIFT_2_OUTPUT].value = octave_2_out;
  65. outputs[SEMITONE_SHIFT_1_OUTPUT].value = semitone_1_out;
  66. outputs[SEMITONE_SHIFT_2_OUTPUT].value = semitone_2_out;
  67. outputs[FINE_SHIFT_1_OUTPUT].value = fine_1_out;
  68. outputs[FINE_SHIFT_2_OUTPUT].value = fine_2_out;
  69. }
  70. //////////////////////////////////////////////////////////////////
  71. struct TransposeWidget : ModuleWidget
  72. {
  73. TransposeWidget(Transpose *module) : ModuleWidget(module)
  74. {
  75. box.size = Vec(15*4, 380);
  76. {
  77. SVGPanel *panel = new SVGPanel();
  78. panel->box.size = box.size;
  79. panel->setBackground(SVG::load(assetPlugin(plugin,"res/Transpose.svg")));
  80. addChild(panel);
  81. }
  82. //Screw
  83. addChild(Widget::create<ScrewSilver>(Vec(15, 0)));
  84. addChild(Widget::create<ScrewSilver>(Vec(15, 365)));
  85. //
  86. addParam(ParamWidget::create<FlatASnap>(Vec(4, 15), module, Transpose::OCTAVE_SHIFT_1, -4.5, 4.5, 0.0));
  87. addParam(ParamWidget::create<FlatASnap>(Vec(4, 75), module, Transpose::OCTAVE_SHIFT_2, -4.5, 4.5, 0.0));
  88. addParam(ParamWidget::create<FlatASnap>(Vec(4, 135), module, Transpose::SEMITONE_SHIFT_1, -6.5, 6.5, 0.0));
  89. addParam(ParamWidget::create<FlatASnap>(Vec(4, 195), module, Transpose::SEMITONE_SHIFT_2, -6.5, 6.5, 0.0));
  90. addParam(ParamWidget::create<FlatA>(Vec(4, 255), module, Transpose::FINE_SHIFT_1, -1, 1, 0.0));
  91. addParam(ParamWidget::create<FlatA>(Vec(4, 315), module, Transpose::FINE_SHIFT_2, -1, 1, 0.0));
  92. addInput(Port::create<PJ301MIPort>(Vec(3, 2+45), Port::INPUT, module, Transpose::OCTAVE_SHIFT_1_INPUT));
  93. addInput(Port::create<PJ301MIPort>(Vec(3, 2+105), Port::INPUT, module, Transpose::OCTAVE_SHIFT_2_INPUT));
  94. addInput(Port::create<PJ301MIPort>(Vec(3, 2+165), Port::INPUT, module, Transpose::SEMITONE_SHIFT_1_INPUT));
  95. addInput(Port::create<PJ301MIPort>(Vec(3, 2+225), Port::INPUT, module, Transpose::SEMITONE_SHIFT_2_INPUT));
  96. addInput(Port::create<PJ301MIPort>(Vec(3, 2+285), Port::INPUT, module, Transpose::FINE_SHIFT_1_INPUT));
  97. addInput(Port::create<PJ301MIPort>(Vec(3, 2+345), Port::INPUT, module, Transpose::FINE_SHIFT_2_INPUT));
  98. addInput(Port::create<PJ301MCPort>(Vec(33, 15), Port::INPUT, module, Transpose::OCTAVE_SHIFT_1_CVINPUT));
  99. addInput(Port::create<PJ301MCPort>(Vec(33, 75), Port::INPUT, module, Transpose::OCTAVE_SHIFT_2_CVINPUT));
  100. addInput(Port::create<PJ301MCPort>(Vec(33, 135), Port::INPUT, module, Transpose::SEMITONE_SHIFT_1_CVINPUT));
  101. addInput(Port::create<PJ301MCPort>(Vec(33, 195), Port::INPUT, module, Transpose::SEMITONE_SHIFT_2_CVINPUT));
  102. addInput(Port::create<PJ301MCPort>(Vec(33, 255), Port::INPUT, module, Transpose::FINE_SHIFT_1_CVINPUT));
  103. addInput(Port::create<PJ301MCPort>(Vec(33, 315), Port::INPUT, module, Transpose::FINE_SHIFT_2_CVINPUT));
  104. addOutput(Port::create<PJ301MOPort>(Vec(33, 2+45), Port::OUTPUT, module, Transpose::OCTAVE_SHIFT_1_OUTPUT));
  105. addOutput(Port::create<PJ301MOPort>(Vec(33, 2+105), Port::OUTPUT, module, Transpose::OCTAVE_SHIFT_2_OUTPUT));
  106. addOutput(Port::create<PJ301MOPort>(Vec(33, 2+165), Port::OUTPUT, module, Transpose::SEMITONE_SHIFT_1_OUTPUT));
  107. addOutput(Port::create<PJ301MOPort>(Vec(33, 2+225), Port::OUTPUT, module, Transpose::SEMITONE_SHIFT_2_OUTPUT));
  108. addOutput(Port::create<PJ301MOPort>(Vec(33, 2+285), Port::OUTPUT, module, Transpose::FINE_SHIFT_1_OUTPUT));
  109. addOutput(Port::create<PJ301MOPort>(Vec(33, 2+345), Port::OUTPUT, module, Transpose::FINE_SHIFT_2_OUTPUT));
  110. }
  111. };
  112. } // namespace rack_plugin_dBiz
  113. using namespace rack_plugin_dBiz;
  114. RACK_PLUGIN_MODEL_INIT(dBiz, Transpose) {
  115. Model *modelTranspose = Model::create<Transpose, TransposeWidget>("dBiz", "Transpose", "Transpose", QUANTIZER_TAG);
  116. return modelTranspose;
  117. }