#include "Matrix88.hpp" void Matrix88::step() { for (int i = 0; i < 8; ++i) { _inputs[i] = inputs[IN1_INPUT + i].active ? inputs[IN1_INPUT + i].value : 5.0f; } for (int i = 0; i < 8; ++i) { if (outputs[OUT1_OUTPUT + i].active) { int paramOffset = MIX11_PARAM + i * 8; float out = 0.0f; for (int j = 0; j < 8; ++j) { out += _inputs[j] * params[paramOffset + j].value; } outputs[OUT1_OUTPUT + i].value = _saturators[i].next(params[LEVEL_PARAM].value * out); } } } struct Matrix88Widget : ModuleWidget { static constexpr int hp = 22; Matrix88Widget(Matrix88* module) : ModuleWidget(module) { box.size = Vec(RACK_GRID_WIDTH * hp, RACK_GRID_HEIGHT); { SVGPanel *panel = new SVGPanel(); panel->box.size = box.size; panel->setBackground(SVG::load(assetPlugin(plugin, "res/Matrix88.svg"))); addChild(panel); } addChild(Widget::create(Vec(15, 0))); addChild(Widget::create(Vec(box.size.x - 30, 0))); addChild(Widget::create(Vec(15, 365))); addChild(Widget::create(Vec(box.size.x - 30, 365))); // generated by svg_widgets.rb auto mix11ParamPosition = Vec(53.7, 32.2); auto mix21ParamPosition = Vec(53.7, 69.2); auto mix31ParamPosition = Vec(53.7, 106.2); auto mix41ParamPosition = Vec(53.7, 143.2); auto mix51ParamPosition = Vec(53.7, 180.2); auto mix61ParamPosition = Vec(53.7, 217.2); auto mix71ParamPosition = Vec(53.7, 254.2); auto mix81ParamPosition = Vec(53.7, 291.2); auto mix12ParamPosition = Vec(88.7, 32.2); auto mix22ParamPosition = Vec(88.7, 69.2); auto mix32ParamPosition = Vec(88.7, 106.2); auto mix42ParamPosition = Vec(88.7, 143.2); auto mix52ParamPosition = Vec(88.7, 180.2); auto mix62ParamPosition = Vec(88.7, 217.2); auto mix72ParamPosition = Vec(88.7, 254.2); auto mix82ParamPosition = Vec(88.7, 291.2); auto mix13ParamPosition = Vec(123.7, 32.2); auto mix23ParamPosition = Vec(123.7, 69.2); auto mix33ParamPosition = Vec(123.7, 106.2); auto mix43ParamPosition = Vec(123.7, 143.2); auto mix53ParamPosition = Vec(123.7, 180.2); auto mix63ParamPosition = Vec(123.7, 217.2); auto mix73ParamPosition = Vec(123.7, 254.2); auto mix83ParamPosition = Vec(123.7, 291.2); auto mix14ParamPosition = Vec(158.7, 32.2); auto mix24ParamPosition = Vec(158.7, 69.2); auto mix34ParamPosition = Vec(158.7, 106.2); auto mix44ParamPosition = Vec(158.7, 143.2); auto mix54ParamPosition = Vec(158.7, 180.2); auto mix64ParamPosition = Vec(158.7, 217.2); auto mix74ParamPosition = Vec(158.7, 254.2); auto mix84ParamPosition = Vec(158.7, 291.2); auto mix15ParamPosition = Vec(193.7, 32.2); auto mix25ParamPosition = Vec(193.7, 69.2); auto mix35ParamPosition = Vec(193.7, 106.2); auto mix45ParamPosition = Vec(193.7, 143.2); auto mix55ParamPosition = Vec(193.7, 180.2); auto mix65ParamPosition = Vec(193.7, 217.2); auto mix75ParamPosition = Vec(193.7, 254.2); auto mix85ParamPosition = Vec(193.7, 291.2); auto mix16ParamPosition = Vec(228.7, 32.2); auto mix26ParamPosition = Vec(228.7, 69.2); auto mix36ParamPosition = Vec(228.7, 106.2); auto mix46ParamPosition = Vec(228.7, 143.2); auto mix56ParamPosition = Vec(228.7, 180.2); auto mix66ParamPosition = Vec(228.7, 217.2); auto mix76ParamPosition = Vec(228.7, 254.2); auto mix86ParamPosition = Vec(228.7, 291.2); auto mix17ParamPosition = Vec(263.7, 32.2); auto mix27ParamPosition = Vec(263.7, 69.2); auto mix37ParamPosition = Vec(263.7, 106.2); auto mix47ParamPosition = Vec(263.7, 143.2); auto mix57ParamPosition = Vec(263.7, 180.2); auto mix67ParamPosition = Vec(263.7, 217.2); auto mix77ParamPosition = Vec(263.7, 254.2); auto mix87ParamPosition = Vec(263.7, 291.2); auto mix18ParamPosition = Vec(298.7, 32.2); auto mix28ParamPosition = Vec(298.7, 69.2); auto mix38ParamPosition = Vec(298.7, 106.2); auto mix48ParamPosition = Vec(298.7, 143.2); auto mix58ParamPosition = Vec(298.7, 180.2); auto mix68ParamPosition = Vec(298.7, 217.2); auto mix78ParamPosition = Vec(298.7, 254.2); auto mix88ParamPosition = Vec(298.7, 291.2); auto levelParamPosition = Vec(14.5, 339.5); auto in1InputPosition = Vec(10.5, 30.0); auto in2InputPosition = Vec(10.5, 67.0); auto in3InputPosition = Vec(10.5, 104.0); auto in4InputPosition = Vec(10.5, 141.0); auto in5InputPosition = Vec(10.5, 178.0); auto in6InputPosition = Vec(10.5, 215.0); auto in7InputPosition = Vec(10.5, 252.0); auto in8InputPosition = Vec(10.5, 289.0); auto out1OutputPosition = Vec(51.5, 328.0); auto out2OutputPosition = Vec(86.5, 328.0); auto out3OutputPosition = Vec(121.5, 328.0); auto out4OutputPosition = Vec(156.5, 328.0); auto out5OutputPosition = Vec(191.5, 328.0); auto out6OutputPosition = Vec(226.5, 328.0); auto out7OutputPosition = Vec(261.5, 328.0); auto out8OutputPosition = Vec(296.5, 328.0); // end generated by svg_widgets.rb addParam(ParamWidget::create(mix11ParamPosition, module, Matrix88::MIX11_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix21ParamPosition, module, Matrix88::MIX21_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix31ParamPosition, module, Matrix88::MIX31_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix41ParamPosition, module, Matrix88::MIX41_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix51ParamPosition, module, Matrix88::MIX51_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix61ParamPosition, module, Matrix88::MIX61_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix71ParamPosition, module, Matrix88::MIX71_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix81ParamPosition, module, Matrix88::MIX81_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix12ParamPosition, module, Matrix88::MIX12_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix22ParamPosition, module, Matrix88::MIX22_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix32ParamPosition, module, Matrix88::MIX32_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix42ParamPosition, module, Matrix88::MIX42_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix52ParamPosition, module, Matrix88::MIX52_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix62ParamPosition, module, Matrix88::MIX62_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix72ParamPosition, module, Matrix88::MIX72_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix82ParamPosition, module, Matrix88::MIX82_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix13ParamPosition, module, Matrix88::MIX13_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix23ParamPosition, module, Matrix88::MIX23_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix33ParamPosition, module, Matrix88::MIX33_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix43ParamPosition, module, Matrix88::MIX43_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix53ParamPosition, module, Matrix88::MIX53_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix63ParamPosition, module, Matrix88::MIX63_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix73ParamPosition, module, Matrix88::MIX73_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix83ParamPosition, module, Matrix88::MIX83_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix14ParamPosition, module, Matrix88::MIX14_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix24ParamPosition, module, Matrix88::MIX24_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix34ParamPosition, module, Matrix88::MIX34_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix44ParamPosition, module, Matrix88::MIX44_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix54ParamPosition, module, Matrix88::MIX54_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix64ParamPosition, module, Matrix88::MIX64_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix74ParamPosition, module, Matrix88::MIX74_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix84ParamPosition, module, Matrix88::MIX84_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix15ParamPosition, module, Matrix88::MIX15_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix25ParamPosition, module, Matrix88::MIX25_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix35ParamPosition, module, Matrix88::MIX35_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix45ParamPosition, module, Matrix88::MIX45_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix55ParamPosition, module, Matrix88::MIX55_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix65ParamPosition, module, Matrix88::MIX65_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix75ParamPosition, module, Matrix88::MIX75_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix85ParamPosition, module, Matrix88::MIX85_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix16ParamPosition, module, Matrix88::MIX16_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix26ParamPosition, module, Matrix88::MIX26_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix36ParamPosition, module, Matrix88::MIX36_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix46ParamPosition, module, Matrix88::MIX46_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix56ParamPosition, module, Matrix88::MIX56_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix66ParamPosition, module, Matrix88::MIX66_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix76ParamPosition, module, Matrix88::MIX76_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix86ParamPosition, module, Matrix88::MIX86_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix17ParamPosition, module, Matrix88::MIX17_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix27ParamPosition, module, Matrix88::MIX27_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix37ParamPosition, module, Matrix88::MIX37_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix47ParamPosition, module, Matrix88::MIX47_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix57ParamPosition, module, Matrix88::MIX57_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix67ParamPosition, module, Matrix88::MIX67_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix77ParamPosition, module, Matrix88::MIX77_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix87ParamPosition, module, Matrix88::MIX87_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix18ParamPosition, module, Matrix88::MIX18_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix28ParamPosition, module, Matrix88::MIX28_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix38ParamPosition, module, Matrix88::MIX38_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix48ParamPosition, module, Matrix88::MIX48_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix58ParamPosition, module, Matrix88::MIX58_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix68ParamPosition, module, Matrix88::MIX68_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix78ParamPosition, module, Matrix88::MIX78_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(mix88ParamPosition, module, Matrix88::MIX88_PARAM, -1.0, 1.0, 0.0)); addParam(ParamWidget::create(levelParamPosition, module, Matrix88::LEVEL_PARAM, 0.0, 1.0, 1.0)); addInput(Port::create(in1InputPosition, Port::INPUT, module, Matrix88::IN1_INPUT)); addInput(Port::create(in2InputPosition, Port::INPUT, module, Matrix88::IN2_INPUT)); addInput(Port::create(in3InputPosition, Port::INPUT, module, Matrix88::IN3_INPUT)); addInput(Port::create(in4InputPosition, Port::INPUT, module, Matrix88::IN4_INPUT)); addInput(Port::create(in5InputPosition, Port::INPUT, module, Matrix88::IN5_INPUT)); addInput(Port::create(in6InputPosition, Port::INPUT, module, Matrix88::IN6_INPUT)); addInput(Port::create(in7InputPosition, Port::INPUT, module, Matrix88::IN7_INPUT)); addInput(Port::create(in8InputPosition, Port::INPUT, module, Matrix88::IN8_INPUT)); addOutput(Port::create(out1OutputPosition, Port::OUTPUT, module, Matrix88::OUT1_OUTPUT)); addOutput(Port::create(out2OutputPosition, Port::OUTPUT, module, Matrix88::OUT2_OUTPUT)); addOutput(Port::create(out3OutputPosition, Port::OUTPUT, module, Matrix88::OUT3_OUTPUT)); addOutput(Port::create(out4OutputPosition, Port::OUTPUT, module, Matrix88::OUT4_OUTPUT)); addOutput(Port::create(out5OutputPosition, Port::OUTPUT, module, Matrix88::OUT5_OUTPUT)); addOutput(Port::create(out6OutputPosition, Port::OUTPUT, module, Matrix88::OUT6_OUTPUT)); addOutput(Port::create(out7OutputPosition, Port::OUTPUT, module, Matrix88::OUT7_OUTPUT)); addOutput(Port::create(out8OutputPosition, Port::OUTPUT, module, Matrix88::OUT8_OUTPUT)); } }; RACK_PLUGIN_MODEL_INIT(Bogaudio, Matrix88) { Model* modelMatrix88 = createModel("Bogaudio-Matrix88", "Matrix88", "signal routing matrix", MIXER_TAG); return modelMatrix88; }