commit 51ccb8081d614c84063e7656ba8a48daefa934dd
parent 05afff01f8f9f8354889a76ef766933ac1134f64
Author: Matt Demanett <matt@demanett.net>
Date: Sun, 4 Oct 2020 00:33:41 -0400
SWITCH18, MATRIX18: 1-to-8 switches/routers.
Diffstat:
25 files changed, 2203 insertions(+), 38 deletions(-)
diff --git a/README-prerelease.md b/README-prerelease.md
@@ -620,6 +620,12 @@ An eight input, one output version of <a href="#matrix44">MATRIX44</a>, below.
_Polyphony:_ <a href="#polyphony">Polyphonic</a>, as on MATRIX44.
+#### <a name="matrix18"></a> MATRIX18
+
+A one input, eight output version of <a href="#matrix44">MATRIX44</a>, below.
+
+_Polyphony:_ <a href="#polyphony">Polyphonic</a>, as on MATRIX44.
+
#### <a name="matrix44"></a> MATRIX44
An 4x4 channel matrix mixer. Each input can be routed with an independent level to each of the eight output mixes.
@@ -650,6 +656,16 @@ An eight input, one output version of <a href="#switch44">SWITCH44</a>, below.
SWITCH81 is related to <a href="#mumix">MUMIX</a>, with the difference that a switch must be turned on to pass an input to the output, where on MUMIX the switches are mutes (they pass by default). Also, this module has options for attenuating and inverting the inputs, as on SWITCH44.
+If the option "Exclusive" is enabled, on the context menu, then only one switch may be active at once.
+
+_Polyphony:_ <a href="#polyphony">Polyphonic</a>, as on SWITCH44.
+
+#### <a name="switch18"></a> SWITCH18
+
+A one input, eight output version of <a href="#switch44">SWITCH44</a>, below.
+
+If the option "Exclusive" is enabled, on the context menu, then only one switch may be active at once.
+
_Polyphony:_ <a href="#polyphony">Polyphonic</a>, as on SWITCH44.
#### <a name="switch44"></a> SWITCH44
diff --git a/plugin.json b/plugin.json
@@ -586,6 +586,16 @@
]
},
{
+ "slug": "Bogaudio-Matrix18",
+ "name": "MATRIX18",
+ "description": "8-way signal router with attenuverters",
+ "manualUrl": "https://github.com/bogaudio/BogaudioModules/blob/master/README.md#matrix18",
+ "tags": [
+ "Switch",
+ "Polyphonic"
+ ]
+ },
+ {
"slug": "Bogaudio-Matrix44",
"name": "MATRIX44",
"description": "4x4 matrix mixer",
@@ -616,6 +626,16 @@
]
},
{
+ "slug": "Bogaudio-Switch18",
+ "name": "SWITCH18",
+ "description": "8-way signal router",
+ "manualUrl": "https://github.com/bogaudio/BogaudioModules/blob/master/README.md#switch18",
+ "tags": [
+ "Switch",
+ "Polyphonic"
+ ]
+ },
+ {
"slug": "Bogaudio-Switch44",
"name": "SWITCH44",
"description": "4x4 matrix mixer",
diff --git a/res-pp/Matrix18-dark-pp.svg b/res-pp/Matrix18-dark-pp.svg
@@ -0,0 +1,372 @@
+<?xml version="1.0"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="90.0" height="380.0" viewBox="0 0 90.0 380.0">
+ <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;
+}
+
+polyline {
+ stroke: #333;
+}
+polyline.guide {
+ stroke: #0f0;
+}
+path {
+ stroke: #333;
+}
+
+rect.module-background, .background-fill {
+ fill: #ddd;
+}
+polyline.module-border-inner {
+ stroke: #e4e4e4;
+}
+polyline.module-border-middle {
+ stroke: #ebebeb;
+}
+polyline.module-border-outer {
+ stroke: #f2f2f2;
+}
+
+g.io-group {
+}
+rect.input-background, rect.input-background-filler {
+ fill: #fafafa;
+}
+rect.output-background, rect.output-background-filler {
+ fill: #bbb;
+}
+text.input-label, text.output-label {
+ /* font-size: 6pt; */
+}
+polyline.input-label, polyline.output-label {
+}
+path.input-label, path.output-label {
+}
+
+circle.port-rim {
+ stroke: #f0f0f0;
+}
+circle.port-barrel {
+ stroke: #222;
+ fill: #222;
+}
+circle.knob-center {
+ fill: #eee;
+}
+circle.knob-rim {
+ fill: #333;
+}
+circle.knob-tick {
+ fill: #fff;
+}
+polyline.knob-tick {
+ stroke: #fff;
+}
+
+
+text {
+ fill: #eee;
+}
+
+polyline {
+ stroke: #ccc;
+}
+path {
+ stroke: #ccc;
+}
+
+rect.module-background, .background-fill {
+ fill: #111;
+}
+polyline.module-border-inner {
+ stroke: #191919;
+}
+polyline.module-border-middle {
+ stroke: #111;
+}
+polyline.module-border-outer {
+ stroke: #000;
+}
+
+rect.input-background, rect.input-background-filler {
+ fill: #aaa;
+}
+rect.output-background, rect.output-background-filler {
+ fill: #666;
+}
+text.input-label {
+ fill: #222;
+}
+polyline.input-label, path.input-label {
+ stroke: #222;
+}
+text.output-label {
+ fill: #ddd;
+}
+polyline.output-label, path.output-label {
+ stroke: #ddd;
+}
+
+circle.port-rim {
+ stroke: #c0c0c0;
+}
+circle.port-barrel {
+ stroke: #222;
+ fill: #222;
+}
+circle.knob-center {
+ fill: #888;
+}
+circle.knob-rim {
+ fill: #444;
+}
+circle.knob-tick {
+ fill: #fff;
+}
+polyline.knob-tick {
+ stroke: #fff;
+}
+</style>
+
+
+
+ <rect class="module-background background-fill" width="90.0" height="380.0"/>
+
+
+ <polyline class="module-border-inner" points="1,1 89.0,1 89.0,379.0 1,379.0 1,1" stroke-width="0.5" fill="none"/>
+ <polyline class="module-border-middle" points="0.5,0.5 89.5,0.5 89.5,379.5 0.5,379.5 0.5,0.5" stroke-width="0.8" fill="none"/>
+ <polyline class="module-border-outer" points="0,0 90.0,0 90.0,380.0 0,380.0 0,0" stroke-width="1" fill="none"/>
+
+ <text class="title" font-size="9pt" letter-spacing="0.7px" text-anchor="end" transform="translate(85.0 17)">MATRIX18</text>
+ <g transform="translate(5.5 374)">
+ <text class="brand" font-size="6.5pt" letter-spacing="2px">BOGAUDIO</text>
+ <rect class="background-fill" width="1.5" height="2" fill="#ddd" transform="translate(21 -4)"/>
+ </g>
+
+
+ <g transform="translate(11 0)">
+ <g transform="translate(0 24)">
+ <g transform="translate(3.5 8)"><svg id="MIX1_PARAM">
+ <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>
+ </svg></g>
+ <g transform="translate(-6.5 -2)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" 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-width="0.7" stroke-linecap="round" stroke="#ccc" fill="none" transform="rotate(20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 1 13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#ccc" fill="none" transform="rotate(43)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#ccc" fill="none" transform="rotate(-20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#ccc" fill="none" transform="rotate(-43)"/>
+ </g>
+ </g>
+ </g>
+ <g transform="translate(0 61)">
+ <g transform="translate(3.5 8)"><svg id="MIX2_PARAM">
+ <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>
+ </svg></g>
+ <g transform="translate(-6.5 -2)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" 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-width="0.7" stroke-linecap="round" stroke="#ccc" fill="none" transform="rotate(20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 1 13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#ccc" fill="none" transform="rotate(43)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#ccc" fill="none" transform="rotate(-20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#ccc" fill="none" transform="rotate(-43)"/>
+ </g>
+ </g>
+ </g>
+ <g transform="translate(0 98)">
+ <g transform="translate(3.5 8)"><svg id="MIX3_PARAM">
+ <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>
+ </svg></g>
+ <g transform="translate(-6.5 -2)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" 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-width="0.7" stroke-linecap="round" stroke="#ccc" fill="none" transform="rotate(20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 1 13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#ccc" fill="none" transform="rotate(43)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#ccc" fill="none" transform="rotate(-20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#ccc" fill="none" transform="rotate(-43)"/>
+ </g>
+ </g>
+ </g>
+ <g transform="translate(0 135)">
+ <g transform="translate(3.5 8)"><svg id="MIX4_PARAM">
+ <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>
+ </svg></g>
+ <g transform="translate(-6.5 -2)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" 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-width="0.7" stroke-linecap="round" stroke="#ccc" fill="none" transform="rotate(20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 1 13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#ccc" fill="none" transform="rotate(43)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#ccc" fill="none" transform="rotate(-20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#ccc" fill="none" transform="rotate(-43)"/>
+ </g>
+ </g>
+ </g>
+ <g transform="translate(0 172)">
+ <g transform="translate(3.5 8)"><svg id="MIX5_PARAM">
+ <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>
+ </svg></g>
+ <g transform="translate(-6.5 -2)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" 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-width="0.7" stroke-linecap="round" stroke="#ccc" fill="none" transform="rotate(20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 1 13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#ccc" fill="none" transform="rotate(43)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#ccc" fill="none" transform="rotate(-20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#ccc" fill="none" transform="rotate(-43)"/>
+ </g>
+ </g>
+ </g>
+ <g transform="translate(0 209)">
+ <g transform="translate(3.5 8)"><svg id="MIX6_PARAM">
+ <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>
+ </svg></g>
+ <g transform="translate(-6.5 -2)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" 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-width="0.7" stroke-linecap="round" stroke="#ccc" fill="none" transform="rotate(20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 1 13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#ccc" fill="none" transform="rotate(43)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#ccc" fill="none" transform="rotate(-20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#ccc" fill="none" transform="rotate(-43)"/>
+ </g>
+ </g>
+ </g>
+ <g transform="translate(0 246)">
+ <g transform="translate(3.5 8)"><svg id="MIX7_PARAM">
+ <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>
+ </svg></g>
+ <g transform="translate(-6.5 -2)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" 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-width="0.7" stroke-linecap="round" stroke="#ccc" fill="none" transform="rotate(20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 1 13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#ccc" fill="none" transform="rotate(43)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#ccc" fill="none" transform="rotate(-20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#ccc" fill="none" transform="rotate(-43)"/>
+ </g>
+ </g>
+ </g>
+ <g transform="translate(0 283)">
+ <g transform="translate(3.5 8)"><svg id="MIX8_PARAM">
+ <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>
+ </svg></g>
+ <g transform="translate(-6.5 -2)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" 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-width="0.7" stroke-linecap="round" stroke="#ccc" fill="none" transform="rotate(20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 1 13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#ccc" fill="none" transform="rotate(43)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#ccc" fill="none" transform="rotate(-20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#ccc" fill="none" transform="rotate(-43)"/>
+ </g>
+ </g>
+ </g>
+ </g>
+
+ <g transform="translate(43 25)">
+ <g class="io-group" transform="translate(5.5 0)">
+ <rect class="output-background-filler" width="34" height="10" transform="translate(0 283)"/>
+ <rect class="output-background" width="34" height="293" rx="5"/>
+ <g transform="translate(5 5)"><svg id="OUT1_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 42)"><svg id="OUT2_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 79)"><svg id="OUT3_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 116)"><svg id="OUT4_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 153)"><svg id="OUT5_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 190)"><svg id="OUT6_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 227)"><svg id="OUT7_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 264)"><svg id="OUT8_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ </g>
+ <g class="io-group" transform="translate(5.5 295)">
+ <rect class="input-background-filler" width="34" height="10" transform="translate(0 -3)"/>
+ <rect class="input-background" width="34" height="38" rx="5"/>
+ <g transform="translate(5 1)"><svg id="IN_INPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(17 33)">IN</text>
+ </g>
+ </g>
+
+
+
+</svg>
diff --git a/res-pp/Matrix18-lowcontrast-pp.svg b/res-pp/Matrix18-lowcontrast-pp.svg
@@ -0,0 +1,372 @@
+<?xml version="1.0"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="90.0" height="380.0" viewBox="0 0 90.0 380.0">
+ <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;
+}
+
+polyline {
+ stroke: #333;
+}
+polyline.guide {
+ stroke: #0f0;
+}
+path {
+ stroke: #333;
+}
+
+rect.module-background, .background-fill {
+ fill: #ddd;
+}
+polyline.module-border-inner {
+ stroke: #e4e4e4;
+}
+polyline.module-border-middle {
+ stroke: #ebebeb;
+}
+polyline.module-border-outer {
+ stroke: #f2f2f2;
+}
+
+g.io-group {
+}
+rect.input-background, rect.input-background-filler {
+ fill: #fafafa;
+}
+rect.output-background, rect.output-background-filler {
+ fill: #bbb;
+}
+text.input-label, text.output-label {
+ /* font-size: 6pt; */
+}
+polyline.input-label, polyline.output-label {
+}
+path.input-label, path.output-label {
+}
+
+circle.port-rim {
+ stroke: #f0f0f0;
+}
+circle.port-barrel {
+ stroke: #222;
+ fill: #222;
+}
+circle.knob-center {
+ fill: #eee;
+}
+circle.knob-rim {
+ fill: #333;
+}
+circle.knob-tick {
+ fill: #fff;
+}
+polyline.knob-tick {
+ stroke: #fff;
+}
+
+
+text {
+ fill: #b3b3b3;
+}
+
+polyline {
+ stroke: #b3b3b3;
+}
+path {
+ stroke: #b3b3b3;
+}
+
+rect.module-background, .background-fill {
+ fill: #333;
+}
+polyline.module-border-inner {
+ stroke: #191919;
+}
+polyline.module-border-middle {
+ stroke: #111;
+}
+polyline.module-border-outer {
+ stroke: #000;
+}
+
+rect.input-background, rect.input-background-filler {
+ fill: #b3b3b3;
+}
+rect.output-background, rect.output-background-filler {
+ fill: #888;
+}
+text.input-label {
+ fill: #666;
+}
+polyline.input-label, path.input-label {
+ stroke: #666;
+}
+text.output-label {
+ fill: #ccc;
+}
+polyline.output-label, path.output-label {
+ stroke: #ccc;
+}
+
+circle.port-rim {
+ stroke: #bbb;
+}
+circle.port-barrel {
+ stroke: #222;
+ fill: #222;
+}
+circle.knob-center {
+ fill: #bbb;
+}
+circle.knob-rim {
+ fill: #555;
+}
+circle.knob-tick {
+ fill: #fff;
+}
+polyline.knob-tick {
+ stroke: #fff;
+}
+</style>
+
+
+
+ <rect class="module-background background-fill" width="90.0" height="380.0"/>
+
+
+ <polyline class="module-border-inner" points="1,1 89.0,1 89.0,379.0 1,379.0 1,1" stroke-width="0.5" fill="none"/>
+ <polyline class="module-border-middle" points="0.5,0.5 89.5,0.5 89.5,379.5 0.5,379.5 0.5,0.5" stroke-width="0.8" fill="none"/>
+ <polyline class="module-border-outer" points="0,0 90.0,0 90.0,380.0 0,380.0 0,0" stroke-width="1" fill="none"/>
+
+ <text class="title" font-size="9pt" letter-spacing="0.7px" text-anchor="end" transform="translate(85.0 17)">MATRIX18</text>
+ <g transform="translate(5.5 374)">
+ <text class="brand" font-size="6.5pt" letter-spacing="2px">BOGAUDIO</text>
+ <rect class="background-fill" width="1.5" height="2" fill="#ddd" transform="translate(21 -4)"/>
+ </g>
+
+
+ <g transform="translate(11 0)">
+ <g transform="translate(0 24)">
+ <g transform="translate(3.5 8)"><svg id="MIX1_PARAM">
+ <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>
+ </svg></g>
+ <g transform="translate(-6.5 -2)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" 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-width="0.7" stroke-linecap="round" stroke="#b3b3b3" fill="none" transform="rotate(20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 1 13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#b3b3b3" fill="none" transform="rotate(43)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#b3b3b3" fill="none" transform="rotate(-20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#b3b3b3" fill="none" transform="rotate(-43)"/>
+ </g>
+ </g>
+ </g>
+ <g transform="translate(0 61)">
+ <g transform="translate(3.5 8)"><svg id="MIX2_PARAM">
+ <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>
+ </svg></g>
+ <g transform="translate(-6.5 -2)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" 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-width="0.7" stroke-linecap="round" stroke="#b3b3b3" fill="none" transform="rotate(20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 1 13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#b3b3b3" fill="none" transform="rotate(43)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#b3b3b3" fill="none" transform="rotate(-20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#b3b3b3" fill="none" transform="rotate(-43)"/>
+ </g>
+ </g>
+ </g>
+ <g transform="translate(0 98)">
+ <g transform="translate(3.5 8)"><svg id="MIX3_PARAM">
+ <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>
+ </svg></g>
+ <g transform="translate(-6.5 -2)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" 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-width="0.7" stroke-linecap="round" stroke="#b3b3b3" fill="none" transform="rotate(20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 1 13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#b3b3b3" fill="none" transform="rotate(43)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#b3b3b3" fill="none" transform="rotate(-20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#b3b3b3" fill="none" transform="rotate(-43)"/>
+ </g>
+ </g>
+ </g>
+ <g transform="translate(0 135)">
+ <g transform="translate(3.5 8)"><svg id="MIX4_PARAM">
+ <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>
+ </svg></g>
+ <g transform="translate(-6.5 -2)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" 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-width="0.7" stroke-linecap="round" stroke="#b3b3b3" fill="none" transform="rotate(20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 1 13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#b3b3b3" fill="none" transform="rotate(43)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#b3b3b3" fill="none" transform="rotate(-20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#b3b3b3" fill="none" transform="rotate(-43)"/>
+ </g>
+ </g>
+ </g>
+ <g transform="translate(0 172)">
+ <g transform="translate(3.5 8)"><svg id="MIX5_PARAM">
+ <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>
+ </svg></g>
+ <g transform="translate(-6.5 -2)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" 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-width="0.7" stroke-linecap="round" stroke="#b3b3b3" fill="none" transform="rotate(20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 1 13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#b3b3b3" fill="none" transform="rotate(43)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#b3b3b3" fill="none" transform="rotate(-20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#b3b3b3" fill="none" transform="rotate(-43)"/>
+ </g>
+ </g>
+ </g>
+ <g transform="translate(0 209)">
+ <g transform="translate(3.5 8)"><svg id="MIX6_PARAM">
+ <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>
+ </svg></g>
+ <g transform="translate(-6.5 -2)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" 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-width="0.7" stroke-linecap="round" stroke="#b3b3b3" fill="none" transform="rotate(20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 1 13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#b3b3b3" fill="none" transform="rotate(43)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#b3b3b3" fill="none" transform="rotate(-20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#b3b3b3" fill="none" transform="rotate(-43)"/>
+ </g>
+ </g>
+ </g>
+ <g transform="translate(0 246)">
+ <g transform="translate(3.5 8)"><svg id="MIX7_PARAM">
+ <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>
+ </svg></g>
+ <g transform="translate(-6.5 -2)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" 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-width="0.7" stroke-linecap="round" stroke="#b3b3b3" fill="none" transform="rotate(20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 1 13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#b3b3b3" fill="none" transform="rotate(43)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#b3b3b3" fill="none" transform="rotate(-20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#b3b3b3" fill="none" transform="rotate(-43)"/>
+ </g>
+ </g>
+ </g>
+ <g transform="translate(0 283)">
+ <g transform="translate(3.5 8)"><svg id="MIX8_PARAM">
+ <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>
+ </svg></g>
+ <g transform="translate(-6.5 -2)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" 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-width="0.7" stroke-linecap="round" stroke="#b3b3b3" fill="none" transform="rotate(20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 1 13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#b3b3b3" fill="none" transform="rotate(43)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#b3b3b3" fill="none" transform="rotate(-20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#b3b3b3" fill="none" transform="rotate(-43)"/>
+ </g>
+ </g>
+ </g>
+ </g>
+
+ <g transform="translate(43 25)">
+ <g class="io-group" transform="translate(5.5 0)">
+ <rect class="output-background-filler" width="34" height="10" transform="translate(0 283)"/>
+ <rect class="output-background" width="34" height="293" rx="5"/>
+ <g transform="translate(5 5)"><svg id="OUT1_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 42)"><svg id="OUT2_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 79)"><svg id="OUT3_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 116)"><svg id="OUT4_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 153)"><svg id="OUT5_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 190)"><svg id="OUT6_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 227)"><svg id="OUT7_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 264)"><svg id="OUT8_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ </g>
+ <g class="io-group" transform="translate(5.5 295)">
+ <rect class="input-background-filler" width="34" height="10" transform="translate(0 -3)"/>
+ <rect class="input-background" width="34" height="38" rx="5"/>
+ <g transform="translate(5 1)"><svg id="IN_INPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(17 33)">IN</text>
+ </g>
+ </g>
+
+
+
+</svg>
diff --git a/res-pp/Matrix18-pp.svg b/res-pp/Matrix18-pp.svg
@@ -0,0 +1,308 @@
+<?xml version="1.0"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="90.0" height="380.0" viewBox="0 0 90.0 380.0">
+ <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;
+}
+
+polyline {
+ stroke: #333;
+}
+polyline.guide {
+ stroke: #0f0;
+}
+path {
+ stroke: #333;
+}
+
+rect.module-background, .background-fill {
+ fill: #ddd;
+}
+polyline.module-border-inner {
+ stroke: #e4e4e4;
+}
+polyline.module-border-middle {
+ stroke: #ebebeb;
+}
+polyline.module-border-outer {
+ stroke: #f2f2f2;
+}
+
+g.io-group {
+}
+rect.input-background, rect.input-background-filler {
+ fill: #fafafa;
+}
+rect.output-background, rect.output-background-filler {
+ fill: #bbb;
+}
+text.input-label, text.output-label {
+ /* font-size: 6pt; */
+}
+polyline.input-label, polyline.output-label {
+}
+path.input-label, path.output-label {
+}
+
+circle.port-rim {
+ stroke: #f0f0f0;
+}
+circle.port-barrel {
+ stroke: #222;
+ fill: #222;
+}
+circle.knob-center {
+ fill: #eee;
+}
+circle.knob-rim {
+ fill: #333;
+}
+circle.knob-tick {
+ fill: #fff;
+}
+polyline.knob-tick {
+ stroke: #fff;
+}
+</style>
+
+
+
+ <rect class="module-background background-fill" width="90.0" height="380.0"/>
+
+
+ <polyline class="module-border-inner" points="1,1 89.0,1 89.0,379.0 1,379.0 1,1" stroke-width="0.5" fill="none"/>
+ <polyline class="module-border-middle" points="0.5,0.5 89.5,0.5 89.5,379.5 0.5,379.5 0.5,0.5" stroke-width="0.8" fill="none"/>
+ <polyline class="module-border-outer" points="0,0 90.0,0 90.0,380.0 0,380.0 0,0" stroke-width="1" fill="none"/>
+
+ <text class="title" font-size="9pt" letter-spacing="0.7px" text-anchor="end" transform="translate(85.0 17)">MATRIX18</text>
+ <g transform="translate(5.5 374)">
+ <text class="brand" font-size="6.5pt" letter-spacing="2px">BOGAUDIO</text>
+ <rect class="background-fill" width="1.5" height="2" fill="#ddd" transform="translate(21 -4)"/>
+ </g>
+
+
+ <g transform="translate(11 0)">
+ <g transform="translate(0 24)">
+ <g transform="translate(3.5 8)"><svg id="MIX1_PARAM">
+ <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>
+ </svg></g>
+ <g transform="translate(-6.5 -2)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" 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-width="0.7" stroke-linecap="round" stroke="#333" fill="none" transform="rotate(20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 1 13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#333" fill="none" transform="rotate(43)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#333" fill="none" transform="rotate(-20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#333" fill="none" transform="rotate(-43)"/>
+ </g>
+ </g>
+ </g>
+ <g transform="translate(0 61)">
+ <g transform="translate(3.5 8)"><svg id="MIX2_PARAM">
+ <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>
+ </svg></g>
+ <g transform="translate(-6.5 -2)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" 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-width="0.7" stroke-linecap="round" stroke="#333" fill="none" transform="rotate(20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 1 13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#333" fill="none" transform="rotate(43)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#333" fill="none" transform="rotate(-20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#333" fill="none" transform="rotate(-43)"/>
+ </g>
+ </g>
+ </g>
+ <g transform="translate(0 98)">
+ <g transform="translate(3.5 8)"><svg id="MIX3_PARAM">
+ <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>
+ </svg></g>
+ <g transform="translate(-6.5 -2)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" 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-width="0.7" stroke-linecap="round" stroke="#333" fill="none" transform="rotate(20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 1 13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#333" fill="none" transform="rotate(43)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#333" fill="none" transform="rotate(-20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#333" fill="none" transform="rotate(-43)"/>
+ </g>
+ </g>
+ </g>
+ <g transform="translate(0 135)">
+ <g transform="translate(3.5 8)"><svg id="MIX4_PARAM">
+ <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>
+ </svg></g>
+ <g transform="translate(-6.5 -2)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" 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-width="0.7" stroke-linecap="round" stroke="#333" fill="none" transform="rotate(20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 1 13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#333" fill="none" transform="rotate(43)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#333" fill="none" transform="rotate(-20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#333" fill="none" transform="rotate(-43)"/>
+ </g>
+ </g>
+ </g>
+ <g transform="translate(0 172)">
+ <g transform="translate(3.5 8)"><svg id="MIX5_PARAM">
+ <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>
+ </svg></g>
+ <g transform="translate(-6.5 -2)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" 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-width="0.7" stroke-linecap="round" stroke="#333" fill="none" transform="rotate(20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 1 13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#333" fill="none" transform="rotate(43)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#333" fill="none" transform="rotate(-20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#333" fill="none" transform="rotate(-43)"/>
+ </g>
+ </g>
+ </g>
+ <g transform="translate(0 209)">
+ <g transform="translate(3.5 8)"><svg id="MIX6_PARAM">
+ <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>
+ </svg></g>
+ <g transform="translate(-6.5 -2)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" 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-width="0.7" stroke-linecap="round" stroke="#333" fill="none" transform="rotate(20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 1 13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#333" fill="none" transform="rotate(43)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#333" fill="none" transform="rotate(-20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#333" fill="none" transform="rotate(-43)"/>
+ </g>
+ </g>
+ </g>
+ <g transform="translate(0 246)">
+ <g transform="translate(3.5 8)"><svg id="MIX7_PARAM">
+ <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>
+ </svg></g>
+ <g transform="translate(-6.5 -2)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" 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-width="0.7" stroke-linecap="round" stroke="#333" fill="none" transform="rotate(20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 1 13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#333" fill="none" transform="rotate(43)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#333" fill="none" transform="rotate(-20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#333" fill="none" transform="rotate(-43)"/>
+ </g>
+ </g>
+ </g>
+ <g transform="translate(0 283)">
+ <g transform="translate(3.5 8)"><svg id="MIX8_PARAM">
+ <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>
+ </svg></g>
+ <g transform="translate(-6.5 -2)">
+ <g transform="translate(20 20)">
+ <polyline points="0,0 4,0" stroke-width="1" 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-width="0.7" stroke-linecap="round" stroke="#333" fill="none" transform="rotate(20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 1 13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#333" fill="none" transform="rotate(43)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#333" fill="none" transform="rotate(-20)"/>
+ <path d="M 0 -13.5 A 13.5 13.5 0 0 0 -13.5 0" stroke-width="0.7" stroke-linecap="round" stroke="#333" fill="none" transform="rotate(-43)"/>
+ </g>
+ </g>
+ </g>
+ </g>
+
+ <g transform="translate(43 25)">
+ <g class="io-group" transform="translate(5.5 0)">
+ <rect class="output-background-filler" width="34" height="10" transform="translate(0 283)"/>
+ <rect class="output-background" width="34" height="293" rx="5"/>
+ <g transform="translate(5 5)"><svg id="OUT1_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 42)"><svg id="OUT2_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 79)"><svg id="OUT3_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 116)"><svg id="OUT4_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 153)"><svg id="OUT5_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 190)"><svg id="OUT6_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 227)"><svg id="OUT7_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 264)"><svg id="OUT8_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ </g>
+ <g class="io-group" transform="translate(5.5 295)">
+ <rect class="input-background-filler" width="34" height="10" transform="translate(0 -3)"/>
+ <rect class="input-background" width="34" height="38" rx="5"/>
+ <g transform="translate(5 1)"><svg id="IN_INPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(17 33)">IN</text>
+ </g>
+ </g>
+
+
+
+</svg>
diff --git a/res-pp/Switch18-dark-pp.svg b/res-pp/Switch18-dark-pp.svg
@@ -0,0 +1,268 @@
+<?xml version="1.0"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="90.0" height="380.0" viewBox="0 0 90.0 380.0">
+ <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;
+}
+
+polyline {
+ stroke: #333;
+}
+polyline.guide {
+ stroke: #0f0;
+}
+path {
+ stroke: #333;
+}
+
+rect.module-background, .background-fill {
+ fill: #ddd;
+}
+polyline.module-border-inner {
+ stroke: #e4e4e4;
+}
+polyline.module-border-middle {
+ stroke: #ebebeb;
+}
+polyline.module-border-outer {
+ stroke: #f2f2f2;
+}
+
+g.io-group {
+}
+rect.input-background, rect.input-background-filler {
+ fill: #fafafa;
+}
+rect.output-background, rect.output-background-filler {
+ fill: #bbb;
+}
+text.input-label, text.output-label {
+ /* font-size: 6pt; */
+}
+polyline.input-label, polyline.output-label {
+}
+path.input-label, path.output-label {
+}
+
+circle.port-rim {
+ stroke: #f0f0f0;
+}
+circle.port-barrel {
+ stroke: #222;
+ fill: #222;
+}
+circle.knob-center {
+ fill: #eee;
+}
+circle.knob-rim {
+ fill: #333;
+}
+circle.knob-tick {
+ fill: #fff;
+}
+polyline.knob-tick {
+ stroke: #fff;
+}
+
+
+text {
+ fill: #eee;
+}
+
+polyline {
+ stroke: #ccc;
+}
+path {
+ stroke: #ccc;
+}
+
+rect.module-background, .background-fill {
+ fill: #111;
+}
+polyline.module-border-inner {
+ stroke: #191919;
+}
+polyline.module-border-middle {
+ stroke: #111;
+}
+polyline.module-border-outer {
+ stroke: #000;
+}
+
+rect.input-background, rect.input-background-filler {
+ fill: #aaa;
+}
+rect.output-background, rect.output-background-filler {
+ fill: #666;
+}
+text.input-label {
+ fill: #222;
+}
+polyline.input-label, path.input-label {
+ stroke: #222;
+}
+text.output-label {
+ fill: #ddd;
+}
+polyline.output-label, path.output-label {
+ stroke: #ddd;
+}
+
+circle.port-rim {
+ stroke: #c0c0c0;
+}
+circle.port-barrel {
+ stroke: #222;
+ fill: #222;
+}
+circle.knob-center {
+ fill: #888;
+}
+circle.knob-rim {
+ fill: #444;
+}
+circle.knob-tick {
+ fill: #fff;
+}
+polyline.knob-tick {
+ stroke: #fff;
+}
+</style>
+
+
+
+ <rect class="module-background background-fill" width="90.0" height="380.0"/>
+
+
+ <polyline class="module-border-inner" points="1,1 89.0,1 89.0,379.0 1,379.0 1,1" stroke-width="0.5" fill="none"/>
+ <polyline class="module-border-middle" points="0.5,0.5 89.5,0.5 89.5,379.5 0.5,379.5 0.5,0.5" stroke-width="0.8" fill="none"/>
+ <polyline class="module-border-outer" points="0,0 90.0,0 90.0,380.0 0,380.0 0,0" stroke-width="1" fill="none"/>
+
+ <text class="title" font-size="9pt" letter-spacing="0.7px" text-anchor="end" transform="translate(85.0 17)">SWITCH18</text>
+ <g transform="translate(5.5 374)">
+ <text class="brand" font-size="6.5pt" letter-spacing="2px">BOGAUDIO</text>
+ <rect class="background-fill" width="1.5" height="2" fill="#ddd" transform="translate(21 -4)"/>
+ </g>
+
+
+ <g transform="translate(14 24)">
+ <g transform="translate(1 9)"><svg id="MIX1_PARAM">
+ <g transform="translate(9 9)">
+ <circle cx="0" cy="0" r="8.5" stroke-width="1" stroke="#00f" fill="#f00"/>
+ </g>
+ </svg></g>
+ <g transform="translate(1 46)"><svg id="MIX2_PARAM">
+ <g transform="translate(9 9)">
+ <circle cx="0" cy="0" r="8.5" stroke-width="1" stroke="#00f" fill="#f00"/>
+ </g>
+ </svg></g>
+ <g transform="translate(1 83)"><svg id="MIX3_PARAM">
+ <g transform="translate(9 9)">
+ <circle cx="0" cy="0" r="8.5" stroke-width="1" stroke="#00f" fill="#f00"/>
+ </g>
+ </svg></g>
+ <g transform="translate(1 120)"><svg id="MIX4_PARAM">
+ <g transform="translate(9 9)">
+ <circle cx="0" cy="0" r="8.5" stroke-width="1" stroke="#00f" fill="#f00"/>
+ </g>
+ </svg></g>
+ <g transform="translate(1 157)"><svg id="MIX5_PARAM">
+ <g transform="translate(9 9)">
+ <circle cx="0" cy="0" r="8.5" stroke-width="1" stroke="#00f" fill="#f00"/>
+ </g>
+ </svg></g>
+ <g transform="translate(1 194)"><svg id="MIX6_PARAM">
+ <g transform="translate(9 9)">
+ <circle cx="0" cy="0" r="8.5" stroke-width="1" stroke="#00f" fill="#f00"/>
+ </g>
+ </svg></g>
+ <g transform="translate(1 231)"><svg id="MIX7_PARAM">
+ <g transform="translate(9 9)">
+ <circle cx="0" cy="0" r="8.5" stroke-width="1" stroke="#00f" fill="#f00"/>
+ </g>
+ </svg></g>
+ <g transform="translate(1 268)"><svg id="MIX8_PARAM">
+ <g transform="translate(9 9)">
+ <circle cx="0" cy="0" r="8.5" stroke-width="1" stroke="#00f" fill="#f00"/>
+ </g>
+ </svg></g>
+ </g>
+
+ <g transform="translate(43 25)">
+ <g class="io-group" transform="translate(5.5 0)">
+ <rect class="output-background-filler" width="34" height="10" transform="translate(0 283)"/>
+ <rect class="output-background" width="34" height="293" rx="5"/>
+ <g transform="translate(5 5)"><svg id="OUT1_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 42)"><svg id="OUT2_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 79)"><svg id="OUT3_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 116)"><svg id="OUT4_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 153)"><svg id="OUT5_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 190)"><svg id="OUT6_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 227)"><svg id="OUT7_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 264)"><svg id="OUT8_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ </g>
+ <g class="io-group" transform="translate(5.5 295)">
+ <rect class="input-background-filler" width="34" height="10" transform="translate(0 -3)"/>
+ <rect class="input-background" width="34" height="38" rx="5"/>
+ <g transform="translate(5 1)"><svg id="IN_INPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(17 33)">IN</text>
+ </g>
+ </g>
+
+
+
+</svg>
diff --git a/res-pp/Switch18-lowcontrast-pp.svg b/res-pp/Switch18-lowcontrast-pp.svg
@@ -0,0 +1,268 @@
+<?xml version="1.0"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="90.0" height="380.0" viewBox="0 0 90.0 380.0">
+ <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;
+}
+
+polyline {
+ stroke: #333;
+}
+polyline.guide {
+ stroke: #0f0;
+}
+path {
+ stroke: #333;
+}
+
+rect.module-background, .background-fill {
+ fill: #ddd;
+}
+polyline.module-border-inner {
+ stroke: #e4e4e4;
+}
+polyline.module-border-middle {
+ stroke: #ebebeb;
+}
+polyline.module-border-outer {
+ stroke: #f2f2f2;
+}
+
+g.io-group {
+}
+rect.input-background, rect.input-background-filler {
+ fill: #fafafa;
+}
+rect.output-background, rect.output-background-filler {
+ fill: #bbb;
+}
+text.input-label, text.output-label {
+ /* font-size: 6pt; */
+}
+polyline.input-label, polyline.output-label {
+}
+path.input-label, path.output-label {
+}
+
+circle.port-rim {
+ stroke: #f0f0f0;
+}
+circle.port-barrel {
+ stroke: #222;
+ fill: #222;
+}
+circle.knob-center {
+ fill: #eee;
+}
+circle.knob-rim {
+ fill: #333;
+}
+circle.knob-tick {
+ fill: #fff;
+}
+polyline.knob-tick {
+ stroke: #fff;
+}
+
+
+text {
+ fill: #b3b3b3;
+}
+
+polyline {
+ stroke: #b3b3b3;
+}
+path {
+ stroke: #b3b3b3;
+}
+
+rect.module-background, .background-fill {
+ fill: #333;
+}
+polyline.module-border-inner {
+ stroke: #191919;
+}
+polyline.module-border-middle {
+ stroke: #111;
+}
+polyline.module-border-outer {
+ stroke: #000;
+}
+
+rect.input-background, rect.input-background-filler {
+ fill: #b3b3b3;
+}
+rect.output-background, rect.output-background-filler {
+ fill: #888;
+}
+text.input-label {
+ fill: #666;
+}
+polyline.input-label, path.input-label {
+ stroke: #666;
+}
+text.output-label {
+ fill: #ccc;
+}
+polyline.output-label, path.output-label {
+ stroke: #ccc;
+}
+
+circle.port-rim {
+ stroke: #bbb;
+}
+circle.port-barrel {
+ stroke: #222;
+ fill: #222;
+}
+circle.knob-center {
+ fill: #bbb;
+}
+circle.knob-rim {
+ fill: #555;
+}
+circle.knob-tick {
+ fill: #fff;
+}
+polyline.knob-tick {
+ stroke: #fff;
+}
+</style>
+
+
+
+ <rect class="module-background background-fill" width="90.0" height="380.0"/>
+
+
+ <polyline class="module-border-inner" points="1,1 89.0,1 89.0,379.0 1,379.0 1,1" stroke-width="0.5" fill="none"/>
+ <polyline class="module-border-middle" points="0.5,0.5 89.5,0.5 89.5,379.5 0.5,379.5 0.5,0.5" stroke-width="0.8" fill="none"/>
+ <polyline class="module-border-outer" points="0,0 90.0,0 90.0,380.0 0,380.0 0,0" stroke-width="1" fill="none"/>
+
+ <text class="title" font-size="9pt" letter-spacing="0.7px" text-anchor="end" transform="translate(85.0 17)">SWITCH18</text>
+ <g transform="translate(5.5 374)">
+ <text class="brand" font-size="6.5pt" letter-spacing="2px">BOGAUDIO</text>
+ <rect class="background-fill" width="1.5" height="2" fill="#ddd" transform="translate(21 -4)"/>
+ </g>
+
+
+ <g transform="translate(14 24)">
+ <g transform="translate(1 9)"><svg id="MIX1_PARAM">
+ <g transform="translate(9 9)">
+ <circle cx="0" cy="0" r="8.5" stroke-width="1" stroke="#00f" fill="#f00"/>
+ </g>
+ </svg></g>
+ <g transform="translate(1 46)"><svg id="MIX2_PARAM">
+ <g transform="translate(9 9)">
+ <circle cx="0" cy="0" r="8.5" stroke-width="1" stroke="#00f" fill="#f00"/>
+ </g>
+ </svg></g>
+ <g transform="translate(1 83)"><svg id="MIX3_PARAM">
+ <g transform="translate(9 9)">
+ <circle cx="0" cy="0" r="8.5" stroke-width="1" stroke="#00f" fill="#f00"/>
+ </g>
+ </svg></g>
+ <g transform="translate(1 120)"><svg id="MIX4_PARAM">
+ <g transform="translate(9 9)">
+ <circle cx="0" cy="0" r="8.5" stroke-width="1" stroke="#00f" fill="#f00"/>
+ </g>
+ </svg></g>
+ <g transform="translate(1 157)"><svg id="MIX5_PARAM">
+ <g transform="translate(9 9)">
+ <circle cx="0" cy="0" r="8.5" stroke-width="1" stroke="#00f" fill="#f00"/>
+ </g>
+ </svg></g>
+ <g transform="translate(1 194)"><svg id="MIX6_PARAM">
+ <g transform="translate(9 9)">
+ <circle cx="0" cy="0" r="8.5" stroke-width="1" stroke="#00f" fill="#f00"/>
+ </g>
+ </svg></g>
+ <g transform="translate(1 231)"><svg id="MIX7_PARAM">
+ <g transform="translate(9 9)">
+ <circle cx="0" cy="0" r="8.5" stroke-width="1" stroke="#00f" fill="#f00"/>
+ </g>
+ </svg></g>
+ <g transform="translate(1 268)"><svg id="MIX8_PARAM">
+ <g transform="translate(9 9)">
+ <circle cx="0" cy="0" r="8.5" stroke-width="1" stroke="#00f" fill="#f00"/>
+ </g>
+ </svg></g>
+ </g>
+
+ <g transform="translate(43 25)">
+ <g class="io-group" transform="translate(5.5 0)">
+ <rect class="output-background-filler" width="34" height="10" transform="translate(0 283)"/>
+ <rect class="output-background" width="34" height="293" rx="5"/>
+ <g transform="translate(5 5)"><svg id="OUT1_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 42)"><svg id="OUT2_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 79)"><svg id="OUT3_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 116)"><svg id="OUT4_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 153)"><svg id="OUT5_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 190)"><svg id="OUT6_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 227)"><svg id="OUT7_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 264)"><svg id="OUT8_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ </g>
+ <g class="io-group" transform="translate(5.5 295)">
+ <rect class="input-background-filler" width="34" height="10" transform="translate(0 -3)"/>
+ <rect class="input-background" width="34" height="38" rx="5"/>
+ <g transform="translate(5 1)"><svg id="IN_INPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(17 33)">IN</text>
+ </g>
+ </g>
+
+
+
+</svg>
diff --git a/res-pp/Switch18-pp.svg b/res-pp/Switch18-pp.svg
@@ -0,0 +1,204 @@
+<?xml version="1.0"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="90.0" height="380.0" viewBox="0 0 90.0 380.0">
+ <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;
+}
+
+polyline {
+ stroke: #333;
+}
+polyline.guide {
+ stroke: #0f0;
+}
+path {
+ stroke: #333;
+}
+
+rect.module-background, .background-fill {
+ fill: #ddd;
+}
+polyline.module-border-inner {
+ stroke: #e4e4e4;
+}
+polyline.module-border-middle {
+ stroke: #ebebeb;
+}
+polyline.module-border-outer {
+ stroke: #f2f2f2;
+}
+
+g.io-group {
+}
+rect.input-background, rect.input-background-filler {
+ fill: #fafafa;
+}
+rect.output-background, rect.output-background-filler {
+ fill: #bbb;
+}
+text.input-label, text.output-label {
+ /* font-size: 6pt; */
+}
+polyline.input-label, polyline.output-label {
+}
+path.input-label, path.output-label {
+}
+
+circle.port-rim {
+ stroke: #f0f0f0;
+}
+circle.port-barrel {
+ stroke: #222;
+ fill: #222;
+}
+circle.knob-center {
+ fill: #eee;
+}
+circle.knob-rim {
+ fill: #333;
+}
+circle.knob-tick {
+ fill: #fff;
+}
+polyline.knob-tick {
+ stroke: #fff;
+}
+</style>
+
+
+
+ <rect class="module-background background-fill" width="90.0" height="380.0"/>
+
+
+ <polyline class="module-border-inner" points="1,1 89.0,1 89.0,379.0 1,379.0 1,1" stroke-width="0.5" fill="none"/>
+ <polyline class="module-border-middle" points="0.5,0.5 89.5,0.5 89.5,379.5 0.5,379.5 0.5,0.5" stroke-width="0.8" fill="none"/>
+ <polyline class="module-border-outer" points="0,0 90.0,0 90.0,380.0 0,380.0 0,0" stroke-width="1" fill="none"/>
+
+ <text class="title" font-size="9pt" letter-spacing="0.7px" text-anchor="end" transform="translate(85.0 17)">SWITCH18</text>
+ <g transform="translate(5.5 374)">
+ <text class="brand" font-size="6.5pt" letter-spacing="2px">BOGAUDIO</text>
+ <rect class="background-fill" width="1.5" height="2" fill="#ddd" transform="translate(21 -4)"/>
+ </g>
+
+
+ <g transform="translate(14 24)">
+ <g transform="translate(1 9)"><svg id="MIX1_PARAM">
+ <g transform="translate(9 9)">
+ <circle cx="0" cy="0" r="8.5" stroke-width="1" stroke="#00f" fill="#f00"/>
+ </g>
+ </svg></g>
+ <g transform="translate(1 46)"><svg id="MIX2_PARAM">
+ <g transform="translate(9 9)">
+ <circle cx="0" cy="0" r="8.5" stroke-width="1" stroke="#00f" fill="#f00"/>
+ </g>
+ </svg></g>
+ <g transform="translate(1 83)"><svg id="MIX3_PARAM">
+ <g transform="translate(9 9)">
+ <circle cx="0" cy="0" r="8.5" stroke-width="1" stroke="#00f" fill="#f00"/>
+ </g>
+ </svg></g>
+ <g transform="translate(1 120)"><svg id="MIX4_PARAM">
+ <g transform="translate(9 9)">
+ <circle cx="0" cy="0" r="8.5" stroke-width="1" stroke="#00f" fill="#f00"/>
+ </g>
+ </svg></g>
+ <g transform="translate(1 157)"><svg id="MIX5_PARAM">
+ <g transform="translate(9 9)">
+ <circle cx="0" cy="0" r="8.5" stroke-width="1" stroke="#00f" fill="#f00"/>
+ </g>
+ </svg></g>
+ <g transform="translate(1 194)"><svg id="MIX6_PARAM">
+ <g transform="translate(9 9)">
+ <circle cx="0" cy="0" r="8.5" stroke-width="1" stroke="#00f" fill="#f00"/>
+ </g>
+ </svg></g>
+ <g transform="translate(1 231)"><svg id="MIX7_PARAM">
+ <g transform="translate(9 9)">
+ <circle cx="0" cy="0" r="8.5" stroke-width="1" stroke="#00f" fill="#f00"/>
+ </g>
+ </svg></g>
+ <g transform="translate(1 268)"><svg id="MIX8_PARAM">
+ <g transform="translate(9 9)">
+ <circle cx="0" cy="0" r="8.5" stroke-width="1" stroke="#00f" fill="#f00"/>
+ </g>
+ </svg></g>
+ </g>
+
+ <g transform="translate(43 25)">
+ <g class="io-group" transform="translate(5.5 0)">
+ <rect class="output-background-filler" width="34" height="10" transform="translate(0 283)"/>
+ <rect class="output-background" width="34" height="293" rx="5"/>
+ <g transform="translate(5 5)"><svg id="OUT1_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 42)"><svg id="OUT2_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 79)"><svg id="OUT3_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 116)"><svg id="OUT4_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 153)"><svg id="OUT5_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 190)"><svg id="OUT6_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 227)"><svg id="OUT7_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <g transform="translate(5 264)"><svg id="OUT8_OUTPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ </g>
+ <g class="io-group" transform="translate(5.5 295)">
+ <rect class="input-background-filler" width="34" height="10" transform="translate(0 -3)"/>
+ <rect class="input-background" width="34" height="38" rx="5"/>
+ <g transform="translate(5 1)"><svg id="IN_INPUT">
+ <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"/>
+ </g>
+ </svg></g>
+ <text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(17 33)">IN</text>
+ </g>
+ </g>
+
+
+
+</svg>
diff --git a/res-src/Matrix18-src.svg b/res-src/Matrix18-src.svg
@@ -0,0 +1,65 @@
+<?xml version="1.0"?>
+<module hp="6">
+ <style/>
+
+ <def xlink:href="#module6" var-name="MATRIX18" var-letterspacing="0.7"/>
+
+ <g transform="translate(11 0)">
+ <g transform="translate(0 24)">
+ <def id="MIX1_PARAM" xlink:href="#knob19" transform="translate(3.5 8)"/>
+ <def xlink:href="#dial-centertick-19" transform="translate(-6.5 -2)"/>
+ </g>
+ <g transform="translate(0 61)">
+ <def id="MIX2_PARAM" xlink:href="#knob19" transform="translate(3.5 8)"/>
+ <def xlink:href="#dial-centertick-19" transform="translate(-6.5 -2)"/>
+ </g>
+ <g transform="translate(0 98)">
+ <def id="MIX3_PARAM" xlink:href="#knob19" transform="translate(3.5 8)"/>
+ <def xlink:href="#dial-centertick-19" transform="translate(-6.5 -2)"/>
+ </g>
+ <g transform="translate(0 135)">
+ <def id="MIX4_PARAM" xlink:href="#knob19" transform="translate(3.5 8)"/>
+ <def xlink:href="#dial-centertick-19" transform="translate(-6.5 -2)"/>
+ </g>
+ <g transform="translate(0 172)">
+ <def id="MIX5_PARAM" xlink:href="#knob19" transform="translate(3.5 8)"/>
+ <def xlink:href="#dial-centertick-19" transform="translate(-6.5 -2)"/>
+ </g>
+ <g transform="translate(0 209)">
+ <def id="MIX6_PARAM" xlink:href="#knob19" transform="translate(3.5 8)"/>
+ <def xlink:href="#dial-centertick-19" transform="translate(-6.5 -2)"/>
+ </g>
+ <g transform="translate(0 246)">
+ <def id="MIX7_PARAM" xlink:href="#knob19" transform="translate(3.5 8)"/>
+ <def xlink:href="#dial-centertick-19" transform="translate(-6.5 -2)"/>
+ </g>
+ <g transform="translate(0 283)">
+ <def id="MIX8_PARAM" xlink:href="#knob19" transform="translate(3.5 8)"/>
+ <def xlink:href="#dial-centertick-19" transform="translate(-6.5 -2)"/>
+ </g>
+ </g>
+
+ <g transform="translate(43 25)">
+ <g class="io-group" transform="translate(5.5 0)">
+ <rect class="output-background-filler" width="34" height="10" transform="translate(0 283)"/>
+ <rect class="output-background" width="34" height="293" rx="5"/>
+ <def id="OUT1_OUTPUT" xlink:href="#output" transform="translate(5 5)"/>
+ <def id="OUT2_OUTPUT" xlink:href="#output" transform="translate(5 42)"/>
+ <def id="OUT3_OUTPUT" xlink:href="#output" transform="translate(5 79)"/>
+ <def id="OUT4_OUTPUT" xlink:href="#output" transform="translate(5 116)"/>
+ <def id="OUT5_OUTPUT" xlink:href="#output" transform="translate(5 153)"/>
+ <def id="OUT6_OUTPUT" xlink:href="#output" transform="translate(5 190)"/>
+ <def id="OUT7_OUTPUT" xlink:href="#output" transform="translate(5 227)"/>
+ <def id="OUT8_OUTPUT" xlink:href="#output" transform="translate(5 264)"/>
+ </g>
+ <g class="io-group" transform="translate(5.5 295)">
+ <rect class="input-background-filler" width="34" height="10" transform="translate(0 -3)"/>
+ <rect class="input-background" width="34" height="38" rx="5"/>
+ <def id="IN_INPUT" xlink:href="#input" transform="translate(5 1)"/>
+ <text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(17 33)">IN</text>
+ </g>
+ </g>
+
+ <!-- <polyline class="guide" points="0,0 0,380" stroke-width="0.7" stroke="#0f0" transform="translate(24.5 0)" /> -->
+ <!-- <polyline class="guide" points="0,0 0,380" stroke-width="0.7" stroke="#0f0" transform="translate(65.5 0)" /> -->
+</module>
diff --git a/res-src/Switch18-src.svg b/res-src/Switch18-src.svg
@@ -0,0 +1,40 @@
+<module hp="6">
+ <style/>
+
+ <def xlink:href="#module6" var-name="SWITCH18" var-letterspacing="0.7"/>
+
+ <g transform="translate(14 24)">
+ <def id="MIX1_PARAM" xlink:href="#button" transform="translate(1 9)"/>
+ <def id="MIX2_PARAM" xlink:href="#button" transform="translate(1 46)"/>
+ <def id="MIX3_PARAM" xlink:href="#button" transform="translate(1 83)"/>
+ <def id="MIX4_PARAM" xlink:href="#button" transform="translate(1 120)"/>
+ <def id="MIX5_PARAM" xlink:href="#button" transform="translate(1 157)"/>
+ <def id="MIX6_PARAM" xlink:href="#button" transform="translate(1 194)"/>
+ <def id="MIX7_PARAM" xlink:href="#button" transform="translate(1 231)"/>
+ <def id="MIX8_PARAM" xlink:href="#button" transform="translate(1 268)"/>
+ </g>
+
+ <g transform="translate(43 25)">
+ <g class="io-group" transform="translate(5.5 0)">
+ <rect class="output-background-filler" width="34" height="10" transform="translate(0 283)"/>
+ <rect class="output-background" width="34" height="293" rx="5"/>
+ <def id="OUT1_OUTPUT" xlink:href="#output" transform="translate(5 5)"/>
+ <def id="OUT2_OUTPUT" xlink:href="#output" transform="translate(5 42)"/>
+ <def id="OUT3_OUTPUT" xlink:href="#output" transform="translate(5 79)"/>
+ <def id="OUT4_OUTPUT" xlink:href="#output" transform="translate(5 116)"/>
+ <def id="OUT5_OUTPUT" xlink:href="#output" transform="translate(5 153)"/>
+ <def id="OUT6_OUTPUT" xlink:href="#output" transform="translate(5 190)"/>
+ <def id="OUT7_OUTPUT" xlink:href="#output" transform="translate(5 227)"/>
+ <def id="OUT8_OUTPUT" xlink:href="#output" transform="translate(5 264)"/>
+ </g>
+ <g class="io-group" transform="translate(5.5 295)">
+ <rect class="input-background-filler" width="34" height="10" transform="translate(0 -3)"/>
+ <rect class="input-background" width="34" height="38" rx="5"/>
+ <def id="IN_INPUT" xlink:href="#input" transform="translate(5 1)"/>
+ <text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(17 33)">IN</text>
+ </g>
+ </g>
+
+ <!-- <polyline class="guide" points="0,0 0,380" stroke-width="0.7" stroke="#0f0" transform="translate(24.5 0)" /> -->
+ <!-- <polyline class="guide" points="0,0 0,380" stroke-width="0.7" stroke="#0f0" transform="translate(65.5 0)" /> -->
+</module>
diff --git a/res/Matrix18-dark.svg b/res/Matrix18-dark.svg
Binary files differ.
diff --git a/res/Matrix18-lowcontrast.svg b/res/Matrix18-lowcontrast.svg
Binary files differ.
diff --git a/res/Matrix18.svg b/res/Matrix18.svg
Binary files differ.
diff --git a/res/Switch18-dark.svg b/res/Switch18-dark.svg
Binary files differ.
diff --git a/res/Switch18-lowcontrast.svg b/res/Switch18-lowcontrast.svg
Binary files differ.
diff --git a/res/Switch18.svg b/res/Switch18.svg
Binary files differ.
diff --git a/src/Matrix18.cpp b/src/Matrix18.cpp
@@ -0,0 +1,57 @@
+
+#include "Matrix18.hpp"
+
+struct Matrix18Widget : KnobMatrixModuleWidget {
+ static constexpr int hp = 6;
+
+ Matrix18Widget(Matrix18* module) {
+ setModule(module);
+ box.size = Vec(RACK_GRID_WIDTH * hp, RACK_GRID_HEIGHT);
+ setPanel(box.size, "Matrix18");
+ createScrews();
+
+ // generated by svg_widgets.rb
+ auto mix1ParamPosition = Vec(14.7, 32.2);
+ auto mix2ParamPosition = Vec(14.7, 69.2);
+ auto mix3ParamPosition = Vec(14.7, 106.2);
+ auto mix4ParamPosition = Vec(14.7, 143.2);
+ auto mix5ParamPosition = Vec(14.7, 180.2);
+ auto mix6ParamPosition = Vec(14.7, 217.2);
+ auto mix7ParamPosition = Vec(14.7, 254.2);
+ auto mix8ParamPosition = Vec(14.7, 291.2);
+
+ auto inInputPosition = Vec(53.5, 321.0);
+
+ auto out1OutputPosition = Vec(53.5, 30.0);
+ auto out2OutputPosition = Vec(53.5, 67.0);
+ auto out3OutputPosition = Vec(53.5, 104.0);
+ auto out4OutputPosition = Vec(53.5, 141.0);
+ auto out5OutputPosition = Vec(53.5, 178.0);
+ auto out6OutputPosition = Vec(53.5, 215.0);
+ auto out7OutputPosition = Vec(53.5, 252.0);
+ auto out8OutputPosition = Vec(53.5, 289.0);
+ // end generated by svg_widgets.rb
+
+ createKnob(mix1ParamPosition, module, Matrix18::MIX1_PARAM);
+ createKnob(mix2ParamPosition, module, Matrix18::MIX2_PARAM);
+ createKnob(mix3ParamPosition, module, Matrix18::MIX3_PARAM);
+ createKnob(mix4ParamPosition, module, Matrix18::MIX4_PARAM);
+ createKnob(mix5ParamPosition, module, Matrix18::MIX5_PARAM);
+ createKnob(mix6ParamPosition, module, Matrix18::MIX6_PARAM);
+ createKnob(mix7ParamPosition, module, Matrix18::MIX7_PARAM);
+ createKnob(mix8ParamPosition, module, Matrix18::MIX8_PARAM);
+
+ addInput(createInput<Port24>(inInputPosition, module, Matrix18::IN_INPUT));
+
+ addOutput(createOutput<Port24>(out1OutputPosition, module, Matrix18::OUT1_OUTPUT));
+ addOutput(createOutput<Port24>(out2OutputPosition, module, Matrix18::OUT2_OUTPUT));
+ addOutput(createOutput<Port24>(out3OutputPosition, module, Matrix18::OUT3_OUTPUT));
+ addOutput(createOutput<Port24>(out4OutputPosition, module, Matrix18::OUT4_OUTPUT));
+ addOutput(createOutput<Port24>(out5OutputPosition, module, Matrix18::OUT5_OUTPUT));
+ addOutput(createOutput<Port24>(out6OutputPosition, module, Matrix18::OUT6_OUTPUT));
+ addOutput(createOutput<Port24>(out7OutputPosition, module, Matrix18::OUT7_OUTPUT));
+ addOutput(createOutput<Port24>(out8OutputPosition, module, Matrix18::OUT8_OUTPUT));
+ }
+};
+
+Model* modelMatrix18 = createModel<Matrix18, Matrix18Widget>("Bogaudio-Matrix18", "MATRIX18", "8-way signal router with attenuverters", "Switch", "Polyphonic");
diff --git a/src/Matrix18.hpp b/src/Matrix18.hpp
@@ -0,0 +1,53 @@
+#pragma once
+
+#include "bogaudio.hpp"
+#include "matrix_base.hpp"
+
+extern Model* modelMatrix18;
+
+namespace bogaudio {
+
+struct Matrix18 : KnobMatrixModule {
+ enum ParamsIds {
+ MIX1_PARAM,
+ MIX2_PARAM,
+ MIX3_PARAM,
+ MIX4_PARAM,
+ MIX5_PARAM,
+ MIX6_PARAM,
+ MIX7_PARAM,
+ MIX8_PARAM,
+ NUM_PARAMS
+ };
+
+ enum InputsIds {
+ IN_INPUT,
+ NUM_INPUTS
+ };
+
+ enum OutputsIds {
+ OUT1_OUTPUT,
+ OUT2_OUTPUT,
+ OUT3_OUTPUT,
+ OUT4_OUTPUT,
+ OUT5_OUTPUT,
+ OUT6_OUTPUT,
+ OUT7_OUTPUT,
+ OUT8_OUTPUT,
+ NUM_OUTPUTS
+ };
+
+ Matrix18() : KnobMatrixModule(1, 8, MIX1_PARAM, IN_INPUT, OUT1_OUTPUT) {
+ config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS);
+ configParam(MIX1_PARAM, -1.0f, 1.0f, 0.0f, "Route 1", "%", 0.0f, 100.0f);
+ configParam(MIX2_PARAM, -1.0f, 1.0f, 0.0f, "Route 2", "%", 0.0f, 100.0f);
+ configParam(MIX3_PARAM, -1.0f, 1.0f, 0.0f, "Route 3", "%", 0.0f, 100.0f);
+ configParam(MIX4_PARAM, -1.0f, 1.0f, 0.0f, "Route 4", "%", 0.0f, 100.0f);
+ configParam(MIX5_PARAM, -1.0f, 1.0f, 0.0f, "Route 5", "%", 0.0f, 100.0f);
+ configParam(MIX6_PARAM, -1.0f, 1.0f, 0.0f, "Route 6", "%", 0.0f, 100.0f);
+ configParam(MIX7_PARAM, -1.0f, 1.0f, 0.0f, "Route 7", "%", 0.0f, 100.0f);
+ configParam(MIX8_PARAM, -1.0f, 1.0f, 0.0f, "Route 8", "%", 0.0f, 100.0f);
+ }
+};
+
+} // namespace bogaudio
diff --git a/src/Matrix81.cpp b/src/Matrix81.cpp
@@ -8,9 +8,7 @@ struct Matrix81Widget : KnobMatrixModuleWidget {
setModule(module);
box.size = Vec(RACK_GRID_WIDTH * hp, RACK_GRID_HEIGHT);
setPanel(box.size, "Matrix81");
-
- addChild(createWidget<ScrewSilver>(Vec(0, 0)));
- addChild(createWidget<ScrewSilver>(Vec(box.size.x - 15, 365)));
+ createScrews();
// generated by svg_widgets.rb
auto mix1ParamPosition = Vec(55.7, 32.2);
diff --git a/src/Switch18.cpp b/src/Switch18.cpp
@@ -0,0 +1,57 @@
+
+#include "Switch18.hpp"
+
+struct Switch18Widget : SwitchMatrixModuleWidget {
+ static constexpr int hp = 6;
+
+ Switch18Widget(Switch18* module) {
+ setModule(module);
+ box.size = Vec(RACK_GRID_WIDTH * hp, RACK_GRID_HEIGHT);
+ setPanel(box.size, "Switch18");
+ createScrews();
+
+ // generated by svg_widgets.rb
+ auto mix1ParamPosition = Vec(15.0, 33.0);
+ auto mix2ParamPosition = Vec(15.0, 70.0);
+ auto mix3ParamPosition = Vec(15.0, 107.0);
+ auto mix4ParamPosition = Vec(15.0, 144.0);
+ auto mix5ParamPosition = Vec(15.0, 181.0);
+ auto mix6ParamPosition = Vec(15.0, 218.0);
+ auto mix7ParamPosition = Vec(15.0, 255.0);
+ auto mix8ParamPosition = Vec(15.0, 292.0);
+
+ auto inInputPosition = Vec(53.5, 321.0);
+
+ auto out1OutputPosition = Vec(53.5, 30.0);
+ auto out2OutputPosition = Vec(53.5, 67.0);
+ auto out3OutputPosition = Vec(53.5, 104.0);
+ auto out4OutputPosition = Vec(53.5, 141.0);
+ auto out5OutputPosition = Vec(53.5, 178.0);
+ auto out6OutputPosition = Vec(53.5, 215.0);
+ auto out7OutputPosition = Vec(53.5, 252.0);
+ auto out8OutputPosition = Vec(53.5, 289.0);
+ // end generated by svg_widgets.rb
+
+ createSwitch<InvertingIndicatorButton18>(mix1ParamPosition, module, Switch18::MIX1_PARAM);
+ createSwitch<InvertingIndicatorButton18>(mix2ParamPosition, module, Switch18::MIX2_PARAM);
+ createSwitch<InvertingIndicatorButton18>(mix3ParamPosition, module, Switch18::MIX3_PARAM);
+ createSwitch<InvertingIndicatorButton18>(mix4ParamPosition, module, Switch18::MIX4_PARAM);
+ createSwitch<InvertingIndicatorButton18>(mix5ParamPosition, module, Switch18::MIX5_PARAM);
+ createSwitch<InvertingIndicatorButton18>(mix6ParamPosition, module, Switch18::MIX6_PARAM);
+ createSwitch<InvertingIndicatorButton18>(mix7ParamPosition, module, Switch18::MIX7_PARAM);
+ createSwitch<InvertingIndicatorButton18>(mix8ParamPosition, module, Switch18::MIX8_PARAM);
+
+ addInput(createInput<Port24>(inInputPosition, module, Switch18::IN_INPUT));
+
+ addOutput(createOutput<Port24>(out1OutputPosition, module, Switch18::OUT1_OUTPUT));
+ addOutput(createOutput<Port24>(out2OutputPosition, module, Switch18::OUT2_OUTPUT));
+ addOutput(createOutput<Port24>(out3OutputPosition, module, Switch18::OUT3_OUTPUT));
+ addOutput(createOutput<Port24>(out4OutputPosition, module, Switch18::OUT4_OUTPUT));
+ addOutput(createOutput<Port24>(out5OutputPosition, module, Switch18::OUT5_OUTPUT));
+ addOutput(createOutput<Port24>(out6OutputPosition, module, Switch18::OUT6_OUTPUT));
+ addOutput(createOutput<Port24>(out7OutputPosition, module, Switch18::OUT7_OUTPUT));
+ addOutput(createOutput<Port24>(out8OutputPosition, module, Switch18::OUT8_OUTPUT));
+ }
+};
+
+Model* modelSwitch18 = createModel<Switch18, Switch18Widget>("Bogaudio-Switch18", "SWITCH18", "8-way signal router", "Switch", "Polyphonic");
diff --git a/src/Switch18.hpp b/src/Switch18.hpp
@@ -0,0 +1,53 @@
+#pragma once
+
+#include "bogaudio.hpp"
+#include "matrix_base.hpp"
+
+extern Model* modelSwitch18;
+
+namespace bogaudio {
+
+struct Switch18 : SwitchMatrixModule {
+ enum ParamsIds {
+ MIX1_PARAM,
+ MIX2_PARAM,
+ MIX3_PARAM,
+ MIX4_PARAM,
+ MIX5_PARAM,
+ MIX6_PARAM,
+ MIX7_PARAM,
+ MIX8_PARAM,
+ NUM_PARAMS
+ };
+
+ enum InputsIds {
+ IN_INPUT,
+ NUM_INPUTS
+ };
+
+ enum OutputsIds {
+ OUT1_OUTPUT,
+ OUT2_OUTPUT,
+ OUT3_OUTPUT,
+ OUT4_OUTPUT,
+ OUT5_OUTPUT,
+ OUT6_OUTPUT,
+ OUT7_OUTPUT,
+ OUT8_OUTPUT,
+ NUM_OUTPUTS
+ };
+
+ Switch18() : SwitchMatrixModule(1, 8, MIX1_PARAM, IN_INPUT, OUT1_OUTPUT) {
+ config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS);
+ configSwitchParam(MIX1_PARAM, "Route 1");
+ configSwitchParam(MIX2_PARAM, "Route 2");
+ configSwitchParam(MIX3_PARAM, "Route 3");
+ configSwitchParam(MIX4_PARAM, "Route 4");
+ configSwitchParam(MIX5_PARAM, "Route 5");
+ configSwitchParam(MIX6_PARAM, "Route 6");
+ configSwitchParam(MIX7_PARAM, "Route 7");
+ configSwitchParam(MIX8_PARAM, "Route 8");
+ }
+};
+
+} // namespace bogaudio
diff --git a/src/Switch81.cpp b/src/Switch81.cpp
@@ -8,9 +8,7 @@ struct Switch81Widget : SwitchMatrixModuleWidget {
setModule(module);
box.size = Vec(RACK_GRID_WIDTH * hp, RACK_GRID_HEIGHT);
setPanel(box.size, "Switch81");
-
- addChild(createWidget<ScrewSilver>(Vec(0, 0)));
- addChild(createWidget<ScrewSilver>(Vec(box.size.x - 15, 365)));
+ createScrews();
// generated by svg_widgets.rb
auto mix1ParamPosition = Vec(56.5, 33.0);
diff --git a/src/bogaudio.cpp b/src/bogaudio.cpp
@@ -45,6 +45,7 @@
#include "LVCF.hpp"
#include "LVCO.hpp"
#include "Manual.hpp"
+#include "Matrix18.hpp"
#include "Matrix44.hpp"
#include "Matrix81.hpp"
#include "Matrix88.hpp"
@@ -92,6 +93,7 @@
#include "Sums.hpp"
#include "Switch.hpp"
#include "Switch1616.hpp"
+#include "Switch18.hpp"
#include "Switch44.hpp"
#include "Switch81.hpp"
#include "Switch88.hpp"
@@ -184,9 +186,11 @@ void init(rack::Plugin *p) {
p->addModel(modelUMix);
p->addModel(modelMumix);
p->addModel(modelMatrix81);
+ p->addModel(modelMatrix18);
p->addModel(modelMatrix44);
p->addModel(modelMatrix88);
p->addModel(modelSwitch81);
+ p->addModel(modelSwitch18);
p->addModel(modelSwitch44);
p->addModel(modelSwitch88);
p->addModel(modelSwitch1616);
diff --git a/src/matrix_base.cpp b/src/matrix_base.cpp
@@ -41,26 +41,6 @@ void MatrixBaseModule::modulate() {
}
-void MatrixBaseModuleWidget::contextMenu(Menu* menu) {
- auto m = dynamic_cast<MatrixBaseModule*>(module);
- assert(m);
-
- OptionsMenuItem* g = new OptionsMenuItem("Input gain");
- g->addItem(OptionMenuItem("Unity", [m]() { return (int)m->_inputGainDb == 0; }, [m]() { m->_inputGainDb = 0.0f; }));
- g->addItem(OptionMenuItem("-3db", [m]() { return (int)m->_inputGainDb == -3; }, [m]() { m->_inputGainDb = -3.0f; }));
- g->addItem(OptionMenuItem("-6db", [m]() { return (int)m->_inputGainDb == -6; }, [m]() { m->_inputGainDb = -6.0f; }));
- g->addItem(OptionMenuItem("-12db", [m]() { return (int)m->_inputGainDb == -12; }, [m]() { m->_inputGainDb = -12.0f; }));
- OptionsMenuItem::addToMenu(g, menu);
-
- OptionsMenuItem* c = new OptionsMenuItem("Output clipping");
- c->addItem(OptionMenuItem("Soft/saturated (better for audio)", [m]() { return m->_clippingMode == MatrixBaseModule::SOFT_CLIPPING; }, [m]() { m->_clippingMode = MatrixBaseModule::SOFT_CLIPPING; }));
- c->addItem(OptionMenuItem("Hard/clipped (better for CV)", [m]() { return m->_clippingMode == MatrixBaseModule::HARD_CLIPPING; }, [m]() { m->_clippingMode = MatrixBaseModule::HARD_CLIPPING; }));
- OptionsMenuItem::addToMenu(c, menu);
-
- menu->addChild(new OptionMenuItem("Average", [m]() { return !m->_sum; }, [m]() { m->_sum = !m->_sum; }));
-}
-
-
void MatrixModule::sampleRateChange() {
float sr = APP->engine->getSampleRate();
for (int i = 0, n = _ins * _outs; i < n; ++i) {
@@ -83,7 +63,7 @@ void MatrixModule::modulate() {
}
for (int j = 0; j < _outs; ++j) {
- int ii = j * _outs + i;
+ int ii = j * _ins + i;
_paramValues[ii] = _sls[ii].next(params[_firstParamID + ii].getValue());
}
}
@@ -106,7 +86,7 @@ void MatrixModule::processChannel(const ProcessArgs& args, int c) {
float out = 0.0f;
for (int j = 0; j < _ins; ++j) {
if (_inActive[j]) {
- out += in[j] * _paramValues[i * _outs + j];
+ out += in[j] * _paramValues[i * _ins + j];
}
}
if (!_sum && _invActive > 0.0f) {
@@ -124,6 +104,28 @@ void MatrixModule::processChannel(const ProcessArgs& args, int c) {
}
+void MatrixModuleWidget::contextMenu(Menu* menu) {
+ auto m = dynamic_cast<MatrixModule*>(module);
+ assert(m);
+
+ if (m->_ins > 1) {
+ OptionsMenuItem* g = new OptionsMenuItem("Input gain");
+ g->addItem(OptionMenuItem("Unity", [m]() { return (int)m->_inputGainDb == 0; }, [m]() { m->_inputGainDb = 0.0f; }));
+ g->addItem(OptionMenuItem("-3db", [m]() { return (int)m->_inputGainDb == -3; }, [m]() { m->_inputGainDb = -3.0f; }));
+ g->addItem(OptionMenuItem("-6db", [m]() { return (int)m->_inputGainDb == -6; }, [m]() { m->_inputGainDb = -6.0f; }));
+ g->addItem(OptionMenuItem("-12db", [m]() { return (int)m->_inputGainDb == -12; }, [m]() { m->_inputGainDb = -12.0f; }));
+ OptionsMenuItem::addToMenu(g, menu);
+
+ OptionsMenuItem* c = new OptionsMenuItem("Output clipping");
+ c->addItem(OptionMenuItem("Soft/saturated (better for audio)", [m]() { return m->_clippingMode == MatrixBaseModule::SOFT_CLIPPING; }, [m]() { m->_clippingMode = MatrixBaseModule::SOFT_CLIPPING; }));
+ c->addItem(OptionMenuItem("Hard/clipped (better for CV)", [m]() { return m->_clippingMode == MatrixBaseModule::HARD_CLIPPING; }, [m]() { m->_clippingMode = MatrixBaseModule::HARD_CLIPPING; }));
+ OptionsMenuItem::addToMenu(c, menu);
+
+ menu->addChild(new OptionMenuItem("Average", [m]() { return !m->_sum; }, [m]() { m->_sum = !m->_sum; }));
+ }
+}
+
+
#define INDICATOR_KNOBS "indicator_knobs"
json_t* KnobMatrixModule::toJson(json_t* root) {
@@ -159,7 +161,7 @@ void KnobMatrixModuleWidget::redrawKnobs() {
void KnobMatrixModuleWidget::contextMenu(Menu* menu) {
auto m = dynamic_cast<KnobMatrixModule*>(module);
assert(m);
- MatrixBaseModuleWidget::contextMenu(menu);
+ MatrixModuleWidget::contextMenu(menu);
menu->addChild(new OptionMenuItem(
"Indicator knobs",
[m]() { return m->_indicatorKnobs; },
@@ -321,7 +323,7 @@ void SwitchMatrixModule::setColumnExclusive(bool e) {
void SwitchMatrixModuleWidget::contextMenu(Menu* menu) {
auto m = dynamic_cast<SwitchMatrixModule*>(module);
assert(m);
- MatrixBaseModuleWidget::contextMenu(menu);
+ MatrixModuleWidget::contextMenu(menu);
OptionsMenuItem* i = new OptionsMenuItem("Inverting");
i->addItem(OptionMenuItem("By param entry (right-click)", [m]() { return m->_inverting == SwitchMatrixModule::PARAM_INVERTING; }, [m]() { m->setInverting(SwitchMatrixModule::PARAM_INVERTING); }));
@@ -329,11 +331,18 @@ void SwitchMatrixModuleWidget::contextMenu(Menu* menu) {
i->addItem(OptionMenuItem("Disabled", [m]() { return m->_inverting == SwitchMatrixModule::NO_INVERTING; }, [m]() { m->setInverting(SwitchMatrixModule::NO_INVERTING); }));
OptionsMenuItem::addToMenu(i, menu);
- if (m->_ins > 1 && m->_outs > 1) {
- menu->addChild(new OptionMenuItem("Exclusive by rows", [m]() { return m->_rowExclusive; }, [m]() { m->setRowExclusive(!m->_rowExclusive); }));
- menu->addChild(new OptionMenuItem("Exclusive by columns", [m]() { return m->_columnExclusive; }, [m]() { m->setColumnExclusive(!m->_columnExclusive); }));
+ if (m->_ins > 1) {
+ std::string label("Exclusive");
+ if (m->_outs > 1) {
+ label += " by rows";
+ }
+ menu->addChild(new OptionMenuItem(label.c_str(), [m]() { return m->_columnExclusive; }, [m]() { m->setColumnExclusive(!m->_columnExclusive); }));
}
- else {
- menu->addChild(new OptionMenuItem("Exclusive", [m]() { return m->_columnExclusive; }, [m]() { m->setColumnExclusive(!m->_columnExclusive); }));
+ if (m->_outs > 1) {
+ std::string label("Exclusive");
+ if (m->_ins > 1) {
+ label += " by columns";
+ }
+ menu->addChild(new OptionMenuItem(label.c_str(), [m]() { return m->_rowExclusive; }, [m]() { m->setRowExclusive(!m->_rowExclusive); }));
}
}
diff --git a/src/matrix_base.hpp b/src/matrix_base.hpp
@@ -26,7 +26,6 @@ struct MatrixBaseModule : BGModule {
};
struct MatrixBaseModuleWidget : BGModuleWidget {
- void contextMenu(Menu* menu) override;
};
struct MatrixModule : MatrixBaseModule {
@@ -70,6 +69,10 @@ struct MatrixModule : MatrixBaseModule {
void processChannel(const ProcessArgs& args, int c) override;
};
+struct MatrixModuleWidget : MatrixBaseModuleWidget {
+ void contextMenu(Menu* menu) override;
+};
+
struct KnobMatrixModule : MatrixModule {
bool _indicatorKnobs = true;
@@ -81,7 +84,7 @@ struct KnobMatrixModule : MatrixModule {
void fromJson(json_t* root) override;
};
-struct KnobMatrixModuleWidget : MatrixBaseModuleWidget {
+struct KnobMatrixModuleWidget : MatrixModuleWidget {
std::vector<IndicatorKnob19*> _knobs;
void createKnob(math::Vec& position, KnobMatrixModule* module, int id);
@@ -114,7 +117,7 @@ struct SwitchMatrixModule : MatrixModule {
void setColumnExclusive(bool e);
};
-struct SwitchMatrixModuleWidget : MatrixBaseModuleWidget {
+struct SwitchMatrixModuleWidget : MatrixModuleWidget {
template<class W> void createSwitch(math::Vec& position, SwitchMatrixModule* module, int id) {
auto s = dynamic_cast<W*>(createParam<W>(position, module, id));
if (module) {