BogaudioModules

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

commit 14e24d219447c3b820e9a866a195db6cbf6e5731
parent 76925a7bea9e2b21feab5fb85c365a877ca5e426
Author: Matt Demanett <matt@demanett.net>
Date:   Sat, 24 Oct 2020 19:26:14 -0400

Merge pull request #152 from hostaboat/master

Revive context menus for UMIX & MUMIX.
Diffstat:
Msrc/UMix.cpp | 34+++++++++++-----------------------
Msrc/matrix_base.cpp | 32+++++++++++++++++++-------------
Msrc/matrix_base.hpp | 1+
3 files changed, 31 insertions(+), 36 deletions(-)

diff --git a/src/UMix.cpp b/src/UMix.cpp @@ -12,10 +12,17 @@ int UMix::channels() { void UMix::processChannel(const ProcessArgs& args, int c) { outputs[OUT_OUTPUT].setChannels(_channels); - if (_sum) { - float out = 0.0f; - for (int i = 0; i < 8; ++i) { + float out = 0.0f; + int active = 0; + for (int i = 0; i < NUM_INPUTS; i++) { + if (inputs[IN1_INPUT + i].isConnected()) { out += _inputGainLevel * inputs[IN1_INPUT + i].getPolyVoltage(c); + ++active; + } + } + if (active > 0) { + if (!_sum) { + out /= (float)active; } if (_clippingMode == HARD_CLIPPING) { outputs[OUT_OUTPUT].setVoltage(clamp(out, -12.0f, 12.0f), c); @@ -25,26 +32,7 @@ void UMix::processChannel(const ProcessArgs& args, int c) { } } else { - float out = 0.0f; - int active = 0; - for (int i = 0; i < 8; ++i) { - if (inputs[IN1_INPUT + i].isConnected()) { - out += _inputGainLevel * inputs[IN1_INPUT + i].getPolyVoltage(c); - ++active; - } - } - if (active > 0) { - out /= (float)active; - if (_clippingMode == HARD_CLIPPING) { - outputs[OUT_OUTPUT].setVoltage(clamp(out, -12.0f, 12.0f), c); - } - else { - outputs[OUT_OUTPUT].setVoltage(_saturator[c].next(out), c); - } - } - else { - outputs[OUT_OUTPUT].setVoltage(0.0f, c); - } + outputs[OUT_OUTPUT].setVoltage(0.0f, c); } } diff --git a/src/matrix_base.cpp b/src/matrix_base.cpp @@ -40,6 +40,24 @@ void MatrixBaseModule::modulate() { _inputGainLevel = decibelsToAmplitude(_inputGainDb); } +void MatrixBaseModuleWidget::contextMenu(Menu* menu) { + auto m = dynamic_cast<MatrixBaseModule*>(module); + assert(m); + + OptionsMenuItem* g = new OptionsMenuItem("Input gain"); + g->addItem(OptionMenuItem("Unity", [m]() { return (int)m->_inputGainDb == 0; }, [m]() { m->_inputGainDb = 0.0f; })); + g->addItem(OptionMenuItem("-3db", [m]() { return (int)m->_inputGainDb == -3; }, [m]() { m->_inputGainDb = -3.0f; })); + g->addItem(OptionMenuItem("-6db", [m]() { return (int)m->_inputGainDb == -6; }, [m]() { m->_inputGainDb = -6.0f; })); + g->addItem(OptionMenuItem("-12db", [m]() { return (int)m->_inputGainDb == -12; }, [m]() { m->_inputGainDb = -12.0f; })); + OptionsMenuItem::addToMenu(g, menu); + + OptionsMenuItem* c = new OptionsMenuItem("Output clipping"); + c->addItem(OptionMenuItem("Soft/saturated (better for audio)", [m]() { return m->_clippingMode == MatrixBaseModule::SOFT_CLIPPING; }, [m]() { m->_clippingMode = MatrixBaseModule::SOFT_CLIPPING; })); + c->addItem(OptionMenuItem("Hard/clipped (better for CV)", [m]() { return m->_clippingMode == MatrixBaseModule::HARD_CLIPPING; }, [m]() { m->_clippingMode = MatrixBaseModule::HARD_CLIPPING; })); + OptionsMenuItem::addToMenu(c, menu); + + menu->addChild(new OptionMenuItem("Average", [m]() { return !m->_sum; }, [m]() { m->_sum = !m->_sum; })); +} void MatrixModule::configMatrixModule(int ins, int outs, int firstParamID, int firstInputID, int firstOutputID) { assert(!_paramValues && !_sls && !_saturators && !_inActive); @@ -153,19 +171,7 @@ void MatrixModuleWidget::contextMenu(Menu* menu) { assert(m); if (m->_ins > 1) { - OptionsMenuItem* g = new OptionsMenuItem("Input gain"); - g->addItem(OptionMenuItem("Unity", [m]() { return (int)m->_inputGainDb == 0; }, [m]() { m->_inputGainDb = 0.0f; })); - g->addItem(OptionMenuItem("-3db", [m]() { return (int)m->_inputGainDb == -3; }, [m]() { m->_inputGainDb = -3.0f; })); - g->addItem(OptionMenuItem("-6db", [m]() { return (int)m->_inputGainDb == -6; }, [m]() { m->_inputGainDb = -6.0f; })); - g->addItem(OptionMenuItem("-12db", [m]() { return (int)m->_inputGainDb == -12; }, [m]() { m->_inputGainDb = -12.0f; })); - OptionsMenuItem::addToMenu(g, menu); - - OptionsMenuItem* c = new OptionsMenuItem("Output clipping"); - c->addItem(OptionMenuItem("Soft/saturated (better for audio)", [m]() { return m->_clippingMode == MatrixBaseModule::SOFT_CLIPPING; }, [m]() { m->_clippingMode = MatrixBaseModule::SOFT_CLIPPING; })); - c->addItem(OptionMenuItem("Hard/clipped (better for CV)", [m]() { return m->_clippingMode == MatrixBaseModule::HARD_CLIPPING; }, [m]() { m->_clippingMode = MatrixBaseModule::HARD_CLIPPING; })); - OptionsMenuItem::addToMenu(c, menu); - - menu->addChild(new OptionMenuItem("Average", [m]() { return !m->_sum; }, [m]() { m->_sum = !m->_sum; })); + MatrixBaseModuleWidget::contextMenu(menu); } } diff --git a/src/matrix_base.hpp b/src/matrix_base.hpp @@ -26,6 +26,7 @@ struct MatrixBaseModule : BGModule { }; struct MatrixBaseModuleWidget : BGModuleWidget { + void contextMenu(Menu* menu) override; }; struct MatrixModule : MatrixBaseModule {