commit 4b9451425a4c1dcd2a96505a0160f24e36192d65
parent 0eda17e62583f3ace648afffbee290eee287e17f
Author: Matt Demanett <matt@demanett.net>
Date: Thu, 5 Jul 2018 22:22:32 -0400
MATRIX88: 8x8 signal router / mod matrix.
Diffstat:
9 files changed, 782 insertions(+), 0 deletions(-)
diff --git a/res-src/Matrix88-src.svg b/res-src/Matrix88-src.svg
@@ -0,0 +1,427 @@
+<svg
+ version="1.1"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ width="330"
+ height="380"
+ viewBox="0 0 330 380"
+>
+ <style>
+ text {
+ fill: #333;
+ font-family: 'Roboto', sans-serif;
+ font-weight: bold;
+ }
+ text.title {
+ font-family: 'Comfortaa', sans-serif;
+ font-weight: normal;
+ }
+ text.brand {
+ font-family: 'Audiowide', sans-serif;
+ font-weight: bold;
+ }
+ </style>
+
+ <defs>
+ <symbol id="knob19" viewBox="0 0 20px 20px">
+ <g transform="translate(10 10)">
+ <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f" />
+ <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f" />
+ <circle cx="0" cy="0" r="9.3" stroke-width="1" stroke="#00f" fill="none" />
+ </g>
+ </symbol>
+
+ <symbol id="knob-small" viewBox="0 0 45px 45px">
+ <g transform="translate(22.5 22.5)">
+ <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f" />
+ <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f" />
+ <circle cx="0" cy="0" r="7.5" stroke-width="1" stroke="#00f" fill="none" />
+ </g>
+ </symbol>
+
+ <symbol id="knobguide-centertick19" viewBox="0 0 40px 40px">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" stroke="#333" transform="rotate(-90) translate(11.5 0)" />
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 1 13.5 0" stroke="#333" stroke-width="0.5" stroke-linecap="round" fill="none" transform="rotate(20)" />
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 1 13.5 0" stroke="#333" stroke-width="0.5" stroke-linecap="round" fill="none" transform="rotate(43)" />
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke="#333" stroke-width="0.5" stroke-linecap="round" fill="none" transform="rotate(-20)" />
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke="#333" stroke-width="0.5" stroke-linecap="round" fill="none" transform="rotate(-43)" />
+ </g>
+ </symbol>
+
+ <symbol id="knobguide-maxtick" viewBox="0 0 40px 40px">
+ <g transform="translate(20 20)">
+ <g transform="rotate(60) translate(10 0)">
+ <polyline points="0,0 4,0" stroke-width="1" stroke="#333" />
+ </g>
+ <path d="M 0 -12.5 A 12.5 12.5 0 0 1 12.5 0" stroke="#333" stroke-width="0.5" stroke-linecap="round" fill="none" transform="rotate(0)" />
+ <path d="M 0 -12.5 A 12.5 12.5 0 0 1 12.5 0" stroke="#333" stroke-width="0.5" stroke-linecap="round" fill="none" transform="rotate(43)" />
+ <path d="M 0 -12.5 A 12.5 12.5 0 0 0 -12.5 0" stroke="#333" stroke-width="0.5" stroke-linecap="round" fill="none" transform="rotate(0)" />
+ <path d="M 0 -12.5 A 12.5 12.5 0 0 0 -12.5 0" stroke="#333" stroke-width="0.5" stroke-linecap="round" fill="none" transform="rotate(-43)" />
+ </g>
+ </symbol>
+
+ <!-- <symbol id="switch" viewBox="0 0 14px 24px">
+ <rect width="14px" height="24px" stroke-width="1" stroke="#000" fill="#ddd" />
+ <rect width="14px" height="12px" stroke-width="0" fill="#000" />
+ </symbol> -->
+
+ <symbol id="input" viewBox="0 0 24px 24px">
+ <g transform="translate(12 12)">
+ <circle cx="0" cy="0" r="5" stroke-width="1" stroke="#0f0" fill="#0f0" />
+ <circle cx="0" cy="0" r="10.5" stroke-width="3" stroke="#0f0" fill="none" />
+ <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f" />
+ <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f" />
+ </g>
+ </symbol>
+
+ <symbol id="output" viewBox="0 0 24px 24px">
+ <g transform="translate(12 12)">
+ <circle cx="0" cy="0" r="5" stroke-width="1" stroke="#f00" fill="#f00" />
+ <circle cx="0" cy="0" r="10.5" stroke-width="3" stroke="#f00" fill="none" />
+ <polyline points="-3,0 3,0" stroke-width="1" stroke="#00f" />
+ <polyline points="0,-3 0,3" stroke-width="1" stroke="#00f" />
+ </g>
+ </symbol>
+ </defs>
+
+ <rect width="100%" height="100%" fill="#ddd" />
+ <polyline points="1,1 329,1 329,379 1,379 1,1" stroke="#e4e4e4" stroke-width="0.5" fill="none" />
+ <polyline points="0.5,0.5 329.5,0.5 329.5,379.5 0.5,379.5 0.5,0.5" stroke="#ebebeb" stroke-width="0.8" fill="none" />
+ <polyline points="0,0 330,0 330,380 0,380 0,0" stroke="#f2f2f2" stroke-width="1" fill="none" />
+
+ <!-- <rect width="110" height="20" fill="#0f0" transform="translate(0 0)" /> -->
+ <!-- <rect width="110" height="20" fill="#0f0" transform="translate(220 0)" /> -->
+ <!-- <polyline points="0,0 0,380" stroke="#0f0" stroke-width="1" fill="none" transform="translate(10 0)" /> -->
+
+ <text class="title" x="110.5" y="19" font-size="12pt" letter-spacing="4px">MATRIX88</text>
+ <g transform="translate(125 374)">
+ <text class="brand" font-size="8pt" letter-spacing="2px">BOGAUDIO</text>
+ <rect width="3.0" height="3" fill="#ddd" transform="translate(24 -5)" />
+ </g>
+
+ <g transform="translate(5.5 25)">
+ <rect width="34" height="293" rx="5" fill="#fafafa" transform="translate(0 0)" />
+ <use id="IN1_INPUT" xlink:href="#input" transform="translate(5 5)" />
+ <use id="IN2_INPUT" xlink:href="#input" transform="translate(5 42)" />
+ <use id="IN3_INPUT" xlink:href="#input" transform="translate(5 79)" />
+ <use id="IN4_INPUT" xlink:href="#input" transform="translate(5 116)" />
+ <use id="IN5_INPUT" xlink:href="#input" transform="translate(5 153)" />
+ <use id="IN6_INPUT" xlink:href="#input" transform="translate(5 190)" />
+ <use id="IN7_INPUT" xlink:href="#input" transform="translate(5 227)" />
+ <use id="IN8_INPUT" xlink:href="#input" transform="translate(5 264)" />
+ </g>
+
+ <g transform="translate(46.5 323)">
+ <rect width="278.5" height="34" rx="5" fill="#bbb" transform="translate(0 0)" />
+ <use id="OUT1_OUTPUT" xlink:href="#output" transform="translate(5 5)" />
+ <use id="OUT2_OUTPUT" xlink:href="#output" transform="translate(40 5)" />
+ <use id="OUT3_OUTPUT" xlink:href="#output" transform="translate(75 5)" />
+ <use id="OUT4_OUTPUT" xlink:href="#output" transform="translate(110 5)" />
+ <use id="OUT5_OUTPUT" xlink:href="#output" transform="translate(145 5)" />
+ <use id="OUT6_OUTPUT" xlink:href="#output" transform="translate(180 5)" />
+ <use id="OUT7_OUTPUT" xlink:href="#output" transform="translate(215 5)" />
+ <use id="OUT8_OUTPUT" xlink:href="#output" transform="translate(250 5)" />
+ </g>
+
+ <g transform="translate(50 24)">
+ <use id="MIX11_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(50 61)">
+ <use id="MIX21_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(50 98)">
+ <use id="MIX31_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(50 135)">
+ <use id="MIX41_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(50 172)">
+ <use id="MIX51_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(50 209)">
+ <use id="MIX61_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(50 246)">
+ <use id="MIX71_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(50 283)">
+ <use id="MIX81_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+
+ <g transform="translate(85 24)">
+ <use id="MIX12_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(85 61)">
+ <use id="MIX22_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(85 98)">
+ <use id="MIX32_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(85 135)">
+ <use id="MIX42_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(85 172)">
+ <use id="MIX52_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(85 209)">
+ <use id="MIX62_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(85 246)">
+ <use id="MIX72_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(85 283)">
+ <use id="MIX82_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+
+ <g transform="translate(120 24)">
+ <use id="MIX13_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(120 61)">
+ <use id="MIX23_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(120 98)">
+ <use id="MIX33_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(120 135)">
+ <use id="MIX43_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(120 172)">
+ <use id="MIX53_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(120 209)">
+ <use id="MIX63_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(120 246)">
+ <use id="MIX73_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(120 283)">
+ <use id="MIX83_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+
+ <g transform="translate(155 24)">
+ <use id="MIX14_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(155 61)">
+ <use id="MIX24_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(155 98)">
+ <use id="MIX34_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(155 135)">
+ <use id="MIX44_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(155 172)">
+ <use id="MIX54_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(155 209)">
+ <use id="MIX64_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(155 246)">
+ <use id="MIX74_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(155 283)">
+ <use id="MIX84_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+
+ <g transform="translate(190 24)">
+ <use id="MIX15_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(190 61)">
+ <use id="MIX25_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(190 98)">
+ <use id="MIX35_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(190 135)">
+ <use id="MIX45_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(190 172)">
+ <use id="MIX55_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(190 209)">
+ <use id="MIX65_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(190 246)">
+ <use id="MIX75_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(190 283)">
+ <use id="MIX85_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+
+ <g transform="translate(225 24)">
+ <use id="MIX16_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(225 61)">
+ <use id="MIX26_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(225 98)">
+ <use id="MIX36_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(225 135)">
+ <use id="MIX46_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(225 172)">
+ <use id="MIX56_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(225 209)">
+ <use id="MIX66_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(225 246)">
+ <use id="MIX76_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(225 283)">
+ <use id="MIX86_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+
+ <g transform="translate(260 24)">
+ <use id="MIX17_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(260 61)">
+ <use id="MIX27_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(260 98)">
+ <use id="MIX37_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(260 135)">
+ <use id="MIX47_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(260 172)">
+ <use id="MIX57_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(260 209)">
+ <use id="MIX67_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(260 246)">
+ <use id="MIX77_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(260 283)">
+ <use id="MIX87_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+
+ <g transform="translate(295 24)">
+ <use id="MIX18_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(295 61)">
+ <use id="MIX28_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(295 98)">
+ <use id="MIX38_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(295 135)">
+ <use id="MIX48_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(295 172)">
+ <use id="MIX58_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(295 209)">
+ <use id="MIX68_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(295 246)">
+ <use id="MIX78_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+ <g transform="translate(295 283)">
+ <use id="MIX88_PARAM" xlink:href="#knob19" transform="translate(3.5 8)" />
+ <use xlink:href="#knobguide-centertick19" transform="translate(-6.5 -2)" />
+ </g>
+
+ <!-- <g transform="translate(15 331)">
+ <text font-size="5pt" letter-spacing="2px" transform="translate(-2 -1)">SUM</text>
+ <use id="MODE_PARAM" xlink:href="#switch" transform="translate(0 2)" />
+ <text font-size="5pt" letter-spacing="2px" transform="translate(-1 34)">AVG</text>
+ </g> -->
+
+ <g transform="translate(0 330)">
+ <text font-size="6pt" letter-spacing="2px" transform="translate(7 0)">LEVEL</text>
+ <use id="LEVEL_PARAM" xlink:href="#knob-small" transform="translate(0 -5)" />
+ <use xlink:href="#knobguide-maxtick" transform="translate(2.5 -2.5)" />
+ </g>
+
+ <!-- <polyline points="0,0 0,380" stroke="#0f0" stroke-width="1" fill="none" transform="translate(22.5 0)" /> -->
+
+ <!-- <polyline points="0,0 0,380" stroke="#0f0" stroke-width="1" fill="none" transform="translate(63.5 0)" /> -->
+ <!-- <polyline points="0,0 0,380" stroke="#0f0" stroke-width="1" fill="none" transform="translate(98.5 0)" /> -->
+ <!-- <polyline points="0,0 0,380" stroke="#0f0" stroke-width="1" fill="none" transform="translate(133.5 0)" /> -->
+ <!-- <polyline points="0,0 0,380" stroke="#0f0" stroke-width="1" fill="none" transform="translate(168.5 0)" /> -->
+ <!-- <polyline points="0,0 0,380" stroke="#0f0" stroke-width="1" fill="none" transform="translate(203.5 0)" /> -->
+ <!-- <polyline points="0,0 0,380" stroke="#0f0" stroke-width="1" fill="none" transform="translate(238.5 0)" /> -->
+ <!-- <polyline points="0,0 0,380" stroke="#0f0" stroke-width="1" fill="none" transform="translate(273.5 0)" /> -->
+ <!-- <polyline points="0,0 0,380" stroke="#0f0" stroke-width="1" fill="none" transform="translate(308.5 0)" /> -->
+
+ <!-- <polyline points="0,0 330,0" stroke="#0f0" stroke-width="1" fill="none" transform="translate(0 42)" /> -->
+ <!-- <polyline points="0,0 330,0" stroke="#0f0" stroke-width="1" fill="none" transform="translate(0 79)" /> -->
+ <!-- <polyline points="0,0 330,0" stroke="#0f0" stroke-width="1" fill="none" transform="translate(0 116)" /> -->
+ <!-- <polyline points="0,0 330,0" stroke="#0f0" stroke-width="1" fill="none" transform="translate(0 153)" /> -->
+ <!-- <polyline points="0,0 330,0" stroke="#0f0" stroke-width="1" fill="none" transform="translate(0 190)" /> -->
+ <!-- <polyline points="0,0 330,0" stroke="#0f0" stroke-width="1" fill="none" transform="translate(0 227)" /> -->
+ <!-- <polyline points="0,0 330,0" stroke="#0f0" stroke-width="1" fill="none" transform="translate(0 264)" /> -->
+ <!-- <polyline points="0,0 330,0" stroke="#0f0" stroke-width="1" fill="none" transform="translate(0 301)" /> -->
+
+ <!-- <polyline points="0,0 330,0" stroke="#0f0" stroke-width="1" fill="none" transform="translate(0 340)" /> -->
+
+ <!-- <rect width="330" height="11" fill="#0f0" transform="translate(0 274)" /> -->
+ <!-- <rect width="8" height="380" fill="#0f0" transform="translate(77 0)" /> -->
+</svg>
diff --git a/res-src/knob_19px-src.svg b/res-src/knob_19px-src.svg
@@ -0,0 +1,15 @@
+<svg
+ version="1.1"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ width="19"
+ height="19"
+ viewBox="0 0 19 19"
+>
+ <g transform="translate(9.5 9.5)">
+ <circle cx="0" cy="0" r="9.3" fill="#333" />
+ <circle cx="0" cy="0" r="7.3" fill="#eee" />
+ </g>
+ <circle cx="9.5" cy="1.6" r="1.3" fill="#fff" />
+ <circle cx="9.5" cy="1.9" r="1.3" fill="#fff" />
+</svg>
diff --git a/res/Matrix88.svg b/res/Matrix88.svg
Binary files differ.
diff --git a/res/knob_19px.svg b/res/knob_19px.svg
Binary files differ.
diff --git a/src/Matrix88.cpp b/src/Matrix88.cpp
@@ -0,0 +1,210 @@
+
+#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<ScrewSilver>(Vec(15, 0)));
+ addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 0)));
+ addChild(Widget::create<ScrewSilver>(Vec(15, 365)));
+ addChild(Widget::create<ScrewSilver>(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<Knob19>(mix11ParamPosition, module, Matrix88::MIX11_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix21ParamPosition, module, Matrix88::MIX21_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix31ParamPosition, module, Matrix88::MIX31_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix41ParamPosition, module, Matrix88::MIX41_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix51ParamPosition, module, Matrix88::MIX51_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix61ParamPosition, module, Matrix88::MIX61_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix71ParamPosition, module, Matrix88::MIX71_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix81ParamPosition, module, Matrix88::MIX81_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix12ParamPosition, module, Matrix88::MIX12_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix22ParamPosition, module, Matrix88::MIX22_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix32ParamPosition, module, Matrix88::MIX32_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix42ParamPosition, module, Matrix88::MIX42_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix52ParamPosition, module, Matrix88::MIX52_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix62ParamPosition, module, Matrix88::MIX62_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix72ParamPosition, module, Matrix88::MIX72_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix82ParamPosition, module, Matrix88::MIX82_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix13ParamPosition, module, Matrix88::MIX13_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix23ParamPosition, module, Matrix88::MIX23_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix33ParamPosition, module, Matrix88::MIX33_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix43ParamPosition, module, Matrix88::MIX43_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix53ParamPosition, module, Matrix88::MIX53_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix63ParamPosition, module, Matrix88::MIX63_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix73ParamPosition, module, Matrix88::MIX73_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix83ParamPosition, module, Matrix88::MIX83_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix14ParamPosition, module, Matrix88::MIX14_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix24ParamPosition, module, Matrix88::MIX24_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix34ParamPosition, module, Matrix88::MIX34_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix44ParamPosition, module, Matrix88::MIX44_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix54ParamPosition, module, Matrix88::MIX54_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix64ParamPosition, module, Matrix88::MIX64_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix74ParamPosition, module, Matrix88::MIX74_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix84ParamPosition, module, Matrix88::MIX84_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix15ParamPosition, module, Matrix88::MIX15_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix25ParamPosition, module, Matrix88::MIX25_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix35ParamPosition, module, Matrix88::MIX35_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix45ParamPosition, module, Matrix88::MIX45_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix55ParamPosition, module, Matrix88::MIX55_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix65ParamPosition, module, Matrix88::MIX65_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix75ParamPosition, module, Matrix88::MIX75_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix85ParamPosition, module, Matrix88::MIX85_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix16ParamPosition, module, Matrix88::MIX16_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix26ParamPosition, module, Matrix88::MIX26_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix36ParamPosition, module, Matrix88::MIX36_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix46ParamPosition, module, Matrix88::MIX46_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix56ParamPosition, module, Matrix88::MIX56_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix66ParamPosition, module, Matrix88::MIX66_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix76ParamPosition, module, Matrix88::MIX76_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix86ParamPosition, module, Matrix88::MIX86_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix17ParamPosition, module, Matrix88::MIX17_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix27ParamPosition, module, Matrix88::MIX27_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix37ParamPosition, module, Matrix88::MIX37_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix47ParamPosition, module, Matrix88::MIX47_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix57ParamPosition, module, Matrix88::MIX57_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix67ParamPosition, module, Matrix88::MIX67_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix77ParamPosition, module, Matrix88::MIX77_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix87ParamPosition, module, Matrix88::MIX87_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix18ParamPosition, module, Matrix88::MIX18_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix28ParamPosition, module, Matrix88::MIX28_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix38ParamPosition, module, Matrix88::MIX38_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix48ParamPosition, module, Matrix88::MIX48_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix58ParamPosition, module, Matrix88::MIX58_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix68ParamPosition, module, Matrix88::MIX68_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix78ParamPosition, module, Matrix88::MIX78_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob19>(mix88ParamPosition, module, Matrix88::MIX88_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob16>(levelParamPosition, module, Matrix88::LEVEL_PARAM, 0.0, 1.0, 1.0));
+
+ addInput(Port::create<Port24>(in1InputPosition, Port::INPUT, module, Matrix88::IN1_INPUT));
+ addInput(Port::create<Port24>(in2InputPosition, Port::INPUT, module, Matrix88::IN2_INPUT));
+ addInput(Port::create<Port24>(in3InputPosition, Port::INPUT, module, Matrix88::IN3_INPUT));
+ addInput(Port::create<Port24>(in4InputPosition, Port::INPUT, module, Matrix88::IN4_INPUT));
+ addInput(Port::create<Port24>(in5InputPosition, Port::INPUT, module, Matrix88::IN5_INPUT));
+ addInput(Port::create<Port24>(in6InputPosition, Port::INPUT, module, Matrix88::IN6_INPUT));
+ addInput(Port::create<Port24>(in7InputPosition, Port::INPUT, module, Matrix88::IN7_INPUT));
+ addInput(Port::create<Port24>(in8InputPosition, Port::INPUT, module, Matrix88::IN8_INPUT));
+
+ addOutput(Port::create<Port24>(out1OutputPosition, Port::OUTPUT, module, Matrix88::OUT1_OUTPUT));
+ addOutput(Port::create<Port24>(out2OutputPosition, Port::OUTPUT, module, Matrix88::OUT2_OUTPUT));
+ addOutput(Port::create<Port24>(out3OutputPosition, Port::OUTPUT, module, Matrix88::OUT3_OUTPUT));
+ addOutput(Port::create<Port24>(out4OutputPosition, Port::OUTPUT, module, Matrix88::OUT4_OUTPUT));
+ addOutput(Port::create<Port24>(out5OutputPosition, Port::OUTPUT, module, Matrix88::OUT5_OUTPUT));
+ addOutput(Port::create<Port24>(out6OutputPosition, Port::OUTPUT, module, Matrix88::OUT6_OUTPUT));
+ addOutput(Port::create<Port24>(out7OutputPosition, Port::OUTPUT, module, Matrix88::OUT7_OUTPUT));
+ addOutput(Port::create<Port24>(out8OutputPosition, Port::OUTPUT, module, Matrix88::OUT8_OUTPUT));
+ }
+};
+
+Model* modelMatrix88 = createModel<Matrix88, Matrix88Widget>("Bogaudio-Matrix88", "Matrix88", "signal routing matrix", MIXER_TAG);
diff --git a/src/Matrix88.hpp b/src/Matrix88.hpp
@@ -0,0 +1,119 @@
+#pragma once
+
+#include "bogaudio.hpp"
+#include "dsp/signal.hpp"
+
+using namespace bogaudio::dsp;
+
+extern Model* modelMatrix88;
+
+namespace bogaudio {
+
+struct Matrix88 : Module {
+ enum ParamsIds {
+ MIX11_PARAM,
+ MIX21_PARAM,
+ MIX31_PARAM,
+ MIX41_PARAM,
+ MIX51_PARAM,
+ MIX61_PARAM,
+ MIX71_PARAM,
+ MIX81_PARAM,
+ MIX12_PARAM,
+ MIX22_PARAM,
+ MIX32_PARAM,
+ MIX42_PARAM,
+ MIX52_PARAM,
+ MIX62_PARAM,
+ MIX72_PARAM,
+ MIX82_PARAM,
+ MIX13_PARAM,
+ MIX23_PARAM,
+ MIX33_PARAM,
+ MIX43_PARAM,
+ MIX53_PARAM,
+ MIX63_PARAM,
+ MIX73_PARAM,
+ MIX83_PARAM,
+ MIX14_PARAM,
+ MIX24_PARAM,
+ MIX34_PARAM,
+ MIX44_PARAM,
+ MIX54_PARAM,
+ MIX64_PARAM,
+ MIX74_PARAM,
+ MIX84_PARAM,
+ MIX15_PARAM,
+ MIX25_PARAM,
+ MIX35_PARAM,
+ MIX45_PARAM,
+ MIX55_PARAM,
+ MIX65_PARAM,
+ MIX75_PARAM,
+ MIX85_PARAM,
+ MIX16_PARAM,
+ MIX26_PARAM,
+ MIX36_PARAM,
+ MIX46_PARAM,
+ MIX56_PARAM,
+ MIX66_PARAM,
+ MIX76_PARAM,
+ MIX86_PARAM,
+ MIX17_PARAM,
+ MIX27_PARAM,
+ MIX37_PARAM,
+ MIX47_PARAM,
+ MIX57_PARAM,
+ MIX67_PARAM,
+ MIX77_PARAM,
+ MIX87_PARAM,
+ MIX18_PARAM,
+ MIX28_PARAM,
+ MIX38_PARAM,
+ MIX48_PARAM,
+ MIX58_PARAM,
+ MIX68_PARAM,
+ MIX78_PARAM,
+ MIX88_PARAM,
+ LEVEL_PARAM,
+ NUM_PARAMS
+ };
+
+ enum InputsIds {
+ IN1_INPUT,
+ IN2_INPUT,
+ IN3_INPUT,
+ IN4_INPUT,
+ IN5_INPUT,
+ IN6_INPUT,
+ IN7_INPUT,
+ IN8_INPUT,
+ NUM_INPUTS
+ };
+
+ enum OutputsIds {
+ OUT1_OUTPUT,
+ OUT2_OUTPUT,
+ OUT3_OUTPUT,
+ OUT4_OUTPUT,
+ OUT5_OUTPUT,
+ OUT6_OUTPUT,
+ OUT7_OUTPUT,
+ OUT8_OUTPUT,
+ NUM_OUTPUTS
+ };
+
+ enum LightsIds {
+ NUM_LIGHTS
+ };
+
+ float _inputs[8] {};
+ Saturator _saturators[8];
+
+ Matrix88() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {
+ }
+
+ void step() override;
+};
+
+} // namespace bogaudio
diff --git a/src/bogaudio.cpp b/src/bogaudio.cpp
@@ -17,6 +17,7 @@
#include "LFO.hpp"
#include "Lag.hpp"
#include "Manual.hpp"
+#include "Matrix88.hpp"
#include "Mix4.hpp"
#include "Mix8.hpp"
#include "Mult.hpp"
@@ -76,6 +77,7 @@ void init(rack::Plugin *p) {
p->addModel(modelVCM);
#ifdef EXPERIMENTAL
p->addModel(modelUMix);
+ p->addModel(modelMatrix88);
#endif
p->addModel(modelPan);
p->addModel(modelXFade);
diff --git a/src/widgets.cpp b/src/widgets.cpp
@@ -26,6 +26,11 @@ Knob16::Knob16() : BGKnob("res/knob_16px.svg", 16) {
}
+Knob19::Knob19() : BGKnob("res/knob_19px.svg", 19) {
+ shadow->box.pos = Vec(0.0, 2.5);
+}
+
+
Knob26::Knob26() : BGKnob("res/knob_26px.svg", 26) {
}
diff --git a/src/widgets.hpp b/src/widgets.hpp
@@ -18,6 +18,10 @@ struct Knob16 : BGKnob {
Knob16();
};
+struct Knob19 : BGKnob {
+ Knob19();
+};
+
struct Knob26 : BGKnob {
Knob26();
};