BogaudioModules

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

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:
Ares-src/AMRM-src.svg | 132+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dres-src/RM-src.svg | 134-------------------------------------------------------------------------------
Ares-src/knob_45px-src.svg | 14++++++++++++++
Ares/AMRM.svg | 0
Dres/RM.svg | 0
Ares/knob_45px.svg | 0
Asrc/AMRM.cpp | 75+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/AMRM.hpp | 45+++++++++++++++++++++++++++++++++++++++++++++
Dsrc/RM.cpp | 75---------------------------------------------------------------------------
Dsrc/RM.hpp | 44--------------------------------------------
Msrc/bogaudio.cpp | 7+++++--
Msrc/widgets.cpp | 4++++
Msrc/widgets.hpp | 4++++
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(); };