commit d3c93a9c3869123a16a367813239312e0608b192
parent 8a5df6f046528c007a4df548447c6f137f83c19f
Author: Matt Demanett <matt@demanett.net>
Date: Fri, 20 Jul 2018 01:13:00 -0400
Revised RM modules, now "AM/RM".
Diffstat:
13 files changed, 279 insertions(+), 255 deletions(-)
diff --git a/res-src/AMRM-src.svg b/res-src/AMRM-src.svg
@@ -0,0 +1,132 @@
+<svg
+ version="1.1"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ width="90"
+ height="380"
+ viewBox="0 0 90 380"
+>
+ <style>
+ text {
+ fill: #333;
+ font-family: 'Roboto', sans-serif;
+ font-weight: bold;
+ }
+ text.title {
+ font-family: 'Comfortaa', sans-serif;
+ font-weight: normal;
+ }
+ text.brand {
+ font-family: 'Audiowide', sans-serif;
+ font-weight: bold;
+ }
+ </style>
+
+ <defs>
+ <symbol id="knob45" viewBox="0 0 90px 90px">
+ <g transform="translate(45 45)">
+ <polyline points="-5,0 5,0" stroke-width="1" stroke="#00f" />
+ <polyline points="0,-5 0,5" stroke-width="1" stroke="#00f" />
+ <circle cx="0" cy="0" r="22" stroke-width="1" stroke="#00f" fill="none" />
+ </g>
+ </symbol>
+
+ <symbol id="knobguide-rectify" viewBox="0 0 90px 90px">
+ <g transform="translate(45 45)">
+ <text font-size="6.0pt" transform="rotate(-240) translate(29 0) rotate(240) translate(-4 3)">0</text>
+ <polyline points="0,0 3.5,0" stroke-width="0.3" stroke="#333" transform="rotate(-210) translate(26 0)" />
+ <polyline points="0,0 3.5,0" stroke-width="0.3" stroke="#333" transform="rotate(-180) translate(26 0)" />
+ <polyline points="0,0 3.5,0" stroke-width="0.3" stroke="#333" transform="rotate(-150) translate(26 0)" />
+ <polyline points="0,0 3.5,0" stroke-width="0.3" stroke="#333" transform="rotate(-120) translate(26 0)" />
+ <polyline points="0,0 3.5,0" stroke-width="0.3" stroke="#333" transform="rotate(-90) translate(26 0)" />
+ <polyline points="0,0 3.5,0" stroke-width="0.3" stroke="#333" transform="rotate(-60) translate(26 0)" />
+ <polyline points="0,0 3.5,0" stroke-width="0.3" stroke="#333" transform="rotate(-30) translate(26 0)" />
+ <polyline points="0,0 3.5,0" stroke-width="0.3" stroke="#333" transform="rotate(0) translate(26 0)" />
+ <polyline points="0,0 3.5,0" stroke-width="0.3" stroke="#333" transform="rotate(30) translate(26 0)" />
+ <polyline points="0,0 5.5,0" stroke-width="1.5" stroke="#333" transform="rotate(60) translate(26 0)" />
+ </g>
+ </symbol>
+
+ <symbol id="knobguide-drywet" viewBox="0 0 90px 90px">
+ <g transform="translate(45 45)">
+ <text font-size="6.0pt" transform="rotate(-240) translate(29 0) rotate(240) translate(-4 3)">D</text>
+ <polyline points="0,0 3.5,0" stroke-width="0.3" stroke="#333" transform="rotate(-210) translate(26 0)" />
+ <polyline points="0,0 3.5,0" stroke-width="0.3" stroke="#333" transform="rotate(-180) translate(26 0)" />
+ <polyline points="0,0 3.5,0" stroke-width="0.3" stroke="#333" transform="rotate(-150) translate(26 0)" />
+ <polyline points="0,0 3.5,0" stroke-width="0.3" stroke="#333" transform="rotate(-120) translate(26 0)" />
+ <polyline points="0,0 5.5,0" stroke-width="1.5" stroke="#333" transform="rotate(-90) translate(26 0)" />
+ <polyline points="0,0 3.5,0" stroke-width="0.3" stroke="#333" transform="rotate(-60) translate(26 0)" />
+ <polyline points="0,0 3.5,0" stroke-width="0.3" stroke="#333" transform="rotate(-30) translate(26 0)" />
+ <polyline points="0,0 3.5,0" stroke-width="0.3" stroke="#333" transform="rotate(0) translate(26 0)" />
+ <polyline points="0,0 3.5,0" stroke-width="0.3" stroke="#333" transform="rotate(30) translate(26 0)" />
+ <text font-size="6.0pt" transform="rotate(60) translate(29 0) rotate(-60) translate(-1 3)">W</text>
+ </g>
+ </symbol>
+
+ <symbol id="input" viewBox="0 0 24px 24px">
+ <g transform="translate(12 12)">
+ <circle cx="0" cy="0" r="5" stroke-width="1" stroke="#0f0" fill="#0f0" />
+ <circle cx="0" cy="0" r="10.5" stroke-width="3" stroke="#0f0" fill="none" />
+ </g>
+ </symbol>
+
+ <symbol id="output" viewBox="0 0 24px 24px">
+ <g transform="translate(12 12)">
+ <circle cx="0" cy="0" r="5" stroke-width="1" stroke="#f00" fill="#f00" />
+ <circle cx="0" cy="0" r="10.5" stroke-width="3" stroke="#f00" fill="none" />
+ </g>
+ </symbol>
+ </defs>
+
+ <rect width="100%" height="100%" fill="#ddd" />
+ <polyline points="1,1 89,1 89,379 1,379 1,1" stroke="#e4e4e4" stroke-width="0.5" fill="none" />
+ <polyline points="0.5,0.5 89.5,0.5 89.5,379.5 0.5,379.5 0.5,0.5" stroke="#ebebeb" stroke-width="0.8" fill="none" />
+ <polyline points="0,0 90,0 90,380 0,380 0,0" stroke="#f2f2f2" stroke-width="1" fill="none" />
+
+ <text class="title" x="26.5" y="17" font-size="9pt" letter-spacing="3px">AM/RM</text>
+ <g transform="translate(5.5 374)">
+ <text class="brand" font-size="6.5pt" letter-spacing="2px">BOGAUDIO</text>
+ <rect width="1.5" height="2" fill="#ddd" transform="translate(21 -4)" />
+ </g>
+
+ <!-- <rect width="90" height="23" fill="#0f0" transform="translate(0 18)" /> -->
+ <!-- <rect width="90" height="23" fill="#0f0" transform="translate(0 117)" /> -->
+ <!-- <rect width="90" height="23" fill="#0f0" transform="translate(0 217)" /> -->
+
+ <g transform="translate(0 49)">
+ <text font-size="8pt" letter-spacing="2px" transform="translate(18 0)">RECTIFY</text>
+ <use id="RECTIFY_PARAM" xlink:href="#knob45" transform="translate(0 -5)" />
+ <use xlink:href="#knobguide-rectify" transform="translate(0 -5)" />
+ </g>
+
+ <g transform="translate(0 148)">
+ <text font-size="8pt" letter-spacing="2px" transform="translate(15.5 0)">DRY/WET</text>
+ <use id="DRYWET_PARAM" xlink:href="#knob45" transform="translate(0 -5)" />
+ <use xlink:href="#knobguide-drywet" transform="translate(0 -5)" />
+ </g>
+
+ <g transform="translate(11 240)">
+ <g transform="translate(0 0)">
+ <rect width="68" height="10" fill="#fafafa" transform="translate(0 66)" />
+ <rect width="68" height="73" rx="5" fill="#fafafa" />
+ <use id="MODULATOR_INPUT" xlink:href="#input" transform="translate(5 4)" />
+ <text font-size="5pt" letter-spacing="2px" transform="translate(7.5 36)">MOD</text>
+ <use id="CARRIER_INPUT" xlink:href="#input" transform="translate(39 4)" />
+ <text font-size="5pt" letter-spacing="2px" transform="translate(42.5 36)">CAR</text>
+ <use id="RECTIFY_INPUT" xlink:href="#input" transform="translate(5 40)" />
+ <text font-size="5pt" letter-spacing="2px" transform="translate(5.5 72)">RECT</text>
+ <use id="DRYWET_INPUT" xlink:href="#input" transform="translate(39 40)" />
+ <text font-size="5pt" letter-spacing="2px" transform="translate(42 72)">D/W</text>
+ </g>
+ <g transform="translate(0 79)">
+ <rect width="68" height="10" fill="#bbb" transform="translate(0 -3)" />
+ <rect width="68" height="37" rx="5" fill="#bbb" />
+ <use id="RECTIFY_OUTPUT" xlink:href="#output" transform="translate(5 1)" />
+ <text font-size="5pt" letter-spacing="2px" transform="translate(5.5 33)">RECT</text>
+ <use id="OUT_OUTPUT" xlink:href="#output" transform="translate(39 1)" />
+ <text font-size="5pt" letter-spacing="2px" transform="translate(42.5 33)">OUT</text>
+ </g>
+ </g>
+
+ <!-- <polyline points="0,0 45,0" stroke-width="0.5" stroke="#0f0" transform="translate(0 73)" /> -->
+</svg>
diff --git a/res-src/RM-src.svg b/res-src/RM-src.svg
@@ -1,134 +0,0 @@
-<svg
- version="1.1"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- width="45"
- height="380"
- viewBox="0 0 45 380"
->
- <style>
- text {
- fill: #333;
- font-family: 'Roboto', sans-serif;
- font-weight: bold;
- }
- text.title {
- font-family: 'Comfortaa', sans-serif;
- font-weight: normal;
- }
- text.brand {
- font-family: 'Audiowide', sans-serif;
- font-weight: bold;
- }
- </style>
-
- <defs>
- <symbol id="knob" viewBox="0 0 45px 45px">
- <g transform="translate(22.5 22.5)">
- <polyline points="-5,0 5,0" stroke-width="1" stroke="#00f" />
- <polyline points="0,-5 0,5" stroke-width="1" stroke="#00f" />
- <circle cx="0" cy="0" r="14" stroke-width="1" stroke="#00f" fill="none" />
- </g>
- </symbol>
-
- <symbol id="knobguide-depth" viewBox="0 0 45px 45px">
- <g transform="translate(22.5 22.5)">
- <text font-size="5.0pt" transform="rotate(-240) translate(20 0) rotate(240) translate(-2 2)">0</text>
- <polyline points="0,0 2.5,0" stroke-width="0.3" stroke="#333" transform="rotate(-210) translate(17 0)" />
- <polyline points="0,0 2.5,0" stroke-width="0.3" stroke="#333" transform="rotate(-180) translate(17 0)" />
- <polyline points="0,0 2.5,0" stroke-width="0.3" stroke="#333" transform="rotate(-150) translate(17 0)" />
- <polyline points="0,0 2.5,0" stroke-width="0.3" stroke="#333" transform="rotate(-120) translate(17 0)" />
- <polyline points="0,0 2.5,0" stroke-width="0.3" stroke="#333" transform="rotate(-90) translate(17 0)" />
- <polyline points="0,0 2.5,0" stroke-width="0.3" stroke="#333" transform="rotate(-60) translate(17 0)" />
- <polyline points="0,0 2.5,0" stroke-width="0.3" stroke="#333" transform="rotate(-30) translate(17 0)" />
- <polyline points="0,0 2.5,0" stroke-width="0.3" stroke="#333" transform="rotate(0) translate(17 0)" />
- <polyline points="0,0 2.5,0" stroke-width="0.3" stroke="#333" transform="rotate(30) translate(17 0)" />
- <polyline points="0,0 3.5,0" stroke-width="1" stroke="#333" transform="rotate(60) translate(17 0)" />
- </g>
- </symbol>
-
- <symbol id="knobguide-mix" viewBox="0 0 45px 45px">
- <g transform="translate(22.5 22.5)">
- <text font-size="5.0pt" transform="rotate(-240) translate(20 0) rotate(240) translate(-2 2)">D</text>
- <polyline points="0,0 2.5,0" stroke-width="0.3" stroke="#333" transform="rotate(-210) translate(17 0)" />
- <polyline points="0,0 2.5,0" stroke-width="0.3" stroke="#333" transform="rotate(-180) translate(17 0)" />
- <polyline points="0,0 2.5,0" stroke-width="0.3" stroke="#333" transform="rotate(-150) translate(17 0)" />
- <polyline points="0,0 2.5,0" stroke-width="0.3" stroke="#333" transform="rotate(-120) translate(17 0)" />
- <polyline points="0,0 3.5,0" stroke-width="1" stroke="#333" transform="rotate(-90) translate(17 0)" />
- <polyline points="0,0 2.5,0" stroke-width="0.3" stroke="#333" transform="rotate(-60) translate(17 0)" />
- <polyline points="0,0 2.5,0" stroke-width="0.3" stroke="#333" transform="rotate(-30) translate(17 0)" />
- <polyline points="0,0 2.5,0" stroke-width="0.3" stroke="#333" transform="rotate(0) translate(17 0)" />
- <polyline points="0,0 2.5,0" stroke-width="0.3" stroke="#333" transform="rotate(30) translate(17 0)" />
- <text font-size="5.0pt" transform="rotate(60) translate(20 0) rotate(-60) translate(-2 2)">W</text>
- </g>
- </symbol>
-
- <symbol id="input" viewBox="0 0 24px 24px">
- <g transform="translate(12 12)">
- <circle cx="0" cy="0" r="5" stroke-width="1" stroke="#0f0" fill="#0f0" />
- <circle cx="0" cy="0" r="10.5" stroke-width="3" stroke="#0f0" fill="none" />
- </g>
- </symbol>
-
- <symbol id="output" viewBox="0 0 24px 24px">
- <g transform="translate(12 12)">
- <circle cx="0" cy="0" r="5" stroke-width="1" stroke="#f00" fill="#f00" />
- <circle cx="0" cy="0" r="10.5" stroke-width="3" stroke="#f00" fill="none" />
- </g>
- </symbol>
- </defs>
-
- <rect width="100%" height="100%" fill="#ddd" />
- <polyline points="1,1 44,1 44,379 1,379 1,1" stroke="#e4e4e4" stroke-width="0.5" fill="none" />
- <polyline points="0.5,0.5 44.5,0.5 44.5,379.5 0.5,379.5 0.5,0.5" stroke="#ebebeb" stroke-width="0.8" fill="none" />
- <polyline points="0,0 45,0 45,380 0,380 0,0" stroke="#f2f2f2" stroke-width="1" fill="none" />
-
- <g transform="rotate(-90) translate(-376 13)">
- <text class="title" font-size="7pt" letter-spacing="2.5px">RM</text>
- <g transform="translate(0 12)">
- <text class="brand" font-size="7pt" letter-spacing="2px">BGA</text>
- <rect width="3.0" height="3" fill="#ddd" transform="translate(11.5 -5)" />
- </g>
- </g>
-
- <g transform="translate(0 25)">
- <text font-size="6pt" letter-spacing="2px" transform="translate(5.5 0)">DEPTH</text>
- <use id="MODULATOR_DEPTH_PARAM" xlink:href="#knob" transform="translate(0 3)" />
- <use xlink:href="#knobguide-depth" transform="scale(1) translate(0 3)" />
- <g transform="translate(5.5 49)">
- <rect width="34" height="39" rx="5" fill="#fafafa" />
- <use id="MODULATOR_DEPTH_INPUT" xlink:href="#input" transform="translate(5 3)" />
- <text font-size="5pt" letter-spacing="2px" transform="translate(11 35)">CV</text>
- </g>
- </g>
-
- <g transform="translate(0 131)">
- <text font-size="6pt" letter-spacing="1px" transform="translate(2 0)">DRY/WET</text>
- <use id="MIX_PARAM" xlink:href="#knob" transform="translate(0 3)" />
- <use xlink:href="#knobguide-mix" transform="scale(1) translate(0 3)" />
- <g transform="translate(5.5 49)">
- <rect width="34" height="38" rx="5" fill="#fafafa" />
- <use id="MIX_INPUT" xlink:href="#input" transform="translate(5 3)" />
- <text font-size="5pt" letter-spacing="2px" transform="translate(11 35)">CV</text>
- </g>
- </g>
-
- <g transform="translate(0 230)">
- <g transform="translate(5.5 0)">
- <rect width="34" height="10" fill="#fafafa" transform="translate(0 63)" />
- <rect width="34" height="70" rx="5" fill="#fafafa" />
- <use id="MODULATOR_INPUT" xlink:href="#input" transform="translate(5 3)" />
- <text font-size="5pt" letter-spacing="2px" transform="translate(7.5 35)">MOD</text>
- <use id="CARRIER_INPUT" xlink:href="#input" transform="translate(5 38)" />
- <text font-size="5pt" letter-spacing="2px" transform="translate(8.5 70)">CAR</text>
- </g>
- <g transform="translate(5.5 76)">
- <rect width="34" height="10" fill="#bbb" transform="translate(0 -3)" />
- <rect width="34" height="35" rx="5" fill="#bbb" />
- <use id="OUT_OUTPUT" xlink:href="#output" transform="translate(5 0)" />
- <text font-size="5pt" letter-spacing="2px" transform="translate(8.3 32)">OUT</text>
- </g>
- </g>
-
- <!-- <polyline points="0,0 45,0" stroke-width="0.5" stroke="#0f0" transform="translate(0 73)" /> -->
-</svg>
diff --git a/res-src/knob_45px-src.svg b/res-src/knob_45px-src.svg
@@ -0,0 +1,14 @@
+<svg
+ version="1.1"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ width="45"
+ height="45"
+ viewBox="0 0 45 45"
+>
+<g transform="translate(22.5 22.5)">
+ <circle r="22.2" fill="#333" />
+ <circle r="18" fill="#eee" />
+</g>
+<polyline points="22.5,2 22.5,2.7" stroke="#fff" stroke-width="3" stroke-linecap="round" fill="none" />
+</svg>
diff --git a/res/AMRM.svg b/res/AMRM.svg
Binary files differ.
diff --git a/res/RM.svg b/res/RM.svg
Binary files differ.
diff --git a/res/knob_45px.svg b/res/knob_45px.svg
Binary files differ.
diff --git a/src/AMRM.cpp b/src/AMRM.cpp
@@ -0,0 +1,75 @@
+
+#include "AMRM.hpp"
+
+void AMRM::step() {
+ if (!(outputs[OUT_OUTPUT].active || outputs[RECTIFY_OUTPUT].active)) {
+ return;
+ }
+
+ float rectify = 1.0f - params[RECTIFY_PARAM].value;
+ if (inputs[RECTIFY_INPUT].active) {
+ rectify = clamp(rectify + inputs[RECTIFY_INPUT].value / 10.0f, 0.0f, 1.0f);
+ }
+
+ float depth = params[DRYWET_PARAM].value;
+ if (inputs[DRYWET_INPUT].active) {
+ depth = clamp(depth + inputs[DRYWET_INPUT].value / 10.0f, 0.0f, 1.0f);
+ }
+
+ float modulator = inputs[MODULATOR_INPUT].value;
+ if (rectify < 1.0f) {
+ rectify *= -5.0f;
+ if (modulator < rectify) {
+ modulator = rectify - (modulator - rectify);
+ }
+ }
+ outputs[RECTIFY_OUTPUT].value = modulator;
+
+ modulator *= depth;
+ modulator += (1.0f - depth) * 5.0f;
+ outputs[OUT_OUTPUT].value = _saturator.next(modulator * inputs[CARRIER_INPUT].value * 0.2f);
+}
+
+struct AMRMWidget : ModuleWidget {
+ static constexpr int hp = 6;
+
+ AMRMWidget(AMRM* 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/AMRM.svg")));
+ addChild(panel);
+ }
+
+ addChild(Widget::create<ScrewSilver>(Vec(0, 0)));
+ addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 15, 365)));
+
+ // generated by svg_widgets.rb
+ auto rectifyParamPosition = Vec(22.5, 66.5);
+ auto drywetParamPosition = Vec(22.5, 165.5);
+
+ auto modulatorInputPosition = Vec(16.0, 244.0);
+ auto carrierInputPosition = Vec(50.0, 244.0);
+ auto rectifyInputPosition = Vec(16.0, 280.0);
+ auto drywetInputPosition = Vec(50.0, 280.0);
+
+ auto rectifyOutputPosition = Vec(16.0, 320.0);
+ auto outOutputPosition = Vec(50.0, 320.0);
+ // end generated by svg_widgets.rb
+
+ addParam(ParamWidget::create<Knob45>(rectifyParamPosition, module, AMRM::RECTIFY_PARAM, 0.0, 1.0, 0.0));
+ addParam(ParamWidget::create<Knob45>(drywetParamPosition, module, AMRM::DRYWET_PARAM, 0.0, 1.0, 1.0));
+
+ addInput(Port::create<Port24>(modulatorInputPosition, Port::INPUT, module, AMRM::MODULATOR_INPUT));
+ addInput(Port::create<Port24>(carrierInputPosition, Port::INPUT, module, AMRM::CARRIER_INPUT));
+ addInput(Port::create<Port24>(rectifyInputPosition, Port::INPUT, module, AMRM::RECTIFY_INPUT));
+ addInput(Port::create<Port24>(drywetInputPosition, Port::INPUT, module, AMRM::DRYWET_INPUT));
+
+ addOutput(Port::create<Port24>(rectifyOutputPosition, Port::OUTPUT, module, AMRM::RECTIFY_OUTPUT));
+ addOutput(Port::create<Port24>(outOutputPosition, Port::OUTPUT, module, AMRM::OUT_OUTPUT));
+ }
+};
+
+Model* modelAMRM = createModel<AMRM, AMRMWidget>("Bogaudio-AMRM", "AM/RM", "ring modulator", RING_MODULATOR_TAG, EFFECT_TAG);
diff --git a/src/AMRM.hpp b/src/AMRM.hpp
@@ -0,0 +1,45 @@
+#pragma once
+
+#include "bogaudio.hpp"
+#include "dsp/signal.hpp"
+
+using namespace bogaudio::dsp;
+
+extern Model* modelAMRM;
+
+namespace bogaudio {
+
+struct AMRM : Module {
+ enum ParamsIds {
+ RECTIFY_PARAM,
+ DRYWET_PARAM,
+ NUM_PARAMS
+ };
+
+ enum InputsIds {
+ MODULATOR_INPUT,
+ CARRIER_INPUT,
+ RECTIFY_INPUT,
+ DRYWET_INPUT,
+ NUM_INPUTS
+ };
+
+ enum OutputsIds {
+ OUT_OUTPUT,
+ RECTIFY_OUTPUT,
+ NUM_OUTPUTS
+ };
+
+ enum LightsIds {
+ NUM_LIGHTS
+ };
+
+ Saturator _saturator;
+
+ AMRM() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {
+ }
+
+ void step() override;
+};
+
+} // namespace bogaudio
diff --git a/src/RM.cpp b/src/RM.cpp
@@ -1,75 +0,0 @@
-
-#include "RM.hpp"
-
-void RM::step() {
- if (!(outputs[OUT_OUTPUT].active && (inputs[MODULATOR_INPUT].active || inputs[CARRIER_INPUT].active))) {
- return;
- }
- if (inputs[MODULATOR_INPUT].active != inputs[CARRIER_INPUT].active) {
- if (inputs[MODULATOR_INPUT].active) {
- outputs[OUT_OUTPUT].value = inputs[MODULATOR_INPUT].value;
- }
- else {
- outputs[OUT_OUTPUT].value = inputs[CARRIER_INPUT].value;
- }
- return;
- }
-
- float modulator = inputs[MODULATOR_INPUT].value;
- modulator *= params[MODULATOR_DEPTH_PARAM].value;
- if (inputs[MODULATOR_DEPTH_INPUT].active) {
- modulator *= clamp(inputs[MODULATOR_DEPTH_INPUT].value / 10.0f, 0.0f, 1.0f);
- }
-
- float carrier = inputs[CARRIER_INPUT].value;
-
- float mix = params[MIX_PARAM].value;
- if (inputs[MIX_INPUT].active) {
- mix *= clamp(inputs[MIX_INPUT].value / 5.0f, -1.0f, 1.0f);
- }
- _mix.setParams(mix, 0.889f, false);
-
- outputs[OUT_OUTPUT].value = _mix.next(carrier, modulator * carrier * 0.2f);
-}
-
-struct RMWidget : ModuleWidget {
- static constexpr int hp = 3;
-
- RMWidget(RM* 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/RM.svg")));
- addChild(panel);
- }
-
- addChild(Widget::create<ScrewSilver>(Vec(0, 0)));
- addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 15, 365)));
-
- // generated by svg_widgets.rb
- auto modulatorDepthParamPosition = Vec(8.0, 36.0);
- auto mixParamPosition = Vec(8.0, 142.0);
-
- auto modulatorDepthInputPosition = Vec(10.5, 77.0);
- auto mixInputPosition = Vec(10.5, 183.0);
- auto modulatorInputPosition = Vec(10.5, 233.0);
- auto carrierInputPosition = Vec(10.5, 268.0);
-
- auto outOutputPosition = Vec(10.5, 306.0);
- // end generated by svg_widgets.rb
-
- addParam(ParamWidget::create<Knob29>(modulatorDepthParamPosition, module, RM::MODULATOR_DEPTH_PARAM, 0.0, 1.0, 1.0));
- addParam(ParamWidget::create<Knob29>(mixParamPosition, module, RM::MIX_PARAM, -1.0, 1.0, 1.0));
-
- addInput(Port::create<Port24>(modulatorInputPosition, Port::INPUT, module, RM::MODULATOR_INPUT));
- addInput(Port::create<Port24>(carrierInputPosition, Port::INPUT, module, RM::CARRIER_INPUT));
- addInput(Port::create<Port24>(modulatorDepthInputPosition, Port::INPUT, module, RM::MODULATOR_DEPTH_INPUT));
- addInput(Port::create<Port24>(mixInputPosition, Port::INPUT, module, RM::MIX_INPUT));
-
- addOutput(Port::create<Port24>(outOutputPosition, Port::OUTPUT, module, RM::OUT_OUTPUT));
- }
-};
-
-Model* modelRM = createModel<RM, RMWidget>("Bogaudio-RM", "RM", "ring modulator", RING_MODULATOR_TAG);
diff --git a/src/RM.hpp b/src/RM.hpp
@@ -1,44 +0,0 @@
-#pragma once
-
-#include "bogaudio.hpp"
-#include "dsp/signal.hpp"
-
-using namespace bogaudio::dsp;
-
-extern Model* modelRM;
-
-namespace bogaudio {
-
-struct RM : Module {
- enum ParamsIds {
- MODULATOR_DEPTH_PARAM,
- MIX_PARAM,
- NUM_PARAMS
- };
-
- enum InputsIds {
- MODULATOR_INPUT,
- CARRIER_INPUT,
- MODULATOR_DEPTH_INPUT,
- MIX_INPUT,
- NUM_INPUTS
- };
-
- enum OutputsIds {
- OUT_OUTPUT,
- NUM_OUTPUTS
- };
-
- enum LightsIds {
- NUM_LIGHTS
- };
-
- CrossFader _mix;
-
- RM() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {
- }
-
- void step() override;
-};
-
-} // namespace bogaudio
diff --git a/src/bogaudio.cpp b/src/bogaudio.cpp
@@ -4,6 +4,7 @@
#include "AD.hpp"
#include "ADSR.hpp"
#include "Additator.hpp"
+#include "AMRM.hpp"
#include "Analyzer.hpp"
#include "Bool.hpp"
#include "CVD.hpp"
@@ -25,7 +26,6 @@
#include "Noise.hpp"
#include "Offset.hpp"
#include "Pan.hpp"
-#include "RM.hpp"
#include "Reftone.hpp"
#include "SampleHold.hpp"
#include "Shaper.hpp"
@@ -88,6 +88,10 @@ void init(rack::Plugin *p) {
p->addModel(modelVCA);
p->addModel(modelVCAmp);
+#ifdef EXPERIMENTAL
+ p->addModel(modelAMRM);
+#endif
+
p->addModel(modelAnalyzer);
p->addModel(modelVU);
@@ -108,7 +112,6 @@ void init(rack::Plugin *p) {
#ifdef EXPERIMENTAL
p->addModel(modelLag);
- p->addModel(modelRM);
#endif
#ifdef TEST
diff --git a/src/widgets.cpp b/src/widgets.cpp
@@ -43,6 +43,10 @@ Knob38::Knob38() : BGKnob("res/knob_38px.svg", 38) {
}
+Knob45::Knob45() : BGKnob("res/knob_45px.svg", 45) {
+}
+
+
Knob68::Knob68() : BGKnob("res/knob_68px.svg", 68) {
shadow->box.pos = Vec(0.0, 4.0);
}
diff --git a/src/widgets.hpp b/src/widgets.hpp
@@ -34,6 +34,10 @@ struct Knob38 : BGKnob {
Knob38();
};
+struct Knob45 : BGKnob {
+ Knob45();
+};
+
struct Knob68 : BGKnob {
Knob68();
};