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.

109 lines
3.7KB

  1. #include "RJModules.hpp"
  2. #include <iostream>
  3. #include <cmath>
  4. namespace rack_plugin_RJModules {
  5. struct Splitters: Module {
  6. enum ParamIds {
  7. NUM_PARAMS
  8. };
  9. enum InputIds {
  10. CH1_INPUT,
  11. CH2_INPUT,
  12. CH3_INPUT,
  13. CH4_INPUT,
  14. CH5_INPUT,
  15. NUM_INPUTS
  16. };
  17. enum OutputIds {
  18. CH1_OUTPUT,
  19. CH2_OUTPUT,
  20. CH3_OUTPUT,
  21. CH4_OUTPUT,
  22. CH5_OUTPUT,
  23. CH6_OUTPUT,
  24. CH7_OUTPUT,
  25. CH8_OUTPUT,
  26. CH9_OUTPUT,
  27. CH10_OUTPUT,
  28. NUM_OUTPUTS
  29. };
  30. Splitters() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS) {}
  31. void step() override;
  32. };
  33. #define ROUND(f) ((float)((f > 0.0) ? floor(f + 0.5) : ceil(f - 0.5)))
  34. void Splitters::step() {
  35. outputs[CH1_OUTPUT].value = inputs[CH1_INPUT].value;
  36. outputs[CH2_OUTPUT].value = inputs[CH1_INPUT].value;
  37. outputs[CH3_OUTPUT].value = inputs[CH2_INPUT].value;
  38. outputs[CH4_OUTPUT].value = inputs[CH2_INPUT].value;
  39. outputs[CH5_OUTPUT].value = inputs[CH3_INPUT].value;
  40. outputs[CH6_OUTPUT].value = inputs[CH3_INPUT].value;
  41. outputs[CH7_OUTPUT].value = inputs[CH4_INPUT].value;
  42. outputs[CH8_OUTPUT].value = inputs[CH4_INPUT].value;
  43. outputs[CH9_OUTPUT].value = inputs[CH5_INPUT].value;
  44. outputs[CH10_OUTPUT].value = inputs[CH5_INPUT].value;
  45. }
  46. struct SplittersWidget: ModuleWidget {
  47. SplittersWidget(Splitters *module);
  48. };
  49. SplittersWidget::SplittersWidget(Splitters *module) : ModuleWidget(module) {
  50. box.size = Vec(15*10, 380);
  51. {
  52. SVGPanel *panel = new SVGPanel();
  53. panel->box.size = box.size;
  54. panel->setBackground(SVG::load(assetPlugin(plugin, "res/Splitters.svg")));
  55. addChild(panel);
  56. }
  57. addChild(Widget::create<ScrewSilver>(Vec(15, 0)));
  58. addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 0)));
  59. addChild(Widget::create<ScrewSilver>(Vec(15, 365)));
  60. addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 365)));
  61. addInput(Port::create<PJ301MPort>(Vec(24, 73), Port::INPUT, module, Splitters::CH1_INPUT));
  62. addInput(Port::create<PJ301MPort>(Vec(24, 123), Port::INPUT, module, Splitters::CH2_INPUT));
  63. addInput(Port::create<PJ301MPort>(Vec(24, 173), Port::INPUT, module, Splitters::CH3_INPUT));
  64. addInput(Port::create<PJ301MPort>(Vec(24, 223), Port::INPUT, module, Splitters::CH4_INPUT));
  65. addInput(Port::create<PJ301MPort>(Vec(24, 274), Port::INPUT, module, Splitters::CH5_INPUT));
  66. addOutput(Port::create<PJ301MPort>(Vec(65, 73), Port::OUTPUT, module, Splitters::CH1_OUTPUT));
  67. addOutput(Port::create<PJ301MPort>(Vec(105, 73), Port::OUTPUT, module, Splitters::CH2_OUTPUT));
  68. addOutput(Port::create<PJ301MPort>(Vec(65, 123), Port::OUTPUT, module, Splitters::CH3_OUTPUT));
  69. addOutput(Port::create<PJ301MPort>(Vec(105, 123), Port::OUTPUT, module, Splitters::CH4_OUTPUT));
  70. addOutput(Port::create<PJ301MPort>(Vec(65, 173), Port::OUTPUT, module, Splitters::CH5_OUTPUT));
  71. addOutput(Port::create<PJ301MPort>(Vec(105, 173), Port::OUTPUT, module, Splitters::CH6_OUTPUT));
  72. addOutput(Port::create<PJ301MPort>(Vec(65, 223), Port::OUTPUT, module, Splitters::CH7_OUTPUT));
  73. addOutput(Port::create<PJ301MPort>(Vec(105, 223), Port::OUTPUT, module, Splitters::CH8_OUTPUT));
  74. addOutput(Port::create<PJ301MPort>(Vec(65, 274), Port::OUTPUT, module, Splitters::CH9_OUTPUT));
  75. addOutput(Port::create<PJ301MPort>(Vec(105, 274), Port::OUTPUT, module, Splitters::CH10_OUTPUT));
  76. }
  77. } // namespace rack_plugin_RJModules
  78. using namespace rack_plugin_RJModules;
  79. RACK_PLUGIN_MODEL_INIT(RJModules, Splitters) {
  80. Model *modelSplitters = Model::create<Splitters, SplittersWidget>("RJModules", "Splitters", "[UTIL] Splitters", MULTIPLE_TAG);
  81. return modelSplitters;
  82. }