BogaudioModules

BogaudioModules for VCV Rack
Log | Files | Refs | README | LICENSE

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:
Ares-src/Matrix88-src.svg | 427+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ares-src/knob_19px-src.svg | 15+++++++++++++++
Ares/Matrix88.svg | 0
Ares/knob_19px.svg | 0
Asrc/Matrix88.cpp | 210+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/Matrix88.hpp | 119+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Msrc/bogaudio.cpp | 2++
Msrc/widgets.cpp | 5+++++
Msrc/widgets.hpp | 4++++
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(); };