BogaudioModules

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

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:
MREADME-prerelease.md | 16++++++++++++++++
Mplugin.json | 20++++++++++++++++++++
Ares-pp/Matrix18-dark-pp.svg | 372+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ares-pp/Matrix18-lowcontrast-pp.svg | 372+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ares-pp/Matrix18-pp.svg | 308+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ares-pp/Switch18-dark-pp.svg | 268+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ares-pp/Switch18-lowcontrast-pp.svg | 268+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ares-pp/Switch18-pp.svg | 204+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ares-src/Matrix18-src.svg | 65+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ares-src/Switch18-src.svg | 40++++++++++++++++++++++++++++++++++++++++
Ares/Matrix18-dark.svg | 0
Ares/Matrix18-lowcontrast.svg | 0
Ares/Matrix18.svg | 0
Ares/Switch18-dark.svg | 0
Ares/Switch18-lowcontrast.svg | 0
Ares/Switch18.svg | 0
Asrc/Matrix18.cpp | 57+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/Matrix18.hpp | 53+++++++++++++++++++++++++++++++++++++++++++++++++++++
Msrc/Matrix81.cpp | 4+---
Asrc/Switch18.cpp | 57+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/Switch18.hpp | 53+++++++++++++++++++++++++++++++++++++++++++++++++++++
Msrc/Switch81.cpp | 4+---
Msrc/bogaudio.cpp | 4++++
Msrc/matrix_base.cpp | 67++++++++++++++++++++++++++++++++++++++-----------------------------
Msrc/matrix_base.hpp | 9++++++---
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) {