#include "Befaco.hpp" struct Mixer : Module { enum ParamIds { CH1_PARAM, CH2_PARAM, CH3_PARAM, CH4_PARAM, NUM_PARAMS }; enum InputIds { IN1_INPUT, IN2_INPUT, IN3_INPUT, IN4_INPUT, NUM_INPUTS }; enum OutputIds { OUT1_OUTPUT, OUT2_OUTPUT, NUM_OUTPUTS }; enum LightIds { OUT_POS_LIGHT, OUT_NEG_LIGHT, NUM_LIGHTS }; Mixer() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} void step() override; }; void Mixer::step() { float in1 = inputs[IN1_INPUT].value * params[CH1_PARAM].value; float in2 = inputs[IN2_INPUT].value * params[CH2_PARAM].value; float in3 = inputs[IN3_INPUT].value * params[CH3_PARAM].value; float in4 = inputs[IN4_INPUT].value * params[CH4_PARAM].value; float out = in1 + in2 + in3 + in4; outputs[OUT1_OUTPUT].value = out; outputs[OUT2_OUTPUT].value = -out; lights[OUT_POS_LIGHT].setBrightnessSmooth(out / 5.0); lights[OUT_NEG_LIGHT].setBrightnessSmooth(-out / 5.0); } struct MixerWidget : ModuleWidget { MixerWidget(Mixer *module) : ModuleWidget(module) { setPanel(SVG::load(assetPlugin(plugin, "res/Mixer.svg"))); addChild(Widget::create(Vec(15, 0))); addChild(Widget::create(Vec(15, 365))); addParam(ParamWidget::create(Vec(19, 32), module, Mixer::CH1_PARAM, 0.0, 1.0, 0.0)); addParam(ParamWidget::create(Vec(19, 85), module, Mixer::CH2_PARAM, 0.0, 1.0, 0.0)); addParam(ParamWidget::create(Vec(19, 137), module, Mixer::CH3_PARAM, 0.0, 1.0, 0.0)); addParam(ParamWidget::create(Vec(19, 190), module, Mixer::CH4_PARAM, 0.0, 1.0, 0.0)); addInput(Port::create(Vec(7, 242), Port::INPUT, module, Mixer::IN1_INPUT)); addInput(Port::create(Vec(43, 242), Port::INPUT, module, Mixer::IN2_INPUT)); addInput(Port::create(Vec(7, 281), Port::INPUT, module, Mixer::IN3_INPUT)); addInput(Port::create(Vec(43, 281), Port::INPUT, module, Mixer::IN4_INPUT)); addOutput(Port::create(Vec(7, 324), Port::OUTPUT, module, Mixer::OUT1_OUTPUT)); addOutput(Port::create(Vec(43, 324), Port::OUTPUT, module, Mixer::OUT2_OUTPUT)); addChild(ModuleLightWidget::create>(Vec(32.7, 310), module, Mixer::OUT_POS_LIGHT)); } }; RACK_PLUGIN_MODEL_INIT(Befaco, Mixer) { Model *modelMixer = Model::create("Befaco", "Mixer", "Mixer", MIXER_TAG); return modelMixer; }