|
-
- #include "Pan.hpp"
- #include "mixer.hpp"
-
- void Pan::onSampleRateChange() {
- _slew1.setParams(engineGetSampleRate(), MixerChannel::panSlewTimeMS, 2.0f);
- _slew2.setParams(engineGetSampleRate(), MixerChannel::panSlewTimeMS, 2.0f);
- }
-
- void Pan::step() {
- if (!((inputs[IN1_INPUT].active || inputs[IN2_INPUT].active) && (outputs[L_OUTPUT].active || outputs[R_OUTPUT].active))) {
- return;
- }
-
- float pan = params[PAN1_PARAM].value;
- if (inputs[CV1_INPUT].active) {
- pan *= clamp(inputs[CV1_INPUT].value / 5.0f, -1.0f, 1.0f);
- }
- _panner1.setPan(_slew1.next(pan));
-
- pan = params[PAN2_PARAM].value;
- if (inputs[CV2_INPUT].active) {
- pan *= clamp(inputs[CV2_INPUT].value / 5.0f, -1.0f, 1.0f);
- }
- _panner2.setPan(_slew2.next(pan));
-
- float l1 = 0.0f, r1 = 0.0f;
- _panner1.next(inputs[IN1_INPUT].value, l1, r1);
- float l2 = 0.0f, r2 = 0.0f;
- _panner2.next(inputs[IN2_INPUT].value, l2, r2);
- outputs[L_OUTPUT].value = _saturatorLeft.next(l1 + l2);
- outputs[R_OUTPUT].value = _saturatorRight.next(r1 + r2);
- }
-
- struct PanWidget : ModuleWidget {
- static constexpr int hp = 3;
-
- PanWidget(Pan* module) : ModuleWidget(module) {
- box.size = Vec(RACK_GRID_WIDTH * hp, RACK_GRID_HEIGHT);
-
- {
- SVGPanel *panel = new SVGPanel();
- panel->box.size = box.size;
- panel->setBackground(SVG::load(assetPlugin(plugin, "res/Pan.svg")));
- addChild(panel);
- }
-
- addChild(Widget::create<ScrewSilver>(Vec(0, 0)));
- addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 15, 365)));
-
- // generated by svg_widgets.rb
- auto pan1ParamPosition = Vec(9.5, 24.5);
- auto pan2ParamPosition = Vec(9.5, 147.5);
-
- auto cv1InputPosition = Vec(10.5, 62.0);
- auto in1InputPosition = Vec(10.5, 97.0);
- auto cv2InputPosition = Vec(10.5, 185.0);
- auto in2InputPosition = Vec(10.5, 220.0);
-
- auto lOutputPosition = Vec(10.5, 268.0);
- auto rOutputPosition = Vec(10.5, 303.0);
- // end generated by svg_widgets.rb
-
- addParam(ParamWidget::create<Knob26>(pan1ParamPosition, module, Pan::PAN1_PARAM, -1.0, 1.0, 0.0));
- addParam(ParamWidget::create<Knob26>(pan2ParamPosition, module, Pan::PAN2_PARAM, -1.0, 1.0, 0.0));
-
- addInput(Port::create<Port24>(cv1InputPosition, Port::INPUT, module, Pan::CV1_INPUT));
- addInput(Port::create<Port24>(in1InputPosition, Port::INPUT, module, Pan::IN1_INPUT));
- addInput(Port::create<Port24>(cv2InputPosition, Port::INPUT, module, Pan::CV2_INPUT));
- addInput(Port::create<Port24>(in2InputPosition, Port::INPUT, module, Pan::IN2_INPUT));
-
- addOutput(Port::create<Port24>(lOutputPosition, Port::OUTPUT, module, Pan::L_OUTPUT));
- addOutput(Port::create<Port24>(rOutputPosition, Port::OUTPUT, module, Pan::R_OUTPUT));
- }
- };
-
- RACK_PLUGIN_MODEL_INIT(Bogaudio, Pan) {
- Model *modelPan = createModel<Pan, PanWidget>("Bogaudio-Pan", "Pan", "dual panner", PANNING_TAG, DUAL_TAG);
- return modelPan;
- }
|