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.

143 lines
5.2KB

  1. /******************************************************************************
  2. * Copyright 2017-2018 Valerio Orlandini / Sonus Dept. <sonusdept@gmail.com>
  3. *
  4. * This program is free software: you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License as published by
  6. * the Free Software Foundation, either version 3 of the License, or
  7. * (at your option) any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU General Public License
  15. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  16. *****************************************************************************/
  17. #include "sonusmodular.hpp"
  18. namespace rack_plugin_SonusModular {
  19. struct Multimulti : Module
  20. {
  21. enum ParamIds
  22. {
  23. NUM_PARAMS
  24. };
  25. enum InputIds
  26. {
  27. A1_INPUT,
  28. A2_INPUT,
  29. B1_INPUT,
  30. B2_INPUT,
  31. NUM_INPUTS
  32. };
  33. enum OutputIds
  34. {
  35. A1_OUTPUT,
  36. A2_OUTPUT,
  37. A3_OUTPUT,
  38. A4_OUTPUT,
  39. A5_OUTPUT,
  40. A6_OUTPUT,
  41. A7_OUTPUT,
  42. A8_OUTPUT,
  43. B1_OUTPUT,
  44. B2_OUTPUT,
  45. B3_OUTPUT,
  46. B4_OUTPUT,
  47. B5_OUTPUT,
  48. B6_OUTPUT,
  49. B7_OUTPUT,
  50. B8_OUTPUT,
  51. NUM_OUTPUTS
  52. };
  53. enum LightIds
  54. {
  55. NUM_LIGHTS
  56. };
  57. Multimulti() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {}
  58. void step() override;
  59. };
  60. void Multimulti::step()
  61. {
  62. float in1 = inputs[A1_INPUT].value + inputs[A2_INPUT].value;
  63. float in2 = inputs[B1_INPUT].value + inputs[B2_INPUT].value;
  64. outputs[A1_OUTPUT].value = in1;
  65. outputs[A2_OUTPUT].value = in1;
  66. outputs[A3_OUTPUT].value = in1;
  67. outputs[A4_OUTPUT].value = in1;
  68. outputs[A5_OUTPUT].value = in1;
  69. outputs[A6_OUTPUT].value = in1;
  70. outputs[A7_OUTPUT].value = in1;
  71. outputs[A8_OUTPUT].value = in1;
  72. outputs[B1_OUTPUT].value = in2;
  73. outputs[B2_OUTPUT].value = in2;
  74. outputs[B3_OUTPUT].value = in2;
  75. outputs[B4_OUTPUT].value = in2;
  76. outputs[B5_OUTPUT].value = in2;
  77. outputs[B6_OUTPUT].value = in2;
  78. outputs[B7_OUTPUT].value = in2;
  79. outputs[B8_OUTPUT].value = in2;
  80. }
  81. struct MultimultiWidget : ModuleWidget
  82. {
  83. MultimultiWidget(Multimulti *module);
  84. };
  85. MultimultiWidget::MultimultiWidget(Multimulti *module) : ModuleWidget(module)
  86. {
  87. box.size = Vec(15 * 8, 380);
  88. {
  89. SVGPanel *panel = new SVGPanel();
  90. panel->box.size = box.size;
  91. panel->setBackground(SVG::load(assetPlugin(plugin, "res/multimulti.svg")));
  92. addChild(panel);
  93. }
  94. addChild(Widget::create<SonusScrew>(Vec(0, 0)));
  95. addChild(Widget::create<SonusScrew>(Vec(box.size.x - 15, 0)));
  96. addChild(Widget::create<SonusScrew>(Vec(0, 365)));
  97. addChild(Widget::create<SonusScrew>(Vec(box.size.x - 15, 365)));
  98. addInput(Port::create<PJ301MPort>(Vec(18, 67), Port::INPUT, module, Multimulti::A1_INPUT));
  99. addInput(Port::create<PJ301MPort>(Vec(78, 67), Port::INPUT, module, Multimulti::A2_INPUT));
  100. addOutput(Port::create<PJ301MPort>(Vec(3, 125), Port::OUTPUT, module, Multimulti::A1_OUTPUT));
  101. addOutput(Port::create<PJ301MPort>(Vec(33, 125), Port::OUTPUT, module, Multimulti::A2_OUTPUT));
  102. addOutput(Port::create<PJ301MPort>(Vec(63, 125), Port::OUTPUT, module, Multimulti::A3_OUTPUT));
  103. addOutput(Port::create<PJ301MPort>(Vec(93, 125), Port::OUTPUT, module, Multimulti::A4_OUTPUT));
  104. addOutput(Port::create<PJ301MPort>(Vec(3, 155), Port::OUTPUT, module, Multimulti::A5_OUTPUT));
  105. addOutput(Port::create<PJ301MPort>(Vec(33, 155), Port::OUTPUT, module, Multimulti::A6_OUTPUT));
  106. addOutput(Port::create<PJ301MPort>(Vec(63, 155), Port::OUTPUT, module, Multimulti::A7_OUTPUT));
  107. addOutput(Port::create<PJ301MPort>(Vec(93, 155), Port::OUTPUT, module, Multimulti::A8_OUTPUT));
  108. addInput(Port::create<PJ301MPort>(Vec(18, 227), Port::INPUT, module, Multimulti::B1_INPUT));
  109. addInput(Port::create<PJ301MPort>(Vec(78, 227), Port::INPUT, module, Multimulti::B2_INPUT));
  110. addOutput(Port::create<PJ301MPort>(Vec(3, 285), Port::OUTPUT, module, Multimulti::B1_OUTPUT));
  111. addOutput(Port::create<PJ301MPort>(Vec(33, 285), Port::OUTPUT, module, Multimulti::B2_OUTPUT));
  112. addOutput(Port::create<PJ301MPort>(Vec(63, 285), Port::OUTPUT, module, Multimulti::B3_OUTPUT));
  113. addOutput(Port::create<PJ301MPort>(Vec(93, 285), Port::OUTPUT, module, Multimulti::B4_OUTPUT));
  114. addOutput(Port::create<PJ301MPort>(Vec(3, 315), Port::OUTPUT, module, Multimulti::B5_OUTPUT));
  115. addOutput(Port::create<PJ301MPort>(Vec(33, 315), Port::OUTPUT, module, Multimulti::B6_OUTPUT));
  116. addOutput(Port::create<PJ301MPort>(Vec(63, 315), Port::OUTPUT, module, Multimulti::B7_OUTPUT));
  117. addOutput(Port::create<PJ301MPort>(Vec(93, 315), Port::OUTPUT, module, Multimulti::B8_OUTPUT));
  118. }
  119. } // namespace rack_plugin_SonusModular
  120. using namespace rack_plugin_SonusModular;
  121. RACK_PLUGIN_MODEL_INIT(SonusModular, Multimulti) {
  122. Model *modelMultimulti = Model::create<Multimulti, MultimultiWidget>("Sonus Modular", "Multimulti", "Multimulti | 2x8 Multiples", MULTIPLE_TAG, UTILITY_TAG);
  123. return modelMultimulti;
  124. }