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.

92 lines
3.0KB

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