diff --git a/plugins/community/repos/Bogaudio/Makefile b/plugins/community/repos/Bogaudio/Makefile
index 72b0f5bb..7ccf50c5 100644
--- a/plugins/community/repos/Bogaudio/Makefile
+++ b/plugins/community/repos/Bogaudio/Makefile
@@ -1,6 +1,6 @@
SLUG=Bogaudio
-VERSION=0.6.13
+VERSION=0.6.14
FLAGS += -DSLUG=$(SLUG) -DVERSION=$(VERSION)
ifdef REQUIRE_VERSION
diff --git a/plugins/community/repos/Bogaudio/README.md b/plugins/community/repos/Bogaudio/README.md
index 1be4b73e..5b62714a 100644
--- a/plugins/community/repos/Bogaudio/README.md
+++ b/plugins/community/repos/Bogaudio/README.md
@@ -7,6 +7,7 @@ Modules for [VCV Rack](https://github.com/VCVRack/Rack), an open-source Eurorack
- [Envelopes and Envelope Utilities](#envelopes)
- [Mixers, Panners and VCAs](#mixers)
- [Effects and Dynamics](#effects)
+ - [Sequential Switches and Sequencers](#sequencers)
- [Visualizers](#visualizers)
- [Pitch CV Utilities](#pitch)
- [Other Utilities](#utilities)
@@ -16,6 +17,8 @@ Modules for [VCV Rack](https://github.com/VCVRack/Rack), an open-source Eurorack

+
+


@@ -104,7 +107,9 @@ A standard LFO featuring:
- Reset (hard sync) input.
- Slow mode.
-LFO tracks pitch CVs at the V/OCT input four octaves lower than a normal oscillator: with a 0V input, the output frequency is note C0 (16.35HZ). The frequency knob is calibrated in linear volts (the small ticks), and its value is added to the input V/OCT. With no input, the frequency range is from approximately 0.1 to 400HZ; with CV the frequency may be driven up to 2000HZ or down to arbitrarily low values. In slow mode, the output frequency tracks the controls 8 octaves lower than in normal mode.
+LFO tracks pitch CVs at the V/OCT input seven octaves lower than a normal oscillator: with a 0V input, the output frequency is note C-3 (2.04HZ). The frequency knob is calibrated in linear volts (the small ticks), and its value is added to the input V/OCT. With no input, the frequency range is from approximately 0.1 to 400HZ; with CV the frequency may be driven up to 2000HZ or down to arbitrarily low values. In slow mode, the output frequency tracks the controls 11 octaves lower than in normal mode.
+
+*NOTE ON FREQUENCIES:* Previous to release 0.6.14 (April 2019), LFO tracked 0V as C0 or 16.35HZ (and 8 octaves lower in slow mode). Patches created with older versions will continue to have the old behavior. New instances of LFO added to patches will have the new behavior. The behavior can be toggled, in either case, on the context (right-click) menu.
#### 8FO
@@ -191,6 +196,7 @@ Features:
- CV-controlled stereo panners; expects +/-5 volt CV; CV is attenuverted by the corresponding knob when in use.
- Stereo outputs; if only one is patched, the output mix is mono.
- Performance mutes (buttons) per channel.
+ - Right-click a mute buttons solos that channel (un-mutes that channel and temporarily mutes all others). Right or left click will un-solo, restoring the old state. Multiple channels can be "soloed" at once.
- Fader handles contain lights indicating the signal level out of that channel or the entire mix.
- Output saturates (soft clips) to +/-12 volts, where the clipping effect becomes noticeable above +/-10 volts.
@@ -228,6 +234,8 @@ Saturation (soft clipping) is applied to each output at +/-12 volts; the LEVEL k
MUTE8 provides 8 independent manual or CV-controlled mutes. Each channel is muted if its button is toggled on or if there is a positive voltage at its CV input. Otherwise the input is passed to the output.
+As with MIX4 and MIX8, a right-click on a mute button will solo that channel (pass that channel through while muting all others). Right or left click clears this.
+
#### PAN
A stereo panner with dual inputs channels. Each channel's panner may be controlled with a +/-5 volt CV; when CV is in use, it is attenuverted the corresponding knob. Output saturates (soft clips) to +/-12 volts.
@@ -309,6 +317,28 @@ In contrast to CLPR, LMTR does not distort the signal (or not much); it just red
NSGT is a compact (6HP) [noise gate](https://en.wikipedia.org/wiki/Noise_gate). Its controls behave the same as the corresponding controls on PRESSOR.
+### Sequential Switches and Sequencers
+
+
+
+#### 8:1
+
+8:1 is a sequential switch and voltage-addressed switch (multiplexer) at once -- it routes 8 inputs to 1 output according to either a clock or CV input (or both).
+
+As a sequential switch, a trigger at the clock input advances the input selection -- which input is routed to the output. Like a sequencer, it can be reset with a trigger at RESET, the number of inputs to cycle through may be set with the STEPS knob, and the direction is set with the FWD/REV switch.
+
+As a multiplexer, it routes an input to the output under control of the SELECT knob and CV. A 0-10V CV, divided into 8 equal divisions of 1.25V, controls the input selection. This value is summed with the knob setting; for example, setting the knob to 4 and inputting a 2.6V CV will send input 7 to the output. When the knob-plus-CV value exceeds 8, it wraps around.
+
+Both functions may be used simultaneously: the SELECT+CV value is added to the sequential/clocked value, wrapping around. Note that the STEPS value only affects the sequential value; for example, using a clock input and setting STEPS to 2 will yield an alternation between two adjacent inputs, but this pair can be selected with the SELECT knob or CV.
+
+#### 1:8
+
+1:8 is the opposite of 8:1 -- it routes a single input to 1 of 8 outputs. The control circuit behavior (CLOCK, SELECT, etc) is the same.
+
+#### ADDR-SEQ
+
+ADDR-SEQ is an 8-step sequencer where the step values are set by 8 bipolar knobs able to dial in voltages from -10 to 10V. It has the same clocked or voltage-addressed control circuit as 8:1 and 1:8.
+
### Visualizers
#### ANALYZER
diff --git a/plugins/community/repos/Bogaudio/doc/www/lfos.png b/plugins/community/repos/Bogaudio/doc/www/lfos.png
index 71631542..9c3f798f 100644
Binary files a/plugins/community/repos/Bogaudio/doc/www/lfos.png and b/plugins/community/repos/Bogaudio/doc/www/lfos.png differ
diff --git a/plugins/community/repos/Bogaudio/doc/www/modules.png b/plugins/community/repos/Bogaudio/doc/www/modules.png
deleted file mode 100644
index 98b778f5..00000000
Binary files a/plugins/community/repos/Bogaudio/doc/www/modules.png and /dev/null differ
diff --git a/plugins/community/repos/Bogaudio/doc/www/modules1.png b/plugins/community/repos/Bogaudio/doc/www/modules1.png
index 85092e7f..df607180 100644
Binary files a/plugins/community/repos/Bogaudio/doc/www/modules1.png and b/plugins/community/repos/Bogaudio/doc/www/modules1.png differ
diff --git a/plugins/community/repos/Bogaudio/doc/www/modules5.png b/plugins/community/repos/Bogaudio/doc/www/modules5.png
new file mode 100644
index 00000000..ab70733b
Binary files /dev/null and b/plugins/community/repos/Bogaudio/doc/www/modules5.png differ
diff --git a/plugins/community/repos/Bogaudio/doc/www/sequencers.png b/plugins/community/repos/Bogaudio/doc/www/sequencers.png
new file mode 100644
index 00000000..87b3d51b
Binary files /dev/null and b/plugins/community/repos/Bogaudio/doc/www/sequencers.png differ
diff --git a/plugins/community/repos/Bogaudio/make.objects b/plugins/community/repos/Bogaudio/make.objects
index f70bc327..ba862c74 100644
--- a/plugins/community/repos/Bogaudio/make.objects
+++ b/plugins/community/repos/Bogaudio/make.objects
@@ -10,6 +10,7 @@ ALL_OBJ= \
src/dsp/signal.o \
src/dsp/table.o \
src/AD.o \
+ src/AddrSeq.o \
src/ADSR.o \
src/Additator.o \
src/AMRM.o \
@@ -25,10 +26,12 @@ ALL_OBJ= \
src/DGate.o \
src/Detune.o \
src/EightFO.o \
+ src/EightOne.o \
src/FMOp.o \
src/FlipFlop.o \
src/Follow.o \
src/LFO.o \
+ src/lfo_base.o \
src/LLFO.o \
src/Lag.o \
src/Lmtr.o \
@@ -41,6 +44,7 @@ ALL_OBJ= \
src/Noise.o \
src/Nsgt.o \
src/Offset.o \
+ src/OneEight.o \
src/Pressor.o \
src/Pan.o \
src/Reftone.o \
@@ -59,6 +63,8 @@ ALL_OBJ= \
src/VCM.o \
src/VCO.o \
src/VU.o \
+ src/Walk.o \
+ src/Walk2.o \
src/XCO.o \
src/XFade.o \
src/bogaudio.o \
diff --git a/plugins/community/repos/Bogaudio/res-src/AddrSeq-src.svg b/plugins/community/repos/Bogaudio/res-src/AddrSeq-src.svg
new file mode 100644
index 00000000..6aba794c
--- /dev/null
+++ b/plugins/community/repos/Bogaudio/res-src/AddrSeq-src.svg
@@ -0,0 +1,219 @@
+
diff --git a/plugins/community/repos/Bogaudio/res-src/EightFO-classic-src.svg b/plugins/community/repos/Bogaudio/res-src/EightFO-classic-src.svg
new file mode 100644
index 00000000..9bab3949
--- /dev/null
+++ b/plugins/community/repos/Bogaudio/res-src/EightFO-classic-src.svg
@@ -0,0 +1,407 @@
+
diff --git a/plugins/community/repos/Bogaudio/res-src/EightFO-src.svg b/plugins/community/repos/Bogaudio/res-src/EightFO-src.svg
index 9bab3949..459a8d76 100644
--- a/plugins/community/repos/Bogaudio/res-src/EightFO-src.svg
+++ b/plugins/community/repos/Bogaudio/res-src/EightFO-src.svg
@@ -57,17 +57,13 @@
0.5
-
+
- 1
+ 10
-
+
- 5
-
-
-
- 0V
+ 0V
@@ -77,23 +73,29 @@
200
-
+
- 400HZ
+ 400HZ
+
-
-
+
+
+
+
-
+
+
+
+
@@ -249,7 +251,7 @@
- 0V = C0 = 16.35HZ
+ 0V = C-3 = 2.04HZ
diff --git a/plugins/community/repos/Bogaudio/res-src/EightOne-src.svg b/plugins/community/repos/Bogaudio/res-src/EightOne-src.svg
new file mode 100644
index 00000000..e041c307
--- /dev/null
+++ b/plugins/community/repos/Bogaudio/res-src/EightOne-src.svg
@@ -0,0 +1,186 @@
+
diff --git a/plugins/community/repos/Bogaudio/res-src/LFO-classic-src.svg b/plugins/community/repos/Bogaudio/res-src/LFO-classic-src.svg
new file mode 100644
index 00000000..322c4c35
--- /dev/null
+++ b/plugins/community/repos/Bogaudio/res-src/LFO-classic-src.svg
@@ -0,0 +1,355 @@
+
diff --git a/plugins/community/repos/Bogaudio/res-src/LFO-src.svg b/plugins/community/repos/Bogaudio/res-src/LFO-src.svg
index 322c4c35..ab4ef472 100644
--- a/plugins/community/repos/Bogaudio/res-src/LFO-src.svg
+++ b/plugins/community/repos/Bogaudio/res-src/LFO-src.svg
@@ -57,17 +57,13 @@
0.5
-
+
- 1
+ 10
-
+
- 5
-
-
-
- 0V
+ 0V
@@ -77,23 +73,29 @@
200
-
+
- 400HZ
+ 400HZ
+
-
-
+
+
+
+
-
+
+
+
+
@@ -228,7 +230,7 @@
- 0V = C0 = 16.35HZ
+ 0V = C-3 = 2.04HZ
diff --git a/plugins/community/repos/Bogaudio/res-src/LLFO-classic-src.svg b/plugins/community/repos/Bogaudio/res-src/LLFO-classic-src.svg
new file mode 100644
index 00000000..86ae076d
--- /dev/null
+++ b/plugins/community/repos/Bogaudio/res-src/LLFO-classic-src.svg
@@ -0,0 +1,234 @@
+
diff --git a/plugins/community/repos/Bogaudio/res-src/LLFO-src.svg b/plugins/community/repos/Bogaudio/res-src/LLFO-src.svg
index 86ae076d..d9a39539 100644
--- a/plugins/community/repos/Bogaudio/res-src/LLFO-src.svg
+++ b/plugins/community/repos/Bogaudio/res-src/LLFO-src.svg
@@ -44,14 +44,19 @@
-
+
- 1
+ 0.2
-
+
- 0V
+ 20
+
+
+
+
+ 2
diff --git a/plugins/community/repos/Bogaudio/res-src/OneEight-src.svg b/plugins/community/repos/Bogaudio/res-src/OneEight-src.svg
new file mode 100644
index 00000000..cd672626
--- /dev/null
+++ b/plugins/community/repos/Bogaudio/res-src/OneEight-src.svg
@@ -0,0 +1,186 @@
+
diff --git a/plugins/community/repos/Bogaudio/res-src/Walk-src.svg b/plugins/community/repos/Bogaudio/res-src/Walk-src.svg
new file mode 100644
index 00000000..757bc407
--- /dev/null
+++ b/plugins/community/repos/Bogaudio/res-src/Walk-src.svg
@@ -0,0 +1,172 @@
+
diff --git a/plugins/community/repos/Bogaudio/res-src/Walk2-src.svg b/plugins/community/repos/Bogaudio/res-src/Walk2-src.svg
new file mode 100644
index 00000000..28426d5d
--- /dev/null
+++ b/plugins/community/repos/Bogaudio/res-src/Walk2-src.svg
@@ -0,0 +1,239 @@
+
diff --git a/plugins/community/repos/Bogaudio/res-src/button_18px_1_green-src.svg b/plugins/community/repos/Bogaudio/res-src/button_18px_1_green-src.svg
new file mode 100644
index 00000000..6ac776a1
--- /dev/null
+++ b/plugins/community/repos/Bogaudio/res-src/button_18px_1_green-src.svg
@@ -0,0 +1,28 @@
+
diff --git a/plugins/community/repos/Bogaudio/res/AddrSeq.svg b/plugins/community/repos/Bogaudio/res/AddrSeq.svg
new file mode 100644
index 00000000..c9c3600c
--- /dev/null
+++ b/plugins/community/repos/Bogaudio/res/AddrSeq.svg
@@ -0,0 +1,1836 @@
+
+
diff --git a/plugins/community/repos/Bogaudio/res/EightFO-classic.svg b/plugins/community/repos/Bogaudio/res/EightFO-classic.svg
new file mode 100644
index 00000000..350a3d2e
--- /dev/null
+++ b/plugins/community/repos/Bogaudio/res/EightFO-classic.svg
@@ -0,0 +1,2185 @@
+
+
diff --git a/plugins/community/repos/Bogaudio/res/EightFO.svg b/plugins/community/repos/Bogaudio/res/EightFO.svg
index 3604af58..6e36f9d6 100644
--- a/plugins/community/repos/Bogaudio/res/EightFO.svg
+++ b/plugins/community/repos/Bogaudio/res/EightFO.svg
@@ -11,11 +11,11 @@
width="255"
height="380"
viewBox="0 0 255 380"
- id="svg382"
+ id="svg378"
sodipodi:docname="svg_render_tmp.svg"
inkscape:version="0.92.2 5c3e80d, 2017-08-06">
+ id="metadata382">
@@ -36,7 +36,7 @@
inkscape:pageshadow="2"
inkscape:window-width="468"
inkscape:window-height="449"
- id="namedview384"
+ id="namedview380"
showgrid="false"
inkscape:zoom="0.62105263"
inkscape:cx="127.5"
@@ -44,7 +44,7 @@
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
- inkscape:current-layer="svg382" />
+ inkscape:current-layer="svg378" />
+ id="defs244">
@@ -140,11 +140,11 @@
+ id="g97">
@@ -174,7 +174,7 @@
id="text39">0.5
1
+ transform="translate(14 0) rotate(71.76) translate(-2 3.5)"
+ id="text45">10
5
+ letter-spacing="1px"
+ transform="translate(14 0) rotate(124.62) translate(-10 3.5)"
+ id="text51">0V
0V
+ transform="translate(14 0) rotate(18.17) translate(-2 3.5)"
+ id="text57">50
50
+ transform="translate(14 0) rotate(-27.98) translate(-2 3.5)"
+ id="text63">200
200
-
-
-
- 400HZ
+ transform="translate(14 0) rotate(-51.05) translate(-2 3.5)"
+ id="text69">400HZ
+ id="polyline73" />
+ id="polyline75" />
+ id="polyline77" />
-
+ transform="rotate(-147.69) translate(37 0)"
+ id="polyline79" />
+
+ id="polyline81" />
-
+ id="polyline83" />
+
+ id="polyline87" />
+ id="polyline89" />
+ id="polyline91" />
+ id="polyline93" />
+ id="polyline95" />
-->
+ id="g110">
+ id="polyline100" />
+ id="polyline102" />
+ id="polyline104" />
+ id="polyline106" />
+ id="polyline108" />
+ id="g114">
+ id="polyline112" />
+ id="g118">
+ id="polyline116" />
+ id="g124">
+ id="path120" />
+ id="path122" />
+ id="g128">
+ id="polyline126" />
+ id="g132">
+ id="polyline130" />
+ id="g179">
+ id="g137">
-
+ id="text135">-
+ id="g141">
+ id="polyline139" />
+ id="g145">
+ id="polyline143" />
+ id="g149">
+ id="polyline147" />
+ id="g153">
+ id="polyline151" />
+ id="g157">
0
+ id="text155">0
+ id="g161">
+ id="polyline159" />
+ id="g165">
+ id="polyline163" />
+ id="g169">
+ id="polyline167" />
+ id="g173">
+ id="polyline171" />
+ id="g177">
+
+ id="text175">+
@@ -539,71 +530,71 @@
viewBox="0 0 45px 45px">
+ id="g204">
0
+ id="text182">0
+ id="polyline184" />
+ id="polyline186" />
+ id="polyline188" />
+ id="polyline190" />
+ id="polyline192" />
+ id="polyline194" />
+ id="polyline196" />
+ id="polyline198" />
+ id="polyline200" />
+ id="polyline202" />
+ id="g219">
+ id="g209">
+ id="polyline207" />
+ id="path211" />
+ id="path213" />
+ id="path215" />
+ id="path217" />
+ id="g226">
+ id="circle222" />
+ id="circle224" />
+ id="g233">
+ id="circle229" />
+ id="circle231" />
+ id="g238">
+ id="circle236" />
+ id="rect241" />
+ id="rect246" />
+ id="polyline248" />
+ id="polyline250" />
+ id="polyline252" />
@@ -750,416 +741,405 @@
+ id="text254">
+ id="path955" />
+ id="path957" />
+ id="path959" />
+ id="text256">
+ id="path962" />
+ id="path964" />
+ id="path966" />
+ id="path968" />
+ id="path970" />
+ id="path972" />
+ id="path974" />
+ id="path976" />
+ id="rect258" />
+ id="polyline433" />
+ id="text435">
+ id="path981" />
+ id="path983" />
+ id="path985" />
+ id="polyline439" />
+ id="text441">
+ id="path989" />
+ id="path991" />
+ id="path993" />
+ id="g449"
+ transform="rotate(-71.76,-17,-23.501846)">
+ id="polyline445" />
+ id="text447">
-
-
-
-
-
+ id="path997" />
+ id="path999" />
+ id="g455"
+ transform="rotate(-124.62,-17,-8.921415)">
+ id="polyline451" />
+ id="text453">
+ id="path1003" />
+ id="path1005" />
+ id="polyline457" />
+ id="text459">
+ id="path1009" />
+ id="path1011" />
+ id="polyline463" />
+ id="text465">
+ id="path1015" />
+ id="path1017" />
+ id="path1019" />
+ id="g473"
+ transform="rotate(51.05,-17,35.601256)">
+ id="polyline469" />
+ id="text471">
+ id="path1023" />
+ id="path1025" />
+ id="path1027" />
+ id="path1029" />
+ id="path1031" />
+ id="polyline475" />
+ id="polyline477" />
+ id="polyline479" />
-
+ id="polyline481" />
+
+ id="polyline483" />
-
+ id="polyline485" />
+
+ id="polyline489" />
+ id="polyline491" />
+ id="polyline493" />
+ id="polyline495" />
+ id="polyline497" />
+ id="text266">
+ id="path1046" />
+ id="path1048" />
+ id="path1050" />
+ id="path1052" />
+ id="path1054" />
+ id="path1056" />
+ id="path1058" />
+ id="path1060" />
+ id="path1062" />
+ id="path1064" />
+ id="path1066" />
+ id="path1068" />
+ id="path1070" />
+ id="text268">
+ id="path1073" />
+ id="path1075" />
+ id="path1077" />
+ id="path1079" />
@@ -1169,543 +1149,543 @@
aria-label="SAM/PW"
transform="rotate(-90,23,15)"
style="font-weight:bold;font-size:10.66666698px;font-family:Roboto, sans-serif;letter-spacing:2px;fill:#333333"
- id="text278">
+ id="text274">
+ id="path912" />
+ id="path914" />
+ id="path916" />
+ id="path918" />
+ id="path920" />
+ id="path922" />
+ id="text539">
+ id="path925" />
+ id="polyline543" />
+ id="polyline547" />
+ id="polyline551" />
+ id="polyline555" />
+ id="text559">
+ id="path932" />
+ id="polyline563" />
+ id="polyline567" />
+ id="polyline571" />
+ id="polyline575" />
+ id="text579">
+ id="path939" />
+ id="polyline503" />
+ id="polyline505" />
+ id="polyline507" />
+ id="polyline509" />
+ id="polyline511" />
+ id="polyline515" />
+ id="polyline519" />
+ id="polyline529" />
+ id="polyline533" />
+ id="text284">
+ id="path836" />
+ id="path838" />
+ id="path840" />
+ id="path842" />
+ id="path844" />
+ id="path846" />
+ id="text741">
+ id="path849" />
+ id="polyline745" />
+ id="polyline749" />
+ id="polyline753" />
+ id="polyline757" />
+ id="text761">
+ id="path856" />
+ id="polyline765" />
+ id="polyline769" />
+ id="polyline773" />
+ id="polyline777" />
+ id="text781">
+ id="path863" />
+ id="text290">
+ id="path866" />
+ id="path868" />
+ id="path870" />
+ id="path872" />
+ id="path874" />
+ id="text715">
+ id="path877" />
+ id="polyline717" />
+ id="polyline719" />
+ id="polyline721" />
+ id="polyline723" />
+ id="polyline725" />
+ id="polyline727" />
+ id="polyline729" />
+ id="polyline731" />
+ id="polyline733" />
+ id="polyline735" />
+ id="g298" />
+ id="polyline699" />
+ id="polyline683" />
+ id="polyline667" />
+ id="polyline651" />
+ id="polyline635" />
+ id="polyline619" />
+ id="polyline603" />
+ id="polyline587" />
+ id="rect336" />
+ id="text340">
+ id="path899" />
+ id="path901" />
+ id="rect344" />
+ id="text348">
+ id="path905" />
+ id="path907" />
+ id="path909" />
@@ -2042,144 +2022,144 @@
+ id="rect352" />
+ id="rect354" />
+ id="text356">
+ id="path791" />
+ id="path793" />
+ id="path795" />
+ id="path797" />
+ id="text360">
+ id="path800" />
+ id="path802" />
+ id="path804" />
+ id="text364">
+ id="path807" />
+ id="path809" />
+ id="path811" />
+ id="text368">
+ id="path814" />
+ id="path816" />
+ id="path818" />
+ id="path820" />
+ id="path822" />
+ id="text372">
+ id="path825" />
+ id="path827" />
+ id="path829" />
+ id="path831" />
+ id="path833" />
diff --git a/plugins/community/repos/Bogaudio/res/EightOne.svg b/plugins/community/repos/Bogaudio/res/EightOne.svg
new file mode 100644
index 00000000..06c77dd0
--- /dev/null
+++ b/plugins/community/repos/Bogaudio/res/EightOne.svg
@@ -0,0 +1,795 @@
+
+
diff --git a/plugins/community/repos/Bogaudio/res/LFO-classic.svg b/plugins/community/repos/Bogaudio/res/LFO-classic.svg
new file mode 100644
index 00000000..7cab54a0
--- /dev/null
+++ b/plugins/community/repos/Bogaudio/res/LFO-classic.svg
@@ -0,0 +1,1705 @@
+
+
diff --git a/plugins/community/repos/Bogaudio/res/LFO.svg b/plugins/community/repos/Bogaudio/res/LFO.svg
index f43921b5..5be63d75 100644
--- a/plugins/community/repos/Bogaudio/res/LFO.svg
+++ b/plugins/community/repos/Bogaudio/res/LFO.svg
@@ -11,11 +11,11 @@
width="150"
height="380"
viewBox="0 0 150 380"
- id="svg358"
+ id="svg354"
sodipodi:docname="svg_render_tmp.svg"
inkscape:version="0.92.2 5c3e80d, 2017-08-06">
+ id="metadata358">
@@ -36,7 +36,7 @@
inkscape:pageshadow="2"
inkscape:window-width="468"
inkscape:window-height="449"
- id="namedview360"
+ id="namedview356"
showgrid="false"
inkscape:zoom="0.62105263"
inkscape:cx="75"
@@ -44,7 +44,7 @@
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
- inkscape:current-layer="svg358" />
+ inkscape:current-layer="svg354" />
+ id="defs224">
@@ -140,11 +140,11 @@
+ id="g97">
@@ -174,7 +174,7 @@
id="text39">0.5
1
+ transform="translate(14 0) rotate(71.76) translate(-2 3.5)"
+ id="text45">10
5
+ letter-spacing="1px"
+ transform="translate(14 0) rotate(124.62) translate(-10 3.5)"
+ id="text51">0V
0V
+ transform="translate(14 0) rotate(18.17) translate(-2 3.5)"
+ id="text57">50
50
+ transform="translate(14 0) rotate(-27.98) translate(-2 3.5)"
+ id="text63">200
200
-
-
-
- 400HZ
+ transform="translate(14 0) rotate(-51.05) translate(-2 3.5)"
+ id="text69">400HZ
+ id="polyline73" />
+ id="polyline75" />
+ id="polyline77" />
-
+ transform="rotate(-147.69) translate(37 0)"
+ id="polyline79" />
+
+ id="polyline81" />
-
+ id="polyline83" />
+
+ id="polyline87" />
+ id="polyline89" />
+ id="polyline91" />
+ id="polyline93" />
+ id="polyline95" />
+ id="g144">
+ id="g102">
-
+ id="text100">-
+ id="g106">
+ id="polyline104" />
+ id="g110">
+ id="polyline108" />
+ id="g114">
+ id="polyline112" />
+ id="g118">
+ id="polyline116" />
+ id="g122">
0
+ id="text120">0
+ id="g126">
+ id="polyline124" />
+ id="g130">
+ id="polyline128" />
+ id="g134">
+ id="polyline132" />
+ id="g138">
+ id="polyline136" />
+ id="g142">
+
+ id="text140">+
@@ -438,71 +429,71 @@
viewBox="0 0 45px 45px">
+ id="g169">
0
+ id="text147">0
+ id="polyline149" />
+ id="polyline151" />
+ id="polyline153" />
+ id="polyline155" />
+ id="polyline157" />
+ id="polyline159" />
+ id="polyline161" />
+ id="polyline163" />
+ id="polyline165" />
+ id="polyline167" />
+ id="g184">
+ id="g174">
+ id="polyline172" />
+ id="path176" />
+ id="path178" />
+ id="path180" />
+ id="path182" />
+ id="g199">
+ id="g189">
+ id="polyline187" />
+ id="path191" />
+ id="path193" />
+ id="path195" />
+ id="path197" />
+ id="g206">
+ id="circle202" />
+ id="circle204" />
+ id="g213">
+ id="circle209" />
+ id="circle211" />
+ id="g218">
+ id="circle216" />
+ id="rect221" />
+ id="rect226" />
+ id="polyline228" />
+ id="polyline230" />
+ id="polyline232" />
+ id="text234">
+ id="path649" />
+ id="path651" />
+ id="path653" />
+ id="text236">
+ id="path656" />
+ id="path658" />
+ id="path660" />
+ id="path662" />
+ id="path664" />
+ id="path666" />
+ id="path668" />
+ id="path670" />
+ id="rect238" />
+ id="polyline517" />
+ id="text519">
+ id="path675" />
+ id="path677" />
+ id="path679" />
+ id="polyline523" />
+ id="text525">
+ id="path683" />
+ id="path685" />
+ id="path687" />
+ id="g533"
+ transform="rotate(-71.76,-17,-23.501846)">
+ id="polyline529" />
+ id="text531">
-
-
-
-
-
+ id="path691" />
+ id="path693" />
+ id="g539"
+ transform="rotate(-124.62,-17,-8.921415)">
+ id="polyline535" />
+ id="text537">
+ id="path697" />
+ id="path699" />
+ id="polyline541" />
+ id="text543">
+ id="path703" />
+ id="path705" />
+ id="polyline547" />
+ id="text549">
+ id="path709" />
+ id="path711" />
+ id="path713" />
+ id="g557"
+ transform="rotate(51.05,-17,35.601256)">
+ id="polyline553" />
+ id="text555">
+ id="path717" />
+ id="path719" />
+ id="path721" />
+ id="path723" />
+ id="path725" />
+ id="polyline559" />
+ id="polyline561" />
+ id="polyline563" />
-
+ id="polyline565" />
+
+ id="polyline567" />
-
+ id="polyline569" />
+
+ id="polyline573" />
+ id="polyline575" />
+ id="polyline577" />
+ id="polyline579" />
+ id="polyline581" />
+ id="text246">
+ id="path740" />
+ id="path742" />
+ id="path744" />
+ id="path746" />
+ id="path748" />
+ id="path750" />
+ id="path752" />
+ id="path754" />
+ id="path756" />
+ id="path758" />
+ id="path760" />
+ id="path762" />
+ id="path764" />
+ id="text248">
+ id="path767" />
+ id="path769" />
+ id="path771" />
+ id="path773" />
@@ -1108,91 +1088,91 @@
aria-label="SAM"
transform="rotate(-90,17.5,9.5)"
style="font-weight:bold;font-size:10.66666698px;font-family:Roboto, sans-serif;letter-spacing:2px;fill:#333333"
- id="text256">
+ id="text252">
+ id="path776" />
+ id="path778" />
+ id="path780" />
+ id="text491">
+ id="path783" />
+ id="polyline493" />
+ id="polyline495" />
+ id="polyline497" />
+ id="polyline499" />
+ id="polyline501" />
+ id="polyline503" />
+ id="polyline505" />
+ id="polyline507" />
+ id="polyline509" />
+ id="polyline511" />
@@ -1200,188 +1180,188 @@
aria-label="PW"
transform="rotate(-90,15.25,7.25)"
style="font-weight:bold;font-size:10.66666698px;font-family:Roboto, sans-serif;letter-spacing:2px;fill:#333333"
- id="text262">
+ id="text258">
+ id="path796" />
+ id="path798" />
+ id="text443">
+ id="path801" />
+ id="polyline447" />
+ id="polyline451" />
+ id="polyline455" />
+ id="polyline459" />
+ id="text463">
+ id="path808" />
+ id="polyline467" />
+ id="polyline471" />
+ id="polyline475" />
+ id="polyline479" />
+ id="text483">
+ id="path815" />
+ id="text266">
+ id="path818" />
+ id="path820" />
+ id="path822" />
+ id="polyline427" />
+ id="text272">
+ id="path826" />
+ id="path828" />
+ id="path830" />
+ id="polyline411" />
+ id="rect280" />
+ id="rect282" />
+ id="rect284" />
+ id="rect286" />
+ id="rect288" />
+ id="rect290" />
+ id="text292">
+ id="path593" />
+ id="path595" />
+ id="path597" />
+ id="text296">
+ id="path600" />
+ id="path602" />
+ id="polyline300" />
+ id="text306">
+ id="path606" />
+ id="path608" />
+ id="path610" />
+ id="text310">
+ id="path613" />
+ id="path615" />
+ id="path617" />
+ id="polyline314" />
+ id="polyline320" />
+ id="text326">
+ id="path622" />
+ id="path624" />
+ id="path626" />
+ id="path628" />
+ id="path630" />
+ id="text330">
+ id="path633" />
+ id="path635" />
+ id="path637" />
+ id="path639" />
+ id="path641" />
+ id="polyline334" />
diff --git a/plugins/community/repos/Bogaudio/res/LLFO-classic.svg b/plugins/community/repos/Bogaudio/res/LLFO-classic.svg
new file mode 100644
index 00000000..c7f3c4da
--- /dev/null
+++ b/plugins/community/repos/Bogaudio/res/LLFO-classic.svg
@@ -0,0 +1,854 @@
+
+
diff --git a/plugins/community/repos/Bogaudio/res/LLFO.svg b/plugins/community/repos/Bogaudio/res/LLFO.svg
index 11aa1969..49bf261b 100644
--- a/plugins/community/repos/Bogaudio/res/LLFO.svg
+++ b/plugins/community/repos/Bogaudio/res/LLFO.svg
@@ -11,11 +11,11 @@
width="45"
height="380"
viewBox="0 0 45 380"
- id="svg205"
+ id="svg211"
sodipodi:docname="svg_render_tmp.svg"
inkscape:version="0.92.2 5c3e80d, 2017-08-06">
+ id="metadata215">
@@ -36,7 +36,7 @@
inkscape:pageshadow="2"
inkscape:window-width="468"
inkscape:window-height="449"
- id="namedview207"
+ id="namedview213"
showgrid="false"
inkscape:zoom="0.62105263"
inkscape:cx="22.5"
@@ -44,7 +44,7 @@
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
- inkscape:current-layer="svg205" />
+ inkscape:current-layer="svg211" />
+ id="defs107">
@@ -118,7 +118,7 @@
viewBox="0 0 45px 45px">
+ id="g52">
1
+ transform="translate(5 0) rotate(202) translate(3 9.5) rotate(-90)"
+ id="text28">0.2
0V
+ transform="translate(5 0) rotate(48.68) translate(-1 2.3)"
+ id="text34">20
+ 2
+
+
+
200
+ id="text46">200
HZ
+ id="text50">HZ
+ id="g67">
+ id="g57">
+ id="polyline55" />
+ id="path59" />
+ id="path61" />
+ id="path63" />
+ id="path65" />
+ id="g82">
+ id="g72">
+ id="polyline70" />
+ id="path74" />
+ id="path76" />
+ id="path78" />
+ id="path80" />
+ id="g89">
+ id="circle85" />
+ id="circle87" />
+ id="g96">
+ id="circle92" />
+ id="circle94" />
+ id="g101">
+ id="circle99" />
+ id="rect104" />
+ id="rect109" />
+ id="polyline111" />
+ id="polyline113" />
+ id="polyline115" />
+ id="text117">
+ id="path433" />
+ id="path435" />
+ id="path437" />
+ id="path439" />
+ id="text119">
+ id="path442" />
+ id="path444" />
+ id="path446" />
+ id="rect121" />
+ id="polyline289" />
+ id="polyline291" />
+ id="g297"
+ transform="rotate(158,-7,1.3606622)">
+ id="polyline293" />
+ id="text295">
+
+ id="path328" />
+
+ id="g303"
+ transform="rotate(-48.68,-7,-15.474468)">
+ id="polyline299" />
+ id="text301">
+
+ id="path336" />
+
+
+
+
+
+ id="path340" />
+ id="polyline311" />
+ id="text313">
+ id="path344" />
+ id="path346" />
+ id="path348" />
+ id="text317">
+ id="path351" />
+ id="path353" />
+ id="text131">
+ id="path356" />
+ id="path358" />
+ id="path360" />
+ id="path362" />
+ id="g141">
+ id="polyline143" />
+ id="polyline149" />
+ id="g161">
+ id="polyline157" />
+ id="polyline163" />
+ id="polyline169" />
+ id="text179">
+ id="path370" />
+ id="path372" />
+ id="path374" />
+ id="path376" />
+ id="path378" />
+ id="path380" />
+ id="polyline273" />
+ id="text185">
+ id="path384" />
+ id="path386" />
+ id="path388" />
+ id="path390" />
+ id="path392" />
+ id="polyline257" />
+ id="rect191" />
+ id="rect193" />
+ id="text195">
+ id="path398" />
+ id="path400" />
+ id="path402" />
+ id="path404" />
+ id="path406" />
+ id="text197">
+ id="path409" />
+ id="path411" />
+ id="path413" />
+ id="path415" />
+ id="path417" />
+ id="rect201" />
+ id="rect203" />
+ id="text205">
+ id="path422" />
+ id="path424" />
+ id="path426" />
diff --git a/plugins/community/repos/Bogaudio/res/OneEight.svg b/plugins/community/repos/Bogaudio/res/OneEight.svg
new file mode 100644
index 00000000..9af005f9
--- /dev/null
+++ b/plugins/community/repos/Bogaudio/res/OneEight.svg
@@ -0,0 +1,795 @@
+
+
diff --git a/plugins/community/repos/Bogaudio/res/Walk.svg b/plugins/community/repos/Bogaudio/res/Walk.svg
new file mode 100644
index 00000000..b0c404fc
--- /dev/null
+++ b/plugins/community/repos/Bogaudio/res/Walk.svg
@@ -0,0 +1,781 @@
+
+
diff --git a/plugins/community/repos/Bogaudio/res/Walk2.svg b/plugins/community/repos/Bogaudio/res/Walk2.svg
new file mode 100644
index 00000000..7226591f
--- /dev/null
+++ b/plugins/community/repos/Bogaudio/res/Walk2.svg
@@ -0,0 +1,1166 @@
+
+
diff --git a/plugins/community/repos/Bogaudio/res/button_18px_1_green.svg b/plugins/community/repos/Bogaudio/res/button_18px_1_green.svg
new file mode 100644
index 00000000..26d68f7e
--- /dev/null
+++ b/plugins/community/repos/Bogaudio/res/button_18px_1_green.svg
@@ -0,0 +1,98 @@
+
+
diff --git a/plugins/community/repos/Bogaudio/src/AddrSeq.cpp b/plugins/community/repos/Bogaudio/src/AddrSeq.cpp
new file mode 100644
index 00000000..2d7a6374
--- /dev/null
+++ b/plugins/community/repos/Bogaudio/src/AddrSeq.cpp
@@ -0,0 +1,113 @@
+
+#include "AddrSeq.hpp"
+
+void AddrSeq::onReset() {
+ _step = 0;
+ _clock.reset();
+ _reset.reset();
+}
+
+void AddrSeq::step() {
+ int steps = clamp(params[STEPS_PARAM].value, 2.0f, 8.0f);
+ int reverse = 1 - 2 * (params[DIRECTION_PARAM].value == 0.0f);
+ _step = (_step + reverse * _clock.process(inputs[CLOCK_INPUT].value)) % steps;
+ _step += (_step < 0) * steps;
+ _step -= _step * _reset.process(inputs[RESET_INPUT].value);
+ int step = _step + (int)params[SELECT_PARAM].value;
+ step += (int)(clamp(inputs[SELECT_INPUT].value, 0.0f, 10.0f) * 0.1f * 8.0f);
+ step = step % 8;
+
+ float out = 0.0f;
+ for (int i = 0; i < 8; ++i) {
+ out += params[OUT1_PARAM + i].value * (step == i);
+ lights[OUT1_LIGHT + i].value = step == i;
+ }
+ outputs[OUT_OUTPUT].value = out * 10.0f;
+}
+
+struct AddrSeqWidget : ModuleWidget {
+ static constexpr int hp = 6;
+
+ AddrSeqWidget(AddrSeq* module) : ModuleWidget(module) {
+ box.size = Vec(RACK_GRID_WIDTH * hp, RACK_GRID_HEIGHT);
+
+ {
+ SVGPanel *panel = new SVGPanel();
+ panel->box.size = box.size;
+ panel->setBackground(SVG::load(assetPlugin(plugin, "res/AddrSeq.svg")));
+ addChild(panel);
+ }
+
+ addChild(Widget::create(Vec(0, 0)));
+ addChild(Widget::create(Vec(box.size.x - 15, 365)));
+
+ // generated by svg_widgets.rb
+ auto stepsParamPosition = Vec(15.5, 131.5);
+ auto directionParamPosition = Vec(16.0, 167.5);
+ auto selectParamPosition = Vec(9.0, 230.0);
+ auto out1ParamPosition = Vec(58.5, 36.0);
+ auto out2ParamPosition = Vec(58.5, 77.3);
+ auto out3ParamPosition = Vec(58.5, 118.6);
+ auto out4ParamPosition = Vec(58.5, 159.9);
+ auto out5ParamPosition = Vec(58.5, 201.1);
+ auto out6ParamPosition = Vec(58.5, 242.4);
+ auto out7ParamPosition = Vec(58.5, 283.7);
+ auto out8ParamPosition = Vec(58.5, 325.0);
+
+ auto clockInputPosition = Vec(11.5, 35.0);
+ auto resetInputPosition = Vec(11.5, 72.0);
+ auto selectInputPosition = Vec(11.5, 270.0);
+
+ auto outOutputPosition = Vec(11.5, 324.0);
+
+ auto out1LightPosition = Vec(66.5, 58.5);
+ auto out2LightPosition = Vec(66.5, 99.8);
+ auto out3LightPosition = Vec(66.5, 141.1);
+ auto out4LightPosition = Vec(66.5, 182.4);
+ auto out5LightPosition = Vec(66.5, 223.6);
+ auto out6LightPosition = Vec(66.5, 264.9);
+ auto out7LightPosition = Vec(66.5, 306.2);
+ auto out8LightPosition = Vec(66.5, 347.5);
+ // end generated by svg_widgets.rb
+
+ {
+ auto w = ParamWidget::create(stepsParamPosition, module, AddrSeq::STEPS_PARAM, 2.0, 8.0, 8.0);
+ dynamic_cast(w)->snap = true;
+ addParam(w);
+ }
+ addParam(ParamWidget::create(directionParamPosition, module, AddrSeq::DIRECTION_PARAM, 0.0, 1.0, 1.0));
+ {
+ auto w = ParamWidget::create(selectParamPosition, module, AddrSeq::SELECT_PARAM, 0.0, 7.0, 0.0);
+ dynamic_cast(w)->snap = true;
+ addParam(w);
+ }
+ addParam(ParamWidget::create(out1ParamPosition, module, AddrSeq::OUT1_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create(out2ParamPosition, module, AddrSeq::OUT2_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create(out3ParamPosition, module, AddrSeq::OUT3_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create(out4ParamPosition, module, AddrSeq::OUT4_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create(out5ParamPosition, module, AddrSeq::OUT5_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create(out6ParamPosition, module, AddrSeq::OUT6_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create(out7ParamPosition, module, AddrSeq::OUT7_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create(out8ParamPosition, module, AddrSeq::OUT8_PARAM, -1.0, 1.0, 0.0));
+
+ addInput(Port::create(clockInputPosition, Port::INPUT, module, AddrSeq::CLOCK_INPUT));
+ addInput(Port::create(resetInputPosition, Port::INPUT, module, AddrSeq::RESET_INPUT));
+ addInput(Port::create(selectInputPosition, Port::INPUT, module, AddrSeq::SELECT_INPUT));
+
+ addOutput(Port::create(outOutputPosition, Port::OUTPUT, module, AddrSeq::OUT_OUTPUT));
+
+ addChild(ModuleLightWidget::create>(out1LightPosition, module, AddrSeq::OUT1_LIGHT));
+ addChild(ModuleLightWidget::create>(out2LightPosition, module, AddrSeq::OUT2_LIGHT));
+ addChild(ModuleLightWidget::create>(out3LightPosition, module, AddrSeq::OUT3_LIGHT));
+ addChild(ModuleLightWidget::create>(out4LightPosition, module, AddrSeq::OUT4_LIGHT));
+ addChild(ModuleLightWidget::create>(out5LightPosition, module, AddrSeq::OUT5_LIGHT));
+ addChild(ModuleLightWidget::create>(out6LightPosition, module, AddrSeq::OUT6_LIGHT));
+ addChild(ModuleLightWidget::create>(out7LightPosition, module, AddrSeq::OUT7_LIGHT));
+ addChild(ModuleLightWidget::create>(out8LightPosition, module, AddrSeq::OUT8_LIGHT));
+ }
+};
+
+RACK_PLUGIN_MODEL_INIT(Bogaudio, AddrSeq) {
+ Model* modelAddrSeq = createModel("Bogaudio-AddrSeq", "ADDR-SEQ", "voltage-addressable sequencer", SEQUENCER_TAG);
+ return modelAddrSeq;
+}
diff --git a/plugins/community/repos/Bogaudio/src/AddrSeq.hpp b/plugins/community/repos/Bogaudio/src/AddrSeq.hpp
new file mode 100644
index 00000000..7fb9d98e
--- /dev/null
+++ b/plugins/community/repos/Bogaudio/src/AddrSeq.hpp
@@ -0,0 +1,61 @@
+#pragma once
+
+#include "bogaudio.hpp"
+
+extern Model* modelAddrSeq;
+
+namespace bogaudio {
+
+struct AddrSeq : Module {
+ enum ParamsIds {
+ STEPS_PARAM,
+ DIRECTION_PARAM,
+ SELECT_PARAM,
+ OUT1_PARAM,
+ OUT2_PARAM,
+ OUT3_PARAM,
+ OUT4_PARAM,
+ OUT5_PARAM,
+ OUT6_PARAM,
+ OUT7_PARAM,
+ OUT8_PARAM,
+ NUM_PARAMS
+ };
+
+ enum InputsIds {
+ CLOCK_INPUT,
+ RESET_INPUT,
+ SELECT_INPUT,
+ NUM_INPUTS
+ };
+
+ enum OutputsIds {
+ OUT_OUTPUT,
+ NUM_OUTPUTS
+ };
+
+ enum LightsIds {
+ OUT1_LIGHT,
+ OUT2_LIGHT,
+ OUT3_LIGHT,
+ OUT4_LIGHT,
+ OUT5_LIGHT,
+ OUT6_LIGHT,
+ OUT7_LIGHT,
+ OUT8_LIGHT,
+ NUM_LIGHTS
+ };
+
+ Trigger _clock;
+ Trigger _reset;
+ int _step;
+
+ AddrSeq() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {
+ onReset();
+ }
+
+ void onReset() override;
+ void step() override;
+};
+
+} // namespace bogaudio
diff --git a/plugins/community/repos/Bogaudio/src/Analyzer.cpp b/plugins/community/repos/Bogaudio/src/Analyzer.cpp
index bef9e65b..82170fc6 100644
--- a/plugins/community/repos/Bogaudio/src/Analyzer.cpp
+++ b/plugins/community/repos/Bogaudio/src/Analyzer.cpp
@@ -99,7 +99,7 @@ struct RangeDbMenuItem : MenuItem {
}
void step() override {
- rightText = _module->_rangeDb == _rangeDb ? "?" : "";
+ rightText = _module->_rangeDb == _rangeDb ? "✔" : "";
}
};
diff --git a/plugins/community/repos/Bogaudio/src/EightFO.cpp b/plugins/community/repos/Bogaudio/src/EightFO.cpp
index a1ff5625..6192d121 100644
--- a/plugins/community/repos/Bogaudio/src/EightFO.cpp
+++ b/plugins/community/repos/Bogaudio/src/EightFO.cpp
@@ -1,6 +1,5 @@
#include "EightFO.hpp"
-#include "dsp/pitch.hpp"
void EightFO::onReset() {
_resetTrigger.reset();
@@ -33,21 +32,7 @@ void EightFO::step() {
if (_modulationStep >= modulationSteps) {
_modulationStep = 0;
- float frequency = params[FREQUENCY_PARAM].value;
- if (inputs[PITCH_INPUT].active) {
- frequency += inputs[PITCH_INPUT].value;
- }
- if (_slowMode) {
- frequency -= 8.0f;
- }
- else {
- frequency -= 4.0f;
- }
- frequency = cvToFrequency(frequency);
- if (frequency > 2000.0f) {
- frequency = 2000.0f;
- }
- _phasor.setFrequency(frequency);
+ setFrequency(_slowMode, params[FREQUENCY_PARAM], inputs[PITCH_INPUT], _phasor);
_wave = (Wave)int(params[WAVE_PARAM].value);
if (_wave == SQUARE_WAVE) {
@@ -165,18 +150,19 @@ void EightFO::updateOutput(bool useSample, Output& output, Phasor::phase_delta_t
}
}
-struct EightFOWidget : ModuleWidget {
+struct EightFOWidget : LFOBaseWidget {
static constexpr int hp = 17;
- EightFOWidget(EightFO* module) : ModuleWidget(module) {
+ EightFOWidget(EightFO* module)
+ : LFOBaseWidget(
+ module,
+ new SVGPanel(),
+ SVG::load(assetPlugin(plugin, "res/EightFO-classic.svg")),
+ SVG::load(assetPlugin(plugin, "res/EightFO.svg"))
+ ) {
box.size = Vec(RACK_GRID_WIDTH * hp, RACK_GRID_HEIGHT);
-
- {
- SVGPanel *panel = new SVGPanel();
- panel->box.size = box.size;
- panel->setBackground(SVG::load(assetPlugin(plugin, "res/EightFO.svg")));
- addChild(panel);
- }
+ _panel->box.size = box.size;
+ addChild(_panel);
addChild(Widget::create(Vec(15, 0)));
addChild(Widget::create(Vec(box.size.x - 30, 0)));
@@ -225,7 +211,8 @@ struct EightFOWidget : ModuleWidget {
auto slowLightPosition = Vec(86.0, 335.0);
// end generated by svg_widgets.rb
- addParam(ParamWidget::create(frequencyParamPosition, module, EightFO::FREQUENCY_PARAM, -8.0, 5.0, 0.0));
+ _frequencyKnob = ParamWidget::create(frequencyParamPosition, module, EightFO::FREQUENCY_PARAM, -8.0, 5.0, 0.0);
+ addParam(_frequencyKnob);
{
auto w = ParamWidget::create(waveParamPosition, module, EightFO::WAVE_PARAM, 1.0, 5.0, 3.0);
auto k = dynamic_cast(w);
diff --git a/plugins/community/repos/Bogaudio/src/EightFO.hpp b/plugins/community/repos/Bogaudio/src/EightFO.hpp
index aca8a110..8b4b88af 100644
--- a/plugins/community/repos/Bogaudio/src/EightFO.hpp
+++ b/plugins/community/repos/Bogaudio/src/EightFO.hpp
@@ -1,8 +1,7 @@
#pragma once
#include "bogaudio.hpp"
-#include "dsp/oscillator.hpp"
-#include "dsp/signal.hpp"
+#include "lfo_base.hpp"
using namespace bogaudio::dsp;
@@ -10,7 +9,7 @@ extern Model* modelEightFO;
namespace bogaudio {
-struct EightFO : Module {
+struct EightFO : LFOBase {
enum ParamsIds {
FREQUENCY_PARAM,
WAVE_PARAM,
@@ -125,7 +124,7 @@ struct EightFO : Module {
bool _phase1Active = false;
bool _phase0Active = false;
- EightFO() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {
+ EightFO() : LFOBase(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {
onReset();
onSampleRateChange();
}
diff --git a/plugins/community/repos/Bogaudio/src/EightOne.cpp b/plugins/community/repos/Bogaudio/src/EightOne.cpp
new file mode 100644
index 00000000..7a6ce9f9
--- /dev/null
+++ b/plugins/community/repos/Bogaudio/src/EightOne.cpp
@@ -0,0 +1,113 @@
+
+#include "EightOne.hpp"
+
+void EightOne::onReset() {
+ _step = 0;
+ _clock.reset();
+ _reset.reset();
+}
+
+void EightOne::step() {
+ int steps = clamp(params[STEPS_PARAM].value, 2.0f, 8.0f);
+ int reverse = 1 - 2 * (params[DIRECTION_PARAM].value == 0.0f);
+ _step = (_step + reverse * _clock.process(inputs[CLOCK_INPUT].value)) % steps;
+ _step += (_step < 0) * steps;
+ _step -= _step * _reset.process(inputs[RESET_INPUT].value);
+ int step = _step + (int)params[SELECT_PARAM].value;
+ step += (int)(clamp(inputs[SELECT_INPUT].value, 0.0f, 10.0f) * 0.1f * 8.0f);
+ step = step % 8;
+
+ float out = 0.0f;
+ for (int i = 0; i < 8; ++i) {
+ out += inputs[IN1_INPUT + i].value * (step == i);
+ lights[IN1_LIGHT + i].value = step == i;
+ }
+ outputs[OUT_OUTPUT].value = out;
+}
+
+struct EightOneWidget : ModuleWidget {
+ static constexpr int hp = 6;
+
+ EightOneWidget(EightOne* module) : ModuleWidget(module) {
+ box.size = Vec(RACK_GRID_WIDTH * hp, RACK_GRID_HEIGHT);
+
+ {
+ SVGPanel *panel = new SVGPanel();
+ panel->box.size = box.size;
+ panel->setBackground(SVG::load(assetPlugin(plugin, "res/EightOne.svg")));
+ addChild(panel);
+ }
+
+ addChild(Widget::create(Vec(0, 0)));
+ addChild(Widget::create(Vec(box.size.x - 15, 365)));
+
+ // generated by svg_widgets.rb
+ auto stepsParamPosition = Vec(58.5, 131.5);
+ auto directionParamPosition = Vec(58.5, 167.5);
+ auto selectParamPosition = Vec(52.0, 230.0);
+
+ auto in1InputPosition = Vec(11.5, 35.0);
+ auto in2InputPosition = Vec(11.5, 76.3);
+ auto in3InputPosition = Vec(11.5, 118.6);
+ auto in4InputPosition = Vec(11.5, 158.9);
+ auto in5InputPosition = Vec(11.5, 200.1);
+ auto in6InputPosition = Vec(11.5, 241.4);
+ auto in7InputPosition = Vec(11.5, 282.7);
+ auto in8InputPosition = Vec(11.5, 324.0);
+ auto clockInputPosition = Vec(54.5, 35.0);
+ auto resetInputPosition = Vec(54.5, 72.0);
+ auto selectInputPosition = Vec(54.5, 270.0);
+
+ auto outOutputPosition = Vec(54.5, 324.0);
+
+ auto in1LightPosition = Vec(23.5, 61.5);
+ auto in2LightPosition = Vec(23.5, 102.8);
+ auto in3LightPosition = Vec(23.5, 145.1);
+ auto in4LightPosition = Vec(23.5, 185.4);
+ auto in5LightPosition = Vec(23.5, 226.6);
+ auto in6LightPosition = Vec(23.5, 267.9);
+ auto in7LightPosition = Vec(23.5, 309.2);
+ auto in8LightPosition = Vec(23.5, 350.5);
+ // end generated by svg_widgets.rb
+
+ {
+ auto w = ParamWidget::create(stepsParamPosition, module, EightOne::STEPS_PARAM, 2.0, 8.0, 8.0);
+ dynamic_cast(w)->snap = true;
+ addParam(w);
+ }
+ addParam(ParamWidget::create(directionParamPosition, module, EightOne::DIRECTION_PARAM, 0.0, 1.0, 1.0));
+ {
+ auto w = ParamWidget::create(selectParamPosition, module, EightOne::SELECT_PARAM, 0.0, 7.0, 0.0);
+ dynamic_cast(w)->snap = true;
+ addParam(w);
+ }
+
+ addInput(Port::create(in1InputPosition, Port::INPUT, module, EightOne::IN1_INPUT));
+ addInput(Port::create(in2InputPosition, Port::INPUT, module, EightOne::IN2_INPUT));
+ addInput(Port::create(in3InputPosition, Port::INPUT, module, EightOne::IN3_INPUT));
+ addInput(Port::create(in4InputPosition, Port::INPUT, module, EightOne::IN4_INPUT));
+ addInput(Port::create(in5InputPosition, Port::INPUT, module, EightOne::IN5_INPUT));
+ addInput(Port::create(in6InputPosition, Port::INPUT, module, EightOne::IN6_INPUT));
+ addInput(Port::create(in7InputPosition, Port::INPUT, module, EightOne::IN7_INPUT));
+ addInput(Port::create(in8InputPosition, Port::INPUT, module, EightOne::IN8_INPUT));
+ addInput(Port::create(clockInputPosition, Port::INPUT, module, EightOne::CLOCK_INPUT));
+ addInput(Port::create(resetInputPosition, Port::INPUT, module, EightOne::RESET_INPUT));
+ addInput(Port::create(selectInputPosition, Port::INPUT, module, EightOne::SELECT_INPUT));
+
+ addOutput(Port::create(outOutputPosition, Port::OUTPUT, module, EightOne::OUT_OUTPUT));
+
+ addChild(ModuleLightWidget::create>(in1LightPosition, module, EightOne::IN1_LIGHT));
+ addChild(ModuleLightWidget::create>(in2LightPosition, module, EightOne::IN2_LIGHT));
+ addChild(ModuleLightWidget::create>(in3LightPosition, module, EightOne::IN3_LIGHT));
+ addChild(ModuleLightWidget::create>(in4LightPosition, module, EightOne::IN4_LIGHT));
+ addChild(ModuleLightWidget::create>(in5LightPosition, module, EightOne::IN5_LIGHT));
+ addChild(ModuleLightWidget::create>(in6LightPosition, module, EightOne::IN6_LIGHT));
+ addChild(ModuleLightWidget::create>(in7LightPosition, module, EightOne::IN7_LIGHT));
+ addChild(ModuleLightWidget::create>(in8LightPosition, module, EightOne::IN8_LIGHT));
+ }
+};
+
+RACK_PLUGIN_MODEL_INIT(Bogaudio, EightOne) {
+ Model* modelEightOne = createModel("Bogaudio-EightOne", "8:1", "demux & sequential switch", SWITCH_TAG);
+ return modelEightOne;
+}
diff --git a/plugins/community/repos/Bogaudio/src/EightOne.hpp b/plugins/community/repos/Bogaudio/src/EightOne.hpp
new file mode 100644
index 00000000..e4455390
--- /dev/null
+++ b/plugins/community/repos/Bogaudio/src/EightOne.hpp
@@ -0,0 +1,61 @@
+#pragma once
+
+#include "bogaudio.hpp"
+
+extern Model* modelEightOne;
+
+namespace bogaudio {
+
+struct EightOne : Module {
+ enum ParamsIds {
+ STEPS_PARAM,
+ DIRECTION_PARAM,
+ SELECT_PARAM,
+ NUM_PARAMS
+ };
+
+ enum InputsIds {
+ IN1_INPUT,
+ IN2_INPUT,
+ IN3_INPUT,
+ IN4_INPUT,
+ IN5_INPUT,
+ IN6_INPUT,
+ IN7_INPUT,
+ IN8_INPUT,
+ CLOCK_INPUT,
+ RESET_INPUT,
+ SELECT_INPUT,
+ NUM_INPUTS
+ };
+
+ enum OutputsIds {
+ OUT_OUTPUT,
+ NUM_OUTPUTS
+ };
+
+ enum LightsIds {
+ IN1_LIGHT,
+ IN2_LIGHT,
+ IN3_LIGHT,
+ IN4_LIGHT,
+ IN5_LIGHT,
+ IN6_LIGHT,
+ IN7_LIGHT,
+ IN8_LIGHT,
+ NUM_LIGHTS
+ };
+
+ Trigger _clock;
+ Trigger _reset;
+ int _step;
+
+ EightOne() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {
+ onReset();
+ }
+
+ void onReset() override;
+ void step() override;
+};
+
+} // namespace bogaudio
diff --git a/plugins/community/repos/Bogaudio/src/LFO.cpp b/plugins/community/repos/Bogaudio/src/LFO.cpp
index bdd3a9cc..5605c8a8 100644
--- a/plugins/community/repos/Bogaudio/src/LFO.cpp
+++ b/plugins/community/repos/Bogaudio/src/LFO.cpp
@@ -1,6 +1,5 @@
#include "LFO.hpp"
-#include "dsp/pitch.hpp"
void LFO::onReset() {
_resetTrigger.reset();
@@ -30,21 +29,7 @@ void LFO::step() {
if (_modulationStep >= modulationSteps) {
_modulationStep = 0;
- float frequency = params[FREQUENCY_PARAM].value;
- if (inputs[PITCH_INPUT].active) {
- frequency += inputs[PITCH_INPUT].value;
- }
- if (_slowMode) {
- frequency -= 8.0f;
- }
- else {
- frequency -= 4.0f;
- }
- frequency = cvToFrequency(frequency);
- if (frequency > 2000.0f) {
- frequency = 2000.0f;
- }
- _phasor.setFrequency(frequency);
+ setFrequency(_slowMode, params[FREQUENCY_PARAM], inputs[PITCH_INPUT], _phasor);
float pw = params[PW_PARAM].value;
if (inputs[PW_INPUT].active) {
@@ -116,18 +101,19 @@ void LFO::updateOutput(Phasor& wave, bool useSample, bool invert, Output& output
}
}
-struct LFOWidget : ModuleWidget {
+struct LFOWidget : LFOBaseWidget {
static constexpr int hp = 10;
- LFOWidget(LFO* module) : ModuleWidget(module) {
+ LFOWidget(LFO* module)
+ : LFOBaseWidget(
+ module,
+ new SVGPanel(),
+ SVG::load(assetPlugin(plugin, "res/LFO-classic.svg")),
+ SVG::load(assetPlugin(plugin, "res/LFO.svg"))
+ ) {
box.size = Vec(RACK_GRID_WIDTH * hp, RACK_GRID_HEIGHT);
-
- {
- SVGPanel *panel = new SVGPanel();
- panel->box.size = box.size;
- panel->setBackground(SVG::load(assetPlugin(plugin, "res/LFO.svg")));
- addChild(panel);
- }
+ _panel->box.size = box.size;
+ addChild(_panel);
addChild(Widget::create(Vec(0, 0)));
addChild(Widget::create(Vec(box.size.x - 15, 0)));
@@ -158,7 +144,8 @@ struct LFOWidget : ModuleWidget {
auto slowLightPosition = Vec(111.0, 240.0);
// end generated by svg_widgets.rb
- addParam(ParamWidget::create(frequencyParamPosition, module, LFO::FREQUENCY_PARAM, -8.0, 5.0, 0.0));
+ _frequencyKnob = ParamWidget::create(frequencyParamPosition, module, LFO::FREQUENCY_PARAM, -8.0, 5.0, 0.0);
+ addParam(_frequencyKnob);
addParam(ParamWidget::create(slowParamPosition, module, LFO::SLOW_PARAM, 0.0, 1.0, 0.0));
addParam(ParamWidget::create(sampleParamPosition, module, LFO::SAMPLE_PARAM, 0.0, 1.0, 0.0));
addParam(ParamWidget::create(pwParamPosition, module, LFO::PW_PARAM, -1.0, 1.0, 0.0));
diff --git a/plugins/community/repos/Bogaudio/src/LFO.hpp b/plugins/community/repos/Bogaudio/src/LFO.hpp
index 41be25c2..bb7f1693 100644
--- a/plugins/community/repos/Bogaudio/src/LFO.hpp
+++ b/plugins/community/repos/Bogaudio/src/LFO.hpp
@@ -1,8 +1,7 @@
#pragma once
#include "bogaudio.hpp"
-#include "dsp/oscillator.hpp"
-#include "dsp/signal.hpp"
+#include "lfo_base.hpp"
using namespace bogaudio::dsp;
@@ -10,7 +9,7 @@ extern Model* modelLFO;
namespace bogaudio {
-struct LFO : Module {
+struct LFO : LFOBase {
enum ParamsIds {
FREQUENCY_PARAM,
SLOW_PARAM,
@@ -74,7 +73,7 @@ struct LFO : Module {
bool _rampDownActive = false;
bool _squareActive = false;
- LFO() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {
+ LFO() : LFOBase(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {
onReset();
onSampleRateChange();
}
diff --git a/plugins/community/repos/Bogaudio/src/LLFO.cpp b/plugins/community/repos/Bogaudio/src/LLFO.cpp
index 8dd1a157..fad7ae19 100644
--- a/plugins/community/repos/Bogaudio/src/LLFO.cpp
+++ b/plugins/community/repos/Bogaudio/src/LLFO.cpp
@@ -1,6 +1,5 @@
#include "LLFO.hpp"
-#include "dsp/pitch.hpp"
void LLFO::onReset() {
_resetTrigger.reset();
@@ -15,12 +14,13 @@ void LLFO::onSampleRateChange() {
void LLFO::step() {
lights[SLOW_LIGHT].value = _slowMode = params[SLOW_PARAM].value > 0.5f;
- lights[SINE_LIGHT].value = _wave == SINE_WAVE;
- lights[TRIANGLE_LIGHT].value = _wave == TRIANGLE_WAVE;
- lights[RAMP_UP_LIGHT].value = _wave == RAMP_UP_WAVE;
- lights[RAMP_DOWN_LIGHT].value = _wave == RAMP_DOWN_WAVE;
- lights[SQUARE_LIGHT].value = _wave == SQUARE_WAVE;
- lights[PULSE_LIGHT].value = _wave == PULSE_WAVE;
+ Wave wave = (Wave)int(params[WAVE_PARAM].value);
+ lights[SINE_LIGHT].value = wave == SINE_WAVE;
+ lights[TRIANGLE_LIGHT].value = wave == TRIANGLE_WAVE;
+ lights[RAMP_UP_LIGHT].value = wave == RAMP_UP_WAVE;
+ lights[RAMP_DOWN_LIGHT].value = wave == RAMP_DOWN_WAVE;
+ lights[SQUARE_LIGHT].value = wave == SQUARE_WAVE;
+ lights[PULSE_LIGHT].value = wave == PULSE_WAVE;
if (!outputs[OUT_OUTPUT].active) {
return;
}
@@ -29,25 +29,10 @@ void LLFO::step() {
if (_modulationStep >= modulationSteps) {
_modulationStep = 0;
- float frequency = params[FREQUENCY_PARAM].value;
- if (inputs[PITCH_INPUT].active) {
- frequency += inputs[PITCH_INPUT].value;
- }
- if (_slowMode) {
- frequency -= 8.0f;
- }
- else {
- frequency -= 4.0f;
- }
- frequency = cvToFrequency(frequency);
- if (frequency > 2000.0f) {
- frequency = 2000.0f;
- }
- _phasor.setFrequency(frequency);
+ setFrequency(_slowMode, params[FREQUENCY_PARAM], inputs[PITCH_INPUT], _phasor);
- _wave = (Wave)int32_t(params[WAVE_PARAM].value);
_invert = false;
- switch (_wave) {
+ switch (wave) {
case SINE_WAVE: {
_oscillator = &_sine;
break;
@@ -93,18 +78,19 @@ void LLFO::step() {
outputs[OUT_OUTPUT].value = sample;
}
-struct LLFOWidget : ModuleWidget {
+struct LLFOWidget : LFOBaseWidget {
static constexpr int hp = 3;
- LLFOWidget(LLFO* module) : ModuleWidget(module) {
+ LLFOWidget(LLFO* module)
+ : LFOBaseWidget(
+ module,
+ new SVGPanel(),
+ SVG::load(assetPlugin(plugin, "res/LLFO-classic.svg")),
+ SVG::load(assetPlugin(plugin, "res/LLFO.svg"))
+ ) {
box.size = Vec(RACK_GRID_WIDTH * hp, RACK_GRID_HEIGHT);
-
- {
- SVGPanel *panel = new SVGPanel();
- panel->box.size = box.size;
- panel->setBackground(SVG::load(assetPlugin(plugin, "res/LLFO.svg")));
- addChild(panel);
- }
+ _panel->box.size = box.size;
+ addChild(_panel);
addChild(Widget::create(Vec(0, 0)));
addChild(Widget::create(Vec(box.size.x - 15, 365)));
@@ -130,7 +116,8 @@ struct LLFOWidget : ModuleWidget {
auto pulseLightPosition = Vec(24.0, 115.0);
// end generated by svg_widgets.rb
- addParam(ParamWidget::create(frequencyParamPosition, module, LLFO::FREQUENCY_PARAM, -8.0, 5.0, 0.0));
+ _frequencyKnob = ParamWidget::create(frequencyParamPosition, module, LLFO::FREQUENCY_PARAM, -8.0, 5.0, 0.0);
+ addParam(_frequencyKnob);
addParam(ParamWidget::create(slowParamPosition, module, LLFO::SLOW_PARAM, 0.0, 1.0, 0.0));
addParam(ParamWidget::create(waveParamPosition, module, LLFO::WAVE_PARAM, 0.0, 5.0, 0.0));
addParam(ParamWidget::create(offsetParamPosition, module, LLFO::OFFSET_PARAM, -1.0, 1.0, 0.0));
diff --git a/plugins/community/repos/Bogaudio/src/LLFO.hpp b/plugins/community/repos/Bogaudio/src/LLFO.hpp
index 2855c1fd..abc83c06 100644
--- a/plugins/community/repos/Bogaudio/src/LLFO.hpp
+++ b/plugins/community/repos/Bogaudio/src/LLFO.hpp
@@ -1,8 +1,7 @@
#pragma once
#include "bogaudio.hpp"
-#include "dsp/oscillator.hpp"
-#include "dsp/signal.hpp"
+#include "lfo_base.hpp"
using namespace bogaudio::dsp;
@@ -10,7 +9,7 @@ extern Model* modelLLFO;
namespace bogaudio {
-struct LLFO : Module {
+struct LLFO : LFOBase {
enum ParamsIds {
FREQUENCY_PARAM,
SLOW_PARAM,
@@ -66,13 +65,11 @@ struct LLFO : Module {
SawOscillator _ramp;
SquareOscillator _square;
- Wave _wave;
bool _invert;
Phasor* _oscillator;
LLFO()
- : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS)
- , _wave(SINE_WAVE)
+ : LFOBase(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS)
, _invert(false)
, _oscillator(&_sine)
{
diff --git a/plugins/community/repos/Bogaudio/src/Mix4.cpp b/plugins/community/repos/Bogaudio/src/Mix4.cpp
index af723422..6a99d2f3 100644
--- a/plugins/community/repos/Bogaudio/src/Mix4.cpp
+++ b/plugins/community/repos/Bogaudio/src/Mix4.cpp
@@ -13,10 +13,15 @@ void Mix4::onSampleRateChange() {
void Mix4::step() {
bool stereo = outputs[L_OUTPUT].active && outputs[R_OUTPUT].active;
- _channel1.next(stereo);
- _channel2.next(stereo);
- _channel3.next(stereo);
- _channel4.next(stereo);
+ bool solo =
+ params[MUTE1_PARAM].value > 1.5f ||
+ params[MUTE2_PARAM].value > 1.5f ||
+ params[MUTE3_PARAM].value > 1.5f ||
+ params[MUTE4_PARAM].value > 1.5f;
+ _channel1.next(stereo, solo);
+ _channel2.next(stereo, solo);
+ _channel3.next(stereo, solo);
+ _channel4.next(stereo, solo);
float level = Amplifier::minDecibels;
if (params[MIX_MUTE_PARAM].value < 0.5f) {
@@ -116,16 +121,16 @@ struct Mix4Widget : ModuleWidget {
addSlider(level1ParamPosition, module, Mix4::LEVEL1_PARAM, module->_channel1.rms);
addParam(ParamWidget::create(pan1ParamPosition, module, Mix4::PAN1_PARAM, -1.0, 1.0, 0.0));
- addParam(ParamWidget::create(mute1ParamPosition, module, Mix4::MUTE1_PARAM, 0.0, 1.0, 0.0));
+ addParam(ParamWidget::create(mute1ParamPosition, module, Mix4::MUTE1_PARAM, 0.0, 3.0, 0.0));
addSlider(level2ParamPosition, module, Mix4::LEVEL2_PARAM, module->_channel2.rms);
addParam(ParamWidget::create(pan2ParamPosition, module, Mix4::PAN2_PARAM, -1.0, 1.0, 0.0));
- addParam(ParamWidget::create(mute2ParamPosition, module, Mix4::MUTE2_PARAM, 0.0, 1.0, 0.0));
+ addParam(ParamWidget::create(mute2ParamPosition, module, Mix4::MUTE2_PARAM, 0.0, 3.0, 0.0));
addSlider(level3ParamPosition, module, Mix4::LEVEL3_PARAM, module->_channel3.rms);
addParam(ParamWidget::create(pan3ParamPosition, module, Mix4::PAN3_PARAM, -1.0, 1.0, 0.0));
- addParam(ParamWidget::create(mute3ParamPosition, module, Mix4::MUTE3_PARAM, 0.0, 1.0, 0.0));
+ addParam(ParamWidget::create(mute3ParamPosition, module, Mix4::MUTE3_PARAM, 0.0, 3.0, 0.0));
addSlider(level4ParamPosition, module, Mix4::LEVEL4_PARAM, module->_channel4.rms);
addParam(ParamWidget::create(pan4ParamPosition, module, Mix4::PAN4_PARAM, -1.0, 1.0, 0.0));
- addParam(ParamWidget::create(mute4ParamPosition, module, Mix4::MUTE4_PARAM, 0.0, 1.0, 0.0));
+ addParam(ParamWidget::create(mute4ParamPosition, module, Mix4::MUTE4_PARAM, 0.0, 3.0, 0.0));
addSlider(mixParamPosition, module, Mix4::MIX_PARAM, module->_rmsLevel);
addParam(ParamWidget::create(mixMuteParamPosition, module, Mix4::MIX_MUTE_PARAM, 0.0, 1.0, 0.0));
diff --git a/plugins/community/repos/Bogaudio/src/Mix8.cpp b/plugins/community/repos/Bogaudio/src/Mix8.cpp
index c00b02e3..508d0064 100644
--- a/plugins/community/repos/Bogaudio/src/Mix8.cpp
+++ b/plugins/community/repos/Bogaudio/src/Mix8.cpp
@@ -17,14 +17,23 @@ _rms.setSampleRate(sr);
void Mix8::step() {
bool stereo = outputs[L_OUTPUT].active && outputs[R_OUTPUT].active;
- _channel1.next(stereo);
- _channel2.next(stereo);
- _channel3.next(stereo);
- _channel4.next(stereo);
- _channel5.next(stereo);
- _channel6.next(stereo);
- _channel7.next(stereo);
- _channel8.next(stereo);
+ bool solo =
+ params[MUTE1_PARAM].value > 1.5f ||
+ params[MUTE2_PARAM].value > 1.5f ||
+ params[MUTE3_PARAM].value > 1.5f ||
+ params[MUTE4_PARAM].value > 1.5f ||
+ params[MUTE5_PARAM].value > 1.5f ||
+ params[MUTE6_PARAM].value > 1.5f ||
+ params[MUTE7_PARAM].value > 1.5f ||
+ params[MUTE8_PARAM].value > 1.5f;
+ _channel1.next(stereo, solo);
+ _channel2.next(stereo, solo);
+ _channel3.next(stereo, solo);
+ _channel4.next(stereo, solo);
+ _channel5.next(stereo, solo);
+ _channel6.next(stereo, solo);
+ _channel7.next(stereo, solo);
+ _channel8.next(stereo, solo);
float level = Amplifier::minDecibels;
if (params[MIX_MUTE_PARAM].value < 0.5f) {
@@ -159,28 +168,28 @@ struct Mix8Widget : ModuleWidget {
// end generated by svg_widgets.rb
addSlider(level1ParamPosition, module, Mix8::LEVEL1_PARAM, module->_channel1.rms);
- addParam(ParamWidget::create(mute1ParamPosition, module, Mix8::MUTE1_PARAM, 0.0, 1.0, 0.0));
+ addParam(ParamWidget::create(mute1ParamPosition, module, Mix8::MUTE1_PARAM, 0.0, 3.0, 0.0));
addParam(ParamWidget::create(pan1ParamPosition, module, Mix8::PAN1_PARAM, -1.0, 1.0, 0.0));
addSlider(level2ParamPosition, module, Mix8::LEVEL2_PARAM, module->_channel2.rms);
- addParam(ParamWidget::create(mute2ParamPosition, module, Mix8::MUTE2_PARAM, 0.0, 1.0, 0.0));
+ addParam(ParamWidget::create(mute2ParamPosition, module, Mix8::MUTE2_PARAM, 0.0, 3.0, 0.0));
addParam(ParamWidget::create(pan2ParamPosition, module, Mix8::PAN2_PARAM, -1.0, 1.0, 0.0));
addSlider(level3ParamPosition, module, Mix8::LEVEL3_PARAM, module->_channel3.rms);
- addParam(ParamWidget::create(mute3ParamPosition, module, Mix8::MUTE3_PARAM, 0.0, 1.0, 0.0));
+ addParam(ParamWidget::create(mute3ParamPosition, module, Mix8::MUTE3_PARAM, 0.0, 3.0, 0.0));
addParam(ParamWidget::create(pan3ParamPosition, module, Mix8::PAN3_PARAM, -1.0, 1.0, 0.0));
addSlider(level4ParamPosition, module, Mix8::LEVEL4_PARAM, module->_channel4.rms);
- addParam(ParamWidget::create(mute4ParamPosition, module, Mix8::MUTE4_PARAM, 0.0, 1.0, 0.0));
+ addParam(ParamWidget::create(mute4ParamPosition, module, Mix8::MUTE4_PARAM, 0.0, 3.0, 0.0));
addParam(ParamWidget::create(pan4ParamPosition, module, Mix8::PAN4_PARAM, -1.0, 1.0, 0.0));
addSlider(level5ParamPosition, module, Mix8::LEVEL5_PARAM, module->_channel5.rms);
- addParam(ParamWidget::create(mute5ParamPosition, module, Mix8::MUTE5_PARAM, 0.0, 1.0, 0.0));
+ addParam(ParamWidget::create(mute5ParamPosition, module, Mix8::MUTE5_PARAM, 0.0, 3.0, 0.0));
addParam(ParamWidget::create(pan5ParamPosition, module, Mix8::PAN5_PARAM, -1.0, 1.0, 0.0));
addSlider(level6ParamPosition, module, Mix8::LEVEL6_PARAM, module->_channel6.rms);
- addParam(ParamWidget::create(mute6ParamPosition, module, Mix8::MUTE6_PARAM, 0.0, 1.0, 0.0));
+ addParam(ParamWidget::create(mute6ParamPosition, module, Mix8::MUTE6_PARAM, 0.0, 3.0, 0.0));
addParam(ParamWidget::create(pan6ParamPosition, module, Mix8::PAN6_PARAM, -1.0, 1.0, 0.0));
addSlider(level7ParamPosition, module, Mix8::LEVEL7_PARAM, module->_channel7.rms);
- addParam(ParamWidget::create(mute7ParamPosition, module, Mix8::MUTE7_PARAM, 0.0, 1.0, 0.0));
+ addParam(ParamWidget::create(mute7ParamPosition, module, Mix8::MUTE7_PARAM, 0.0, 3.0, 0.0));
addParam(ParamWidget::create(pan7ParamPosition, module, Mix8::PAN7_PARAM, -1.0, 1.0, 0.0));
addSlider(level8ParamPosition, module, Mix8::LEVEL8_PARAM, module->_channel8.rms);
- addParam(ParamWidget::create(mute8ParamPosition, module, Mix8::MUTE8_PARAM, 0.0, 1.0, 0.0));
+ addParam(ParamWidget::create(mute8ParamPosition, module, Mix8::MUTE8_PARAM, 0.0, 3.0, 0.0));
addParam(ParamWidget::create(pan8ParamPosition, module, Mix8::PAN8_PARAM, -1.0, 1.0, 0.0));
addSlider(mixParamPosition, module, Mix8::MIX_PARAM, module->_rmsLevel);
addParam(ParamWidget::create(mixMuteParamPosition, module, Mix8::MIX_MUTE_PARAM, 0.0, 1.0, 0.0));
diff --git a/plugins/community/repos/Bogaudio/src/Mute8.cpp b/plugins/community/repos/Bogaudio/src/Mute8.cpp
index ebafb3cf..69622e8b 100644
--- a/plugins/community/repos/Bogaudio/src/Mute8.cpp
+++ b/plugins/community/repos/Bogaudio/src/Mute8.cpp
@@ -20,14 +20,19 @@ void Mute8::onSampleRateChange() {
}
void Mute8::step() {
+ bool solo = false;
for (int i = 0; i < 8; ++i) {
- stepChannel(i);
+ solo = solo || params[MUTE1_PARAM + i].value > 1.5f;
+ }
+ for (int i = 0; i < 8; ++i) {
+ stepChannel(i, solo);
}
}
-void Mute8::stepChannel(int i) {
+void Mute8::stepChannel(int i, bool solo) {
_triggers[i].process(inputs[MUTE1_INPUT + i].value);
- if (params[MUTE1_PARAM + i].value > 0.5f || _triggers[i].isHigh()) {
+ bool muted = solo ? params[MUTE1_PARAM + i].value < 2.0f : (params[MUTE1_PARAM + i].value > 0.5f || _triggers[i].isHigh());
+ if (muted) {
lights[MUTE1_LIGHT + i].value = 1.0f;
_amplifiers[i].setLevel(_slewLimiters[i].next(minDecibels));
}
@@ -102,14 +107,14 @@ struct Mute8Widget : ModuleWidget {
auto mute8LightPosition = Vec(100.5, 324.8);
// end generated by svg_widgets.rb
- addParam(ParamWidget::create(mute1ParamPosition, module, Mute8::MUTE1_PARAM, 0.0, 1.0, 0.0));
- addParam(ParamWidget::create(mute2ParamPosition, module, Mute8::MUTE2_PARAM, 0.0, 1.0, 0.0));
- addParam(ParamWidget::create(mute3ParamPosition, module, Mute8::MUTE3_PARAM, 0.0, 1.0, 0.0));
- addParam(ParamWidget::create(mute4ParamPosition, module, Mute8::MUTE4_PARAM, 0.0, 1.0, 0.0));
- addParam(ParamWidget::create(mute5ParamPosition, module, Mute8::MUTE5_PARAM, 0.0, 1.0, 0.0));
- addParam(ParamWidget::create(mute6ParamPosition, module, Mute8::MUTE6_PARAM, 0.0, 1.0, 0.0));
- addParam(ParamWidget::create(mute7ParamPosition, module, Mute8::MUTE7_PARAM, 0.0, 1.0, 0.0));
- addParam(ParamWidget::create(mute8ParamPosition, module, Mute8::MUTE8_PARAM, 0.0, 1.0, 0.0));
+ addParam(ParamWidget::create(mute1ParamPosition, module, Mute8::MUTE1_PARAM, 0.0, 3.0, 0.0));
+ addParam(ParamWidget::create(mute2ParamPosition, module, Mute8::MUTE2_PARAM, 0.0, 3.0, 0.0));
+ addParam(ParamWidget::create(mute3ParamPosition, module, Mute8::MUTE3_PARAM, 0.0, 3.0, 0.0));
+ addParam(ParamWidget::create(mute4ParamPosition, module, Mute8::MUTE4_PARAM, 0.0, 3.0, 0.0));
+ addParam(ParamWidget::create(mute5ParamPosition, module, Mute8::MUTE5_PARAM, 0.0, 3.0, 0.0));
+ addParam(ParamWidget::create(mute6ParamPosition, module, Mute8::MUTE6_PARAM, 0.0, 3.0, 0.0));
+ addParam(ParamWidget::create(mute7ParamPosition, module, Mute8::MUTE7_PARAM, 0.0, 3.0, 0.0));
+ addParam(ParamWidget::create(mute8ParamPosition, module, Mute8::MUTE8_PARAM, 0.0, 3.0, 0.0));
addInput(Port::create(input1InputPosition, Port::INPUT, module, Mute8::INPUT1_INPUT));
addInput(Port::create(input2InputPosition, Port::INPUT, module, Mute8::INPUT2_INPUT));
diff --git a/plugins/community/repos/Bogaudio/src/Mute8.hpp b/plugins/community/repos/Bogaudio/src/Mute8.hpp
index 1da1e87a..68fd6127 100644
--- a/plugins/community/repos/Bogaudio/src/Mute8.hpp
+++ b/plugins/community/repos/Bogaudio/src/Mute8.hpp
@@ -82,7 +82,7 @@ struct Mute8 : Module {
void onReset() override;
void onSampleRateChange() override;
void step() override;
- void stepChannel(int i);
+ void stepChannel(int i, bool solo);
};
} // namespace bogaudio
diff --git a/plugins/community/repos/Bogaudio/src/OneEight.cpp b/plugins/community/repos/Bogaudio/src/OneEight.cpp
new file mode 100644
index 00000000..e63f676e
--- /dev/null
+++ b/plugins/community/repos/Bogaudio/src/OneEight.cpp
@@ -0,0 +1,112 @@
+
+#include "OneEight.hpp"
+
+void OneEight::onReset() {
+ _step = 0;
+ _clock.reset();
+ _reset.reset();
+}
+
+void OneEight::step() {
+ int steps = clamp(params[STEPS_PARAM].value, 2.0f, 8.0f);
+ int reverse = 1 - 2 * (params[DIRECTION_PARAM].value == 0.0f);
+ _step = (_step + reverse * _clock.process(inputs[CLOCK_INPUT].value)) % steps;
+ _step += (_step < 0) * steps;
+ _step -= _step * _reset.process(inputs[RESET_INPUT].value);
+ int step = _step + (int)params[SELECT_PARAM].value;
+ step += (int)(clamp(inputs[SELECT_INPUT].value, 0.0f, 10.0f) * 0.1f * 8.0f);
+ step = step % 8;
+
+ float in = inputs[IN_INPUT].value + !inputs[IN_INPUT].active * 10.0f;
+ for (int i = 0; i < 8; ++i) {
+ outputs[OUT1_OUTPUT + i].value = (step == i) * in;
+ lights[OUT1_LIGHT + i].value = step == i;
+ }
+}
+
+struct OneEightWidget : ModuleWidget {
+ static constexpr int hp = 6;
+
+ OneEightWidget(OneEight* module) : ModuleWidget(module) {
+ box.size = Vec(RACK_GRID_WIDTH * hp, RACK_GRID_HEIGHT);
+
+ {
+ SVGPanel *panel = new SVGPanel();
+ panel->box.size = box.size;
+ panel->setBackground(SVG::load(assetPlugin(plugin, "res/OneEight.svg")));
+ addChild(panel);
+ }
+
+ addChild(Widget::create(Vec(0, 0)));
+ addChild(Widget::create(Vec(box.size.x - 15, 365)));
+
+ // generated by svg_widgets.rb
+ auto stepsParamPosition = Vec(15.5, 131.5);
+ auto directionParamPosition = Vec(16.0, 167.5);
+ auto selectParamPosition = Vec(9.0, 230.0);
+
+ auto clockInputPosition = Vec(11.5, 35.0);
+ auto resetInputPosition = Vec(11.5, 72.0);
+ auto selectInputPosition = Vec(11.5, 270.0);
+ auto inInputPosition = Vec(11.5, 324.0);
+
+ auto out1OutputPosition = Vec(54.5, 35.0);
+ auto out2OutputPosition = Vec(54.5, 76.3);
+ auto out3OutputPosition = Vec(54.5, 118.6);
+ auto out4OutputPosition = Vec(54.5, 158.9);
+ auto out5OutputPosition = Vec(54.5, 200.1);
+ auto out6OutputPosition = Vec(54.5, 241.4);
+ auto out7OutputPosition = Vec(54.5, 282.7);
+ auto out8OutputPosition = Vec(54.5, 324.0);
+
+ auto out1LightPosition = Vec(66.5, 61.5);
+ auto out2LightPosition = Vec(66.5, 102.8);
+ auto out3LightPosition = Vec(66.5, 145.1);
+ auto out4LightPosition = Vec(66.5, 185.4);
+ auto out5LightPosition = Vec(66.5, 226.6);
+ auto out6LightPosition = Vec(66.5, 267.9);
+ auto out7LightPosition = Vec(66.5, 309.2);
+ auto out8LightPosition = Vec(66.5, 350.5);
+ // end generated by svg_widgets.rb
+
+ {
+ auto w = ParamWidget::create(stepsParamPosition, module, OneEight::STEPS_PARAM, 2.0, 8.0, 8.0);
+ dynamic_cast(w)->snap = true;
+ addParam(w);
+ }
+ addParam(ParamWidget::create(directionParamPosition, module, OneEight::DIRECTION_PARAM, 0.0, 1.0, 1.0));
+ {
+ auto w = ParamWidget::create(selectParamPosition, module, OneEight::SELECT_PARAM, 0.0, 7.0, 0.0);
+ dynamic_cast(w)->snap = true;
+ addParam(w);
+ }
+
+ addInput(Port::create(clockInputPosition, Port::INPUT, module, OneEight::CLOCK_INPUT));
+ addInput(Port::create(resetInputPosition, Port::INPUT, module, OneEight::RESET_INPUT));
+ addInput(Port::create(selectInputPosition, Port::INPUT, module, OneEight::SELECT_INPUT));
+ addInput(Port::create(inInputPosition, Port::INPUT, module, OneEight::IN_INPUT));
+
+ addOutput(Port::create(out1OutputPosition, Port::OUTPUT, module, OneEight::OUT1_OUTPUT));
+ addOutput(Port::create(out2OutputPosition, Port::OUTPUT, module, OneEight::OUT2_OUTPUT));
+ addOutput(Port::create(out3OutputPosition, Port::OUTPUT, module, OneEight::OUT3_OUTPUT));
+ addOutput(Port::create(out4OutputPosition, Port::OUTPUT, module, OneEight::OUT4_OUTPUT));
+ addOutput(Port::create(out5OutputPosition, Port::OUTPUT, module, OneEight::OUT5_OUTPUT));
+ addOutput(Port::create(out6OutputPosition, Port::OUTPUT, module, OneEight::OUT6_OUTPUT));
+ addOutput(Port::create(out7OutputPosition, Port::OUTPUT, module, OneEight::OUT7_OUTPUT));
+ addOutput(Port::create(out8OutputPosition, Port::OUTPUT, module, OneEight::OUT8_OUTPUT));
+
+ addChild(ModuleLightWidget::create>(out1LightPosition, module, OneEight::OUT1_LIGHT));
+ addChild(ModuleLightWidget::create>(out2LightPosition, module, OneEight::OUT2_LIGHT));
+ addChild(ModuleLightWidget::create>(out3LightPosition, module, OneEight::OUT3_LIGHT));
+ addChild(ModuleLightWidget::create>(out4LightPosition, module, OneEight::OUT4_LIGHT));
+ addChild(ModuleLightWidget::create>(out5LightPosition, module, OneEight::OUT5_LIGHT));
+ addChild(ModuleLightWidget::create>(out6LightPosition, module, OneEight::OUT6_LIGHT));
+ addChild(ModuleLightWidget::create>(out7LightPosition, module, OneEight::OUT7_LIGHT));
+ addChild(ModuleLightWidget::create>(out8LightPosition, module, OneEight::OUT8_LIGHT));
+ }
+};
+
+RACK_PLUGIN_MODEL_INIT(Bogaudio, OneEight) {
+ Model* modelOneEight = createModel("Bogaudio-OneEight", "1:8", "mux & sequential switch", SWITCH_TAG);
+ return modelOneEight;
+}
diff --git a/plugins/community/repos/Bogaudio/src/OneEight.hpp b/plugins/community/repos/Bogaudio/src/OneEight.hpp
new file mode 100644
index 00000000..74494fef
--- /dev/null
+++ b/plugins/community/repos/Bogaudio/src/OneEight.hpp
@@ -0,0 +1,61 @@
+#pragma once
+
+#include "bogaudio.hpp"
+
+extern Model* modelOneEight;
+
+namespace bogaudio {
+
+struct OneEight : Module {
+ enum ParamsIds {
+ STEPS_PARAM,
+ DIRECTION_PARAM,
+ SELECT_PARAM,
+ NUM_PARAMS
+ };
+
+ enum InputsIds {
+ CLOCK_INPUT,
+ RESET_INPUT,
+ SELECT_INPUT,
+ IN_INPUT,
+ NUM_INPUTS
+ };
+
+ enum OutputsIds {
+ OUT1_OUTPUT,
+ OUT2_OUTPUT,
+ OUT3_OUTPUT,
+ OUT4_OUTPUT,
+ OUT5_OUTPUT,
+ OUT6_OUTPUT,
+ OUT7_OUTPUT,
+ OUT8_OUTPUT,
+ NUM_OUTPUTS
+ };
+
+ enum LightsIds {
+ OUT1_LIGHT,
+ OUT2_LIGHT,
+ OUT3_LIGHT,
+ OUT4_LIGHT,
+ OUT5_LIGHT,
+ OUT6_LIGHT,
+ OUT7_LIGHT,
+ OUT8_LIGHT,
+ NUM_LIGHTS
+ };
+
+ Trigger _clock;
+ Trigger _reset;
+ int _step;
+
+ OneEight() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {
+ onReset();
+ }
+
+ void onReset() override;
+ void step() override;
+};
+
+} // namespace bogaudio
diff --git a/plugins/community/repos/Bogaudio/src/Test.cpp b/plugins/community/repos/Bogaudio/src/Test.cpp
index 9be9ccd1..6598c6bf 100644
--- a/plugins/community/repos/Bogaudio/src/Test.cpp
+++ b/plugins/community/repos/Bogaudio/src/Test.cpp
@@ -409,6 +409,42 @@ void Test::step() {
float in = inputs[IN_INPUT].value;
outputs[OUT_OUTPUT].value = _saturator.next(in);
outputs[OUT2_OUTPUT].value = clamp(in, -Saturator::limit, Saturator::limit);
+
+#elif BROWNIAN
+ const float maxDiv = 1000.0f;
+ float change = clamp(1.0f - params[PARAM1_PARAM].value, 0.01f, 1.0f);
+ float smooth = clamp(params[PARAM2_PARAM].value, 0.01f, 1.0f);
+ smooth *= smooth;
+ _filter1.setParams(engineGetSampleRate(), smooth * engineGetSampleRate() * 0.49f);
+ _filter2.setParams(engineGetSampleRate(), smooth * engineGetSampleRate() * 0.49f);
+
+ _last1 = _last1 + _noise1.next() / (change * maxDiv);
+ outputs[OUT_OUTPUT].value = _filter1.next(_last1);
+ if (_last1 > 5.0f || _last1 < -5.0f) {
+ _last1 = 0.0f;
+ }
+
+ _last2 = _last2 + _noise1.next() / (change * maxDiv);
+ outputs[OUT2_OUTPUT].value = _filter2.next(_last2);
+ if (_last2 > 5.0f || _last2 < -5.0f) {
+ _last2 = 0.0f;
+ }
+
+ // // "leaky integrator"
+ // float alpha = params[PARAM1_PARAM].value;
+ // alpha = clamp(1.0f - alpha*alpha, 0.00001f, 1.0f);
+ // float sample = 5.0f * _noise1.next();
+ // _last1 = alpha*_last1 + (1.0f - alpha)*sample;
+ // outputs[OUT_OUTPUT].value = _last1;
+
+#elif RANDOMWALK
+ float change = params[PARAM1_PARAM].value;
+ change *= change;
+ change *= change;
+ _walk1.setParams(engineGetSampleRate(), change);
+ _walk2.setParams(engineGetSampleRate(), change);
+ outputs[OUT_OUTPUT].value = _walk1.next();
+ outputs[OUT2_OUTPUT].value = _walk2.next();
#endif
}
@@ -488,7 +524,4 @@ struct TestWidget : ModuleWidget {
}
};
-RACK_PLUGIN_MODEL_INIT(Bogaudio, Test) {
- Model *modelTest = Model::create("Bogaudio", "Bogaudio-Test", "Test");
- return modelTest;
-}
+Model* modelTest = Model::create("Bogaudio", "Bogaudio-Test", "Test");
diff --git a/plugins/community/repos/Bogaudio/src/Test.hpp b/plugins/community/repos/Bogaudio/src/Test.hpp
index fc0160e5..7b6eb397 100644
--- a/plugins/community/repos/Bogaudio/src/Test.hpp
+++ b/plugins/community/repos/Bogaudio/src/Test.hpp
@@ -17,7 +17,7 @@ extern Model* modelTest;
// #define OVERSAMPLED_BL 1
// #define ANTIALIASING 1
// #define DECIMATORS 1
-#define INTERPOLATOR 1
+// #define INTERPOLATOR 1
// #define FM 1
// #define PM 1
// #define FEEDBACK_PM 1
@@ -27,6 +27,8 @@ extern Model* modelTest;
// #define RMS 1
// #define RAVG 1
// #define SATURATOR 1
+// #define BROWNIAN 1
+#define RANDOMWALK 1
#include "pitch.hpp"
#ifdef LPF
@@ -86,6 +88,10 @@ extern Model* modelTest;
#elif SATURATOR
#include "dsp/oscillator.hpp"
#include "dsp/signal.hpp"
+#elif BROWNIAN
+#include "dsp/noise.hpp"
+#elif RANDOMWALK
+#include "dsp/noise.hpp"
#else
#error what
#endif
@@ -215,6 +221,16 @@ struct Test : Module {
Trigger _reset;
#elif SATURATOR
Saturator _saturator;
+#elif BROWNIAN
+ WhiteNoiseGenerator _noise1;
+ GaussianNoiseGenerator _noise2;
+ LowPassFilter _filter1;
+ LowPassFilter _filter2;
+ float _last1 = 0.0f;
+ float _last2 = 0.0f;
+#elif RANDOMWALK
+ RandomWalk _walk1;
+ RandomWalk _walk2;
#endif
Test()
diff --git a/plugins/community/repos/Bogaudio/src/Test2.cpp b/plugins/community/repos/Bogaudio/src/Test2.cpp
index dd8525c0..11a280e1 100644
--- a/plugins/community/repos/Bogaudio/src/Test2.cpp
+++ b/plugins/community/repos/Bogaudio/src/Test2.cpp
@@ -156,7 +156,4 @@ struct Test2Widget : ModuleWidget {
}
};
-RACK_PLUGIN_MODEL_INIT(Bogaudio, Test2) {
- Model *modelTest2 = Model::create("Bogaudio", "Bogaudio-Test2", "Test2");
- return modelTest2;
-}
+Model* modelTest2 = Model::create("Bogaudio", "Bogaudio-Test2", "Test2");
diff --git a/plugins/community/repos/Bogaudio/src/UMix.cpp b/plugins/community/repos/Bogaudio/src/UMix.cpp
index fd58df7d..1d881b5c 100644
--- a/plugins/community/repos/Bogaudio/src/UMix.cpp
+++ b/plugins/community/repos/Bogaudio/src/UMix.cpp
@@ -60,7 +60,7 @@ struct AverageMenuItem : MenuItem {
}
void step() override {
- rightText = !_module->_sum ? "?" : "";
+ rightText = !_module->_sum ? "✔" : "";
}
};
diff --git a/plugins/community/repos/Bogaudio/src/Walk.cpp b/plugins/community/repos/Bogaudio/src/Walk.cpp
new file mode 100644
index 00000000..80fc36de
--- /dev/null
+++ b/plugins/community/repos/Bogaudio/src/Walk.cpp
@@ -0,0 +1,90 @@
+
+#include "Walk.hpp"
+
+void Walk::onReset() {
+ _trigger.reset();
+ _modulationStep = modulationSteps;
+}
+
+void Walk::onSampleRateChange() {
+ _modulationStep = modulationSteps;
+}
+
+void Walk::step() {
+ lights[TRACK_LIGHT].value = params[TRACK_PARAM].value;
+
+ ++_modulationStep;
+ if (_modulationStep >= modulationSteps) {
+ _modulationStep = 0;
+
+ float rate = params[RATE_PARAM].value;
+ if (inputs[RATE_INPUT].active) {
+ rate *= clamp(inputs[RATE_INPUT].value / 10.0f, 0.0f, 1.0f);
+ }
+ rate *= rate;
+ rate *= rate;
+ _walk.setParams(engineGetSampleRate(), rate);
+ }
+
+ float out = _walk.next();
+ out *= params[SCALE_PARAM].value;
+ out += params[OFFSET_PARAM].value * 5.0f;
+ outputs[OUT_OUTPUT].value = out;
+
+ bool triggered = _trigger.process(inputs[HOLD_INPUT].value);
+ if (params[TRACK_PARAM].value > 0.5f ? _trigger.isHigh() : triggered) {
+ _hold = out;
+ }
+ outputs[HOLD_OUTPUT].value = _hold;
+}
+
+struct WalkWidget : ModuleWidget {
+ static constexpr int hp = 3;
+
+ WalkWidget(Walk* module) : ModuleWidget(module) {
+ box.size = Vec(RACK_GRID_WIDTH * hp, RACK_GRID_HEIGHT);
+
+ {
+ SVGPanel *panel = new SVGPanel();
+ panel->box.size = box.size;
+ panel->setBackground(SVG::load(assetPlugin(plugin, "res/Walk.svg")));
+ addChild(panel);
+ }
+
+ addChild(Widget::create(Vec(0, 0)));
+ addChild(Widget::create(Vec(box.size.x - 15, 365)));
+
+ // generated by svg_widgets.rb
+ auto rateParamPosition = Vec(8.0, 36.0);
+ auto offsetParamPosition = Vec(14.5, 137.0);
+ auto scaleParamPosition = Vec(14.5, 178.0);
+ auto trackParamPosition = Vec(29.0, 246.7);
+
+ auto rateInputPosition = Vec(10.5, 77.0);
+ auto holdInputPosition = Vec(10.5, 210.0);
+
+ auto holdOutputPosition = Vec(10.5, 261.0);
+ auto outOutputPosition = Vec(10.5, 296.0);
+
+ auto trackLightPosition = Vec(7.0, 248.0);
+ // end generated by svg_widgets.rb
+
+ addParam(ParamWidget::create(rateParamPosition, module, Walk::RATE_PARAM, 0.0, 1.0, 0.1));
+ addParam(ParamWidget::create(offsetParamPosition, module, Walk::OFFSET_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create(scaleParamPosition, module, Walk::SCALE_PARAM, 0.0, 1.0, 1.0));
+ addParam(ParamWidget::create(trackParamPosition, module, Walk::TRACK_PARAM, 0.0, 1.0, 0.0));
+
+ addInput(Port::create(rateInputPosition, Port::INPUT, module, Walk::RATE_INPUT));
+ addInput(Port::create(holdInputPosition, Port::INPUT, module, Walk::HOLD_INPUT));
+
+ addOutput(Port::create(holdOutputPosition, Port::OUTPUT, module, Walk::HOLD_OUTPUT));
+ addOutput(Port::create(outOutputPosition, Port::OUTPUT, module, Walk::OUT_OUTPUT));
+
+ addChild(ModuleLightWidget::create>(trackLightPosition, module, Walk::TRACK_LIGHT));
+ }
+};
+
+RACK_PLUGIN_MODEL_INIT(Bogaudio, Walk) {
+ Model* modelWalk = createModel("Bogaudio-Walk", "Walk", "random-walk CV source", RANDOM_TAG);
+ return modelWalk;
+}
diff --git a/plugins/community/repos/Bogaudio/src/Walk.hpp b/plugins/community/repos/Bogaudio/src/Walk.hpp
new file mode 100644
index 00000000..b9cd3aa7
--- /dev/null
+++ b/plugins/community/repos/Bogaudio/src/Walk.hpp
@@ -0,0 +1,53 @@
+#pragma once
+
+#include "bogaudio.hpp"
+#include "dsp/noise.hpp"
+
+using namespace bogaudio::dsp;
+
+extern Model* modelWalk;
+
+namespace bogaudio {
+
+struct Walk : Module {
+ enum ParamsIds {
+ RATE_PARAM,
+ OFFSET_PARAM,
+ SCALE_PARAM,
+ TRACK_PARAM,
+ NUM_PARAMS
+ };
+
+ enum InputsIds {
+ RATE_INPUT,
+ HOLD_INPUT,
+ NUM_INPUTS
+ };
+
+ enum OutputsIds {
+ HOLD_OUTPUT,
+ OUT_OUTPUT,
+ NUM_OUTPUTS
+ };
+
+ enum LightsIds {
+ TRACK_LIGHT,
+ NUM_LIGHTS
+ };
+
+ const int modulationSteps = 100;
+ int _modulationStep = 0;
+ Trigger _trigger;
+ RandomWalk _walk;
+ float _hold = 0.0f;
+
+ Walk() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {
+ onReset();
+ }
+
+ void onReset() override;
+ void onSampleRateChange() override;
+ void step() override;
+};
+
+} // namespace bogaudio
diff --git a/plugins/community/repos/Bogaudio/src/Walk2.cpp b/plugins/community/repos/Bogaudio/src/Walk2.cpp
new file mode 100644
index 00000000..3f203d62
--- /dev/null
+++ b/plugins/community/repos/Bogaudio/src/Walk2.cpp
@@ -0,0 +1,285 @@
+
+#include "Walk2.hpp"
+
+void Walk2::onReset() {
+ _triggerX.reset();
+ _triggerY.reset();
+ _jumpTrigger.reset();
+ _modulationStep = modulationSteps;
+}
+
+void Walk2::onSampleRateChange() {
+ _modulationStep = modulationSteps;
+ _historySteps = (historySeconds * engineGetSampleRate()) / historyPoints;
+}
+
+void Walk2::step() {
+ lights[TRACK_X_LIGHT].value = params[TRACK_X_PARAM].value;
+ lights[TRACK_Y_LIGHT].value = params[TRACK_Y_PARAM].value;
+
+ ++_modulationStep;
+ if (_modulationStep >= modulationSteps) {
+ _modulationStep = 0;
+
+ float rateX = params[RATE_X_PARAM].value;
+ if (inputs[RATE_X_INPUT].active) {
+ rateX *= clamp(inputs[RATE_X_INPUT].value / 10.0f, 0.0f, 1.0f);
+ }
+ rateX *= rateX;
+ rateX *= rateX;
+ _walkX.setParams(engineGetSampleRate(), rateX);
+
+ float rateY = params[RATE_Y_PARAM].value;
+ if (inputs[RATE_Y_INPUT].active) {
+ rateY *= clamp(inputs[RATE_Y_INPUT].value / 10.0f, 0.0f, 1.0f);
+ }
+ rateY *= rateY;
+ rateY *= rateY;
+ _walkY.setParams(engineGetSampleRate(), rateY);
+ }
+
+ if (_jumpTrigger.process(inputs[JUMP_INPUT].value)) {
+ _walkX.jump();
+ _walkY.jump();
+ }
+
+ float outX = _walkX.next();
+ outX *= params[SCALE_X_PARAM].value;
+ outX += params[OFFSET_X_PARAM].value * 5.0f;
+ outputs[OUT_X_OUTPUT].value = outX;
+
+ bool triggeredX = _triggerX.process(inputs[HOLD_X_INPUT].value);
+ if (params[TRACK_X_PARAM].value > 0.5f ? _triggerX.isHigh() : triggeredX) {
+ _holdX = outX;
+ }
+ outputs[HOLD_X_OUTPUT].value = _holdX;
+
+ float outY = _walkY.next();
+ outY *= params[SCALE_Y_PARAM].value;
+ outY += params[OFFSET_Y_PARAM].value * 5.0f;
+ outputs[OUT_Y_OUTPUT].value = outY;
+
+ bool triggeredY = _triggerY.process(inputs[HOLD_Y_INPUT].value);
+ if (params[TRACK_Y_PARAM].value > 0.5f ? _triggerY.isHigh() : triggeredY) {
+ _holdY = outY;
+ }
+ outputs[HOLD_Y_OUTPUT].value = _holdY;
+
+ outputs[DISTANCE_OUTPUT].value = sqrtf(outX*outX + outY*outY) * 0.707107f; // scaling constant is 10 / squrt(200)
+
+ if (_historyStep == 0) {
+ _outsX.push(outX);
+ _holdsX.push(_holdX);
+ _outsY.push(outY);
+ _holdsY.push(_holdY);
+ }
+ ++_historyStep;
+ _historyStep %= _historySteps;
+}
+
+struct Walk2Display : TransparentWidget {
+ const int _insetAround = 4;
+
+ const NVGcolor _axisColor = nvgRGBA(0xff, 0xff, 0xff, 0x70);
+ const NVGcolor _textColor = nvgRGBA(0xff, 0xff, 0xff, 0xc0);
+ const NVGcolor _traceColor = nvgRGBA(0xff, 0x00, 0x00, 0xd0);
+ const NVGcolor _holdColor = nvgRGBA(0x00, 0xff, 0x00, 0xd0);
+
+ Walk2* _module;
+ const Vec _size;
+ const Vec _drawSize;
+ int _midX, _midY;
+ std::shared_ptr _font;
+
+ Walk2Display(
+ Walk2* module,
+ Vec size
+ )
+ : _module(module)
+ , _size(size)
+ , _drawSize(_size.x - 2*_insetAround, _size.y - 2*_insetAround)
+ , _midX(_size.x / 2)
+ , _midY(_size.y / 2)
+ , _font(Font::load(assetPlugin(plugin, "res/fonts/inconsolata.ttf")))
+ {
+ }
+
+ void draw(NVGcontext* vg) override {
+ drawBackground(vg);
+ float strokeWidth = std::max(1.0f, 3 - RACK_PLUGIN_UI_RACKSCENE->zoomWidget->zoom);
+
+ nvgSave(vg);
+ nvgScissor(vg, _insetAround, _insetAround, _size.x - _insetAround, _size.y - _insetAround);
+ drawAxes(vg, strokeWidth);
+ drawTrace(vg, _traceColor, _module->_outsX, _module->_outsY);
+ drawTrace(vg, _holdColor, _module->_holdsX, _module->_holdsY);
+ nvgRestore(vg);
+ }
+
+ void drawBackground(NVGcontext* vg) {
+ nvgSave(vg);
+ nvgBeginPath(vg);
+ nvgRect(vg, 0, 0, _size.x, _size.y);
+ nvgFillColor(vg, nvgRGBA(0x00, 0x00, 0x00, 0xff));
+ nvgFill(vg);
+ nvgStrokeColor(vg, nvgRGBA(0xc0, 0xc0, 0xc0, 0xff));
+ nvgStroke(vg);
+ nvgRestore(vg);
+ }
+
+ void drawAxes(NVGcontext* vg, float strokeWidth) {
+ nvgSave(vg);
+ nvgStrokeColor(vg, _axisColor);
+ nvgStrokeWidth(vg, strokeWidth);
+
+ nvgBeginPath(vg);
+ nvgMoveTo(vg, _insetAround, _midY);
+ nvgLineTo(vg, _size.x - _insetAround, _midY);
+ nvgStroke(vg);
+
+ nvgBeginPath(vg);
+ nvgMoveTo(vg, _midX, _insetAround);
+ nvgLineTo(vg, _midX, _size.y - _insetAround);
+ nvgStroke(vg);
+
+ nvgRestore(vg);
+ }
+
+ void drawTrace(NVGcontext* vg, NVGcolor color, HistoryBuffer& x, HistoryBuffer& y) {
+ nvgSave(vg);
+ nvgGlobalCompositeOperation(vg, NVG_LIGHTER);
+
+ // int n = _module->historyPoints;
+ // float beginRadius = std::max(1.0f, 2.0f - gRackScene->zoomWidget->zoom);
+ // float endRadius = std::max(0.01f, 0.8f - gRackScene->zoomWidget->zoom);
+ // float radiusStep = (beginRadius - endRadius) / (float)n;
+ // float radius = beginRadius;
+ // float alphaStep = (color.a - 0.1f) / (float)n;
+ // for (int i = 0; i < n; ++i) {
+ // nvgBeginPath(vg);
+ // nvgCircle(vg, cvToPixel(_midX, _drawSize.x, x.value(i)), cvToPixel(_midY, _drawSize.y, y.value(i)), radius);
+ // nvgStrokeColor(vg, color);
+ // nvgFillColor(vg, color);
+ // nvgStroke(vg);
+ // nvgFill(vg);
+ // radius -= radiusStep;
+ // color.a -= alphaStep;
+ // }
+
+ int n = _module->historyPoints;
+ float beginWidth = std::max(1.0f, 4.0f - RACK_PLUGIN_UI_RACKSCENE->zoomWidget->zoom);
+ float endWidth = std::max(0.5f, 2.0f - RACK_PLUGIN_UI_RACKSCENE->zoomWidget->zoom);
+ float widthStep = (beginWidth - endWidth) / (float)n;
+ float width = endWidth;
+ float endAlpha = 0.1f;
+ float alphaStep = (color.a - endAlpha) / (float)n;
+ color.a = endAlpha;
+ for (int i = n - 1; i > 0; --i) {
+ nvgBeginPath(vg);
+ nvgMoveTo(vg, cvToPixel(_midX, _drawSize.x, x.value(i - 1)), cvToPixel(_midY, _drawSize.y, y.value(i - 1)));
+ nvgLineTo(vg, cvToPixel(_midX, _drawSize.x, x.value(i)), cvToPixel(_midY, _drawSize.y, y.value(i)));
+ nvgStrokeWidth(vg, width);
+ nvgStrokeColor(vg, color);
+ nvgStroke(vg);
+ width += widthStep;
+ color.a += alphaStep;
+ }
+ nvgBeginPath(vg);
+ nvgCircle(vg, cvToPixel(_midX, _drawSize.x, x.value(0)), cvToPixel(_midY, _drawSize.y, y.value(0)), 0.5f * width);
+ nvgStrokeColor(vg, color);
+ nvgFillColor(vg, color);
+ nvgStroke(vg);
+ nvgFill(vg);
+
+ nvgRestore(vg);
+ }
+
+ inline float cvToPixel(float mid, float extent, float cv) {
+ return mid + 0.1f * extent * cv;
+ }
+};
+
+struct Walk2Widget : ModuleWidget {
+ static constexpr int hp = 14;
+
+ Walk2Widget(Walk2* module) : ModuleWidget(module) {
+ box.size = Vec(RACK_GRID_WIDTH * hp, RACK_GRID_HEIGHT);
+
+ {
+ SVGPanel *panel = new SVGPanel();
+ panel->box.size = box.size;
+ panel->setBackground(SVG::load(assetPlugin(plugin, "res/Walk2.svg")));
+ addChild(panel);
+ }
+
+ {
+ auto inset = Vec(10, 25);
+ int dim = box.size.x - 2*inset.x;
+ auto size = Vec(dim, dim);
+ auto display = new Walk2Display(module, size);
+ display->box.pos = inset;
+ display->box.size = size;
+ addChild(display);
+ }
+
+ addChild(Widget::create(Vec(15, 0)));
+ addChild(Widget::create(Vec(box.size.x - 30, 0)));
+ addChild(Widget::create(Vec(15, 365)));
+ addChild(Widget::create(Vec(box.size.x - 30, 365)));
+
+ // generated by svg_widgets.rb
+ auto rateXParamPosition = Vec(28.0, 240.0);
+ auto rateYParamPosition = Vec(151.5, 240.0);
+ auto offsetXParamPosition = Vec(75.0, 234.0);
+ auto offsetYParamPosition = Vec(119.0, 234.0);
+ auto scaleXParamPosition = Vec(75.0, 262.5);
+ auto scaleYParamPosition = Vec(119.0, 262.5);
+ auto trackXParamPosition = Vec(94.0, 290.7);
+ auto trackYParamPosition = Vec(131.0, 290.7);
+
+ auto holdXInputPosition = Vec(10.5, 284.0);
+ auto rateXInputPosition = Vec(10.5, 323.0);
+ auto holdYInputPosition = Vec(145.5, 284.0);
+ auto rateYInputPosition = Vec(145.5, 323.0);
+ auto jumpInputPosition = Vec(78.0, 313.0);
+
+ auto holdXOutputPosition = Vec(41.5, 284.0);
+ auto outXOutputPosition = Vec(41.5, 323.0);
+ auto holdYOutputPosition = Vec(176.5, 284.0);
+ auto outYOutputPosition = Vec(176.5, 323.0);
+ auto distanceOutputPosition = Vec(109.0, 313.0);
+
+ auto trackXLightPosition = Vec(72.0, 292.0);
+ auto trackYLightPosition = Vec(109.0, 292.0);
+ // end generated by svg_widgets.rb
+
+ addParam(ParamWidget::create(rateXParamPosition, module, Walk2::RATE_X_PARAM, 0.0, 1.0, 0.1));
+ addParam(ParamWidget::create(rateYParamPosition, module, Walk2::RATE_Y_PARAM, 0.0, 1.0, 0.1));
+ addParam(ParamWidget::create(offsetXParamPosition, module, Walk2::OFFSET_X_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create(offsetYParamPosition, module, Walk2::OFFSET_Y_PARAM, -1.0, 1.0, 0.0));
+ addParam(ParamWidget::create(scaleXParamPosition, module, Walk2::SCALE_X_PARAM, 0.0, 1.0, 1.0));
+ addParam(ParamWidget::create(scaleYParamPosition, module, Walk2::SCALE_Y_PARAM, 0.0, 1.0, 1.0));
+ addParam(ParamWidget::create(trackXParamPosition, module, Walk2::TRACK_X_PARAM, 0.0, 1.0, 0.0));
+ addParam(ParamWidget::create(trackYParamPosition, module, Walk2::TRACK_Y_PARAM, 0.0, 1.0, 0.0));
+
+ addInput(Port::create(holdXInputPosition, Port::INPUT, module, Walk2::HOLD_X_INPUT));
+ addInput(Port::create(rateXInputPosition, Port::INPUT, module, Walk2::RATE_X_INPUT));
+ addInput(Port::create(holdYInputPosition, Port::INPUT, module, Walk2::HOLD_Y_INPUT));
+ addInput(Port::create(rateYInputPosition, Port::INPUT, module, Walk2::RATE_Y_INPUT));
+ addInput(Port::create(jumpInputPosition, Port::INPUT, module, Walk2::JUMP_INPUT));
+
+ addOutput(Port::create(holdXOutputPosition, Port::OUTPUT, module, Walk2::HOLD_X_OUTPUT));
+ addOutput(Port::create(outXOutputPosition, Port::OUTPUT, module, Walk2::OUT_X_OUTPUT));
+ addOutput(Port::create(holdYOutputPosition, Port::OUTPUT, module, Walk2::HOLD_Y_OUTPUT));
+ addOutput(Port::create(outYOutputPosition, Port::OUTPUT, module, Walk2::OUT_Y_OUTPUT));
+ addOutput(Port::create(distanceOutputPosition, Port::OUTPUT, module, Walk2::DISTANCE_OUTPUT));
+
+ addChild(ModuleLightWidget::create>(trackXLightPosition, module, Walk2::TRACK_X_LIGHT));
+ addChild(ModuleLightWidget::create>(trackYLightPosition, module, Walk2::TRACK_Y_LIGHT));
+ }
+};
+
+RACK_PLUGIN_MODEL_INIT(Bogaudio, Walk2) {
+ Model* modelWalk2 = createModel("Bogaudio-Walk2", "Walk2", "");
+ return modelWalk2;
+}
diff --git a/plugins/community/repos/Bogaudio/src/Walk2.hpp b/plugins/community/repos/Bogaudio/src/Walk2.hpp
new file mode 100644
index 00000000..ce5f40e5
--- /dev/null
+++ b/plugins/community/repos/Bogaudio/src/Walk2.hpp
@@ -0,0 +1,80 @@
+#pragma once
+
+#include "bogaudio.hpp"
+#include "dsp/buffer.hpp"
+#include "dsp/noise.hpp"
+
+using namespace bogaudio::dsp;
+
+extern Model* modelWalk2;
+
+namespace bogaudio {
+
+struct Walk2 : Module {
+ enum ParamsIds {
+ RATE_X_PARAM,
+ RATE_Y_PARAM,
+ OFFSET_X_PARAM,
+ OFFSET_Y_PARAM,
+ SCALE_X_PARAM,
+ SCALE_Y_PARAM,
+ TRACK_X_PARAM,
+ TRACK_Y_PARAM,
+ NUM_PARAMS
+ };
+
+ enum InputsIds {
+ HOLD_X_INPUT,
+ RATE_X_INPUT,
+ HOLD_Y_INPUT,
+ RATE_Y_INPUT,
+ JUMP_INPUT,
+ NUM_INPUTS
+ };
+
+ enum OutputsIds {
+ HOLD_X_OUTPUT,
+ OUT_X_OUTPUT,
+ HOLD_Y_OUTPUT,
+ OUT_Y_OUTPUT,
+ DISTANCE_OUTPUT,
+ NUM_OUTPUTS
+ };
+
+ enum LightsIds {
+ TRACK_X_LIGHT,
+ TRACK_Y_LIGHT,
+ NUM_LIGHTS
+ };
+
+ const int modulationSteps = 100;
+ int _modulationStep = 0;
+
+ const float historySeconds = 1.0f;
+ const int historyPoints = 100;
+ int _historySteps;
+ int _historyStep = 0;
+
+ Trigger _triggerX, _triggerY;
+ RandomWalk _walkX, _walkY;
+ Trigger _jumpTrigger;
+ float _holdX = 0.0f, _holdY = 0.0f;
+ HistoryBuffer _outsX, _outsY, _holdsX, _holdsY;
+
+ Walk2()
+ : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS)
+ , _outsX(historyPoints, 0.0f)
+ , _outsY(historyPoints, 0.0f)
+ , _holdsX(historyPoints, 0.0f)
+ , _holdsY(historyPoints, 0.0f)
+ {
+ onReset();
+ onSampleRateChange();
+ }
+
+ void onReset() override;
+ void onSampleRateChange() override;
+ void step() override;
+};
+
+} // namespace bogaudio
diff --git a/plugins/community/repos/Bogaudio/src/bogaudio.cpp b/plugins/community/repos/Bogaudio/src/bogaudio.cpp
index b5329b30..d7f983e4 100644
--- a/plugins/community/repos/Bogaudio/src/bogaudio.cpp
+++ b/plugins/community/repos/Bogaudio/src/bogaudio.cpp
@@ -14,6 +14,7 @@
#include "DGate.hpp"
#include "Detune.hpp"
#include "EightFO.hpp"
+#include "EightOne.hpp"
#include "FMOp.hpp"
#include "FlipFlop.hpp"
#include "Follow.hpp"
@@ -24,13 +25,18 @@
#include "Mix4.hpp"
#include "Mix8.hpp"
#include "Mult.hpp"
+#include "Mute8.hpp"
#include "Noise.hpp"
+#include "Nsgt.hpp"
#include "Offset.hpp"
+#include "OneEight.hpp"
#include "Pan.hpp"
+#include "Pressor.hpp"
#include "Reftone.hpp"
#include "SampleHold.hpp"
#include "Shaper.hpp"
#include "ShaperPlus.hpp"
+#include "Slew.hpp"
#include "Stack.hpp"
#include "Sums.hpp"
#include "Switch.hpp"
@@ -40,6 +46,8 @@
#include "VCM.hpp"
#include "VCO.hpp"
#include "VU.hpp"
+#include "Walk.hpp"
+#include "Walk2.hpp"
#include "XCO.hpp"
#include "XFade.hpp"
@@ -130,10 +138,16 @@ RACK_PLUGIN_MODEL_DECLARE(Bogaudio, Nsgt);
RACK_PLUGIN_MODEL_DECLARE(Bogaudio, Pressor);
RACK_PLUGIN_MODEL_DECLARE(Bogaudio, Slew);
+RACK_PLUGIN_MODEL_DECLARE(Bogaudio, AddrSeq); // 0.6.14
+RACK_PLUGIN_MODEL_DECLARE(Bogaudio, EightOne);
+RACK_PLUGIN_MODEL_DECLARE(Bogaudio, OneEight);
+RACK_PLUGIN_MODEL_DECLARE(Bogaudio, Walk);
+RACK_PLUGIN_MODEL_DECLARE(Bogaudio, Walk2);
+
RACK_PLUGIN_INIT(Bogaudio) {
RACK_PLUGIN_INIT_ID();
- RACK_PLUGIN_INIT_VERSION("0.6.13");
+ RACK_PLUGIN_INIT_VERSION("0.6.14");
RACK_PLUGIN_INIT_WEBSITE("https://github.com/bogaudio/BogaudioModules");
RACK_PLUGIN_INIT_MANUAL("https://github.com/bogaudio/BogaudioModules/blob/master/README.md");
@@ -219,5 +233,9 @@ RACK_PLUGIN_INIT(Bogaudio) {
RACK_PLUGIN_MODEL_ADD(Bogaudio, Pressor);
RACK_PLUGIN_MODEL_ADD(Bogaudio, Slew);
- //NEW_MODELS_HERE
+ RACK_PLUGIN_MODEL_ADD(Bogaudio, AddrSeq); // 0.6.14
+ RACK_PLUGIN_MODEL_ADD(Bogaudio, EightOne);
+ RACK_PLUGIN_MODEL_ADD(Bogaudio, OneEight);
+ RACK_PLUGIN_MODEL_ADD(Bogaudio, Walk);
+ RACK_PLUGIN_MODEL_ADD(Bogaudio, Walk2);
}
diff --git a/plugins/community/repos/Bogaudio/src/bogaudio.hpp b/plugins/community/repos/Bogaudio/src/bogaudio.hpp
index b0025e42..055031a5 100644
--- a/plugins/community/repos/Bogaudio/src/bogaudio.hpp
+++ b/plugins/community/repos/Bogaudio/src/bogaudio.hpp
@@ -5,6 +5,7 @@
#include
#include
#include
+#include
#include "rack.hpp"
diff --git a/plugins/community/repos/Bogaudio/src/dsp/buffer.hpp b/plugins/community/repos/Bogaudio/src/dsp/buffer.hpp
index ae49be2d..ca3e324d 100644
--- a/plugins/community/repos/Bogaudio/src/dsp/buffer.hpp
+++ b/plugins/community/repos/Bogaudio/src/dsp/buffer.hpp
@@ -134,7 +134,7 @@ struct HistoryBuffer {
HistoryBuffer(int size, T initialValue)
: _size(size)
- , _i(size)
+ , _i(0)
{
assert(size > 0);
_buf = new T[size];
@@ -146,14 +146,12 @@ struct HistoryBuffer {
inline void push(T s) {
++_i;
- if (_i >= _size) {
- _i = 0;
- }
+ _i %= _size;
_buf[_i] = s;
}
inline T value(int i) {
- assert(i <= 0 && -i <= _size);
+ assert(i >= 0 && i < _size);
int j = _i - i;
if (j < 0) {
j += _size;
diff --git a/plugins/community/repos/Bogaudio/src/dsp/filter.hpp b/plugins/community/repos/Bogaudio/src/dsp/filter.hpp
index e49f5081..c0514a1e 100644
--- a/plugins/community/repos/Bogaudio/src/dsp/filter.hpp
+++ b/plugins/community/repos/Bogaudio/src/dsp/filter.hpp
@@ -45,6 +45,11 @@ struct BiquadFilter : Filter {
}
}
+ void reset() {
+ _x[0] = _x[1] = _x[2] = 0.0;
+ _y[0] = _y[1] = _y[2] = 0.0;
+ }
+
float next(float sample) override {
_x[2] = _x[1];
_x[1] = _x[0];
@@ -94,7 +99,8 @@ struct LowPassFilter : Filter {
setParams(sampleRate, cutoff, q);
}
- void setParams(float sampleRate, float cutoff, float q);
+ void setParams(float sampleRate, float cutoff, float q = 0.001f);
+ void reset() { _biquad.reset(); }
float next(float sample) override {
return _biquad.next(sample);
}
diff --git a/plugins/community/repos/Bogaudio/src/dsp/noise.cpp b/plugins/community/repos/Bogaudio/src/dsp/noise.cpp
index 197c4f48..711f6c42 100644
--- a/plugins/community/repos/Bogaudio/src/dsp/noise.cpp
+++ b/plugins/community/repos/Bogaudio/src/dsp/noise.cpp
@@ -1,4 +1,6 @@
+#include
+
#include "noise.hpp"
using namespace bogaudio::dsp;
@@ -21,3 +23,31 @@ Seeds& Seeds::getInstance() {
unsigned int Seeds::next() {
return getInstance()._next();
};
+
+
+void RandomWalk::setParams(float sampleRate, float change) {
+ assert(sampleRate > 0.0f);
+ assert(change >= 0.0f);
+ assert(change <= 1.0f);
+
+ _filter.setParams(sampleRate, std::max(2.0f, change * 0.49f * sampleRate));
+
+ const float maxDamp = 0.98;
+ const float minDamp = 0.9999;
+ _damp = maxDamp + (1 - change)*(minDamp - maxDamp);
+}
+
+void RandomWalk::jump() {
+ // FIXME
+ _bias = _noise.next() * 5.0f;
+ _filter.reset();
+}
+
+float RandomWalk::_next() {
+ float delta = _noise.next();
+ if ((_lastOut >= _max - _bias && delta > 0.0f) || (_lastOut <= _min - _bias && delta < 0.0f)) {
+ delta = -delta;
+ }
+ _last = _damp*_last + delta;
+ return _lastOut = std::min(std::max(_bias + _filter.next(_last), _min), _max);
+}
diff --git a/plugins/community/repos/Bogaudio/src/dsp/noise.hpp b/plugins/community/repos/Bogaudio/src/dsp/noise.hpp
index 1c73421e..f5cd6c54 100644
--- a/plugins/community/repos/Bogaudio/src/dsp/noise.hpp
+++ b/plugins/community/repos/Bogaudio/src/dsp/noise.hpp
@@ -3,6 +3,7 @@
#include
#include "base.hpp"
+#include "filter.hpp"
namespace bogaudio {
namespace dsp {
@@ -78,12 +79,39 @@ struct BlueNoiseGenerator : NoiseGenerator {
struct GaussianNoiseGenerator : NoiseGenerator {
std::normal_distribution _normal;
- GaussianNoiseGenerator() : _normal(0, 1.0) {}
+ GaussianNoiseGenerator(float mean = 0.0f, float stdDev = 1.0f) : _normal(mean, stdDev) {}
float _next() override {
return _normal(_generator);
}
};
+struct RandomWalk : Generator {
+ float _min;
+ float _max;
+ float _last = 0.0f;
+ float _lastOut = 0.0f;
+ float _damp;
+ float _bias = 0.0f;
+ WhiteNoiseGenerator _noise;
+ LowPassFilter _filter;
+
+ RandomWalk(
+ float min = -5.0f,
+ float max = 5.0f,
+ float sampleRate = 1000.0f,
+ float change = 0.5f
+ )
+ : _min(min)
+ , _max(max)
+ {
+ setParams(sampleRate, change);
+ }
+
+ void setParams(float sampleRate = 1000.0f, float change = 0.5f);
+ void jump();
+ float _next() override;
+};
+
} // namespace dsp
} // namespace bogaudio
diff --git a/plugins/community/repos/Bogaudio/src/lfo_base.cpp b/plugins/community/repos/Bogaudio/src/lfo_base.cpp
new file mode 100644
index 00000000..a41e6305
--- /dev/null
+++ b/plugins/community/repos/Bogaudio/src/lfo_base.cpp
@@ -0,0 +1,69 @@
+
+#include "lfo_base.hpp"
+#include "dsp/pitch.hpp"
+
+#include
+
+#define PITCH_MODE_KEY "pitch_mode"
+#define PITCH_MODE_VALUE_CLASSIC "classic"
+#define PITCH_MODE_VALUE_COMPLIANT "compliant"
+
+json_t* LFOBase::toJson() {
+ json_t* root = json_object();
+ switch (_pitchMode) {
+ case UNKNOWN_PITCH_MODE: {
+ break;
+ }
+ case CLASSIC_PITCH_MODE: {
+ json_object_set_new(root, PITCH_MODE_KEY, json_string(PITCH_MODE_VALUE_CLASSIC));
+ break;
+ }
+ case COMPLIANT_PITCH_MODE: {
+ json_object_set_new(root, PITCH_MODE_KEY, json_string(PITCH_MODE_VALUE_COMPLIANT));
+ break;
+ }
+ }
+ return root;
+}
+
+void LFOBase::fromJson(json_t* root) {
+ json_t* pm = json_object_get(root, PITCH_MODE_KEY);
+ if (pm) {
+ if (0 == strncmp(json_string_value(pm), PITCH_MODE_VALUE_CLASSIC, strlen(PITCH_MODE_VALUE_CLASSIC))) {
+ setPitchMode(CLASSIC_PITCH_MODE);
+ }
+ else if (0 == strncmp(json_string_value(pm), PITCH_MODE_VALUE_COMPLIANT, strlen(PITCH_MODE_VALUE_COMPLIANT))) {
+ setPitchMode(COMPLIANT_PITCH_MODE);
+ }
+ }
+}
+
+void LFOBase::setPitchMode(PitchMode mode) {
+ _pitchMode = mode;
+
+ if (_pitchModeListener) {
+ _pitchModeListener->pitchModeChanged();
+ }
+}
+
+void LFOBase::setFrequency(bool slow, Param& frequency, Input& pitch, Phasor& phasor) {
+ float f = frequency.value;
+ if (pitch.active) {
+ f += pitch.value;
+ }
+ if (slow) {
+ f -= 8.0f;
+ }
+ else {
+ f -= 4.0f;
+ }
+ if (isCompliantPitchMode()) {
+ f -= 3.0f;
+ }
+
+ f = cvToFrequency(f);
+ if (f > 2000.0f) {
+ f = 2000.0f;
+ }
+ phasor.setFrequency(f);
+}
diff --git a/plugins/community/repos/Bogaudio/src/lfo_base.hpp b/plugins/community/repos/Bogaudio/src/lfo_base.hpp
new file mode 100644
index 00000000..476f1092
--- /dev/null
+++ b/plugins/community/repos/Bogaudio/src/lfo_base.hpp
@@ -0,0 +1,114 @@
+
+#pragma once
+
+#include "bogaudio.hpp"
+#include "dsp/oscillator.hpp"
+#include "dsp/signal.hpp"
+
+using namespace bogaudio::dsp;
+
+namespace bogaudio {
+
+struct PitchModeListener {
+ virtual void pitchModeChanged() = 0;
+};
+
+struct LFOBase : Module {
+ enum PitchMode {
+ UNKNOWN_PITCH_MODE,
+ CLASSIC_PITCH_MODE,
+ COMPLIANT_PITCH_MODE
+ };
+
+ PitchMode _pitchMode = UNKNOWN_PITCH_MODE;
+ PitchModeListener* _pitchModeListener = NULL;
+
+ LFOBase(int np, int ni, int no, int nl) : Module(np, ni, no, nl) {}
+
+ json_t* toJson() override;
+ void fromJson(json_t* root) override;
+ bool isCompliantPitchMode() { return _pitchMode == COMPLIANT_PITCH_MODE; }
+ void setPitchMode(PitchMode mode);
+ void setPitchModeListener(PitchModeListener* listener) { _pitchModeListener = listener; }
+ void setFrequency(bool slow, Param& frequency, Input& pitch, Phasor& phasor);
+};
+
+struct PitchModeMenuItem : MenuItem {
+ LFOBase* _module;
+ bool _compliant;
+
+ PitchModeMenuItem(LFOBase* module, const char* label, bool compliant)
+ : _module(module)
+ , _compliant(compliant)
+ {
+ this->text = label;
+ }
+
+ void onAction(EventAction &e) override {
+ _module->setPitchMode(_compliant ? LFOBase::COMPLIANT_PITCH_MODE : LFOBase::CLASSIC_PITCH_MODE);
+ }
+
+ void step() override {
+ bool compliantMode = _module->isCompliantPitchMode();
+ bool on = _compliant ? compliantMode : !compliantMode;
+ rightText = on ? "✔" : "";
+ }
+};
+
+struct LFOBaseWidget : ModuleWidget, PitchModeListener {
+ LFOBase* _module;
+ SVGPanel* _panel;
+ std::shared_ptr
+ id="g97">
@@ -174,7 +174,7 @@
id="text39">0.5
1
+ transform="translate(14 0) rotate(71.76) translate(-2 3.5)"
+ id="text45">10
5
+ letter-spacing="1px"
+ transform="translate(14 0) rotate(124.62) translate(-10 3.5)"
+ id="text51">0V
0V
+ transform="translate(14 0) rotate(18.17) translate(-2 3.5)"
+ id="text57">50
50
+ transform="translate(14 0) rotate(-27.98) translate(-2 3.5)"
+ id="text63">200
200
-
-
-
- 400HZ
+ transform="translate(14 0) rotate(-51.05) translate(-2 3.5)"
+ id="text69">400HZ
+ id="polyline73" />
+ id="polyline75" />
+ id="polyline77" />
-
+ transform="rotate(-147.69) translate(37 0)"
+ id="polyline79" />
+
+ id="polyline81" />
-
+ id="polyline83" />
+
+ id="polyline87" />
+ id="polyline89" />
+ id="polyline91" />
+ id="polyline93" />
+ id="polyline95" />
-->
+ id="g110">
+ id="polyline100" />
+ id="polyline102" />
+ id="polyline104" />
+ id="polyline106" />
+ id="polyline108" />
+ id="g114">
+ id="polyline112" />
+ id="g118">
+ id="polyline116" />
+ id="g124">
+ id="path120" />
+ id="path122" />
+ id="g128">
+ id="polyline126" />
+ id="g132">
+ id="polyline130" />
+ id="g179">
+ id="g137">
-
+ id="text135">-
+ id="g141">
+ id="polyline139" />
+ id="g145">
+ id="polyline143" />
+ id="g149">
+ id="polyline147" />
+ id="g153">
+ id="polyline151" />
+ id="g157">
0
+ id="text155">0
+ id="g161">
+ id="polyline159" />
+ id="g165">
+ id="polyline163" />
+ id="g169">
+ id="polyline167" />
+ id="g173">
+ id="polyline171" />
+ id="g177">
+
+ id="text175">+
@@ -539,71 +530,71 @@
viewBox="0 0 45px 45px">
+ id="g204">
0
+ id="text182">0
+ id="polyline184" />
+ id="polyline186" />
+ id="polyline188" />
+ id="polyline190" />
+ id="polyline192" />
+ id="polyline194" />
+ id="polyline196" />
+ id="polyline198" />
+ id="polyline200" />
+ id="polyline202" />
+ id="g219">
+ id="g209">
+ id="polyline207" />
+ id="path211" />
+ id="path213" />
+ id="path215" />
+ id="path217" />
+ id="g226">
+ id="circle222" />
+ id="circle224" />
+ id="g233">
+ id="circle229" />
+ id="circle231" />
+ id="g238">
+ id="circle236" />
+ id="rect241" />
+ id="rect246" />
+ id="polyline248" />
+ id="polyline250" />
+ id="polyline252" />
@@ -750,416 +741,405 @@
+ id="text254">
+ id="path955" />
+ id="path957" />
+ id="path959" />
+ id="text256">
+ id="path962" />
+ id="path964" />
+ id="path966" />
+ id="path968" />
+ id="path970" />
+ id="path972" />
+ id="path974" />
+ id="path976" />
+ id="rect258" />
+ id="polyline433" />
+ id="text435">
+ id="path981" />
+ id="path983" />
+ id="path985" />
+ id="polyline439" />
+ id="text441">
+ id="path989" />
+ id="path991" />
+ id="path993" />
+ id="g449"
+ transform="rotate(-71.76,-17,-23.501846)">
+ id="polyline445" />
+ id="text447">
-
-
-
-
-
+ id="path997" />
+ id="path999" />
+ id="g455"
+ transform="rotate(-124.62,-17,-8.921415)">
+ id="polyline451" />
+ id="text453">
+ id="path1003" />
+ id="path1005" />
+ id="polyline457" />
+ id="text459">
+ id="path1009" />
+ id="path1011" />
+ id="polyline463" />
+ id="text465">
+ id="path1015" />
+ id="path1017" />
+ id="path1019" />
+ id="g473"
+ transform="rotate(51.05,-17,35.601256)">
+ id="polyline469" />
+ id="text471">
+ id="path1023" />
+ id="path1025" />
+ id="path1027" />
+ id="path1029" />
+ id="path1031" />
+ id="polyline475" />
+ id="polyline477" />
+ id="polyline479" />
-
+ id="polyline481" />
+
+ id="polyline483" />
-
+ id="polyline485" />
+
+ id="polyline489" />
+ id="polyline491" />
+ id="polyline493" />
+ id="polyline495" />
+ id="polyline497" />
+ id="text266">
+ id="path1046" />
+ id="path1048" />
+ id="path1050" />
+ id="path1052" />
+ id="path1054" />
+ id="path1056" />
+ id="path1058" />
+ id="path1060" />
+ id="path1062" />
+ id="path1064" />
+ id="path1066" />
+ id="path1068" />
+ id="path1070" />
+ id="text268">
+ id="path1073" />
+ id="path1075" />
+ id="path1077" />
+ id="path1079" />
@@ -1169,543 +1149,543 @@
aria-label="SAM/PW"
transform="rotate(-90,23,15)"
style="font-weight:bold;font-size:10.66666698px;font-family:Roboto, sans-serif;letter-spacing:2px;fill:#333333"
- id="text278">
+ id="text274">
+ id="path912" />
+ id="path914" />
+ id="path916" />
+ id="path918" />
+ id="path920" />
+ id="path922" />
+ id="text539">
+ id="path925" />
+ id="polyline543" />
+ id="polyline547" />
+ id="polyline551" />
+ id="polyline555" />
+ id="text559">
+ id="path932" />
+ id="polyline563" />
+ id="polyline567" />
+ id="polyline571" />
+ id="polyline575" />
+ id="text579">
+ id="path939" />
+ id="polyline503" />
+ id="polyline505" />
+ id="polyline507" />
+ id="polyline509" />
+ id="polyline511" />
+ id="polyline515" />
+ id="polyline519" />
+ id="polyline529" />
+ id="polyline533" />
+ id="text284">
+ id="path836" />
+ id="path838" />
+ id="path840" />
+ id="path842" />
+ id="path844" />
+ id="path846" />
+ id="text741">
+ id="path849" />
+ id="polyline745" />
+ id="polyline749" />
+ id="polyline753" />
+ id="polyline757" />
+ id="text761">
+ id="path856" />
+ id="polyline765" />
+ id="polyline769" />
+ id="polyline773" />
+ id="polyline777" />
+ id="text781">
+ id="path863" />
+ id="text290">
+ id="path866" />
+ id="path868" />
+ id="path870" />
+ id="path872" />
+ id="path874" />
+ id="text715">
+ id="path877" />
+ id="polyline717" />
+ id="polyline719" />
+ id="polyline721" />
+ id="polyline723" />
+ id="polyline725" />
+ id="polyline727" />
+ id="polyline729" />
+ id="polyline731" />
+ id="polyline733" />
+ id="polyline735" />
+ id="g298" />
+ id="polyline699" />
+ id="polyline683" />
+ id="polyline667" />
+ id="polyline651" />
+ id="polyline635" />
+ id="polyline619" />
+ id="polyline603" />
+ id="polyline587" />
+ id="rect336" />
+ id="text340">
+ id="path899" />
+ id="path901" />
+ id="rect344" />
+ id="text348">
+ id="path905" />
+ id="path907" />
+ id="path909" />
@@ -2042,144 +2022,144 @@
+ id="rect352" />
+ id="rect354" />
+ id="text356">
+ id="path791" />
+ id="path793" />
+ id="path795" />
+ id="path797" />
+ id="text360">
+ id="path800" />
+ id="path802" />
+ id="path804" />
+ id="text364">
+ id="path807" />
+ id="path809" />
+ id="path811" />
+ id="text368">
+ id="path814" />
+ id="path816" />
+ id="path818" />
+ id="path820" />
+ id="path822" />
+ id="text372">
+ id="path825" />
+ id="path827" />
+ id="path829" />
+ id="path831" />
+ id="path833" />
diff --git a/vst2_bin/plugins/Bogaudio/res/EightOne.svg b/vst2_bin/plugins/Bogaudio/res/EightOne.svg
new file mode 100644
index 00000000..06c77dd0
--- /dev/null
+++ b/vst2_bin/plugins/Bogaudio/res/EightOne.svg
@@ -0,0 +1,795 @@
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+
+
+
+
+
+
+
+
+
+
+
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vst2_bin/plugins/Bogaudio/res/LFO-classic.svg b/vst2_bin/plugins/Bogaudio/res/LFO-classic.svg
new file mode 100644
index 00000000..7cab54a0
--- /dev/null
+++ b/vst2_bin/plugins/Bogaudio/res/LFO-classic.svg
@@ -0,0 +1,1705 @@
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0.1
+
+
+
+ 0.5
+
+
+
+ 1
+
+
+
+ 5
+
+
+
+ 0V
+
+
+
+ 50
+
+
+
+ 200
+
+
+
+ 400HZ
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vst2_bin/plugins/Bogaudio/res/LFO.svg b/vst2_bin/plugins/Bogaudio/res/LFO.svg
index f43921b5..5be63d75 100644
--- a/vst2_bin/plugins/Bogaudio/res/LFO.svg
+++ b/vst2_bin/plugins/Bogaudio/res/LFO.svg
@@ -11,11 +11,11 @@
width="150"
height="380"
viewBox="0 0 150 380"
- id="svg358"
+ id="svg354"
sodipodi:docname="svg_render_tmp.svg"
inkscape:version="0.92.2 5c3e80d, 2017-08-06">
+ id="metadata358">
@@ -36,7 +36,7 @@
inkscape:pageshadow="2"
inkscape:window-width="468"
inkscape:window-height="449"
- id="namedview360"
+ id="namedview356"
showgrid="false"
inkscape:zoom="0.62105263"
inkscape:cx="75"
@@ -44,7 +44,7 @@
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
- inkscape:current-layer="svg358" />
+ inkscape:current-layer="svg354" />
+ id="defs224">
@@ -140,11 +140,11 @@
+ id="g97">
@@ -174,7 +174,7 @@
id="text39">0.5
1
+ transform="translate(14 0) rotate(71.76) translate(-2 3.5)"
+ id="text45">10
5
+ letter-spacing="1px"
+ transform="translate(14 0) rotate(124.62) translate(-10 3.5)"
+ id="text51">0V
0V
+ transform="translate(14 0) rotate(18.17) translate(-2 3.5)"
+ id="text57">50
50
+ transform="translate(14 0) rotate(-27.98) translate(-2 3.5)"
+ id="text63">200
200
-
-
-
- 400HZ
+ transform="translate(14 0) rotate(-51.05) translate(-2 3.5)"
+ id="text69">400HZ
+ id="polyline73" />
+ id="polyline75" />
+ id="polyline77" />
-
+ transform="rotate(-147.69) translate(37 0)"
+ id="polyline79" />
+
+ id="polyline81" />
-
+ id="polyline83" />
+
+ id="polyline87" />
+ id="polyline89" />
+ id="polyline91" />
+ id="polyline93" />
+ id="polyline95" />
+ id="g144">
+ id="g102">
-
+ id="text100">-
+ id="g106">
+ id="polyline104" />
+ id="g110">
+ id="polyline108" />
+ id="g114">
+ id="polyline112" />
+ id="g118">
+ id="polyline116" />
+ id="g122">
0
+ id="text120">0
+ id="g126">
+ id="polyline124" />
+ id="g130">
+ id="polyline128" />
+ id="g134">
+ id="polyline132" />
+ id="g138">
+ id="polyline136" />
+ id="g142">
+
+ id="text140">+
@@ -438,71 +429,71 @@
viewBox="0 0 45px 45px">
+ id="g169">
0
+ id="text147">0
+ id="polyline149" />
+ id="polyline151" />
+ id="polyline153" />
+ id="polyline155" />
+ id="polyline157" />
+ id="polyline159" />
+ id="polyline161" />
+ id="polyline163" />
+ id="polyline165" />
+ id="polyline167" />
+ id="g184">
+ id="g174">
+ id="polyline172" />
+ id="path176" />
+ id="path178" />
+ id="path180" />
+ id="path182" />
+ id="g199">
+ id="g189">
+ id="polyline187" />
+ id="path191" />
+ id="path193" />
+ id="path195" />
+ id="path197" />
+ id="g206">
+ id="circle202" />
+ id="circle204" />
+ id="g213">
+ id="circle209" />
+ id="circle211" />
+ id="g218">
+ id="circle216" />
+ id="rect221" />
+ id="rect226" />
+ id="polyline228" />
+ id="polyline230" />
+ id="polyline232" />
+ id="text234">
+ id="path649" />
+ id="path651" />
+ id="path653" />
+ id="text236">
+ id="path656" />
+ id="path658" />
+ id="path660" />
+ id="path662" />
+ id="path664" />
+ id="path666" />
+ id="path668" />
+ id="path670" />
+ id="rect238" />
+ id="polyline517" />
+ id="text519">
+ id="path675" />
+ id="path677" />
+ id="path679" />
+ id="polyline523" />
+ id="text525">
+ id="path683" />
+ id="path685" />
+ id="path687" />
+ id="g533"
+ transform="rotate(-71.76,-17,-23.501846)">
+ id="polyline529" />
+ id="text531">
-
-
-
-
-
+ id="path691" />
+ id="path693" />
+ id="g539"
+ transform="rotate(-124.62,-17,-8.921415)">
+ id="polyline535" />
+ id="text537">
+ id="path697" />
+ id="path699" />
+ id="polyline541" />
+ id="text543">
+ id="path703" />
+ id="path705" />
+ id="polyline547" />
+ id="text549">
+ id="path709" />
+ id="path711" />
+ id="path713" />
+ id="g557"
+ transform="rotate(51.05,-17,35.601256)">
+ id="polyline553" />
+ id="text555">
+ id="path717" />
+ id="path719" />
+ id="path721" />
+ id="path723" />
+ id="path725" />
+ id="polyline559" />
+ id="polyline561" />
+ id="polyline563" />
-
+ id="polyline565" />
+
+ id="polyline567" />
-
+ id="polyline569" />
+
+ id="polyline573" />
+ id="polyline575" />
+ id="polyline577" />
+ id="polyline579" />
+ id="polyline581" />
+ id="text246">
+ id="path740" />
+ id="path742" />
+ id="path744" />
+ id="path746" />
+ id="path748" />
+ id="path750" />
+ id="path752" />
+ id="path754" />
+ id="path756" />
+ id="path758" />
+ id="path760" />
+ id="path762" />
+ id="path764" />
+ id="text248">
+ id="path767" />
+ id="path769" />
+ id="path771" />
+ id="path773" />
@@ -1108,91 +1088,91 @@
aria-label="SAM"
transform="rotate(-90,17.5,9.5)"
style="font-weight:bold;font-size:10.66666698px;font-family:Roboto, sans-serif;letter-spacing:2px;fill:#333333"
- id="text256">
+ id="text252">
+ id="path776" />
+ id="path778" />
+ id="path780" />
+ id="text491">
+ id="path783" />
+ id="polyline493" />
+ id="polyline495" />
+ id="polyline497" />
+ id="polyline499" />
+ id="polyline501" />
+ id="polyline503" />
+ id="polyline505" />
+ id="polyline507" />
+ id="polyline509" />
+ id="polyline511" />
@@ -1200,188 +1180,188 @@
aria-label="PW"
transform="rotate(-90,15.25,7.25)"
style="font-weight:bold;font-size:10.66666698px;font-family:Roboto, sans-serif;letter-spacing:2px;fill:#333333"
- id="text262">
+ id="text258">
+ id="path796" />
+ id="path798" />
+ id="text443">
+ id="path801" />
+ id="polyline447" />
+ id="polyline451" />
+ id="polyline455" />
+ id="polyline459" />
+ id="text463">
+ id="path808" />
+ id="polyline467" />
+ id="polyline471" />
+ id="polyline475" />
+ id="polyline479" />
+ id="text483">
+ id="path815" />
+ id="text266">
+ id="path818" />
+ id="path820" />
+ id="path822" />
+ id="polyline427" />
+ id="text272">
+ id="path826" />
+ id="path828" />
+ id="path830" />
+ id="polyline411" />
+ id="rect280" />
+ id="rect282" />
+ id="rect284" />
+ id="rect286" />
+ id="rect288" />
+ id="rect290" />
+ id="text292">
+ id="path593" />
+ id="path595" />
+ id="path597" />
+ id="text296">
+ id="path600" />
+ id="path602" />
+ id="polyline300" />
+ id="text306">
+ id="path606" />
+ id="path608" />
+ id="path610" />
+ id="text310">
+ id="path613" />
+ id="path615" />
+ id="path617" />
+ id="polyline314" />
+ id="polyline320" />
+ id="text326">
+ id="path622" />
+ id="path624" />
+ id="path626" />
+ id="path628" />
+ id="path630" />
+ id="text330">
+ id="path633" />
+ id="path635" />
+ id="path637" />
+ id="path639" />
+ id="path641" />
+ id="polyline334" />
diff --git a/vst2_bin/plugins/Bogaudio/res/LLFO-classic.svg b/vst2_bin/plugins/Bogaudio/res/LLFO-classic.svg
new file mode 100644
index 00000000..c7f3c4da
--- /dev/null
+++ b/vst2_bin/plugins/Bogaudio/res/LLFO-classic.svg
@@ -0,0 +1,854 @@
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+ 0V
+
+
+
+ 200
+
+ HZ
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vst2_bin/plugins/Bogaudio/res/LLFO.svg b/vst2_bin/plugins/Bogaudio/res/LLFO.svg
index 11aa1969..49bf261b 100644
--- a/vst2_bin/plugins/Bogaudio/res/LLFO.svg
+++ b/vst2_bin/plugins/Bogaudio/res/LLFO.svg
@@ -11,11 +11,11 @@
width="45"
height="380"
viewBox="0 0 45 380"
- id="svg205"
+ id="svg211"
sodipodi:docname="svg_render_tmp.svg"
inkscape:version="0.92.2 5c3e80d, 2017-08-06">
+ id="metadata215">
@@ -36,7 +36,7 @@
inkscape:pageshadow="2"
inkscape:window-width="468"
inkscape:window-height="449"
- id="namedview207"
+ id="namedview213"
showgrid="false"
inkscape:zoom="0.62105263"
inkscape:cx="22.5"
@@ -44,7 +44,7 @@
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
- inkscape:current-layer="svg205" />
+ inkscape:current-layer="svg211" />
+ id="defs107">
@@ -118,7 +118,7 @@
viewBox="0 0 45px 45px">
+ id="g52">
1
+ transform="translate(5 0) rotate(202) translate(3 9.5) rotate(-90)"
+ id="text28">0.2
0V
+ transform="translate(5 0) rotate(48.68) translate(-1 2.3)"
+ id="text34">20
+ 2
+
+
+
200
+ id="text46">200
HZ
+ id="text50">HZ
+ id="g67">
+ id="g57">
+ id="polyline55" />
+ id="path59" />
+ id="path61" />
+ id="path63" />
+ id="path65" />
+ id="g82">
+ id="g72">
+ id="polyline70" />
+ id="path74" />
+ id="path76" />
+ id="path78" />
+ id="path80" />
+ id="g89">
+ id="circle85" />
+ id="circle87" />
+ id="g96">
+ id="circle92" />
+ id="circle94" />
+ id="g101">
+ id="circle99" />
+ id="rect104" />
+ id="rect109" />
+ id="polyline111" />
+ id="polyline113" />
+ id="polyline115" />
+ id="text117">
+ id="path433" />
+ id="path435" />
+ id="path437" />
+ id="path439" />
+ id="text119">
+ id="path442" />
+ id="path444" />
+ id="path446" />
+ id="rect121" />
+ id="polyline289" />
+ id="polyline291" />
+ id="g297"
+ transform="rotate(158,-7,1.3606622)">
+ id="polyline293" />
+ id="text295">
+
+ id="path328" />
+
+ id="g303"
+ transform="rotate(-48.68,-7,-15.474468)">
+ id="polyline299" />
+ id="text301">
+
+ id="path336" />
+
+
+
+
+
+ id="path340" />
+ id="polyline311" />
+ id="text313">
+ id="path344" />
+ id="path346" />
+ id="path348" />
+ id="text317">
+ id="path351" />
+ id="path353" />
+ id="text131">
+ id="path356" />
+ id="path358" />
+ id="path360" />
+ id="path362" />
+ id="g141">
+ id="polyline143" />
+ id="polyline149" />
+ id="g161">
+ id="polyline157" />
+ id="polyline163" />
+ id="polyline169" />
+ id="text179">
+ id="path370" />
+ id="path372" />
+ id="path374" />
+ id="path376" />
+ id="path378" />
+ id="path380" />
+ id="polyline273" />
+ id="text185">
+ id="path384" />
+ id="path386" />
+ id="path388" />
+ id="path390" />
+ id="path392" />
+ id="polyline257" />
+ id="rect191" />
+ id="rect193" />
+ id="text195">
+ id="path398" />
+ id="path400" />
+ id="path402" />
+ id="path404" />
+ id="path406" />
+ id="text197">
+ id="path409" />
+ id="path411" />
+ id="path413" />
+ id="path415" />
+ id="path417" />
+ id="rect201" />
+ id="rect203" />
+ id="text205">
+ id="path422" />
+ id="path424" />
+ id="path426" />
diff --git a/vst2_bin/plugins/Bogaudio/res/OneEight.svg b/vst2_bin/plugins/Bogaudio/res/OneEight.svg
new file mode 100644
index 00000000..9af005f9
--- /dev/null
+++ b/vst2_bin/plugins/Bogaudio/res/OneEight.svg
@@ -0,0 +1,795 @@
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+
+
+
+
+
+
+
+
+
+
+
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vst2_bin/plugins/Bogaudio/res/Walk.svg b/vst2_bin/plugins/Bogaudio/res/Walk.svg
new file mode 100644
index 00000000..b0c404fc
--- /dev/null
+++ b/vst2_bin/plugins/Bogaudio/res/Walk.svg
@@ -0,0 +1,781 @@
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vst2_bin/plugins/Bogaudio/res/Walk2.svg b/vst2_bin/plugins/Bogaudio/res/Walk2.svg
new file mode 100644
index 00000000..7226591f
--- /dev/null
+++ b/vst2_bin/plugins/Bogaudio/res/Walk2.svg
@@ -0,0 +1,1166 @@
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vst2_bin/plugins/Bogaudio/res/button_18px_1_green.svg b/vst2_bin/plugins/Bogaudio/res/button_18px_1_green.svg
new file mode 100644
index 00000000..26d68f7e
--- /dev/null
+++ b/vst2_bin/plugins/Bogaudio/res/button_18px_1_green.svg
@@ -0,0 +1,98 @@
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+