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:
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 {