commit 5e9336369625713240618d893496269dfb1f9ad4
parent 6286ed9e1a5dea07608f3add8c9e32366caae2ac
Author: Matt Demanett <matt@demanett.net>
Date: Sun, 17 Jun 2018 23:13:51 -0400
Offset: change output limit to +/-12. Add context menu option to disable limit.
Diffstat:
2 files changed, 52 insertions(+), 6 deletions(-)
diff --git a/src/Offset.cpp b/src/Offset.cpp
@@ -1,17 +1,34 @@
#include "Offset.hpp"
+#define DISABLE_OUTPUT_LIMIT "disableOutputLimit"
+
+json_t* Offset::toJson() {
+ json_t* root = json_object();
+ json_object_set_new(root, DISABLE_OUTPUT_LIMIT, json_boolean(_disableOutputLimit));
+ return root;
+}
+
+void Offset::fromJson(json_t* root) {
+ json_t* dol = json_object_get(root, DISABLE_OUTPUT_LIMIT);
+ if (dol) {
+ _disableOutputLimit = json_is_true(dol);
+ }
+}
+
void Offset::step() {
float offset = knobValue(params[OFFSET_PARAM], inputs[OFFSET_INPUT]);
float scale = knobValue(params[SCALE_PARAM], inputs[SCALE_INPUT]);
- scale = scale < 0.0 ? -pow(scale, 2.0) : pow(scale, 2.0);
+ scale = scale < 0.0f ? -pow(scale, 2.0f) : pow(scale, 2.0f);
scale *= 10.0;
- if (inputs[IN_INPUT].active) {
- outputs[OUT_OUTPUT].value = clamp((inputs[IN_INPUT].value + 10.0f * offset) * scale, -10.0f, 10.0f);
- }
- else {
- outputs[OUT_OUTPUT].value = clamp(10.0f * offset * scale, -10.0f, 10.0f);
+
+ float out = inputs[IN_INPUT].value;
+ out += 10.0f * offset;
+ out *= scale;
+ if (!_disableOutputLimit) {
+ out = clamp(out, -12.0f, 12.0f);
}
+ outputs[OUT_OUTPUT].value = out;
}
float Offset::knobValue(const Param& knob, const Input& cv) const {
@@ -22,6 +39,24 @@ float Offset::knobValue(const Param& knob, const Input& cv) const {
return v;
}
+struct DisableOutputLimitMenuItem : MenuItem {
+ Offset* _module;
+
+ DisableOutputLimitMenuItem(Offset* module, const char* label)
+ : _module(module)
+ {
+ this->text = label;
+ }
+
+ void onAction(EventAction &e) override {
+ _module->_disableOutputLimit = !_module->_disableOutputLimit;
+ }
+
+ void step() override {
+ rightText = _module->_disableOutputLimit ? "✔" : "";
+ }
+};
+
struct OffsetWidget : ModuleWidget {
static constexpr int hp = 3;
@@ -58,6 +93,13 @@ struct OffsetWidget : ModuleWidget {
addOutput(Port::create<Port24>(outOutputPosition, Port::OUTPUT, module, Offset::OUT_OUTPUT));
}
+
+ void appendContextMenu(Menu* menu) override {
+ Offset* offset = dynamic_cast<Offset*>(module);
+ assert(offset);
+ menu->addChild(new MenuLabel());
+ menu->addChild(new DisableOutputLimitMenuItem(offset, "Diable Output Limit"));
+ }
};
Model* modelOffset = createModel<Offset, OffsetWidget>("Bogaudio-Offset", "Offset", "CV offset and scaler", ATTENUATOR_TAG);
diff --git a/src/Offset.hpp b/src/Offset.hpp
@@ -25,8 +25,12 @@ struct Offset : Module {
NUM_OUTPUTS
};
+ bool _disableOutputLimit = false;
+
Offset() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS) {}
+ json_t* toJson() override;
+ void fromJson(json_t* root) override;
void step() override;
float knobValue(const Param& knob, const Input& cv) const;