commit 55160dcfe3756175275dfeb64ccbac891de89657
parent 962bb0429d7bf7943cfa569ecd11c19d728c64d6
Author: Matt Demanett <matt@demanett.net>
Date: Mon, 14 Sep 2020 23:24:00 -0400
VISH: drop VELO input, add SHAPE. MEGAGATE: add shape.
Diffstat:
22 files changed, 266 insertions(+), 110 deletions(-)
diff --git a/res-pp/MegaGate-dark-pp.svg b/res-pp/MegaGate-dark-pp.svg
@@ -449,23 +449,23 @@ polyline.knob-tick {
</g>
<g class="io-group" transform="translate(8 284)">
- <rect class="input-background" width="120" height="37.5" rx="5" transform="translate(7 0)"/>
+ <rect class="input-background" width="120" height="76.5" rx="5" transform="translate(7 0)"/>
<rect class="input-background-filler" width="10" height="10" transform="translate(117 27.5)"/>
- <g transform="translate(10.5 3)"><svg id="GATE_INPUT">
+ <g transform="translate(10.5 3)"><svg id="VELOCITY_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(22.5 35)">GATE</text>
- <g transform="translate(40.5 3)"><svg id="VELOCITY_INPUT">
+ <text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(22.5 35)">VELO</text>
+ <g transform="translate(40.5 3)"><svg id="SHAPE_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(52.5 35)">VELO</text>
+ <text class="input-label" font-size="5pt" letter-spacing="1.5px" text-anchor="middle" transform="translate(52.5 35)">SHAPE</text>
<g transform="translate(70.5 3)"><svg id="LEFT_INPUT">
<g transform="translate(12 12)">
<circle cx="0" cy="0" r="5" stroke-width="1" stroke="#0f0" fill="#0f0"/>
@@ -480,10 +480,18 @@ polyline.knob-tick {
</g>
</svg></g>
<text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(112.5 35)">R(L)</text>
+ <g transform="translate(10.5 40)"><svg id="GATE_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(22.5 72)">GATE</text>
<g transform="translate(30, 0)">
<rect class="output-background" width="90" height="39" rx="5" transform="translate(7 37.5)"/>
<rect class="output-background-filler" width="90" height="10" transform="translate(7 37.5)"/>
+ <rect class="output-background-filler" width="10" height="10" transform="translate(7 66.5)"/>
<g transform="translate(10.5 40)"><svg id="ENV_OUTPUT">
<g transform="translate(12 12)">
<circle cx="0" cy="0" r="5" stroke-width="1" stroke="#f00" fill="#f00"/>
diff --git a/res-pp/MegaGate-lowcontrast-pp.svg b/res-pp/MegaGate-lowcontrast-pp.svg
@@ -449,23 +449,23 @@ polyline.knob-tick {
</g>
<g class="io-group" transform="translate(8 284)">
- <rect class="input-background" width="120" height="37.5" rx="5" transform="translate(7 0)"/>
+ <rect class="input-background" width="120" height="76.5" rx="5" transform="translate(7 0)"/>
<rect class="input-background-filler" width="10" height="10" transform="translate(117 27.5)"/>
- <g transform="translate(10.5 3)"><svg id="GATE_INPUT">
+ <g transform="translate(10.5 3)"><svg id="VELOCITY_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(22.5 35)">GATE</text>
- <g transform="translate(40.5 3)"><svg id="VELOCITY_INPUT">
+ <text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(22.5 35)">VELO</text>
+ <g transform="translate(40.5 3)"><svg id="SHAPE_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(52.5 35)">VELO</text>
+ <text class="input-label" font-size="5pt" letter-spacing="1.5px" text-anchor="middle" transform="translate(52.5 35)">SHAPE</text>
<g transform="translate(70.5 3)"><svg id="LEFT_INPUT">
<g transform="translate(12 12)">
<circle cx="0" cy="0" r="5" stroke-width="1" stroke="#0f0" fill="#0f0"/>
@@ -480,10 +480,18 @@ polyline.knob-tick {
</g>
</svg></g>
<text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(112.5 35)">R(L)</text>
+ <g transform="translate(10.5 40)"><svg id="GATE_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(22.5 72)">GATE</text>
<g transform="translate(30, 0)">
<rect class="output-background" width="90" height="39" rx="5" transform="translate(7 37.5)"/>
<rect class="output-background-filler" width="90" height="10" transform="translate(7 37.5)"/>
+ <rect class="output-background-filler" width="10" height="10" transform="translate(7 66.5)"/>
<g transform="translate(10.5 40)"><svg id="ENV_OUTPUT">
<g transform="translate(12 12)">
<circle cx="0" cy="0" r="5" stroke-width="1" stroke="#f00" fill="#f00"/>
diff --git a/res-pp/MegaGate-pp.svg b/res-pp/MegaGate-pp.svg
@@ -385,23 +385,23 @@ polyline.knob-tick {
</g>
<g class="io-group" transform="translate(8 284)">
- <rect class="input-background" width="120" height="37.5" rx="5" transform="translate(7 0)"/>
+ <rect class="input-background" width="120" height="76.5" rx="5" transform="translate(7 0)"/>
<rect class="input-background-filler" width="10" height="10" transform="translate(117 27.5)"/>
- <g transform="translate(10.5 3)"><svg id="GATE_INPUT">
+ <g transform="translate(10.5 3)"><svg id="VELOCITY_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(22.5 35)">GATE</text>
- <g transform="translate(40.5 3)"><svg id="VELOCITY_INPUT">
+ <text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(22.5 35)">VELO</text>
+ <g transform="translate(40.5 3)"><svg id="SHAPE_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(52.5 35)">VELO</text>
+ <text class="input-label" font-size="5pt" letter-spacing="1.5px" text-anchor="middle" transform="translate(52.5 35)">SHAPE</text>
<g transform="translate(70.5 3)"><svg id="LEFT_INPUT">
<g transform="translate(12 12)">
<circle cx="0" cy="0" r="5" stroke-width="1" stroke="#0f0" fill="#0f0"/>
@@ -416,10 +416,18 @@ polyline.knob-tick {
</g>
</svg></g>
<text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(112.5 35)">R(L)</text>
+ <g transform="translate(10.5 40)"><svg id="GATE_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(22.5 72)">GATE</text>
<g transform="translate(30, 0)">
<rect class="output-background" width="90" height="39" rx="5" transform="translate(7 37.5)"/>
<rect class="output-background-filler" width="90" height="10" transform="translate(7 37.5)"/>
+ <rect class="output-background-filler" width="10" height="10" transform="translate(7 66.5)"/>
<g transform="translate(10.5 40)"><svg id="ENV_OUTPUT">
<g transform="translate(12 12)">
<circle cx="0" cy="0" r="5" stroke-width="1" stroke="#f00" fill="#f00"/>
diff --git a/res-pp/Vish-dark-pp.svg b/res-pp/Vish-dark-pp.svg
@@ -312,34 +312,34 @@ polyline.knob-tick {
<g transform="translate(0 248)">
<rect class="input-background" width="64" height="112" rx="5" transform="translate(5.5 0)"/>
- <g transform="translate(10.5 3)"><svg id="MINIMUM_GATE_INPUT">
+ <g transform="translate(10.5 3)"><svg id="RISE_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(22.5 35)">MIN</text>
- <g transform="translate(40.5 3)"><svg id="RISE_INPUT">
+ <text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(22.5 35)">RISE</text>
+ <g transform="translate(40.5 3)"><svg id="MINIMUM_GATE_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(52.5 35)">RISE</text>
- <g transform="translate(10.5 40)"><svg id="VELOCITY_INPUT">
+ <text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(52.5 35)">MIN</text>
+ <g transform="translate(10.5 40)"><svg id="FALL_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(22.5 72)">VELO</text>
- <g transform="translate(40.5 40)"><svg id="FALL_INPUT">
+ <text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(22.5 72)">FALL</text>
+ <g transform="translate(40.5 40)"><svg id="SHAPE_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(52.5 72)">FALL</text>
+ <text class="input-label" font-size="5pt" letter-spacing="1.5px" text-anchor="middle" transform="translate(52.5 72)">SHAPE</text>
<g transform="translate(10.5 77)"><svg id="GATE_INPUT">
<g transform="translate(12 12)">
<circle cx="0" cy="0" r="5" stroke-width="1" stroke="#0f0" fill="#0f0"/>
diff --git a/res-pp/Vish-lowcontrast-pp.svg b/res-pp/Vish-lowcontrast-pp.svg
@@ -312,34 +312,34 @@ polyline.knob-tick {
<g transform="translate(0 248)">
<rect class="input-background" width="64" height="112" rx="5" transform="translate(5.5 0)"/>
- <g transform="translate(10.5 3)"><svg id="MINIMUM_GATE_INPUT">
+ <g transform="translate(10.5 3)"><svg id="RISE_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(22.5 35)">MIN</text>
- <g transform="translate(40.5 3)"><svg id="RISE_INPUT">
+ <text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(22.5 35)">RISE</text>
+ <g transform="translate(40.5 3)"><svg id="MINIMUM_GATE_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(52.5 35)">RISE</text>
- <g transform="translate(10.5 40)"><svg id="VELOCITY_INPUT">
+ <text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(52.5 35)">MIN</text>
+ <g transform="translate(10.5 40)"><svg id="FALL_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(22.5 72)">VELO</text>
- <g transform="translate(40.5 40)"><svg id="FALL_INPUT">
+ <text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(22.5 72)">FALL</text>
+ <g transform="translate(40.5 40)"><svg id="SHAPE_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(52.5 72)">FALL</text>
+ <text class="input-label" font-size="5pt" letter-spacing="1.5px" text-anchor="middle" transform="translate(52.5 72)">SHAPE</text>
<g transform="translate(10.5 77)"><svg id="GATE_INPUT">
<g transform="translate(12 12)">
<circle cx="0" cy="0" r="5" stroke-width="1" stroke="#0f0" fill="#0f0"/>
diff --git a/res-pp/Vish-pp.svg b/res-pp/Vish-pp.svg
@@ -248,34 +248,34 @@ polyline.knob-tick {
<g transform="translate(0 248)">
<rect class="input-background" width="64" height="112" rx="5" transform="translate(5.5 0)"/>
- <g transform="translate(10.5 3)"><svg id="MINIMUM_GATE_INPUT">
+ <g transform="translate(10.5 3)"><svg id="RISE_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(22.5 35)">MIN</text>
- <g transform="translate(40.5 3)"><svg id="RISE_INPUT">
+ <text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(22.5 35)">RISE</text>
+ <g transform="translate(40.5 3)"><svg id="MINIMUM_GATE_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(52.5 35)">RISE</text>
- <g transform="translate(10.5 40)"><svg id="VELOCITY_INPUT">
+ <text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(52.5 35)">MIN</text>
+ <g transform="translate(10.5 40)"><svg id="FALL_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(22.5 72)">VELO</text>
- <g transform="translate(40.5 40)"><svg id="FALL_INPUT">
+ <text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(22.5 72)">FALL</text>
+ <g transform="translate(40.5 40)"><svg id="SHAPE_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(52.5 72)">FALL</text>
+ <text class="input-label" font-size="5pt" letter-spacing="1.5px" text-anchor="middle" transform="translate(52.5 72)">SHAPE</text>
<g transform="translate(10.5 77)"><svg id="GATE_INPUT">
<g transform="translate(12 12)">
<circle cx="0" cy="0" r="5" stroke-width="1" stroke="#0f0" fill="#0f0"/>
diff --git a/res-src/MegaGate-src.svg b/res-src/MegaGate-src.svg
@@ -117,21 +117,24 @@
</g>
<g class="io-group" transform="translate(8 284)">
- <rect class="input-background" width="120" height="37.5" rx="5" transform="translate(7 0)" />
+ <rect class="input-background" width="120" height="76.5" rx="5" transform="translate(7 0)" />
<rect class="input-background-filler" width="10" height="10" transform="translate(117 27.5)" />
- <def id="GATE_INPUT" xlink:href="#input" transform="translate(10.5 3)"/>
- <text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(22.5 35)">GATE</text>
- <def id="VELOCITY_INPUT" xlink:href="#input" transform="translate(40.5 3)"/>
- <text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(52.5 35)">VELO</text>
+ <def id="VELOCITY_INPUT" xlink:href="#input" transform="translate(10.5 3)"/>
+ <text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(22.5 35)">VELO</text>
+ <def id="SHAPE_INPUT" xlink:href="#input" transform="translate(40.5 3)"/>
+ <text class="input-label" font-size="5pt" letter-spacing="1.5px" text-anchor="middle" transform="translate(52.5 35)">SHAPE</text>
<def id="LEFT_INPUT" xlink:href="#input" transform="translate(70.5 3)"/>
<text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(82.5 35)">L</text>
<def id="RIGHT_INPUT" xlink:href="#input" transform="translate(100.5 3)"/>
<text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(112.5 35)">R(L)</text>
+ <def id="GATE_INPUT" xlink:href="#input" transform="translate(10.5 40)"/>
+ <text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(22.5 72)">GATE</text>
<g transform="translate(30, 0)">
<rect class="output-background" width="90" height="39" rx="5" transform="translate(7 37.5)"/>
<rect class="output-background-filler" width="90" height="10" transform="translate(7 37.5)"/>
+ <rect class="output-background-filler" width="10" height="10" transform="translate(7 66.5)"/>
<def id="ENV_OUTPUT" xlink:href="#output" transform="translate(10.5 40)"/>
<text class="output-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(22.5 72)">ENV</text>
<def id="LEFT_OUTPUT" xlink:href="#output" transform="translate(40.5 40)"/>
diff --git a/res-src/Vish-src.svg b/res-src/Vish-src.svg
@@ -39,14 +39,14 @@
<g transform="translate(0 248)">
<rect class="input-background" width="64" height="112" rx="5" transform="translate(5.5 0)"/>
- <def id="MINIMUM_GATE_INPUT" xlink:href="#input" transform="translate(10.5 3)"/>
- <text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(22.5 35)">MIN</text>
- <def id="RISE_INPUT" xlink:href="#input" transform="translate(40.5 3)"/>
- <text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(52.5 35)">RISE</text>
- <def id="VELOCITY_INPUT" xlink:href="#input" transform="translate(10.5 40)"/>
- <text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(22.5 72)">VELO</text>
- <def id="FALL_INPUT" xlink:href="#input" transform="translate(40.5 40)"/>
- <text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(52.5 72)">FALL</text>
+ <def id="RISE_INPUT" xlink:href="#input" transform="translate(10.5 3)"/>
+ <text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(22.5 35)">RISE</text>
+ <def id="MINIMUM_GATE_INPUT" xlink:href="#input" transform="translate(40.5 3)"/>
+ <text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(52.5 35)">MIN</text>
+ <def id="FALL_INPUT" xlink:href="#input" transform="translate(10.5 40)"/>
+ <text class="input-label" font-size="5pt" letter-spacing="2px" text-anchor="middle" transform="translate(22.5 72)">FALL</text>
+ <def id="SHAPE_INPUT" xlink:href="#input" transform="translate(40.5 40)"/>
+ <text class="input-label" font-size="5pt" letter-spacing="1.5px" text-anchor="middle" transform="translate(52.5 72)">SHAPE</text>
<def id="GATE_INPUT" xlink:href="#input" transform="translate(10.5 77)"/>
<text class="input-label" font-size="5pt" letter-spacing="1px" text-anchor="middle" transform="translate(22.5 109)">GATE</text>
<g class="io-group" transform="translate(30 72)">
diff --git a/res/MegaGate-dark.svg b/res/MegaGate-dark.svg
Binary files differ.
diff --git a/res/MegaGate-lowcontrast.svg b/res/MegaGate-lowcontrast.svg
Binary files differ.
diff --git a/res/MegaGate.svg b/res/MegaGate.svg
Binary files differ.
diff --git a/res/Vish-dark.svg b/res/Vish-dark.svg
Binary files differ.
diff --git a/res/Vish-lowcontrast.svg b/res/Vish-lowcontrast.svg
Binary files differ.
diff --git a/res/Vish.svg b/res/Vish.svg
Binary files differ.
diff --git a/src/MegaGate.cpp b/src/MegaGate.cpp
@@ -2,6 +2,8 @@
#include "MegaGate.hpp"
#include "dsp/pitch.hpp"
+#define VELOCITY_MINIMUM_DECIBELS "velocity_minimum_decibels"
+
void MegaGate::Engine::reset() {
trigger.reset();
gatePulseGen.process(10.0);
@@ -30,6 +32,20 @@ void MegaGate::sampleRateChange() {
}
}
+json_t* MegaGate::toJson(json_t* root) {
+ root = LPGEnvBaseModule::toJson(root);
+ json_object_set_new(root, VELOCITY_MINIMUM_DECIBELS, json_real(_minVelocityDb));
+ return root;
+}
+
+void MegaGate::fromJson(json_t* root) {
+ LPGEnvBaseModule::fromJson(root);
+ json_t* mdb = json_object_get(root, VELOCITY_MINIMUM_DECIBELS);
+ if (mdb) {
+ _minVelocityDb = json_real_value(mdb);
+ }
+}
+
bool MegaGate::active() {
return outputs[LEFT_OUTPUT].isConnected() || outputs[RIGHT_OUTPUT].isConnected() || outputs[ENV_OUTPUT].isConnected();
}
@@ -60,7 +76,11 @@ void MegaGate::modulateChannel(int c) {
&inputs[FALL_INPUT],
1000.0f * _timeScale,
params[FALL_SHAPE_PARAM],
- c
+ c,
+ false,
+ &inputs[SHAPE_INPUT],
+ _riseShapeMode,
+ _fallShapeMode
);
}
@@ -329,10 +349,11 @@ struct MegaGateWidget : LPGEnvBaseWidget {
auto fallInputPosition = Vec(75.5, 118.0);
auto minimumGateInputPosition = Vec(20.5, 220.0);
auto tiltInputPosition = Vec(75.5, 220.0);
- auto gateInputPosition = Vec(8.5, 287.0);
- auto velocityInputPosition = Vec(38.5, 287.0);
+ auto velocityInputPosition = Vec(8.5, 287.0);
+ auto shapeInputPosition = Vec(38.5, 287.0);
auto leftInputPosition = Vec(68.5, 287.0);
auto rightInputPosition = Vec(98.5, 287.0);
+ auto gateInputPosition = Vec(8.5, 324.0);
auto lpfEnvInputPosition = Vec(139.0, 106.0);
auto lpfBiasInputPosition = Vec(189.0, 106.0);
auto hpfEnvInputPosition = Vec(139.0, 221.0);
@@ -383,10 +404,11 @@ struct MegaGateWidget : LPGEnvBaseWidget {
addInput(createInput<Port24>(fallInputPosition, module, MegaGate::FALL_INPUT));
addInput(createInput<Port24>(minimumGateInputPosition, module, MegaGate::MINIMUM_GATE_INPUT));
addInput(createInput<Port24>(tiltInputPosition, module, MegaGate::TILT_INPUT));
- addInput(createInput<Port24>(gateInputPosition, module, MegaGate::GATE_INPUT));
addInput(createInput<Port24>(velocityInputPosition, module, MegaGate::VELOCITY_INPUT));
+ addInput(createInput<Port24>(shapeInputPosition, module, MegaGate::SHAPE_INPUT));
addInput(createInput<Port24>(leftInputPosition, module, MegaGate::LEFT_INPUT));
addInput(createInput<Port24>(rightInputPosition, module, MegaGate::RIGHT_INPUT));
+ addInput(createInput<Port24>(gateInputPosition, module, MegaGate::GATE_INPUT));
addInput(createInput<Port24>(lpfEnvInputPosition, module, MegaGate::LPF_ENV_INPUT));
addInput(createInput<Port24>(lpfBiasInputPosition, module, MegaGate::LPF_BIAS_INPUT));
addInput(createInput<Port24>(hpfEnvInputPosition, module, MegaGate::HPF_ENV_INPUT));
@@ -407,6 +429,19 @@ struct MegaGateWidget : LPGEnvBaseWidget {
addChild(createLight<SmallLight<GreenLight>>(hpfPoles3LightPosition, module, MegaGate::HPF_POLES_3_LIGHT));
addChild(createLight<SmallLight<GreenLight>>(hpfPoles4LightPosition, module, MegaGate::HPF_POLES_4_LIGHT));
}
+
+ void contextMenu(Menu* menu) {
+ LPGEnvBaseWidget::contextMenu(menu);
+ auto m = dynamic_cast<MegaGate*>(module);
+ assert(m);
+ OptionsMenuItem* mi = new OptionsMenuItem("Minimum velocity output gain");
+ mi->addItem(OptionMenuItem("-3db", [m]() { return m->_minVelocityDb == -3.0f; }, [m]() { m->_minVelocityDb = -3.0f; }));
+ mi->addItem(OptionMenuItem("-6db", [m]() { return m->_minVelocityDb == -6.0f; }, [m]() { m->_minVelocityDb = -6.0f; }));
+ mi->addItem(OptionMenuItem("-12db", [m]() { return m->_minVelocityDb == -12.0f; }, [m]() { m->_minVelocityDb = -12.0f; }));
+ mi->addItem(OptionMenuItem("-24db", [m]() { return m->_minVelocityDb == -24.0f; }, [m]() { m->_minVelocityDb = -24.0f; }));
+ mi->addItem(OptionMenuItem("-60db", [m]() { return m->_minVelocityDb == -60.0f; }, [m]() { m->_minVelocityDb = -60.0f; }));
+ OptionsMenuItem::addToMenu(mi, menu);
+ }
};
Model* modelMegaGate = createModel<MegaGate, MegaGateWidget>("Bogaudio-MegaGate", "MEGAGATE", "Low- and high-pass gate", "Low-pass gate", "Dual", "Polyphonic");
diff --git a/src/MegaGate.hpp b/src/MegaGate.hpp
@@ -41,10 +41,11 @@ struct MegaGate : LPGEnvBaseModule {
FALL_INPUT,
MINIMUM_GATE_INPUT,
TILT_INPUT,
- GATE_INPUT,
VELOCITY_INPUT,
+ SHAPE_INPUT,
LEFT_INPUT,
RIGHT_INPUT,
+ GATE_INPUT,
LPF_ENV_INPUT,
LPF_BIAS_INPUT,
HPF_ENV_INPUT,
@@ -97,6 +98,8 @@ struct MegaGate : LPGEnvBaseModule {
Engine* _engines[maxChannels] {};
float _sampleRate = 0.0f;
float _sampleTime = 0.0f;
+ const float _maxVelocityDb = 0.0f;
+ float _minVelocityDb = -6.0f;
MegaGate()
: LPGEnvBaseModule(GATE_TO_TRIGGER_PARAM, TIMES_10X_PARAM)
@@ -130,6 +133,8 @@ struct MegaGate : LPGEnvBaseModule {
void reset() override;
void sampleRateChange() override;
+ json_t* toJson(json_t* root) override;
+ void fromJson(json_t* root) override;
bool active() override;
int channels() override;
void addChannel(int c) override;
diff --git a/src/Vish.cpp b/src/Vish.cpp
@@ -6,10 +6,6 @@ void Vish::Engine::reset() {
gatePulseGen.process(10.0);
}
-void Vish::Engine::setSampleRate(float sr) {
- velocitySL.setParams(sr, 5.0f, 1.0f);
-}
-
void Vish::reset() {
for (int c = 0; c < _channels; ++c) {
_engines[c]->reset();
@@ -19,9 +15,6 @@ void Vish::reset() {
void Vish::sampleRateChange() {
_sampleRate = APP->engine->getSampleRate();
_sampleTime = APP->engine->getSampleTime();
- for (int i = 0; i < _channels; ++i) {
- _engines[i]->setSampleRate(_sampleRate);
- }
}
bool Vish::active() {
@@ -35,7 +28,6 @@ int Vish::channels() {
void Vish::addChannel(int c) {
_engines[c] = new Engine();
_engines[c]->reset();
- _engines[c]->setSampleRate(_sampleRate);
}
void Vish::removeChannel(int c) {
@@ -54,7 +46,11 @@ void Vish::modulateChannel(int c) {
&inputs[FALL_INPUT],
1000.0f * _timeScale,
params[FALL_SHAPE_PARAM],
- c
+ c,
+ false,
+ &inputs[SHAPE_INPUT],
+ _riseShapeMode,
+ _fallShapeMode
);
}
@@ -91,15 +87,8 @@ void Vish::processChannel(const ProcessArgs& args, int c) {
gate = in;
}
- float velocity = 1.0f;
- if (inputs[VELOCITY_INPUT].isConnected()) {
- velocity = clamp(inputs[VELOCITY_INPUT].getPolyVoltage(c) / 10.0f, 0.0f, 1.0f);
- }
- velocity = e.velocitySL.next(velocity);
- e.velocityAmp.setLevel(_minVelocityDb + velocity * (_maxVelocityDb - _minVelocityDb));
-
outputs[OUT_OUTPUT].setChannels(_channels);
- outputs[OUT_OUTPUT].setVoltage(e.velocityAmp.next(e.slew.next(gate)), c);
+ outputs[OUT_OUTPUT].setVoltage(e.slew.next(gate), c);
}
struct VishWidget : LPGEnvBaseWidget {
@@ -120,10 +109,10 @@ struct VishWidget : LPGEnvBaseWidget {
auto gateToTriggerParamPosition = Vec(57.0, 220.0);
auto times10xParamPosition = Vec(55.0, 234.0);
- auto minimumGateInputPosition = Vec(10.5, 251.0);
- auto riseInputPosition = Vec(40.5, 251.0);
- auto velocityInputPosition = Vec(10.5, 288.0);
- auto fallInputPosition = Vec(40.5, 288.0);
+ auto riseInputPosition = Vec(10.5, 251.0);
+ auto minimumGateInputPosition = Vec(40.5, 251.0);
+ auto fallInputPosition = Vec(10.5, 288.0);
+ auto shapeInputPosition = Vec(40.5, 288.0);
auto gateInputPosition = Vec(10.5, 325.0);
auto outOutputPosition = Vec(40.5, 325.0);
@@ -137,10 +126,10 @@ struct VishWidget : LPGEnvBaseWidget {
addParam(createParam<IndicatorButtonGreen9>(gateToTriggerParamPosition, module, Vish::GATE_TO_TRIGGER_PARAM));
addParam(createParam<IndicatorButtonGreen9>(times10xParamPosition, module, Vish::TIMES_10X_PARAM));
- addInput(createInput<Port24>(minimumGateInputPosition, module, Vish::MINIMUM_GATE_INPUT));
addInput(createInput<Port24>(riseInputPosition, module, Vish::RISE_INPUT));
- addInput(createInput<Port24>(velocityInputPosition, module, Vish::VELOCITY_INPUT));
+ addInput(createInput<Port24>(minimumGateInputPosition, module, Vish::MINIMUM_GATE_INPUT));
addInput(createInput<Port24>(fallInputPosition, module, Vish::FALL_INPUT));
+ addInput(createInput<Port24>(shapeInputPosition, module, Vish::SHAPE_INPUT));
addInput(createInput<Port24>(gateInputPosition, module, Vish::GATE_INPUT));
addOutput(createOutput<Port24>(outOutputPosition, module, Vish::OUT_OUTPUT));
diff --git a/src/Vish.hpp b/src/Vish.hpp
@@ -19,10 +19,10 @@ struct Vish : LPGEnvBaseModule {
};
enum InputsIds {
- MINIMUM_GATE_INPUT,
RISE_INPUT,
- VELOCITY_INPUT,
+ MINIMUM_GATE_INPUT,
FALL_INPUT,
+ SHAPE_INPUT,
GATE_INPUT,
NUM_INPUTS
};
@@ -38,11 +38,8 @@ struct Vish : LPGEnvBaseModule {
float gateSeconds = 0.0f;
float gateElapsedSeconds = 0.0f;
RiseFallShapedSlewLimiter slew;
- Amplifier velocityAmp;
- bogaudio::dsp::SlewLimiter velocitySL;
void reset();
- void setSampleRate(float sr);
};
Engine* _engines[maxChannels] {};
diff --git a/src/lpg_common.cpp b/src/lpg_common.cpp
@@ -1,17 +1,72 @@
#include "lpg_common.hpp"
-#define VELOCITY_MINIMUM_DECIBELS "velocity_minimum_decibels"
+#define RISE_SHAPE_MODE "rise_shape_mode"
+#define FALL_SHAPE_MODE "fall_shape_mode"
+#define SHAPE_MODE_OFF "off"
+#define SHAPE_MODE_ON "on"
+#define SHAPE_MODE_INVERTED "inverted"
json_t* LPGEnvBaseModule::toJson(json_t* root) {
- json_object_set_new(root, VELOCITY_MINIMUM_DECIBELS, json_real(_minVelocityDb));
+ switch (_riseShapeMode) {
+ case RiseFallShapedSlewLimiter::OFF_SCVM: {
+ json_object_set_new(root, RISE_SHAPE_MODE, json_string(SHAPE_MODE_OFF));
+ break;
+ }
+ case RiseFallShapedSlewLimiter::ON_SCVM: {
+ json_object_set_new(root, RISE_SHAPE_MODE, json_string(SHAPE_MODE_ON));
+ break;
+ }
+ case RiseFallShapedSlewLimiter::INVERTED_SCVM: {
+ json_object_set_new(root, RISE_SHAPE_MODE, json_string(SHAPE_MODE_INVERTED));
+ break;
+ }
+ default:;
+ }
+ switch (_fallShapeMode) {
+ case RiseFallShapedSlewLimiter::OFF_SCVM: {
+ json_object_set_new(root, FALL_SHAPE_MODE, json_string(SHAPE_MODE_OFF));
+ break;
+ }
+ case RiseFallShapedSlewLimiter::ON_SCVM: {
+ json_object_set_new(root, FALL_SHAPE_MODE, json_string(SHAPE_MODE_ON));
+ break;
+ }
+ case RiseFallShapedSlewLimiter::INVERTED_SCVM: {
+ json_object_set_new(root, FALL_SHAPE_MODE, json_string(SHAPE_MODE_INVERTED));
+ break;
+ }
+ default:;
+ }
return root;
}
void LPGEnvBaseModule::fromJson(json_t* root) {
- json_t* mdb = json_object_get(root, VELOCITY_MINIMUM_DECIBELS);
- if (mdb) {
- _minVelocityDb = json_real_value(mdb);
+ json_t* rsm = json_object_get(root, RISE_SHAPE_MODE);
+ if (rsm) {
+ std::string s = json_string_value(rsm);
+ if (s == SHAPE_MODE_OFF) {
+ _riseShapeMode = RiseFallShapedSlewLimiter::OFF_SCVM;
+ }
+ else if (s == SHAPE_MODE_ON) {
+ _riseShapeMode = RiseFallShapedSlewLimiter::ON_SCVM;
+ }
+ else if (s == SHAPE_MODE_INVERTED) {
+ _riseShapeMode = RiseFallShapedSlewLimiter::INVERTED_SCVM;
+ }
+ }
+ json_t* fsm = json_object_get(root, FALL_SHAPE_MODE);
+ if (fsm) {
+ std::string s = json_string_value(fsm);
+ if (s == SHAPE_MODE_OFF) {
+ _fallShapeMode = RiseFallShapedSlewLimiter::OFF_SCVM;
+ }
+ else if (s == SHAPE_MODE_ON) {
+ _fallShapeMode = RiseFallShapedSlewLimiter::ON_SCVM;
+ }
+ else if (s == SHAPE_MODE_INVERTED) {
+ _fallShapeMode = RiseFallShapedSlewLimiter::INVERTED_SCVM;
+ }
}
}
@@ -24,11 +79,40 @@ void LPGEnvBaseModule::modulate() {
void LPGEnvBaseWidget::contextMenu(Menu* menu) {
auto m = dynamic_cast<LPGEnvBaseModule*>(module);
assert(m);
- OptionsMenuItem* mi = new OptionsMenuItem("Minimum velocity output gain");
- mi->addItem(OptionMenuItem("-3db", [m]() { return m->_minVelocityDb == -3.0f; }, [m]() { m->_minVelocityDb = -3.0f; }));
- mi->addItem(OptionMenuItem("-6db", [m]() { return m->_minVelocityDb == -6.0f; }, [m]() { m->_minVelocityDb = -6.0f; }));
- mi->addItem(OptionMenuItem("-12db", [m]() { return m->_minVelocityDb == -12.0f; }, [m]() { m->_minVelocityDb = -12.0f; }));
- mi->addItem(OptionMenuItem("-24db", [m]() { return m->_minVelocityDb == -24.0f; }, [m]() { m->_minVelocityDb = -24.0f; }));
- mi->addItem(OptionMenuItem("-60db", [m]() { return m->_minVelocityDb == -60.0f; }, [m]() { m->_minVelocityDb = -60.0f; }));
- OptionsMenuItem::addToMenu(mi, menu);
+
+ OptionsMenuItem* rm = new OptionsMenuItem("Rise shape CV");
+ rm->addItem(OptionMenuItem(
+ "Enable",
+ [m]() { return m->_riseShapeMode == RiseFallShapedSlewLimiter::ON_SCVM; },
+ [m]() { m->_riseShapeMode = RiseFallShapedSlewLimiter::ON_SCVM; }
+ ));
+ rm->addItem(OptionMenuItem(
+ "Enable inverted",
+ [m]() { return m->_riseShapeMode == RiseFallShapedSlewLimiter::INVERTED_SCVM; },
+ [m]() { m->_riseShapeMode = RiseFallShapedSlewLimiter::INVERTED_SCVM; }
+ ));
+ rm->addItem(OptionMenuItem(
+ "Disable",
+ [m]() { return m->_riseShapeMode == RiseFallShapedSlewLimiter::OFF_SCVM; },
+ [m]() { m->_riseShapeMode = RiseFallShapedSlewLimiter::OFF_SCVM; }
+ ));
+ OptionsMenuItem::addToMenu(rm, menu);
+
+ OptionsMenuItem* fm = new OptionsMenuItem("Fall shape CV");
+ fm->addItem(OptionMenuItem(
+ "Enable",
+ [m]() { return m->_fallShapeMode == RiseFallShapedSlewLimiter::ON_SCVM; },
+ [m]() { m->_fallShapeMode = RiseFallShapedSlewLimiter::ON_SCVM; }
+ ));
+ fm->addItem(OptionMenuItem(
+ "Enable inverted",
+ [m]() { return m->_fallShapeMode == RiseFallShapedSlewLimiter::INVERTED_SCVM; },
+ [m]() { m->_fallShapeMode = RiseFallShapedSlewLimiter::INVERTED_SCVM; }
+ ));
+ fm->addItem(OptionMenuItem(
+ "Disable",
+ [m]() { return m->_fallShapeMode == RiseFallShapedSlewLimiter::OFF_SCVM; },
+ [m]() { m->_fallShapeMode = RiseFallShapedSlewLimiter::OFF_SCVM; }
+ ));
+ OptionsMenuItem::addToMenu(fm, menu);
}
diff --git a/src/lpg_common.hpp b/src/lpg_common.hpp
@@ -8,8 +8,8 @@ struct LPGEnvBaseModule : BGModule {
float _longTimeScale;
bool _gateToTrigger = true;
float _timeScale = 1.0f;
- const float _maxVelocityDb = 0.0f;
- float _minVelocityDb = -6.0f;
+ RiseFallShapedSlewLimiter::ShapeCVMode _riseShapeMode = RiseFallShapedSlewLimiter::INVERTED_SCVM;
+ RiseFallShapedSlewLimiter::ShapeCVMode _fallShapeMode = RiseFallShapedSlewLimiter::ON_SCVM;
LPGEnvBaseModule(int gateToTriggerParamID = -1, int timeScaleParamID = -1, float longTimeScale = 10.0f)
: _gateToTriggerParamID(gateToTriggerParamID)
diff --git a/src/slew_common.cpp b/src/slew_common.cpp
@@ -1,7 +1,7 @@
#include "slew_common.hpp"
-float RiseFallShapedSlewLimiter::timeMS(Param& param, Input* input, float maxMS, int c) {
+float RiseFallShapedSlewLimiter::timeMS(int c, Param& param, Input* input, float maxMS) {
float time = clamp(param.getValue(), 0.0f, 1.0f);
if (input && input->isConnected()) {
time *= clamp(input->getPolyVoltage(c) / 10.0f, 0.0f, 1.0f);
@@ -9,11 +9,18 @@ float RiseFallShapedSlewLimiter::timeMS(Param& param, Input* input, float maxMS,
return time * time * maxMS;
}
-float RiseFallShapedSlewLimiter::shape(Param& param, bool invert) {
- float shape = clamp(param.getValue(), -1.0f, 1.0f);
+float RiseFallShapedSlewLimiter::shape(int c, Param& param, bool invert, Input* cv, ShapeCVMode mode) {
+ float shape = param.getValue();
if (invert) {
shape *= -1.0f;
}
+ if (cv && mode != OFF_SCVM) {
+ float v = cv->getPolyVoltage(c) / 5.0f;
+ if (mode == INVERTED_SCVM) {
+ v = -v;
+ }
+ shape = clamp(shape + v, -1.0f, 1.0f);
+ }
if (shape < 0.0) {
shape = 1.0f + shape;
shape = _rise.minShape + shape * (1.0f - _rise.minShape);
@@ -35,17 +42,20 @@ void RiseFallShapedSlewLimiter::modulate(
float fallMaxMS,
Param& fallShapeParam,
int c,
- bool invertRiseShape
+ bool invertRiseShape,
+ Input* shapeCV,
+ ShapeCVMode riseShapeMode,
+ ShapeCVMode fallShapeMode
) {
_rise.setParams(
sampleRate,
- timeMS(riseParam, riseInput, riseMaxMS, c),
- shape(riseShapeParam, invertRiseShape)
+ timeMS(c, riseParam, riseInput, riseMaxMS),
+ shape(c, riseShapeParam, invertRiseShape, shapeCV, riseShapeMode)
);
_fall.setParams(
sampleRate,
- timeMS(fallParam, fallInput, fallMaxMS, c),
- shape(fallShapeParam)
+ timeMS(c, fallParam, fallInput, fallMaxMS),
+ shape(c, fallShapeParam, false, shapeCV, fallShapeMode)
);
}
diff --git a/src/slew_common.hpp b/src/slew_common.hpp
@@ -6,13 +6,19 @@
using namespace bogaudio::dsp;
struct RiseFallShapedSlewLimiter {
+ enum ShapeCVMode {
+ OFF_SCVM,
+ ON_SCVM,
+ INVERTED_SCVM
+ };
+
bool _rising = true;
float _last = 0.0f;
ShapedSlewLimiter _rise;
ShapedSlewLimiter _fall;
- float timeMS(Param& param, Input* input, float maxMS, int c);
- float shape(Param& param, bool invert = false);
+ float timeMS(int c, Param& param, Input* input, float maxMS);
+ float shape(int c, Param& param, bool invert = false, Input* cv = NULL, ShapeCVMode mode = OFF_SCVM);
void modulate(
float sampleRate,
Param& riseParam,
@@ -24,7 +30,10 @@ struct RiseFallShapedSlewLimiter {
float fallMaxMS,
Param& fallShapeParam,
int c,
- bool invertRiseShape = false
+ bool invertRiseShape = false,
+ Input* shapeCV = NULL,
+ ShapeCVMode riseShapeMode = OFF_SCVM,
+ ShapeCVMode fallShapeMode = OFF_SCVM
);
float next(float sample);
};