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.

214 lines
13KB

  1. #include "Matrix88.hpp"
  2. void Matrix88::step() {
  3. for (int i = 0; i < 8; ++i) {
  4. _inputs[i] = inputs[IN1_INPUT + i].active ? inputs[IN1_INPUT + i].value : 5.0f;
  5. }
  6. for (int i = 0; i < 8; ++i) {
  7. if (outputs[OUT1_OUTPUT + i].active) {
  8. int paramOffset = MIX11_PARAM + i * 8;
  9. float out = 0.0f;
  10. for (int j = 0; j < 8; ++j) {
  11. out += _inputs[j] * params[paramOffset + j].value;
  12. }
  13. outputs[OUT1_OUTPUT + i].value = _saturators[i].next(params[LEVEL_PARAM].value * out);
  14. }
  15. }
  16. }
  17. struct Matrix88Widget : ModuleWidget {
  18. static constexpr int hp = 22;
  19. Matrix88Widget(Matrix88* module) : ModuleWidget(module) {
  20. box.size = Vec(RACK_GRID_WIDTH * hp, RACK_GRID_HEIGHT);
  21. {
  22. SVGPanel *panel = new SVGPanel();
  23. panel->box.size = box.size;
  24. panel->setBackground(SVG::load(assetPlugin(plugin, "res/Matrix88.svg")));
  25. addChild(panel);
  26. }
  27. addChild(Widget::create<ScrewSilver>(Vec(15, 0)));
  28. addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 0)));
  29. addChild(Widget::create<ScrewSilver>(Vec(15, 365)));
  30. addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 365)));
  31. // generated by svg_widgets.rb
  32. auto mix11ParamPosition = Vec(53.7, 32.2);
  33. auto mix21ParamPosition = Vec(53.7, 69.2);
  34. auto mix31ParamPosition = Vec(53.7, 106.2);
  35. auto mix41ParamPosition = Vec(53.7, 143.2);
  36. auto mix51ParamPosition = Vec(53.7, 180.2);
  37. auto mix61ParamPosition = Vec(53.7, 217.2);
  38. auto mix71ParamPosition = Vec(53.7, 254.2);
  39. auto mix81ParamPosition = Vec(53.7, 291.2);
  40. auto mix12ParamPosition = Vec(88.7, 32.2);
  41. auto mix22ParamPosition = Vec(88.7, 69.2);
  42. auto mix32ParamPosition = Vec(88.7, 106.2);
  43. auto mix42ParamPosition = Vec(88.7, 143.2);
  44. auto mix52ParamPosition = Vec(88.7, 180.2);
  45. auto mix62ParamPosition = Vec(88.7, 217.2);
  46. auto mix72ParamPosition = Vec(88.7, 254.2);
  47. auto mix82ParamPosition = Vec(88.7, 291.2);
  48. auto mix13ParamPosition = Vec(123.7, 32.2);
  49. auto mix23ParamPosition = Vec(123.7, 69.2);
  50. auto mix33ParamPosition = Vec(123.7, 106.2);
  51. auto mix43ParamPosition = Vec(123.7, 143.2);
  52. auto mix53ParamPosition = Vec(123.7, 180.2);
  53. auto mix63ParamPosition = Vec(123.7, 217.2);
  54. auto mix73ParamPosition = Vec(123.7, 254.2);
  55. auto mix83ParamPosition = Vec(123.7, 291.2);
  56. auto mix14ParamPosition = Vec(158.7, 32.2);
  57. auto mix24ParamPosition = Vec(158.7, 69.2);
  58. auto mix34ParamPosition = Vec(158.7, 106.2);
  59. auto mix44ParamPosition = Vec(158.7, 143.2);
  60. auto mix54ParamPosition = Vec(158.7, 180.2);
  61. auto mix64ParamPosition = Vec(158.7, 217.2);
  62. auto mix74ParamPosition = Vec(158.7, 254.2);
  63. auto mix84ParamPosition = Vec(158.7, 291.2);
  64. auto mix15ParamPosition = Vec(193.7, 32.2);
  65. auto mix25ParamPosition = Vec(193.7, 69.2);
  66. auto mix35ParamPosition = Vec(193.7, 106.2);
  67. auto mix45ParamPosition = Vec(193.7, 143.2);
  68. auto mix55ParamPosition = Vec(193.7, 180.2);
  69. auto mix65ParamPosition = Vec(193.7, 217.2);
  70. auto mix75ParamPosition = Vec(193.7, 254.2);
  71. auto mix85ParamPosition = Vec(193.7, 291.2);
  72. auto mix16ParamPosition = Vec(228.7, 32.2);
  73. auto mix26ParamPosition = Vec(228.7, 69.2);
  74. auto mix36ParamPosition = Vec(228.7, 106.2);
  75. auto mix46ParamPosition = Vec(228.7, 143.2);
  76. auto mix56ParamPosition = Vec(228.7, 180.2);
  77. auto mix66ParamPosition = Vec(228.7, 217.2);
  78. auto mix76ParamPosition = Vec(228.7, 254.2);
  79. auto mix86ParamPosition = Vec(228.7, 291.2);
  80. auto mix17ParamPosition = Vec(263.7, 32.2);
  81. auto mix27ParamPosition = Vec(263.7, 69.2);
  82. auto mix37ParamPosition = Vec(263.7, 106.2);
  83. auto mix47ParamPosition = Vec(263.7, 143.2);
  84. auto mix57ParamPosition = Vec(263.7, 180.2);
  85. auto mix67ParamPosition = Vec(263.7, 217.2);
  86. auto mix77ParamPosition = Vec(263.7, 254.2);
  87. auto mix87ParamPosition = Vec(263.7, 291.2);
  88. auto mix18ParamPosition = Vec(298.7, 32.2);
  89. auto mix28ParamPosition = Vec(298.7, 69.2);
  90. auto mix38ParamPosition = Vec(298.7, 106.2);
  91. auto mix48ParamPosition = Vec(298.7, 143.2);
  92. auto mix58ParamPosition = Vec(298.7, 180.2);
  93. auto mix68ParamPosition = Vec(298.7, 217.2);
  94. auto mix78ParamPosition = Vec(298.7, 254.2);
  95. auto mix88ParamPosition = Vec(298.7, 291.2);
  96. auto levelParamPosition = Vec(14.5, 339.5);
  97. auto in1InputPosition = Vec(10.5, 30.0);
  98. auto in2InputPosition = Vec(10.5, 67.0);
  99. auto in3InputPosition = Vec(10.5, 104.0);
  100. auto in4InputPosition = Vec(10.5, 141.0);
  101. auto in5InputPosition = Vec(10.5, 178.0);
  102. auto in6InputPosition = Vec(10.5, 215.0);
  103. auto in7InputPosition = Vec(10.5, 252.0);
  104. auto in8InputPosition = Vec(10.5, 289.0);
  105. auto out1OutputPosition = Vec(51.5, 328.0);
  106. auto out2OutputPosition = Vec(86.5, 328.0);
  107. auto out3OutputPosition = Vec(121.5, 328.0);
  108. auto out4OutputPosition = Vec(156.5, 328.0);
  109. auto out5OutputPosition = Vec(191.5, 328.0);
  110. auto out6OutputPosition = Vec(226.5, 328.0);
  111. auto out7OutputPosition = Vec(261.5, 328.0);
  112. auto out8OutputPosition = Vec(296.5, 328.0);
  113. // end generated by svg_widgets.rb
  114. addParam(ParamWidget::create<Knob19>(mix11ParamPosition, module, Matrix88::MIX11_PARAM, -1.0, 1.0, 0.0));
  115. addParam(ParamWidget::create<Knob19>(mix21ParamPosition, module, Matrix88::MIX21_PARAM, -1.0, 1.0, 0.0));
  116. addParam(ParamWidget::create<Knob19>(mix31ParamPosition, module, Matrix88::MIX31_PARAM, -1.0, 1.0, 0.0));
  117. addParam(ParamWidget::create<Knob19>(mix41ParamPosition, module, Matrix88::MIX41_PARAM, -1.0, 1.0, 0.0));
  118. addParam(ParamWidget::create<Knob19>(mix51ParamPosition, module, Matrix88::MIX51_PARAM, -1.0, 1.0, 0.0));
  119. addParam(ParamWidget::create<Knob19>(mix61ParamPosition, module, Matrix88::MIX61_PARAM, -1.0, 1.0, 0.0));
  120. addParam(ParamWidget::create<Knob19>(mix71ParamPosition, module, Matrix88::MIX71_PARAM, -1.0, 1.0, 0.0));
  121. addParam(ParamWidget::create<Knob19>(mix81ParamPosition, module, Matrix88::MIX81_PARAM, -1.0, 1.0, 0.0));
  122. addParam(ParamWidget::create<Knob19>(mix12ParamPosition, module, Matrix88::MIX12_PARAM, -1.0, 1.0, 0.0));
  123. addParam(ParamWidget::create<Knob19>(mix22ParamPosition, module, Matrix88::MIX22_PARAM, -1.0, 1.0, 0.0));
  124. addParam(ParamWidget::create<Knob19>(mix32ParamPosition, module, Matrix88::MIX32_PARAM, -1.0, 1.0, 0.0));
  125. addParam(ParamWidget::create<Knob19>(mix42ParamPosition, module, Matrix88::MIX42_PARAM, -1.0, 1.0, 0.0));
  126. addParam(ParamWidget::create<Knob19>(mix52ParamPosition, module, Matrix88::MIX52_PARAM, -1.0, 1.0, 0.0));
  127. addParam(ParamWidget::create<Knob19>(mix62ParamPosition, module, Matrix88::MIX62_PARAM, -1.0, 1.0, 0.0));
  128. addParam(ParamWidget::create<Knob19>(mix72ParamPosition, module, Matrix88::MIX72_PARAM, -1.0, 1.0, 0.0));
  129. addParam(ParamWidget::create<Knob19>(mix82ParamPosition, module, Matrix88::MIX82_PARAM, -1.0, 1.0, 0.0));
  130. addParam(ParamWidget::create<Knob19>(mix13ParamPosition, module, Matrix88::MIX13_PARAM, -1.0, 1.0, 0.0));
  131. addParam(ParamWidget::create<Knob19>(mix23ParamPosition, module, Matrix88::MIX23_PARAM, -1.0, 1.0, 0.0));
  132. addParam(ParamWidget::create<Knob19>(mix33ParamPosition, module, Matrix88::MIX33_PARAM, -1.0, 1.0, 0.0));
  133. addParam(ParamWidget::create<Knob19>(mix43ParamPosition, module, Matrix88::MIX43_PARAM, -1.0, 1.0, 0.0));
  134. addParam(ParamWidget::create<Knob19>(mix53ParamPosition, module, Matrix88::MIX53_PARAM, -1.0, 1.0, 0.0));
  135. addParam(ParamWidget::create<Knob19>(mix63ParamPosition, module, Matrix88::MIX63_PARAM, -1.0, 1.0, 0.0));
  136. addParam(ParamWidget::create<Knob19>(mix73ParamPosition, module, Matrix88::MIX73_PARAM, -1.0, 1.0, 0.0));
  137. addParam(ParamWidget::create<Knob19>(mix83ParamPosition, module, Matrix88::MIX83_PARAM, -1.0, 1.0, 0.0));
  138. addParam(ParamWidget::create<Knob19>(mix14ParamPosition, module, Matrix88::MIX14_PARAM, -1.0, 1.0, 0.0));
  139. addParam(ParamWidget::create<Knob19>(mix24ParamPosition, module, Matrix88::MIX24_PARAM, -1.0, 1.0, 0.0));
  140. addParam(ParamWidget::create<Knob19>(mix34ParamPosition, module, Matrix88::MIX34_PARAM, -1.0, 1.0, 0.0));
  141. addParam(ParamWidget::create<Knob19>(mix44ParamPosition, module, Matrix88::MIX44_PARAM, -1.0, 1.0, 0.0));
  142. addParam(ParamWidget::create<Knob19>(mix54ParamPosition, module, Matrix88::MIX54_PARAM, -1.0, 1.0, 0.0));
  143. addParam(ParamWidget::create<Knob19>(mix64ParamPosition, module, Matrix88::MIX64_PARAM, -1.0, 1.0, 0.0));
  144. addParam(ParamWidget::create<Knob19>(mix74ParamPosition, module, Matrix88::MIX74_PARAM, -1.0, 1.0, 0.0));
  145. addParam(ParamWidget::create<Knob19>(mix84ParamPosition, module, Matrix88::MIX84_PARAM, -1.0, 1.0, 0.0));
  146. addParam(ParamWidget::create<Knob19>(mix15ParamPosition, module, Matrix88::MIX15_PARAM, -1.0, 1.0, 0.0));
  147. addParam(ParamWidget::create<Knob19>(mix25ParamPosition, module, Matrix88::MIX25_PARAM, -1.0, 1.0, 0.0));
  148. addParam(ParamWidget::create<Knob19>(mix35ParamPosition, module, Matrix88::MIX35_PARAM, -1.0, 1.0, 0.0));
  149. addParam(ParamWidget::create<Knob19>(mix45ParamPosition, module, Matrix88::MIX45_PARAM, -1.0, 1.0, 0.0));
  150. addParam(ParamWidget::create<Knob19>(mix55ParamPosition, module, Matrix88::MIX55_PARAM, -1.0, 1.0, 0.0));
  151. addParam(ParamWidget::create<Knob19>(mix65ParamPosition, module, Matrix88::MIX65_PARAM, -1.0, 1.0, 0.0));
  152. addParam(ParamWidget::create<Knob19>(mix75ParamPosition, module, Matrix88::MIX75_PARAM, -1.0, 1.0, 0.0));
  153. addParam(ParamWidget::create<Knob19>(mix85ParamPosition, module, Matrix88::MIX85_PARAM, -1.0, 1.0, 0.0));
  154. addParam(ParamWidget::create<Knob19>(mix16ParamPosition, module, Matrix88::MIX16_PARAM, -1.0, 1.0, 0.0));
  155. addParam(ParamWidget::create<Knob19>(mix26ParamPosition, module, Matrix88::MIX26_PARAM, -1.0, 1.0, 0.0));
  156. addParam(ParamWidget::create<Knob19>(mix36ParamPosition, module, Matrix88::MIX36_PARAM, -1.0, 1.0, 0.0));
  157. addParam(ParamWidget::create<Knob19>(mix46ParamPosition, module, Matrix88::MIX46_PARAM, -1.0, 1.0, 0.0));
  158. addParam(ParamWidget::create<Knob19>(mix56ParamPosition, module, Matrix88::MIX56_PARAM, -1.0, 1.0, 0.0));
  159. addParam(ParamWidget::create<Knob19>(mix66ParamPosition, module, Matrix88::MIX66_PARAM, -1.0, 1.0, 0.0));
  160. addParam(ParamWidget::create<Knob19>(mix76ParamPosition, module, Matrix88::MIX76_PARAM, -1.0, 1.0, 0.0));
  161. addParam(ParamWidget::create<Knob19>(mix86ParamPosition, module, Matrix88::MIX86_PARAM, -1.0, 1.0, 0.0));
  162. addParam(ParamWidget::create<Knob19>(mix17ParamPosition, module, Matrix88::MIX17_PARAM, -1.0, 1.0, 0.0));
  163. addParam(ParamWidget::create<Knob19>(mix27ParamPosition, module, Matrix88::MIX27_PARAM, -1.0, 1.0, 0.0));
  164. addParam(ParamWidget::create<Knob19>(mix37ParamPosition, module, Matrix88::MIX37_PARAM, -1.0, 1.0, 0.0));
  165. addParam(ParamWidget::create<Knob19>(mix47ParamPosition, module, Matrix88::MIX47_PARAM, -1.0, 1.0, 0.0));
  166. addParam(ParamWidget::create<Knob19>(mix57ParamPosition, module, Matrix88::MIX57_PARAM, -1.0, 1.0, 0.0));
  167. addParam(ParamWidget::create<Knob19>(mix67ParamPosition, module, Matrix88::MIX67_PARAM, -1.0, 1.0, 0.0));
  168. addParam(ParamWidget::create<Knob19>(mix77ParamPosition, module, Matrix88::MIX77_PARAM, -1.0, 1.0, 0.0));
  169. addParam(ParamWidget::create<Knob19>(mix87ParamPosition, module, Matrix88::MIX87_PARAM, -1.0, 1.0, 0.0));
  170. addParam(ParamWidget::create<Knob19>(mix18ParamPosition, module, Matrix88::MIX18_PARAM, -1.0, 1.0, 0.0));
  171. addParam(ParamWidget::create<Knob19>(mix28ParamPosition, module, Matrix88::MIX28_PARAM, -1.0, 1.0, 0.0));
  172. addParam(ParamWidget::create<Knob19>(mix38ParamPosition, module, Matrix88::MIX38_PARAM, -1.0, 1.0, 0.0));
  173. addParam(ParamWidget::create<Knob19>(mix48ParamPosition, module, Matrix88::MIX48_PARAM, -1.0, 1.0, 0.0));
  174. addParam(ParamWidget::create<Knob19>(mix58ParamPosition, module, Matrix88::MIX58_PARAM, -1.0, 1.0, 0.0));
  175. addParam(ParamWidget::create<Knob19>(mix68ParamPosition, module, Matrix88::MIX68_PARAM, -1.0, 1.0, 0.0));
  176. addParam(ParamWidget::create<Knob19>(mix78ParamPosition, module, Matrix88::MIX78_PARAM, -1.0, 1.0, 0.0));
  177. addParam(ParamWidget::create<Knob19>(mix88ParamPosition, module, Matrix88::MIX88_PARAM, -1.0, 1.0, 0.0));
  178. addParam(ParamWidget::create<Knob16>(levelParamPosition, module, Matrix88::LEVEL_PARAM, 0.0, 1.0, 1.0));
  179. addInput(Port::create<Port24>(in1InputPosition, Port::INPUT, module, Matrix88::IN1_INPUT));
  180. addInput(Port::create<Port24>(in2InputPosition, Port::INPUT, module, Matrix88::IN2_INPUT));
  181. addInput(Port::create<Port24>(in3InputPosition, Port::INPUT, module, Matrix88::IN3_INPUT));
  182. addInput(Port::create<Port24>(in4InputPosition, Port::INPUT, module, Matrix88::IN4_INPUT));
  183. addInput(Port::create<Port24>(in5InputPosition, Port::INPUT, module, Matrix88::IN5_INPUT));
  184. addInput(Port::create<Port24>(in6InputPosition, Port::INPUT, module, Matrix88::IN6_INPUT));
  185. addInput(Port::create<Port24>(in7InputPosition, Port::INPUT, module, Matrix88::IN7_INPUT));
  186. addInput(Port::create<Port24>(in8InputPosition, Port::INPUT, module, Matrix88::IN8_INPUT));
  187. addOutput(Port::create<Port24>(out1OutputPosition, Port::OUTPUT, module, Matrix88::OUT1_OUTPUT));
  188. addOutput(Port::create<Port24>(out2OutputPosition, Port::OUTPUT, module, Matrix88::OUT2_OUTPUT));
  189. addOutput(Port::create<Port24>(out3OutputPosition, Port::OUTPUT, module, Matrix88::OUT3_OUTPUT));
  190. addOutput(Port::create<Port24>(out4OutputPosition, Port::OUTPUT, module, Matrix88::OUT4_OUTPUT));
  191. addOutput(Port::create<Port24>(out5OutputPosition, Port::OUTPUT, module, Matrix88::OUT5_OUTPUT));
  192. addOutput(Port::create<Port24>(out6OutputPosition, Port::OUTPUT, module, Matrix88::OUT6_OUTPUT));
  193. addOutput(Port::create<Port24>(out7OutputPosition, Port::OUTPUT, module, Matrix88::OUT7_OUTPUT));
  194. addOutput(Port::create<Port24>(out8OutputPosition, Port::OUTPUT, module, Matrix88::OUT8_OUTPUT));
  195. }
  196. };
  197. RACK_PLUGIN_MODEL_INIT(Bogaudio, Matrix88) {
  198. Model* modelMatrix88 = createModel<Matrix88, Matrix88Widget>("Bogaudio-Matrix88", "Matrix88", "signal routing matrix", MIXER_TAG);
  199. return modelMatrix88;
  200. }