commit 65a4badf9bae4ce7347cdb6e4b680c9c63d167f8
parent 75632c31331d17bf0e630c17775cecb4f5e7d826
Author: Matt Demanett <matt@demanett.net>
Date: Fri, 22 Jan 2021 23:27:20 -0500
SLEQ: add slow mode. #158
Diffstat:
10 files changed, 122 insertions(+), 58 deletions(-)
diff --git a/README-prerelease.md b/README-prerelease.md
@@ -1267,6 +1267,10 @@ The rising and falling slew rates and shapes are set independently. The RISE an
The RISE and FALL shape knobs affect the movement of the output as it catches up to the input (the shape it would draw on a scope). The shapes vary between log, linear and exponential curves.
+RISE and FALL each have a unipolar (0-10V) CV input affecting the corresponding slew rate.
+
+If SLOW is enabled, the slew rates for both RISE and FALL are 10x slower what they would otherwise be, based on the knobs and CVs.
+
_Polyphony:_ <a href="#polyphony">Polyphonic</a>, with polyphony defined by the channels of the IN input.
#### <a name="sums"></a> SUMS
diff --git a/res-pp/Slew-dark-pp.svg b/res-pp/Slew-dark-pp.svg
@@ -172,22 +172,22 @@ polyline.knob-tick {
<g transform="translate(0 25)">
<text font-size="6pt" letter-spacing="2.0px" transform="translate(11 0)">RISE</text>
- <g transform="translate(9.5 9)"><svg id="RISE_PARAM">
+ <g transform="translate(9.5 8)"><svg id="RISE_PARAM">
<g transform="translate(13 13)">
<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="12.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <use xlink:href="#dial-time-slew" transform="translate(0 -1)" href="#dial-time-slew"/>
- <g transform="translate(14.5 51)"><svg id="RISE_SHAPE_PARAM">
+ <use xlink:href="#dial-time-slew" transform="translate(0 -2)" href="#dial-time-slew"/>
+ <g transform="translate(14.5 49)"><svg id="RISE_SHAPE_PARAM">
<g transform="translate(8 8)">
<polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/>
<polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/>
<circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <g transform="translate(2.5 39)">
+ <g transform="translate(2.5 37)">
<g transform="translate(20 20)">
<polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-52.5) translate(10 0)"/>
<polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-15) translate(10 0)"/>
@@ -200,9 +200,12 @@ polyline.knob-tick {
<path d="M -3.5 0 Q 0 3.5, 3.5 0" stroke-width="1" stroke="#ccc" fill="none" transform="rotate(60) translate(13 0) rotate(-60) translate(2 0) rotate(-45) translate(0 0)"/>
<polyline points="-3.5,0 3.5,0" stroke-width="1" fill="none" transform="rotate(-90) translate(13 0) rotate(90) rotate(-45) translate(0 0)"/>
<path d="M -3.5 0 Q 0 3.5, 3.5 0" stroke-width="1" stroke="#ccc" fill="none" transform="rotate(-240) translate(13 0) rotate(240) translate(-2 0) rotate(135) translate(0 0)"/>
+
+ <polyline points="-3,0 3,0" stroke-width="1.0"/>
+ <polyline points="0,-3 0,3" stroke-width="1.0"/>
</g>
</g>
- <g class="io-group" transform="translate(7.5 77)">
+ <g class="io-group" transform="translate(7.5 75)">
<rect class="input-background" width="30" height="30" rx="5"/>
<g transform="translate(3 3)"><svg id="RISE_INPUT">
<g transform="translate(12 12)">
@@ -214,24 +217,24 @@ polyline.knob-tick {
</g>
</g>
- <g transform="translate(0 146)">
+ <g transform="translate(0 143)">
<text font-size="6pt" letter-spacing="2.0px" transform="translate(11 0)">FALL</text>
- <g transform="translate(9.5 9)"><svg id="FALL_PARAM">
+ <g transform="translate(9.5 8)"><svg id="FALL_PARAM">
<g transform="translate(13 13)">
<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="12.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <use xlink:href="#dial-time-slew" transform="translate(0 -1)" href="#dial-time-slew"/>
- <g transform="translate(14.5 51)"><svg id="FALL_SHAPE_PARAM">
+ <use xlink:href="#dial-time-slew" transform="translate(0 -2)" href="#dial-time-slew"/>
+ <g transform="translate(14.5 49)"><svg id="FALL_SHAPE_PARAM">
<g transform="translate(8 8)">
<polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/>
<polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/>
<circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <g transform="translate(2.5 39)">
+ <g transform="translate(2.5 37)">
<g transform="translate(20 20)">
<polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-52.5) translate(10 0)"/>
<polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-15) translate(10 0)"/>
@@ -244,9 +247,12 @@ polyline.knob-tick {
<path d="M -3.5 0 Q 0 3.5, 3.5 0" stroke-width="1" stroke="#ccc" fill="none" transform="rotate(60) translate(13 0) rotate(-60) translate(2 0) rotate(-135) translate(0 0)"/>
<polyline points="-3.5,0 3.5,0" stroke-width="1" fill="none" transform="rotate(-90) translate(13 0) rotate(90) rotate(45) translate(0 0)"/>
<path d="M -3.5 0 Q 0 3.5, 3.5 0" stroke-width="1" stroke="#ccc" fill="none" transform="rotate(-240) translate(13 0) rotate(240) translate(-2 0) rotate(45) translate(0 0)"/>
+
+ <polyline points="-3,0 3,0" stroke-width="1.0"/>
+ <polyline points="0,-3 0,3" stroke-width="1.0"/>
</g>
</g>
- <g class="io-group" transform="translate(7.5 77)">
+ <g class="io-group" transform="translate(7.5 75)">
<rect class="input-background" width="30" height="30" rx="5"/>
<g transform="translate(3 3)"><svg id="FALL_INPUT">
<g transform="translate(12 12)">
@@ -258,7 +264,16 @@ polyline.knob-tick {
</g>
</g>
- <g transform="translate(0 260)">
+ <g transform="translate(0 252)">
+ <text font-size="6pt" letter-spacing="1px" transform="translate(4 6.1)">SLOW</text>
+ <g transform="translate(31 -1)"><svg id="SLOW_PARAM">
+ <g transform="translate(4.5 4.5)">
+ <circle r="4" stroke-width="1" stroke="#00f" fill="#f00"/>
+ </g>
+ </svg></g>
+ </g>
+
+ <g transform="translate(0 263)">
<g class="io-group" transform="translate(5.5 0)">
<rect class="input-background-filler" width="34" height="10" transform="translate(0 28)"/>
<rect class="input-background" width="34" height="35" rx="5"/>
diff --git a/res-pp/Slew-lowcontrast-pp.svg b/res-pp/Slew-lowcontrast-pp.svg
@@ -172,22 +172,22 @@ polyline.knob-tick {
<g transform="translate(0 25)">
<text font-size="6pt" letter-spacing="2.0px" transform="translate(11 0)">RISE</text>
- <g transform="translate(9.5 9)"><svg id="RISE_PARAM">
+ <g transform="translate(9.5 8)"><svg id="RISE_PARAM">
<g transform="translate(13 13)">
<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="12.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <use xlink:href="#dial-time-slew" transform="translate(0 -1)" href="#dial-time-slew"/>
- <g transform="translate(14.5 51)"><svg id="RISE_SHAPE_PARAM">
+ <use xlink:href="#dial-time-slew" transform="translate(0 -2)" href="#dial-time-slew"/>
+ <g transform="translate(14.5 49)"><svg id="RISE_SHAPE_PARAM">
<g transform="translate(8 8)">
<polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/>
<polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/>
<circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <g transform="translate(2.5 39)">
+ <g transform="translate(2.5 37)">
<g transform="translate(20 20)">
<polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-52.5) translate(10 0)"/>
<polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-15) translate(10 0)"/>
@@ -200,9 +200,12 @@ polyline.knob-tick {
<path d="M -3.5 0 Q 0 3.5, 3.5 0" stroke-width="1" stroke="#b3b3b3" fill="none" transform="rotate(60) translate(13 0) rotate(-60) translate(2 0) rotate(-45) translate(0 0)"/>
<polyline points="-3.5,0 3.5,0" stroke-width="1" fill="none" transform="rotate(-90) translate(13 0) rotate(90) rotate(-45) translate(0 0)"/>
<path d="M -3.5 0 Q 0 3.5, 3.5 0" stroke-width="1" stroke="#b3b3b3" fill="none" transform="rotate(-240) translate(13 0) rotate(240) translate(-2 0) rotate(135) translate(0 0)"/>
+
+ <polyline points="-3,0 3,0" stroke-width="1.0"/>
+ <polyline points="0,-3 0,3" stroke-width="1.0"/>
</g>
</g>
- <g class="io-group" transform="translate(7.5 77)">
+ <g class="io-group" transform="translate(7.5 75)">
<rect class="input-background" width="30" height="30" rx="5"/>
<g transform="translate(3 3)"><svg id="RISE_INPUT">
<g transform="translate(12 12)">
@@ -214,24 +217,24 @@ polyline.knob-tick {
</g>
</g>
- <g transform="translate(0 146)">
+ <g transform="translate(0 143)">
<text font-size="6pt" letter-spacing="2.0px" transform="translate(11 0)">FALL</text>
- <g transform="translate(9.5 9)"><svg id="FALL_PARAM">
+ <g transform="translate(9.5 8)"><svg id="FALL_PARAM">
<g transform="translate(13 13)">
<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="12.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <use xlink:href="#dial-time-slew" transform="translate(0 -1)" href="#dial-time-slew"/>
- <g transform="translate(14.5 51)"><svg id="FALL_SHAPE_PARAM">
+ <use xlink:href="#dial-time-slew" transform="translate(0 -2)" href="#dial-time-slew"/>
+ <g transform="translate(14.5 49)"><svg id="FALL_SHAPE_PARAM">
<g transform="translate(8 8)">
<polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/>
<polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/>
<circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <g transform="translate(2.5 39)">
+ <g transform="translate(2.5 37)">
<g transform="translate(20 20)">
<polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-52.5) translate(10 0)"/>
<polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-15) translate(10 0)"/>
@@ -244,9 +247,12 @@ polyline.knob-tick {
<path d="M -3.5 0 Q 0 3.5, 3.5 0" stroke-width="1" stroke="#b3b3b3" fill="none" transform="rotate(60) translate(13 0) rotate(-60) translate(2 0) rotate(-135) translate(0 0)"/>
<polyline points="-3.5,0 3.5,0" stroke-width="1" fill="none" transform="rotate(-90) translate(13 0) rotate(90) rotate(45) translate(0 0)"/>
<path d="M -3.5 0 Q 0 3.5, 3.5 0" stroke-width="1" stroke="#b3b3b3" fill="none" transform="rotate(-240) translate(13 0) rotate(240) translate(-2 0) rotate(45) translate(0 0)"/>
+
+ <polyline points="-3,0 3,0" stroke-width="1.0"/>
+ <polyline points="0,-3 0,3" stroke-width="1.0"/>
</g>
</g>
- <g class="io-group" transform="translate(7.5 77)">
+ <g class="io-group" transform="translate(7.5 75)">
<rect class="input-background" width="30" height="30" rx="5"/>
<g transform="translate(3 3)"><svg id="FALL_INPUT">
<g transform="translate(12 12)">
@@ -258,7 +264,16 @@ polyline.knob-tick {
</g>
</g>
- <g transform="translate(0 260)">
+ <g transform="translate(0 252)">
+ <text font-size="6pt" letter-spacing="1px" transform="translate(4 6.1)">SLOW</text>
+ <g transform="translate(31 -1)"><svg id="SLOW_PARAM">
+ <g transform="translate(4.5 4.5)">
+ <circle r="4" stroke-width="1" stroke="#00f" fill="#f00"/>
+ </g>
+ </svg></g>
+ </g>
+
+ <g transform="translate(0 263)">
<g class="io-group" transform="translate(5.5 0)">
<rect class="input-background-filler" width="34" height="10" transform="translate(0 28)"/>
<rect class="input-background" width="34" height="35" rx="5"/>
diff --git a/res-pp/Slew-pp.svg b/res-pp/Slew-pp.svg
@@ -108,22 +108,22 @@ polyline.knob-tick {
<g transform="translate(0 25)">
<text font-size="6pt" letter-spacing="2.0px" transform="translate(11 0)">RISE</text>
- <g transform="translate(9.5 9)"><svg id="RISE_PARAM">
+ <g transform="translate(9.5 8)"><svg id="RISE_PARAM">
<g transform="translate(13 13)">
<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="12.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <use xlink:href="#dial-time-slew" transform="translate(0 -1)" href="#dial-time-slew"/>
- <g transform="translate(14.5 51)"><svg id="RISE_SHAPE_PARAM">
+ <use xlink:href="#dial-time-slew" transform="translate(0 -2)" href="#dial-time-slew"/>
+ <g transform="translate(14.5 49)"><svg id="RISE_SHAPE_PARAM">
<g transform="translate(8 8)">
<polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/>
<polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/>
<circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <g transform="translate(2.5 39)">
+ <g transform="translate(2.5 37)">
<g transform="translate(20 20)">
<polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-52.5) translate(10 0)"/>
<polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-15) translate(10 0)"/>
@@ -136,9 +136,12 @@ polyline.knob-tick {
<path d="M -3.5 0 Q 0 3.5, 3.5 0" stroke-width="1" stroke="#333" fill="none" transform="rotate(60) translate(13 0) rotate(-60) translate(2 0) rotate(-45) translate(0 0)"/>
<polyline points="-3.5,0 3.5,0" stroke-width="1" fill="none" transform="rotate(-90) translate(13 0) rotate(90) rotate(-45) translate(0 0)"/>
<path d="M -3.5 0 Q 0 3.5, 3.5 0" stroke-width="1" stroke="#333" fill="none" transform="rotate(-240) translate(13 0) rotate(240) translate(-2 0) rotate(135) translate(0 0)"/>
+
+ <polyline points="-3,0 3,0" stroke-width="1.0"/>
+ <polyline points="0,-3 0,3" stroke-width="1.0"/>
</g>
</g>
- <g class="io-group" transform="translate(7.5 77)">
+ <g class="io-group" transform="translate(7.5 75)">
<rect class="input-background" width="30" height="30" rx="5"/>
<g transform="translate(3 3)"><svg id="RISE_INPUT">
<g transform="translate(12 12)">
@@ -150,24 +153,24 @@ polyline.knob-tick {
</g>
</g>
- <g transform="translate(0 146)">
+ <g transform="translate(0 143)">
<text font-size="6pt" letter-spacing="2.0px" transform="translate(11 0)">FALL</text>
- <g transform="translate(9.5 9)"><svg id="FALL_PARAM">
+ <g transform="translate(9.5 8)"><svg id="FALL_PARAM">
<g transform="translate(13 13)">
<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="12.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <use xlink:href="#dial-time-slew" transform="translate(0 -1)" href="#dial-time-slew"/>
- <g transform="translate(14.5 51)"><svg id="FALL_SHAPE_PARAM">
+ <use xlink:href="#dial-time-slew" transform="translate(0 -2)" href="#dial-time-slew"/>
+ <g transform="translate(14.5 49)"><svg id="FALL_SHAPE_PARAM">
<g transform="translate(8 8)">
<polyline points="-3,0 3,0" stroke-width="1" stroke="#00f"/>
<polyline points="0,-3 0,3" stroke-width="1" stroke="#00f"/>
<circle r="7.5" stroke-width="1" stroke="#00f" fill="none"/>
</g>
</svg></g>
- <g transform="translate(2.5 39)">
+ <g transform="translate(2.5 37)">
<g transform="translate(20 20)">
<polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-52.5) translate(10 0)"/>
<polyline points="0,0 2.5,0" stroke-width="0.7" transform="rotate(-15) translate(10 0)"/>
@@ -180,9 +183,12 @@ polyline.knob-tick {
<path d="M -3.5 0 Q 0 3.5, 3.5 0" stroke-width="1" stroke="#333" fill="none" transform="rotate(60) translate(13 0) rotate(-60) translate(2 0) rotate(-135) translate(0 0)"/>
<polyline points="-3.5,0 3.5,0" stroke-width="1" fill="none" transform="rotate(-90) translate(13 0) rotate(90) rotate(45) translate(0 0)"/>
<path d="M -3.5 0 Q 0 3.5, 3.5 0" stroke-width="1" stroke="#333" fill="none" transform="rotate(-240) translate(13 0) rotate(240) translate(-2 0) rotate(45) translate(0 0)"/>
+
+ <polyline points="-3,0 3,0" stroke-width="1.0"/>
+ <polyline points="0,-3 0,3" stroke-width="1.0"/>
</g>
</g>
- <g class="io-group" transform="translate(7.5 77)">
+ <g class="io-group" transform="translate(7.5 75)">
<rect class="input-background" width="30" height="30" rx="5"/>
<g transform="translate(3 3)"><svg id="FALL_INPUT">
<g transform="translate(12 12)">
@@ -194,7 +200,16 @@ polyline.knob-tick {
</g>
</g>
- <g transform="translate(0 260)">
+ <g transform="translate(0 252)">
+ <text font-size="6pt" letter-spacing="1px" transform="translate(4 6.1)">SLOW</text>
+ <g transform="translate(31 -1)"><svg id="SLOW_PARAM">
+ <g transform="translate(4.5 4.5)">
+ <circle r="4" stroke-width="1" stroke="#00f" fill="#f00"/>
+ </g>
+ </svg></g>
+ </g>
+
+ <g transform="translate(0 263)">
<g class="io-group" transform="translate(5.5 0)">
<rect class="input-background-filler" width="34" height="10" transform="translate(0 28)"/>
<rect class="input-background" width="34" height="35" rx="5"/>
diff --git a/res-src/Slew-src.svg b/res-src/Slew-src.svg
@@ -20,31 +20,36 @@
<g transform="translate(0 25)">
<text font-size="6pt" letter-spacing="2.0px" transform="translate(11 0)">RISE</text>
- <def id="RISE_PARAM" xlink:href="#knob26" transform="translate(9.5 9)"/>
- <use xlink:href="#dial-time-slew" transform="translate(0 -1)"/>
- <def id="RISE_SHAPE_PARAM" xlink:href="#knob16" transform="translate(14.5 51)"/>
- <def xlink:href="#dial-shape-rise" transform="translate(2.5 39)"/>
- <g class="io-group" transform="translate(7.5 77)">
+ <def id="RISE_PARAM" xlink:href="#knob26" transform="translate(9.5 8)"/>
+ <use xlink:href="#dial-time-slew" transform="translate(0 -2)"/>
+ <def id="RISE_SHAPE_PARAM" xlink:href="#knob16" transform="translate(14.5 49)"/>
+ <def xlink:href="#dial-shape-rise" transform="translate(2.5 37)"/>
+ <g class="io-group" transform="translate(7.5 75)">
<rect class="input-background" width="30" height="30" rx="5"/>
<def id="RISE_INPUT" xlink:href="#input" transform="translate(3 3)"/>
<!-- <text font-size="5pt" letter-spacing="2px" transform="translate(11 35)">CV</text> -->
</g>
</g>
- <g transform="translate(0 146)">
+ <g transform="translate(0 143)">
<text font-size="6pt" letter-spacing="2.0px" transform="translate(11 0)">FALL</text>
- <def id="FALL_PARAM" xlink:href="#knob26" transform="translate(9.5 9)"/>
- <use xlink:href="#dial-time-slew" transform="translate(0 -1)"/>
- <def id="FALL_SHAPE_PARAM" xlink:href="#knob16" transform="translate(14.5 51)"/>
- <def xlink:href="#dial-shape-fall" transform="translate(2.5 39)"/>
- <g class="io-group" transform="translate(7.5 77)">
+ <def id="FALL_PARAM" xlink:href="#knob26" transform="translate(9.5 8)"/>
+ <use xlink:href="#dial-time-slew" transform="translate(0 -2)"/>
+ <def id="FALL_SHAPE_PARAM" xlink:href="#knob16" transform="translate(14.5 49)"/>
+ <def xlink:href="#dial-shape-fall" transform="translate(2.5 37)"/>
+ <g class="io-group" transform="translate(7.5 75)">
<rect class="input-background" width="30" height="30" rx="5"/>
<def id="FALL_INPUT" xlink:href="#input" transform="translate(3 3)"/>
<!-- <text font-size="5pt" letter-spacing="2px" transform="translate(11 35)">CV</text> -->
</g>
</g>
- <g transform="translate(0 260)">
+ <g transform="translate(0 252)">
+ <text font-size="6pt" letter-spacing="1px" transform="translate(4 6.1)">SLOW</text>
+ <def id="SLOW_PARAM" xlink:href="#button-small" transform="translate(31 -1)"/>
+ </g>
+
+ <g transform="translate(0 263)">
<g class="io-group" transform="translate(5.5 0)">
<rect class="input-background-filler" width="34" height="10" transform="translate(0 28)"/>
<rect class="input-background" width="34" height="35" rx="5"/>
diff --git a/res/Slew-dark.svg b/res/Slew-dark.svg
Binary files differ.
diff --git a/res/Slew-lowcontrast.svg b/res/Slew-lowcontrast.svg
Binary files differ.
diff --git a/res/Slew.svg b/res/Slew.svg
Binary files differ.
diff --git a/src/Slew.cpp b/src/Slew.cpp
@@ -9,16 +9,20 @@ int Slew::channels() {
return inputs[IN_INPUT].getChannels();
}
+void Slew::modulate() {
+ _timeScale = params[SLOW_PARAM].getValue() > 0.5f ? 10.0f : 1.0f;
+}
+
void Slew::modulateChannel(int c) {
_slew[c].modulate(
APP->engine->getSampleRate(),
params[RISE_PARAM],
&inputs[RISE_INPUT],
- 10000.0f,
+ 10000.0f * _timeScale,
params[RISE_SHAPE_PARAM],
params[FALL_PARAM],
&inputs[FALL_INPUT],
- 10000.0f,
+ 10000.0f * _timeScale,
params[FALL_SHAPE_PARAM],
c
);
@@ -39,22 +43,24 @@ struct SlewWidget : BGModuleWidget {
createScrews();
// generated by svg_widgets.rb
- auto riseParamPosition = Vec(9.5, 34.0);
- auto riseShapeParamPosition = Vec(14.5, 76.0);
- auto fallParamPosition = Vec(9.5, 155.0);
- auto fallShapeParamPosition = Vec(14.5, 197.0);
+ auto riseParamPosition = Vec(9.5, 33.0);
+ auto riseShapeParamPosition = Vec(14.5, 74.0);
+ auto fallParamPosition = Vec(9.5, 151.0);
+ auto fallShapeParamPosition = Vec(14.5, 192.0);
+ auto slowParamPosition = Vec(31.0, 251.0);
- auto riseInputPosition = Vec(10.5, 105.0);
- auto fallInputPosition = Vec(10.5, 226.0);
- auto inInputPosition = Vec(10.5, 263.0);
+ auto riseInputPosition = Vec(10.5, 103.0);
+ auto fallInputPosition = Vec(10.5, 221.0);
+ auto inInputPosition = Vec(10.5, 266.0);
- auto outOutputPosition = Vec(10.5, 301.0);
+ auto outOutputPosition = Vec(10.5, 304.0);
// end generated by svg_widgets.rb
addParam(createParam<Knob26>(riseParamPosition, module, Slew::RISE_PARAM));
addParam(createParam<Knob16>(riseShapeParamPosition, module, Slew::RISE_SHAPE_PARAM));
addParam(createParam<Knob26>(fallParamPosition, module, Slew::FALL_PARAM));
addParam(createParam<Knob16>(fallShapeParamPosition, module, Slew::FALL_SHAPE_PARAM));
+ addParam(createParam<IndicatorButtonGreen9>(slowParamPosition, module, Slew::SLOW_PARAM));
addInput(createInput<Port24>(riseInputPosition, module, Slew::RISE_INPUT));
addInput(createInput<Port24>(fallInputPosition, module, Slew::FALL_INPUT));
diff --git a/src/Slew.hpp b/src/Slew.hpp
@@ -12,6 +12,7 @@ struct Slew : BGModule {
RISE_SHAPE_PARAM,
FALL_PARAM,
FALL_SHAPE_PARAM,
+ SLOW_PARAM,
NUM_PARAMS
};
@@ -28,6 +29,7 @@ struct Slew : BGModule {
};
RiseFallShapedSlewLimiter _slew[maxChannels];
+ float _timeScale = 1.0f;
Slew() {
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS);
@@ -35,10 +37,12 @@ struct Slew : BGModule {
configParam(RISE_SHAPE_PARAM, -1.0f, 1.0f, 0.0f, "Rise shape");
configParam<EnvelopeSegmentParamQuantity>(FALL_PARAM, 0.0f, 1.0f, 0.31623f, "Fall", " s");
configParam(FALL_SHAPE_PARAM, -1.0f, 1.0f, 0.0f, "Fall shape");
+ configParam(SLOW_PARAM, 0.0f, 1.0f, 0.0f, "Slow mode");
}
bool active() override;
int channels() override;
+ void modulate() override;
void modulateChannel(int c) override;
void processChannel(const ProcessArgs& args, int c) override;
};