update to rack v1 compat
s-ol
3 years ago
22 | 22 | |
23 | 23 | CircleVCO() { |
24 | 24 | config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); |
25 | configParam(PITCH_PARAM, -54.0f, 54.0f, 0.0f); | |
25 | 26 | } |
26 | void step() override; | |
27 | void process(const ProcessArgs &args) override; | |
27 | 28 | }; |
28 | 29 | |
29 | 30 | |
30 | void CircleVCO::step() { | |
31 | float deltaTime = 1.0f / engineGetSampleRate(); | |
31 | void CircleVCO::process(const ProcessArgs &args) { | |
32 | float deltaTime = 1.0f / args.sampleRate; | |
32 | 33 | |
33 | float pitch = params[PITCH_PARAM].value; | |
34 | pitch += 12.0f * inputs[PITCH_INPUT].value; | |
34 | float pitch = params[PITCH_PARAM].getValue(); | |
35 | pitch += 12.0f * inputs[PITCH_INPUT].getVoltage(); | |
35 | 36 | float freq = 261.626f * powf(2.0f, pitch / 12.0f); |
36 | 37 | |
37 | 38 | phase += freq * deltaTime; |
40 | 41 | |
41 | 42 | float sine = sin(2.0f * M_PI * phase); |
42 | 43 | float cosn = cos(2.0f * M_PI * phase); |
43 | outputs[SIN_OUTPUT].value = sine * 5.0f; | |
44 | outputs[COS_OUTPUT].value = cosn * 5.0f; | |
45 | outputs[PHS_OUTPUT].value = phase * 5.0f; | |
44 | outputs[SIN_OUTPUT].setVoltage(sine * 5.0f); | |
45 | outputs[COS_OUTPUT].setVoltage(cosn * 5.0f); | |
46 | outputs[PHS_OUTPUT].setVoltage(phase * 5.0f); | |
46 | 47 | } |
47 | 48 | |
48 | 49 | |
52 | 53 | |
53 | 54 | CircleVCOWidget::CircleVCOWidget(CircleVCO *module) { |
54 | 55 | setModule(module); |
55 | setPanel(SVG::load(assetPlugin(pluginInstance, "res/CircleVCO.svg"))); | |
56 | setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/CircleVCO.svg"))); | |
56 | 57 | |
57 | 58 | addChild(createWidget<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); |
58 | 59 | addChild(createWidget<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); |
62 | 63 | Vec center = Vec(box.size.x, 0).minus(p.box.size).div(2); |
63 | 64 | Vec kcenter = Vec(box.size.x, 0).minus(k.box.size).div(2); |
64 | 65 | |
65 | addParam(createParam<RoundSmallBlackKnob>(kcenter.plus(Vec(0, 90)), module, CircleVCO::PITCH_PARAM, -54.0f, 54.0f, 0.0f)); | |
66 | addParam(createParam<RoundSmallBlackKnob>(kcenter.plus(Vec(0, 90)), module, CircleVCO::PITCH_PARAM)); | |
66 | 67 | |
67 | addInput(createPort<PJ301MPort>(center.plus(Vec(0, 144)), PortWidget::INPUT, module, CircleVCO::PITCH_INPUT)); | |
68 | addInput(createInput<PJ301MPort>(center.plus(Vec(0, 144)), module, CircleVCO::PITCH_INPUT)); | |
68 | 69 | |
69 | addOutput(createPort<PJ301MPort>(center.plus(Vec(0, 218)), PortWidget::OUTPUT, module, CircleVCO::SIN_OUTPUT)); | |
70 | addOutput(createPort<PJ301MPort>(center.plus(Vec(0, 268)), PortWidget::OUTPUT, module, CircleVCO::COS_OUTPUT)); | |
71 | addOutput(createPort<PJ301MPort>(center.plus(Vec(0, 318)), PortWidget::OUTPUT, module, CircleVCO::PHS_OUTPUT)); | |
70 | addOutput(createOutput<PJ301MPort>(center.plus(Vec(0, 218)), module, CircleVCO::SIN_OUTPUT)); | |
71 | addOutput(createOutput<PJ301MPort>(center.plus(Vec(0, 268)), module, CircleVCO::COS_OUTPUT)); | |
72 | addOutput(createOutput<PJ301MPort>(center.plus(Vec(0, 318)), module, CircleVCO::PHS_OUTPUT)); | |
72 | 73 | } |
73 | 74 | |
74 | 75 | Model *modelCircleVCO = createModel<CircleVCO, CircleVCOWidget>("CircleVCO"); |
20 | 20 | |
21 | 21 | Modulo() { |
22 | 22 | config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); |
23 | configParam(GAIN_PARAM, -3.0, 3.0, 0.0); | |
23 | 24 | } |
24 | void step() override; | |
25 | void process(const ProcessArgs &args) override; | |
25 | 26 | }; |
26 | 27 | |
27 | 28 | |
28 | void Modulo::step() { | |
29 | float gain = powf(2.0, params[GAIN_PARAM].value) + inputs[GAIN_INPUT].value; | |
30 | float val = inputs[SIGNAL_INPUT].value * gain; | |
29 | void Modulo::process(const ProcessArgs &args) { | |
30 | float gain = powf(2.0, params[GAIN_PARAM].getValue()) + inputs[GAIN_INPUT].getVoltage(); | |
31 | float val = inputs[SIGNAL_INPUT].getVoltage() * gain; | |
31 | 32 | float stair = floorf(val); |
32 | 33 | float wrap = val - stair; |
33 | 34 | |
34 | outputs[STAIR_OUTPUT].value = stair / gain;; | |
35 | outputs[WRAP_OUTPUT].value = wrap * 5; | |
35 | outputs[STAIR_OUTPUT].setVoltage(stair / gain);; | |
36 | outputs[WRAP_OUTPUT].setVoltage(wrap * 5); | |
36 | 37 | } |
37 | 38 | |
38 | 39 | |
42 | 43 | |
43 | 44 | ModuloWidget::ModuloWidget(Modulo *module) { |
44 | 45 | setModule(module); |
45 | setPanel(SVG::load(assetPlugin(pluginInstance, "res/Modulo.svg"))); | |
46 | setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/Modulo.svg"))); | |
46 | 47 | |
47 | 48 | addChild(createWidget<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); |
48 | 49 | addChild(createWidget<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); |
53 | 54 | Vec kcenter = Vec(box.size.x, 0).minus(k.box.size).div(2); |
54 | 55 | |
55 | 56 | |
56 | addInput(createPort<PJ301MPort>(center.plus(Vec(0, 120)), PortWidget::INPUT, module, Modulo::SIGNAL_INPUT)); | |
57 | addInput(createPort<PJ301MPort>(center.plus(Vec(-15, 180)), PortWidget::INPUT, module, Modulo::GAIN_INPUT)); | |
57 | addInput(createInput<PJ301MPort>(center.plus(Vec(0, 120)), module, Modulo::SIGNAL_INPUT)); | |
58 | addInput(createInput<PJ301MPort>(center.plus(Vec(-15, 180)), module, Modulo::GAIN_INPUT)); | |
58 | 59 | |
59 | addParam(createParam<RoundSmallBlackKnob>(kcenter.plus(Vec(15, 180)), module, Modulo::GAIN_PARAM, -3.0, 3.0, 0.0)); | |
60 | addParam(createParam<RoundSmallBlackKnob>(kcenter.plus(Vec(15, 180)), module, Modulo::GAIN_PARAM)); | |
60 | 61 | |
61 | addOutput(createPort<PJ301MPort>(center.plus(Vec(0, 265)), PortWidget::OUTPUT, module, Modulo::STAIR_OUTPUT)); | |
62 | addOutput(createPort<PJ301MPort>(center.plus(Vec(0, 345)), PortWidget::OUTPUT, module, Modulo::WRAP_OUTPUT)); | |
62 | addOutput(createOutput<PJ301MPort>(center.plus(Vec(0, 265)), module, Modulo::STAIR_OUTPUT)); | |
63 | addOutput(createOutput<PJ301MPort>(center.plus(Vec(0, 345)), module, Modulo::WRAP_OUTPUT)); | |
63 | 64 | } |
64 | 65 | |
65 | 66 | Model *modelModulo = createModel<Modulo, ModuloWidget>("Modulo"); |
25 | 25 | |
26 | 26 | WrapComp() { |
27 | 27 | config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); |
28 | configParam(OFFSET_PARAM, -5.0, 5.0, 0.0); | |
29 | configParam(RANGE_PARAM, -5.0, 5.0, 0.0); | |
30 | configParam(A_OUT_PARAM, -8.0, 8.0, 1.0); | |
31 | configParam(B_OUT_PARAM, -8.0, 8.0, 0.0); | |
28 | 32 | } |
29 | void step() override; | |
33 | void process(const ProcessArgs &args) override; | |
30 | 34 | }; |
31 | 35 | |
32 | 36 | |
33 | void WrapComp::step() { | |
34 | float input = inputs[SIGNAL_INPUT].value + inputs[OFFSET_INPUT].normalize(0.0) + params[OFFSET_PARAM].value; | |
35 | float width = clamp((inputs[RANGE_INPUT].normalize(0.0f) + params[RANGE_PARAM].value) / 2.0f, 0.0f, 5.0f); | |
37 | void WrapComp::process(const ProcessArgs &args) { | |
38 | float input = inputs[SIGNAL_INPUT].getVoltage() + inputs[OFFSET_INPUT].getNormalVoltage(0.0) + params[OFFSET_PARAM].getValue(); | |
39 | float width = clamp((inputs[RANGE_INPUT].getNormalVoltage(0.0f) + params[RANGE_PARAM].getValue()) / 2.0f, 0.0f, 5.0f); | |
36 | 40 | |
37 | 41 | while (input > 5.0) |
38 | 42 | input -= 5.0; |
41 | 45 | |
42 | 46 | bool a = input < width || input > (5.0 - width); |
43 | 47 | |
44 | outputs[MAIN_OUTPUT].value = a ? params[A_OUT_PARAM].value : params[B_OUT_PARAM].value; | |
48 | outputs[MAIN_OUTPUT].setVoltage(a ? params[A_OUT_PARAM].getValue() : params[B_OUT_PARAM].getValue()); | |
45 | 49 | lights[A_LIGHT].value = a ? 1.0 : 0.0; |
46 | 50 | lights[B_LIGHT].value = a ? 0.0 : 1.0; |
47 | 51 | } |
53 | 57 | |
54 | 58 | WrapCompWidget::WrapCompWidget(WrapComp *module) { |
55 | 59 | setModule(module); |
56 | setPanel(SVG::load(assetPlugin(pluginInstance, "res/WrapComp.svg"))); | |
60 | setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/WrapComp.svg"))); | |
57 | 61 | |
58 | 62 | addChild(createWidget<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); |
59 | 63 | addChild(createWidget<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); |
67 | 71 | Vec kcenter = Vec(box.size.x, 0).minus(k.box.size).div(2); |
68 | 72 | Vec lcenter = Vec(box.size.x, 0).minus(l.box.size).div(2); |
69 | 73 | |
70 | addInput(createPort<PJ301MPort>(center.plus(Vec(0, 70)), PortWidget::INPUT, module, WrapComp::SIGNAL_INPUT)); | |
74 | addInput(createInput<PJ301MPort>(center.plus(Vec(0, 70)), module, WrapComp::SIGNAL_INPUT)); | |
71 | 75 | |
72 | addParam(createParam<RoundSmallBlackKnob>(kcenter.plus(Vec(25, 135)), module, WrapComp::OFFSET_PARAM, -5.0, 5.0, 0.0)); | |
73 | addInput(createPort<PJ301MPort>(center.plus(Vec(-25, 135)), PortWidget::INPUT, module, WrapComp::OFFSET_INPUT)); | |
76 | addParam(createParam<RoundSmallBlackKnob>(kcenter.plus(Vec(25, 135)), module, WrapComp::OFFSET_PARAM)); | |
77 | addInput(createInput<PJ301MPort>(center.plus(Vec(-25, 135)), module, WrapComp::OFFSET_INPUT)); | |
74 | 78 | |
75 | addParam(createParam<RoundSmallBlackKnob>(kcenter.plus(Vec(25, 210)), module, WrapComp::RANGE_PARAM, -5.0, 5.0, 0.0)); | |
76 | addInput(createPort<PJ301MPort>(center.plus(Vec(-25, 210)), PortWidget::INPUT, module, WrapComp::RANGE_INPUT)); | |
79 | addParam(createParam<RoundSmallBlackKnob>(kcenter.plus(Vec(25, 210)), module, WrapComp::RANGE_PARAM)); | |
80 | addInput(createInput<PJ301MPort>(center.plus(Vec(-25, 210)), module, WrapComp::RANGE_INPUT)); | |
77 | 81 | |
78 | 82 | addChild(createLight<MediumLight<RedLight>>(lcenter.plus(Vec(-15, 255)), module, WrapComp::A_LIGHT)); |
79 | 83 | addChild(createLight<MediumLight<RedLight>>(lcenter.plus(Vec( 15, 255)), module, WrapComp::B_LIGHT)); |
80 | 84 | |
81 | addParam(createParam<RoundSmallBlackKnob>(kcenter.plus(Vec(-25, 280)), module, WrapComp::A_OUT_PARAM, -8.0, 8.0, 1.0)); | |
82 | addParam(createParam<RoundSmallBlackKnob>(kcenter.plus(Vec( 25, 280)), module, WrapComp::B_OUT_PARAM, -8.0, 8.0, 0.0)); | |
85 | addParam(createParam<RoundSmallBlackKnob>(kcenter.plus(Vec(-25, 280)), module, WrapComp::A_OUT_PARAM)); | |
86 | addParam(createParam<RoundSmallBlackKnob>(kcenter.plus(Vec( 25, 280)), module, WrapComp::B_OUT_PARAM)); | |
83 | 87 | |
84 | addOutput(createPort<PJ301MPort>(center.plus(Vec(0, 315)), PortWidget::OUTPUT, module, WrapComp::MAIN_OUTPUT)); | |
88 | addOutput(createOutput<PJ301MPort>(center.plus(Vec(0, 315)), module, WrapComp::MAIN_OUTPUT)); | |
85 | 89 | } |
86 | 90 | |
87 | 91 | Model *modelWrapComp = createModel<WrapComp, WrapCompWidget>("WrapComp"); |