#include "dsp/digital.hpp" #include "qwelk.hpp" namespace rack_plugin_Qwelk { struct ModuleScaler : Module { enum ParamIds { NUM_PARAMS }; enum InputIds { INPUT_SUB_5, INPUT_MUL_2, INPUT_DIV_2, INPUT_ADD_5, NUM_INPUTS }; enum OutputIds { OUTPUT_SUB_5, OUTPUT_MUL_2, OUTPUT_DIV_2, OUTPUT_ADD_5, NUM_OUTPUTS }; enum LightIds { NUM_LIGHTS }; ModuleScaler() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} void step() override; }; void ModuleScaler::step() { outputs[OUTPUT_SUB_5].value = inputs[INPUT_SUB_5].value - 5.0; outputs[OUTPUT_MUL_2].value = inputs[INPUT_MUL_2].normalize(outputs[OUTPUT_SUB_5].value) * 2.0; outputs[OUTPUT_DIV_2].value = inputs[INPUT_DIV_2].normalize(outputs[OUTPUT_MUL_2].value) * 0.5; outputs[OUTPUT_ADD_5].value = inputs[INPUT_ADD_5].normalize(outputs[OUTPUT_DIV_2].value) + 5.0; } struct WidgetScaler : ModuleWidget { WidgetScaler(ModuleScaler *module); }; WidgetScaler::WidgetScaler(ModuleScaler *module) : ModuleWidget(module) { setPanel(SVG::load(assetPlugin(plugin, "res/Scaler.svg"))); addChild(Widget::create(Vec(15, 0))); addChild(Widget::create(Vec(15, 365))); float x = box.size.x / 2.0 - 12, y = 0, ytop = 30, ystep = 30, mstep = 16; addInput(Port::create( Vec(x, ytop + (y+=ystep)), Port::INPUT, module, ModuleScaler::INPUT_SUB_5)); addOutput(Port::create( Vec(x, ytop + (y+=ystep)), Port::OUTPUT, module, ModuleScaler::OUTPUT_SUB_5)); ytop += mstep; addInput(Port::create( Vec(x, ytop + (y+=ystep)), Port::INPUT, module, ModuleScaler::INPUT_MUL_2)); addOutput(Port::create( Vec(x, ytop + (y+=ystep)), Port::OUTPUT, module, ModuleScaler::OUTPUT_MUL_2)); ytop += mstep; addInput(Port::create( Vec(x, ytop + (y+=ystep)), Port::INPUT, module, ModuleScaler::INPUT_DIV_2)); addOutput(Port::create( Vec(x, ytop + (y+=ystep)), Port::OUTPUT, module, ModuleScaler::OUTPUT_DIV_2)); ytop += mstep; addInput(Port::create( Vec(x, ytop + (y+=ystep)), Port::INPUT, module, ModuleScaler::INPUT_ADD_5)); addOutput(Port::create( Vec(x, ytop + (y+=ystep)), Port::OUTPUT, module, ModuleScaler::OUTPUT_ADD_5)); } } // namespace rack_plugin_Qwelk using namespace rack_plugin_Qwelk; RACK_PLUGIN_MODEL_INIT(Qwelk, Scaler) { Model *modelScaler = Model::create( TOSTRING(SLUG), "Scaler", "Scaler", UTILITY_TAG); return modelScaler; }