BogaudioModules

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

commit d01f393f2567f96f4415e809da6d385ef5490f1f
parent af8986180c0c4847c0039bd666099ffbd12b57d2
Author: Matt Demanett <matt@demanett.net>
Date:   Fri, 25 Nov 2022 18:49:11 -0500

SWITCH18, MATRIX18: add output clipping options. #210

Diffstat:
Msrc/matrix_base.cpp | 29++++++++++++-----------------
Msrc/matrix_base.hpp | 2+-
2 files changed, 13 insertions(+), 18 deletions(-)

diff --git a/src/matrix_base.cpp b/src/matrix_base.cpp @@ -44,12 +44,14 @@ 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); + if (!m->_singleInput) { + 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; })); @@ -57,7 +59,9 @@ void MatrixBaseModuleWidget::contextMenu(Menu* menu) { c->addItem(OptionMenuItem("None", [m]() { return m->_clippingMode == MatrixBaseModule::NO_CLIPPING; }, [m]() { m->_clippingMode = MatrixBaseModule::NO_CLIPPING; })); OptionsMenuItem::addToMenu(c, menu); - menu->addChild(new OptionMenuItem("Average", [m]() { return !m->_sum; }, [m]() { m->_sum = !m->_sum; })); + if (!m->_singleInput) { + 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) { @@ -73,6 +77,7 @@ void MatrixModule::configMatrixModule(int ins, int outs, int firstParamID, int f _sls = new bogaudio::dsp::SlewLimiter[_ins * _outs]; _saturators = new Saturator[_outs * maxChannels]; _inActive = new bool[_ins] {}; + _singleInput = _ins <= 1; } void MatrixModule::sampleRateChange() { @@ -167,16 +172,6 @@ void MatrixModule::processChannel(const ProcessArgs& args, int c) { } -void MatrixModuleWidget::contextMenu(Menu* menu) { - auto m = dynamic_cast<MatrixModule*>(module); - assert(m); - - if (m->_ins > 1) { - MatrixBaseModuleWidget::contextMenu(menu); - } -} - - #define INDICATOR_KNOBS "indicator_knobs" #define UNIPOLAR "unipolar" diff --git a/src/matrix_base.hpp b/src/matrix_base.hpp @@ -20,6 +20,7 @@ struct MatrixBaseModule : BGModule { float _inputGainDb = 0.0f; float _inputGainLevel = 1.0f; bool _sum = true; + bool _singleInput = false; json_t* saveToJson(json_t* root) override; void loadFromJson(json_t* root) override; @@ -69,7 +70,6 @@ struct MatrixModule : MatrixBaseModule { }; struct MatrixModuleWidget : MatrixBaseModuleWidget { - void contextMenu(Menu* menu) override; }; struct KnobMatrixModule : MatrixModule {