| @@ -60,7 +60,7 @@ struct VoltageControlledOscillator { | |||||
| // Adjust pitch slew | // Adjust pitch slew | ||||
| if (++pitchSlewIndex > 32) { | if (++pitchSlewIndex > 32) { | ||||
| const float pitchSlewTau = 100.0f; // Time constant for leaky integrator in seconds | const float pitchSlewTau = 100.0f; // Time constant for leaky integrator in seconds | ||||
| pitchSlew += (randomNormal() - pitchSlew / pitchSlewTau) * engineGetSampleTime(); | |||||
| pitchSlew += (random::normal() - pitchSlew / pitchSlewTau) * context()->engine->getSampleTime(); | |||||
| pitchSlewIndex = 0; | pitchSlewIndex = 0; | ||||
| } | } | ||||
| } | } | ||||
| @@ -140,7 +140,7 @@ struct VoltageControlledOscillator { | |||||
| // Advance phase | // Advance phase | ||||
| phase += deltaPhase / OVERSAMPLE; | phase += deltaPhase / OVERSAMPLE; | ||||
| phase = eucmod(phase, 1.0f); | |||||
| phase = eucMod(phase, 1.0f); | |||||
| } | } | ||||
| } | } | ||||
| @@ -195,7 +195,16 @@ struct VCO : Module { | |||||
| VoltageControlledOscillator<16, 16> oscillator; | VoltageControlledOscillator<16, 16> oscillator; | ||||
| VCO() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} | |||||
| VCO() { | |||||
| setup(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); | |||||
| params[MODE_PARAM].setup(0.f, 1.f, 1.f); | |||||
| params[SYNC_PARAM].setup(0.f, 1.f, 1.f); | |||||
| params[FREQ_PARAM].setup(-54.0f, 54.0f, 0.0f, "Frequency", " Hz", std::pow(2, 1/12.f), 261.626f); | |||||
| params[FINE_PARAM].setup(-1.0f, 1.0f, 0.0f, "Fine frequency"); | |||||
| params[FM_PARAM].setup(0.0f, 1.0f, 0.0f, "Frequency modulation"); | |||||
| params[PW_PARAM].setup(0.0f, 1.0f, 0.5f, "Pulse width", "%", 0.f, 100.f); | |||||
| params[PWM_PARAM].setup(0.0f, 1.0f, 0.0f, "Pulse width modulation", "%", 0.f, 100.f); | |||||
| } | |||||
| void step() override; | void step() override; | ||||
| }; | }; | ||||
| @@ -213,7 +222,7 @@ void VCO::step() { | |||||
| oscillator.setPulseWidth(params[PW_PARAM].value + params[PWM_PARAM].value * inputs[PW_INPUT].value / 10.0f); | oscillator.setPulseWidth(params[PW_PARAM].value + params[PWM_PARAM].value * inputs[PW_INPUT].value / 10.0f); | ||||
| oscillator.syncEnabled = inputs[SYNC_INPUT].active; | oscillator.syncEnabled = inputs[SYNC_INPUT].active; | ||||
| oscillator.process(engineGetSampleTime(), inputs[SYNC_INPUT].value); | |||||
| oscillator.process(context()->engine->getSampleTime(), inputs[SYNC_INPUT].value); | |||||
| // Set output | // Set output | ||||
| if (outputs[SIN_OUTPUT].active) | if (outputs[SIN_OUTPUT].active) | ||||
| @@ -235,31 +244,31 @@ struct VCOWidget : ModuleWidget { | |||||
| }; | }; | ||||
| VCOWidget::VCOWidget(VCO *module) : ModuleWidget(module) { | VCOWidget::VCOWidget(VCO *module) : ModuleWidget(module) { | ||||
| setPanel(SVG::load(assetPlugin(plugin, "res/VCO-1.svg"))); | |||||
| setPanel(SVG::load(asset::plugin(plugin, "res/VCO-1.svg"))); | |||||
| addChild(createWidget<ScrewSilver>(Vec(15, 0))); | addChild(createWidget<ScrewSilver>(Vec(15, 0))); | ||||
| addChild(createWidget<ScrewSilver>(Vec(box.size.x-30, 0))); | addChild(createWidget<ScrewSilver>(Vec(box.size.x-30, 0))); | ||||
| addChild(createWidget<ScrewSilver>(Vec(15, 365))); | addChild(createWidget<ScrewSilver>(Vec(15, 365))); | ||||
| addChild(createWidget<ScrewSilver>(Vec(box.size.x-30, 365))); | addChild(createWidget<ScrewSilver>(Vec(box.size.x-30, 365))); | ||||
| addParam(createParam<CKSS>(Vec(15, 77), module, VCO::MODE_PARAM, 0.0f, 1.0f, 1.0f)); | |||||
| addParam(createParam<CKSS>(Vec(119, 77), module, VCO::SYNC_PARAM, 0.0f, 1.0f, 1.0f)); | |||||
| addParam(createParam<CKSS>(Vec(15, 77), module, VCO::MODE_PARAM)); | |||||
| addParam(createParam<CKSS>(Vec(119, 77), module, VCO::SYNC_PARAM)); | |||||
| addParam(createParam<RoundHugeBlackKnob>(Vec(47, 61), module, VCO::FREQ_PARAM, -54.0f, 54.0f, 0.0f)); | |||||
| addParam(createParam<RoundLargeBlackKnob>(Vec(23, 143), module, VCO::FINE_PARAM, -1.0f, 1.0f, 0.0f)); | |||||
| addParam(createParam<RoundLargeBlackKnob>(Vec(91, 143), module, VCO::PW_PARAM, 0.0f, 1.0f, 0.5f)); | |||||
| addParam(createParam<RoundLargeBlackKnob>(Vec(23, 208), module, VCO::FM_PARAM, 0.0f, 1.0f, 0.0f)); | |||||
| addParam(createParam<RoundLargeBlackKnob>(Vec(91, 208), module, VCO::PWM_PARAM, 0.0f, 1.0f, 0.0f)); | |||||
| addParam(createParam<RoundHugeBlackKnob>(Vec(47, 61), module, VCO::FREQ_PARAM)); | |||||
| addParam(createParam<RoundLargeBlackKnob>(Vec(23, 143), module, VCO::FINE_PARAM)); | |||||
| addParam(createParam<RoundLargeBlackKnob>(Vec(91, 143), module, VCO::PW_PARAM)); | |||||
| addParam(createParam<RoundLargeBlackKnob>(Vec(23, 208), module, VCO::FM_PARAM)); | |||||
| addParam(createParam<RoundLargeBlackKnob>(Vec(91, 208), module, VCO::PWM_PARAM)); | |||||
| addInput(createPort<PJ301MPort>(Vec(11, 276), PortWidget::INPUT, module, VCO::PITCH_INPUT)); | |||||
| addInput(createPort<PJ301MPort>(Vec(45, 276), PortWidget::INPUT, module, VCO::FM_INPUT)); | |||||
| addInput(createPort<PJ301MPort>(Vec(80, 276), PortWidget::INPUT, module, VCO::SYNC_INPUT)); | |||||
| addInput(createPort<PJ301MPort>(Vec(114, 276), PortWidget::INPUT, module, VCO::PW_INPUT)); | |||||
| addInput(createInput<PJ301MPort>(Vec(11, 276), module, VCO::PITCH_INPUT)); | |||||
| addInput(createInput<PJ301MPort>(Vec(45, 276), module, VCO::FM_INPUT)); | |||||
| addInput(createInput<PJ301MPort>(Vec(80, 276), module, VCO::SYNC_INPUT)); | |||||
| addInput(createInput<PJ301MPort>(Vec(114, 276), module, VCO::PW_INPUT)); | |||||
| addOutput(createPort<PJ301MPort>(Vec(11, 320), PortWidget::OUTPUT, module, VCO::SIN_OUTPUT)); | |||||
| addOutput(createPort<PJ301MPort>(Vec(45, 320), PortWidget::OUTPUT, module, VCO::TRI_OUTPUT)); | |||||
| addOutput(createPort<PJ301MPort>(Vec(80, 320), PortWidget::OUTPUT, module, VCO::SAW_OUTPUT)); | |||||
| addOutput(createPort<PJ301MPort>(Vec(114, 320), PortWidget::OUTPUT, module, VCO::SQR_OUTPUT)); | |||||
| addOutput(createOutput<PJ301MPort>(Vec(11, 320), module, VCO::SIN_OUTPUT)); | |||||
| addOutput(createOutput<PJ301MPort>(Vec(45, 320), module, VCO::TRI_OUTPUT)); | |||||
| addOutput(createOutput<PJ301MPort>(Vec(80, 320), module, VCO::SAW_OUTPUT)); | |||||
| addOutput(createOutput<PJ301MPort>(Vec(114, 320), module, VCO::SQR_OUTPUT)); | |||||
| addChild(createLight<SmallLight<GreenRedLight>>(Vec(99, 42.5f), module, VCO::PHASE_POS_LIGHT)); | addChild(createLight<SmallLight<GreenRedLight>>(Vec(99, 42.5f), module, VCO::PHASE_POS_LIGHT)); | ||||
| } | } | ||||
| @@ -295,7 +304,14 @@ struct VCO2 : Module { | |||||
| VoltageControlledOscillator<8, 8> oscillator; | VoltageControlledOscillator<8, 8> oscillator; | ||||
| VCO2() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} | |||||
| VCO2() { | |||||
| setup(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); | |||||
| params[MODE_PARAM].setup(0.f, 1.f, 1.f); | |||||
| params[SYNC_PARAM].setup(0.f, 1.f, 1.f); | |||||
| params[FREQ_PARAM].setup(-54.0f, 54.0f, 0.0f, "Frequency", " Hz", std::pow(2, 1/12.f), 261.626f); | |||||
| params[WAVE_PARAM].setup(0.0f, 3.0f, 1.5f, "Wave"); | |||||
| params[FM_PARAM].setup(0.0f, 1.0f, 0.0f, "Frequency modulation"); | |||||
| } | |||||
| void step() override; | void step() override; | ||||
| }; | }; | ||||
| @@ -308,7 +324,7 @@ void VCO2::step() { | |||||
| oscillator.setPitch(0.0f, pitchCv); | oscillator.setPitch(0.0f, pitchCv); | ||||
| oscillator.syncEnabled = inputs[SYNC_INPUT].active; | oscillator.syncEnabled = inputs[SYNC_INPUT].active; | ||||
| oscillator.process(engineGetSampleTime(), inputs[SYNC_INPUT].value); | |||||
| oscillator.process(context()->engine->getSampleTime(), inputs[SYNC_INPUT].value); | |||||
| // Set output | // Set output | ||||
| float wave = clamp(params[WAVE_PARAM].value + inputs[WAVE_INPUT].value, 0.0f, 3.0f); | float wave = clamp(params[WAVE_PARAM].value + inputs[WAVE_INPUT].value, 0.0f, 3.0f); | ||||
| @@ -331,25 +347,25 @@ struct VCO2Widget : ModuleWidget { | |||||
| }; | }; | ||||
| VCO2Widget::VCO2Widget(VCO2 *module) : ModuleWidget(module) { | VCO2Widget::VCO2Widget(VCO2 *module) : ModuleWidget(module) { | ||||
| setPanel(SVG::load(assetPlugin(plugin, "res/VCO-2.svg"))); | |||||
| setPanel(SVG::load(asset::plugin(plugin, "res/VCO-2.svg"))); | |||||
| addChild(createWidget<ScrewSilver>(Vec(15, 0))); | addChild(createWidget<ScrewSilver>(Vec(15, 0))); | ||||
| addChild(createWidget<ScrewSilver>(Vec(box.size.x-30, 0))); | addChild(createWidget<ScrewSilver>(Vec(box.size.x-30, 0))); | ||||
| addChild(createWidget<ScrewSilver>(Vec(15, 365))); | addChild(createWidget<ScrewSilver>(Vec(15, 365))); | ||||
| addChild(createWidget<ScrewSilver>(Vec(box.size.x-30, 365))); | addChild(createWidget<ScrewSilver>(Vec(box.size.x-30, 365))); | ||||
| addParam(createParam<CKSS>(Vec(62, 150), module, VCO2::MODE_PARAM, 0.0f, 1.0f, 1.0f)); | |||||
| addParam(createParam<CKSS>(Vec(62, 215), module, VCO2::SYNC_PARAM, 0.0f, 1.0f, 1.0f)); | |||||
| addParam(createParam<CKSS>(Vec(62, 150), module, VCO2::MODE_PARAM)); | |||||
| addParam(createParam<CKSS>(Vec(62, 215), module, VCO2::SYNC_PARAM)); | |||||
| addParam(createParam<RoundHugeBlackKnob>(Vec(17, 60), module, VCO2::FREQ_PARAM, -54.0f, 54.0f, 0.0f)); | |||||
| addParam(createParam<RoundLargeBlackKnob>(Vec(12, 143), module, VCO2::WAVE_PARAM, 0.0f, 3.0f, 1.5f)); | |||||
| addParam(createParam<RoundLargeBlackKnob>(Vec(12, 208), module, VCO2::FM_PARAM, 0.0f, 1.0f, 0.0f)); | |||||
| addParam(createParam<RoundHugeBlackKnob>(Vec(17, 60), module, VCO2::FREQ_PARAM)); | |||||
| addParam(createParam<RoundLargeBlackKnob>(Vec(12, 143), module, VCO2::WAVE_PARAM)); | |||||
| addParam(createParam<RoundLargeBlackKnob>(Vec(12, 208), module, VCO2::FM_PARAM)); | |||||
| addInput(createPort<PJ301MPort>(Vec(11, 276), PortWidget::INPUT, module, VCO2::FM_INPUT)); | |||||
| addInput(createPort<PJ301MPort>(Vec(54, 276), PortWidget::INPUT, module, VCO2::SYNC_INPUT)); | |||||
| addInput(createPort<PJ301MPort>(Vec(11, 320), PortWidget::INPUT, module, VCO2::WAVE_INPUT)); | |||||
| addInput(createInput<PJ301MPort>(Vec(11, 276), module, VCO2::FM_INPUT)); | |||||
| addInput(createInput<PJ301MPort>(Vec(54, 276), module, VCO2::SYNC_INPUT)); | |||||
| addInput(createInput<PJ301MPort>(Vec(11, 320), module, VCO2::WAVE_INPUT)); | |||||
| addOutput(createPort<PJ301MPort>(Vec(54, 320), PortWidget::OUTPUT, module, VCO2::OUT_OUTPUT)); | |||||
| addOutput(createOutput<PJ301MPort>(Vec(54, 320), module, VCO2::OUT_OUTPUT)); | |||||
| addChild(createLight<SmallLight<GreenRedLight>>(Vec(68, 42.5f), module, VCO2::PHASE_POS_LIGHT)); | addChild(createLight<SmallLight<GreenRedLight>>(Vec(68, 42.5f), module, VCO2::PHASE_POS_LIGHT)); | ||||
| } | } | ||||