diff options
| author | s-ol <s-ol@users.noreply.github.com> | 2017-12-01 00:24:32 +0000 |
|---|---|---|
| committer | s-ol <s-ol@users.noreply.github.com> | 2017-12-01 00:24:32 +0000 |
| commit | 617af54c62f31a1238729e25f18cfc455944d005 (patch) | |
| tree | f7374dad0001dfe5ed0dd53e696045c79b96f0a4 /src/Modulo.cpp | |
| download | vcvmods-617af54c62f31a1238729e25f18cfc455944d005.tar.gz vcvmods-617af54c62f31a1238729e25f18cfc455944d005.zip | |
initial commit
Diffstat (limited to 'src/Modulo.cpp')
| -rw-r--r-- | src/Modulo.cpp | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/Modulo.cpp b/src/Modulo.cpp new file mode 100644 index 0000000..8b2cb6a --- /dev/null +++ b/src/Modulo.cpp @@ -0,0 +1,56 @@ +#include "s-ol.hpp" + +struct Modulo : Module { + enum ParamIds { + GAIN_PARAM, + NUM_PARAMS + }; + enum InputIds { + SIGNAL_INPUT, + NUM_INPUTS + }; + enum OutputIds { + STAIR_OUTPUT, + WRAP_OUTPUT, + NUM_OUTPUTS + }; + enum LightIds { + NUM_LIGHTS + }; + + Modulo() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} + void step() override; +}; + + +void Modulo::step() { + float gain = powf(2.0, params[GAIN_PARAM].value); + float val = inputs[SIGNAL_INPUT].value * gain; + float stair = floorf(val); + float wrap = val - stair; + + outputs[STAIR_OUTPUT].value = stair / gain;; + outputs[WRAP_OUTPUT].value = wrap * 5; +} + + +ModuloWidget::ModuloWidget() { + Modulo *module = new Modulo(); + setModule(module); + setPanel(SVG::load(assetPlugin(plugin, "res/Modulo.svg"))); + + addChild(createScrew<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); + addChild(createScrew<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); + + PJ301MPort p; + Davies1900hBlackKnob k; + Vec center = Vec(box.size.x, 0).minus(p.box.size).div(2); + Vec kcenter = Vec(box.size.x, 0).minus(k.box.size).div(2); + + addParam(createParam<Davies1900hBlackKnob>(kcenter.plus(Vec(0, 90)), module, Modulo::GAIN_PARAM, -3.0, 3.0, 0.0)); + + addInput(createInput<PJ301MPort>(center.plus(Vec(0, 145)), module, Modulo::SIGNAL_INPUT)); + + addOutput(createOutput<PJ301MPort>(center.plus(Vec(0, 275)), module, Modulo::STAIR_OUTPUT)); + addOutput(createOutput<PJ301MPort>(center.plus(Vec(0, 347)), module, Modulo::WRAP_OUTPUT)); +} |
