|
-
- #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));
- }
- };
-
- RACK_PLUGIN_MODEL_INIT(Bogaudio, RM) {
- Model *modelRM = createModel<RM, RMWidget>("Bogaudio-RM", "RM", "ring modulator", RING_MODULATOR_TAG);
- return modelRM;
- }
|