#include "Mute8.hpp" #include "mixer.hpp" const float Mute8::maxDecibels = 0.0f; const float Mute8::minDecibels = Amplifier::minDecibels; const float Mute8::slewTimeMS = 5.0f; void Mute8::onReset() { for (int i = 0; i < 8; ++i) { _triggers[i].reset(); } } void Mute8::onSampleRateChange() { float sampleRate = engineGetSampleRate(); for (int i = 0; i < 8; ++i) { _slewLimiters[i].setParams(sampleRate, slewTimeMS, maxDecibels - minDecibels); } } void Mute8::step() { bool solo = false; for (int i = 0; i < 8; ++i) { solo = solo || params[MUTE1_PARAM + i].value > 1.5f; } for (int i = 0; i < 8; ++i) { stepChannel(i, solo); } } void Mute8::stepChannel(int i, bool solo) { _triggers[i].process(inputs[MUTE1_INPUT + i].value); bool muted = solo ? params[MUTE1_PARAM + i].value < 2.0f : (params[MUTE1_PARAM + i].value > 0.5f || _triggers[i].isHigh()); if (muted) { lights[MUTE1_LIGHT + i].value = 1.0f; _amplifiers[i].setLevel(_slewLimiters[i].next(minDecibels)); } else { lights[MUTE1_LIGHT + i].value = 0.0f; _amplifiers[i].setLevel(_slewLimiters[i].next(maxDecibels)); } outputs[OUTPUT1_OUTPUT + i].value = _amplifiers[i].next(inputs[INPUT1_INPUT + i].active ? inputs[INPUT1_INPUT + i].value : 5.0f); } struct Mute8Widget : ModuleWidget { static constexpr int hp = 10; Mute8Widget(Mute8* 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/Mute8.svg"))); addChild(panel); } addChild(Widget::create(Vec(0, 0))); addChild(Widget::create(Vec(box.size.x - 15, 0))); addChild(Widget::create(Vec(0, 365))); addChild(Widget::create(Vec(box.size.x - 15, 365))); // generated by svg_widgets.rb auto mute1ParamPosition = Vec(78.2, 40.7); auto mute2ParamPosition = Vec(78.2, 80.7); auto mute3ParamPosition = Vec(78.2, 120.7); auto mute4ParamPosition = Vec(78.2, 160.7); auto mute5ParamPosition = Vec(78.2, 200.7); auto mute6ParamPosition = Vec(78.2, 240.7); auto mute7ParamPosition = Vec(78.2, 280.7); auto mute8ParamPosition = Vec(78.2, 318.7); auto input1InputPosition = Vec(11.0, 36.0); auto input2InputPosition = Vec(11.0, 76.0); auto input3InputPosition = Vec(11.0, 116.0); auto input4InputPosition = Vec(11.0, 156.0); auto input5InputPosition = Vec(11.0, 196.0); auto input6InputPosition = Vec(11.0, 236.0); auto input7InputPosition = Vec(11.0, 276.0); auto input8InputPosition = Vec(11.0, 316.0); auto mute1InputPosition = Vec(46.0, 36.0); auto mute2InputPosition = Vec(46.0, 76.0); auto mute3InputPosition = Vec(46.0, 116.0); auto mute4InputPosition = Vec(46.0, 156.0); auto mute5InputPosition = Vec(46.0, 196.0); auto mute6InputPosition = Vec(46.0, 236.0); auto mute7InputPosition = Vec(46.0, 276.0); auto mute8InputPosition = Vec(46.0, 316.0); auto output1OutputPosition = Vec(115.0, 36.0); auto output2OutputPosition = Vec(115.0, 76.0); auto output3OutputPosition = Vec(115.0, 116.0); auto output4OutputPosition = Vec(115.0, 156.0); auto output5OutputPosition = Vec(115.0, 196.0); auto output6OutputPosition = Vec(115.0, 236.0); auto output7OutputPosition = Vec(115.0, 276.0); auto output8OutputPosition = Vec(115.0, 316.0); auto mute1LightPosition = Vec(100.5, 46.8); auto mute2LightPosition = Vec(100.5, 86.8); auto mute3LightPosition = Vec(100.5, 126.8); auto mute4LightPosition = Vec(100.5, 166.8); auto mute5LightPosition = Vec(100.5, 206.8); auto mute6LightPosition = Vec(100.5, 246.8); auto mute7LightPosition = Vec(100.5, 286.8); auto mute8LightPosition = Vec(100.5, 324.8); // end generated by svg_widgets.rb addParam(ParamWidget::create(mute1ParamPosition, module, Mute8::MUTE1_PARAM, 0.0, 3.0, 0.0)); addParam(ParamWidget::create(mute2ParamPosition, module, Mute8::MUTE2_PARAM, 0.0, 3.0, 0.0)); addParam(ParamWidget::create(mute3ParamPosition, module, Mute8::MUTE3_PARAM, 0.0, 3.0, 0.0)); addParam(ParamWidget::create(mute4ParamPosition, module, Mute8::MUTE4_PARAM, 0.0, 3.0, 0.0)); addParam(ParamWidget::create(mute5ParamPosition, module, Mute8::MUTE5_PARAM, 0.0, 3.0, 0.0)); addParam(ParamWidget::create(mute6ParamPosition, module, Mute8::MUTE6_PARAM, 0.0, 3.0, 0.0)); addParam(ParamWidget::create(mute7ParamPosition, module, Mute8::MUTE7_PARAM, 0.0, 3.0, 0.0)); addParam(ParamWidget::create(mute8ParamPosition, module, Mute8::MUTE8_PARAM, 0.0, 3.0, 0.0)); addInput(Port::create(input1InputPosition, Port::INPUT, module, Mute8::INPUT1_INPUT)); addInput(Port::create(input2InputPosition, Port::INPUT, module, Mute8::INPUT2_INPUT)); addInput(Port::create(input3InputPosition, Port::INPUT, module, Mute8::INPUT3_INPUT)); addInput(Port::create(input4InputPosition, Port::INPUT, module, Mute8::INPUT4_INPUT)); addInput(Port::create(input5InputPosition, Port::INPUT, module, Mute8::INPUT5_INPUT)); addInput(Port::create(input6InputPosition, Port::INPUT, module, Mute8::INPUT6_INPUT)); addInput(Port::create(input7InputPosition, Port::INPUT, module, Mute8::INPUT7_INPUT)); addInput(Port::create(input8InputPosition, Port::INPUT, module, Mute8::INPUT8_INPUT)); addInput(Port::create(mute1InputPosition, Port::INPUT, module, Mute8::MUTE1_INPUT)); addInput(Port::create(mute2InputPosition, Port::INPUT, module, Mute8::MUTE2_INPUT)); addInput(Port::create(mute3InputPosition, Port::INPUT, module, Mute8::MUTE3_INPUT)); addInput(Port::create(mute4InputPosition, Port::INPUT, module, Mute8::MUTE4_INPUT)); addInput(Port::create(mute5InputPosition, Port::INPUT, module, Mute8::MUTE5_INPUT)); addInput(Port::create(mute6InputPosition, Port::INPUT, module, Mute8::MUTE6_INPUT)); addInput(Port::create(mute7InputPosition, Port::INPUT, module, Mute8::MUTE7_INPUT)); addInput(Port::create(mute8InputPosition, Port::INPUT, module, Mute8::MUTE8_INPUT)); addOutput(Port::create(output1OutputPosition, Port::OUTPUT, module, Mute8::OUTPUT1_OUTPUT)); addOutput(Port::create(output2OutputPosition, Port::OUTPUT, module, Mute8::OUTPUT2_OUTPUT)); addOutput(Port::create(output3OutputPosition, Port::OUTPUT, module, Mute8::OUTPUT3_OUTPUT)); addOutput(Port::create(output4OutputPosition, Port::OUTPUT, module, Mute8::OUTPUT4_OUTPUT)); addOutput(Port::create(output5OutputPosition, Port::OUTPUT, module, Mute8::OUTPUT5_OUTPUT)); addOutput(Port::create(output6OutputPosition, Port::OUTPUT, module, Mute8::OUTPUT6_OUTPUT)); addOutput(Port::create(output7OutputPosition, Port::OUTPUT, module, Mute8::OUTPUT7_OUTPUT)); addOutput(Port::create(output8OutputPosition, Port::OUTPUT, module, Mute8::OUTPUT8_OUTPUT)); addChild(ModuleLightWidget::create>(mute1LightPosition, module, Mute8::MUTE1_LIGHT)); addChild(ModuleLightWidget::create>(mute2LightPosition, module, Mute8::MUTE2_LIGHT)); addChild(ModuleLightWidget::create>(mute3LightPosition, module, Mute8::MUTE3_LIGHT)); addChild(ModuleLightWidget::create>(mute4LightPosition, module, Mute8::MUTE4_LIGHT)); addChild(ModuleLightWidget::create>(mute5LightPosition, module, Mute8::MUTE5_LIGHT)); addChild(ModuleLightWidget::create>(mute6LightPosition, module, Mute8::MUTE6_LIGHT)); addChild(ModuleLightWidget::create>(mute7LightPosition, module, Mute8::MUTE7_LIGHT)); addChild(ModuleLightWidget::create>(mute8LightPosition, module, Mute8::MUTE8_LIGHT)); } }; RACK_PLUGIN_MODEL_INIT(Bogaudio, Mute8) { Model *modelMute8 = createModel("Bogaudio-Mute8", "Mute8", "eight mutes with CV", UTILITY_TAG); return modelMute8; }