| @@ -30,7 +30,7 @@ Tested in | |||
| # Downloads | |||
| The current release can be found in the [vst2_bin/](vst2_bin/) folder. | |||
| Here's a snapshot of it: [veeseevstrack_0_6_1_win64_bin-14Aug2018.7z](dist/veeseevstrack_0_6_1_win64_bin-14Aug2018.7z) (64bit) | |||
| Here's a snapshot of it: [veeseevstrack_0_6_1_win64_bin-16Aug2018.7z](dist/veeseevstrack_0_6_1_win64_bin-16Aug2018.7z) (64bit) | |||
| Note: The effect plugin can used be as an instrument, too. You just have to send it MIDI events ! | |||
| @@ -51,7 +51,7 @@ Here's a demo video of it: https://vimeo.com/277703414 | |||
| # Add-on modules | |||
| The binary distribution contains the following dynamically loaded add-on modules: | |||
| The binary distribution contains the following (17) dynamically loaded add-on modules: | |||
| - dBiz.dBizBlank | |||
| - dBiz.Multiple | |||
| - dBiz.Contorno | |||
| @@ -71,7 +71,7 @@ The binary distribution contains the following dynamically loaded add-on modules | |||
| - Template_shared.MyModule | |||
| The following (478) add-on modules are statically linked with the VST plugin: | |||
| The following (517) add-on modules are statically linked with the VST plugin: | |||
| - 21kHz.D_Inf | |||
| - 21kHz.PalmLoop | |||
| - Alikins.IdleSwitch | |||
| @@ -267,22 +267,23 @@ The following (478) add-on modules are statically linked with the VST plugin: | |||
| - FrozenWasteland.SeriouslySlowLFO | |||
| - FrozenWasteland.VoxInhumana | |||
| - FrozenWasteland.CDCSeriouslySlowLFO | |||
| - Fundamentals.8vert | |||
| - Fundamentals.ADSR | |||
| - Fundamentals.Delay | |||
| - Fundamentals.LFO | |||
| - Fundamentals.LFO2 | |||
| - Fundamentals.Mutes | |||
| - Fundamentals.SEQ3 | |||
| - Fundamentals.SequentialSwitch1 | |||
| - Fundamentals.SequentialSwitch2 | |||
| - Fundamentals.Scope | |||
| - Fundamentals.Unity | |||
| - Fundamentals.VCA | |||
| - Fundamentals.VCF | |||
| - Fundamentals.VCMixer | |||
| - Fundamentals.VCO | |||
| - Fundamentals.VCO2 | |||
| - Fundamental.8vert | |||
| - Fundamental.ADSR | |||
| - Fundamental.Delay | |||
| - Fundamental.LFO | |||
| - Fundamental.LFO2 | |||
| - Fundamental.Mutes | |||
| - Fundamental.SEQ3 | |||
| - Fundamental.SequentialSwitch1 | |||
| - Fundamental.SequentialSwitch2 | |||
| - Fundamental.Scope | |||
| - Fundamental.Unity | |||
| - Fundamental.VCA | |||
| - Fundamental.VCA-1 | |||
| - Fundamental.VCF | |||
| - Fundamental.VCMixer | |||
| - Fundamental.VCO | |||
| - Fundamental.VCO2 | |||
| - Gratrix.VCO_F1 | |||
| - Gratrix.VCO_F2 | |||
| - Gratrix.VCF_F1 | |||
| @@ -434,6 +435,15 @@ The following (478) add-on modules are statically linked with the VST plugin: | |||
| - Ohmer.BlankPanel8 | |||
| - Ohmer.BlankPanel16 | |||
| - Ohmer.BlankPanel32 | |||
| - add PG-Instruments.PGSEQ3 | |||
| - add PG-Instruments.PGPanner | |||
| - add PG-Instruments.PGQuadPanner | |||
| - add PG-Instruments.PGOctPanner | |||
| - add PG-Instruments.PGVCF | |||
| - add PG-Instruments.PGStereoVCF | |||
| - add PG-Instruments.PGEcho | |||
| - add PG-Instruments.PGStereoEcho | |||
| - add PG-Instruments.PGStereoPingPongEcho | |||
| - Qwelk.Automaton | |||
| - Qwelk.Byte | |||
| - Qwelk.Chaos | |||
| @@ -497,6 +507,35 @@ The following (478) add-on modules are statically linked with the VST plugin: | |||
| - SonusModular.Scramblase | |||
| - SonusModular.Twoff | |||
| - SonusModular.Yabp | |||
| - Southpole.Abr | |||
| - Southpole.Annuli | |||
| - Southpole.Aux | |||
| - Southpole.Balaclava | |||
| - Southpole.Bandana | |||
| - Southpole.Blank1HP | |||
| - Southpole.Blank2HP | |||
| - Southpole.Blank4HP | |||
| - Southpole.Blank8HP | |||
| - Southpole.Blank16HP | |||
| - Southpole.Blank42HP | |||
| - Southpole.But | |||
| - Southpole.CornrowsX | |||
| - Southpole.DeuxEtageres | |||
| - Southpole.Etagere | |||
| - Southpole.Falls | |||
| - Southpole.Ftagn | |||
| - Southpole.Fuse | |||
| - Southpole.Gnome | |||
| - Southpole.Piste | |||
| - Southpole.Pulse | |||
| - Southpole.Rakes | |||
| - Southpole.Riemann | |||
| - Southpole.Smoke | |||
| - Southpole.Snake | |||
| - Southpole.Sns | |||
| - Southpole.Splash | |||
| - Southpole.Sssh | |||
| - Southpole.Wriggle | |||
| - Southpole-parasites.Annuli | |||
| - Southpole-parasites.Splash | |||
| - squinkylabs-plug1.Booty | |||
| @@ -11,6 +11,7 @@ RACK_PLUGIN_MODEL_DECLARE(Fundamental, SequentialSwitch1); | |||
| RACK_PLUGIN_MODEL_DECLARE(Fundamental, SequentialSwitch2); | |||
| RACK_PLUGIN_MODEL_DECLARE(Fundamental, Scope); | |||
| RACK_PLUGIN_MODEL_DECLARE(Fundamental, Unity); | |||
| RACK_PLUGIN_MODEL_DECLARE(Fundamental, VCA_1); | |||
| RACK_PLUGIN_MODEL_DECLARE(Fundamental, VCA); | |||
| RACK_PLUGIN_MODEL_DECLARE(Fundamental, VCF); | |||
| RACK_PLUGIN_MODEL_DECLARE(Fundamental, VCMixer); | |||
| @@ -23,6 +24,7 @@ RACK_PLUGIN_INIT(Fundamental) { | |||
| RACK_PLUGIN_MODEL_ADD(Fundamental, VCO); | |||
| RACK_PLUGIN_MODEL_ADD(Fundamental, VCO2); | |||
| RACK_PLUGIN_MODEL_ADD(Fundamental, VCF); | |||
| RACK_PLUGIN_MODEL_ADD(Fundamental, VCA_1); | |||
| RACK_PLUGIN_MODEL_ADD(Fundamental, VCA); | |||
| RACK_PLUGIN_MODEL_ADD(Fundamental, LFO); | |||
| RACK_PLUGIN_MODEL_ADD(Fundamental, LFO2); | |||
| @@ -12,7 +12,7 @@ struct LowFrequencyOscillator { | |||
| LowFrequencyOscillator() {} | |||
| void setPitch(float pitch) { | |||
| pitch = fminf(pitch, 8.0f); | |||
| pitch = fminf(pitch, 10.0f); | |||
| freq = powf(2.0f, pitch); | |||
| } | |||
| void setPulseWidth(float pw_) { | |||
| @@ -135,7 +135,7 @@ LFOWidget::LFOWidget(LFO *module) : ModuleWidget(module) { | |||
| addParam(ParamWidget::create<CKSS>(Vec(15, 77), module, LFO::OFFSET_PARAM, 0.0f, 1.0f, 1.0f)); | |||
| addParam(ParamWidget::create<CKSS>(Vec(119, 77), module, LFO::INVERT_PARAM, 0.0f, 1.0f, 1.0f)); | |||
| addParam(ParamWidget::create<RoundHugeBlackKnob>(Vec(47, 61), module, LFO::FREQ_PARAM, -8.0f, 6.0f, -1.0f)); | |||
| addParam(ParamWidget::create<RoundHugeBlackKnob>(Vec(47, 61), module, LFO::FREQ_PARAM, -8.0f, 10.0f, 1.0f)); | |||
| addParam(ParamWidget::create<RoundLargeBlackKnob>(Vec(23, 143), module, LFO::FM1_PARAM, 0.0f, 1.0f, 0.0f)); | |||
| addParam(ParamWidget::create<RoundLargeBlackKnob>(Vec(91, 143), module, LFO::PW_PARAM, 0.0f, 1.0f, 0.5f)); | |||
| addParam(ParamWidget::create<RoundLargeBlackKnob>(Vec(23, 208), module, LFO::FM2_PARAM, 0.0f, 1.0f, 0.0f)); | |||
| @@ -231,7 +231,7 @@ LFO2Widget::LFO2Widget(LFO2 *module) : ModuleWidget(module) { | |||
| addParam(ParamWidget::create<CKSS>(Vec(62, 150), module, LFO2::OFFSET_PARAM, 0.0f, 1.0f, 1.0f)); | |||
| addParam(ParamWidget::create<CKSS>(Vec(62, 215), module, LFO2::INVERT_PARAM, 0.0f, 1.0f, 1.0f)); | |||
| addParam(ParamWidget::create<RoundHugeBlackKnob>(Vec(18, 60), module, LFO2::FREQ_PARAM, -8.0f, 6.0f, -1.0f)); | |||
| addParam(ParamWidget::create<RoundHugeBlackKnob>(Vec(18, 60), module, LFO2::FREQ_PARAM, -8.0f, 10.0f, 1.0f)); | |||
| addParam(ParamWidget::create<RoundLargeBlackKnob>(Vec(11, 142), module, LFO2::WAVE_PARAM, 0.0f, 3.0f, 1.5f)); | |||
| addParam(ParamWidget::create<RoundLargeBlackKnob>(Vec(11, 207), module, LFO2::FM_PARAM, 0.0f, 1.0f, 0.5f)); | |||
| @@ -50,27 +50,122 @@ struct VCAWidget : ModuleWidget { | |||
| VCAWidget::VCAWidget(VCA *module) : ModuleWidget(module) { | |||
| setPanel(SVG::load(assetPlugin(plugin, "res/VCA.svg"))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(15, 0))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 0))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(15, 365))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 365))); | |||
| addParam(ParamWidget::create<RoundLargeBlackKnob>(Vec(27, 57), module, VCA::LEVEL1_PARAM, 0.0f, 1.0f, 0.5f)); | |||
| addParam(ParamWidget::create<RoundLargeBlackKnob>(Vec(27, 222), module, VCA::LEVEL2_PARAM, 0.0f, 1.0f, 0.5f)); | |||
| addInput(Port::create<PJ301MPort>(Vec(11, 113), Port::INPUT, module, VCA::EXP1_INPUT)); | |||
| addInput(Port::create<PJ301MPort>(Vec(54, 113), Port::INPUT, module, VCA::LIN1_INPUT)); | |||
| addInput(Port::create<PJ301MPort>(Vec(11, 156), Port::INPUT, module, VCA::IN1_INPUT)); | |||
| addInput(Port::create<PJ301MPort>(Vec(11, 276), Port::INPUT, module, VCA::EXP2_INPUT)); | |||
| addInput(Port::create<PJ301MPort>(Vec(54, 276), Port::INPUT, module, VCA::LIN2_INPUT)); | |||
| addInput(Port::create<PJ301MPort>(Vec(11, 320), Port::INPUT, module, VCA::IN2_INPUT)); | |||
| addOutput(Port::create<PJ301MPort>(Vec(54, 156), Port::OUTPUT, module, VCA::OUT1_OUTPUT)); | |||
| addOutput(Port::create<PJ301MPort>(Vec(54, 320), Port::OUTPUT, module, VCA::OUT2_OUTPUT)); | |||
| addChild(Widget::create<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); | |||
| addParam(ParamWidget::create<RoundLargeBlackKnob>(mm2px(Vec(6.35, 19.11753)), module, VCA::LEVEL1_PARAM, 0.0, 1.0, 0.0)); | |||
| addParam(ParamWidget::create<RoundLargeBlackKnob>(mm2px(Vec(6.35, 74.80544)), module, VCA::LEVEL2_PARAM, 0.0, 1.0, 0.0)); | |||
| addInput(Port::create<PJ301MPort>(mm2px(Vec(2.5907, 38.19371)), Port::INPUT, module, VCA::EXP1_INPUT)); | |||
| addInput(Port::create<PJ301MPort>(mm2px(Vec(14.59752, 38.19371)), Port::INPUT, module, VCA::LIN1_INPUT)); | |||
| addInput(Port::create<PJ301MPort>(mm2px(Vec(2.5907, 52.80642)), Port::INPUT, module, VCA::IN1_INPUT)); | |||
| addInput(Port::create<PJ301MPort>(mm2px(Vec(2.5907, 93.53435)), Port::INPUT, module, VCA::EXP2_INPUT)); | |||
| addInput(Port::create<PJ301MPort>(mm2px(Vec(14.59752, 93.53435)), Port::INPUT, module, VCA::LIN2_INPUT)); | |||
| addInput(Port::create<PJ301MPort>(mm2px(Vec(2.5907, 108.14706)), Port::INPUT, module, VCA::IN2_INPUT)); | |||
| addOutput(Port::create<PJ301MPort>(mm2px(Vec(14.59752, 52.80642)), Port::OUTPUT, module, VCA::OUT1_OUTPUT)); | |||
| addOutput(Port::create<PJ301MPort>(mm2px(Vec(14.59752, 108.14706)), Port::OUTPUT, module, VCA::OUT2_OUTPUT)); | |||
| } | |||
| struct VCA_1 : Module { | |||
| enum ParamIds { | |||
| LEVEL_PARAM, | |||
| EXP_PARAM, | |||
| NUM_PARAMS | |||
| }; | |||
| enum InputIds { | |||
| CV_INPUT, | |||
| IN_INPUT, | |||
| NUM_INPUTS | |||
| }; | |||
| enum OutputIds { | |||
| OUT_OUTPUT, | |||
| NUM_OUTPUTS | |||
| }; | |||
| enum LightIds { | |||
| NUM_LIGHTS | |||
| }; | |||
| float lastCv = 0.f; | |||
| VCA_1() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} | |||
| void step() override { | |||
| float cv = 1.f; | |||
| if (inputs[CV_INPUT].active) | |||
| cv = fmaxf(inputs[CV_INPUT].value / 10.f, 0.f); | |||
| if ((int) params[EXP_PARAM].value == 0) | |||
| cv = powf(cv, 4.f); | |||
| lastCv = cv; | |||
| outputs[OUT_OUTPUT].value = inputs[IN_INPUT].value * params[LEVEL_PARAM].value * cv; | |||
| } | |||
| }; | |||
| struct VCA_1VUKnob : Knob { | |||
| VCA_1VUKnob() { | |||
| box.size = mm2px(Vec(10, 46)); | |||
| } | |||
| void draw(NVGcontext *vg) override { | |||
| nvgBeginPath(vg); | |||
| nvgRoundedRect(vg, 0, 0, box.size.x, box.size.y, 2.0); | |||
| nvgFillColor(vg, nvgRGB(0, 0, 0)); | |||
| nvgFill(vg); | |||
| VCA_1 *module = dynamic_cast<VCA_1*>(this->module); | |||
| const int segs = 25; | |||
| const Vec margin = Vec(4, 4); | |||
| Rect r = box.zeroPos().shrink(margin); | |||
| for (int i = 0; i < segs; i++) { | |||
| float segValue = clamp(value * segs - (segs - i - 1), 0.f, 1.f); | |||
| float amplitude = value * module->lastCv; | |||
| float segAmplitude = clamp(amplitude * segs - (segs - i - 1), 0.f, 1.f); | |||
| nvgBeginPath(vg); | |||
| nvgRect(vg, r.pos.x, r.pos.y + r.size.y / segs * i + 0.5, | |||
| r.size.x, r.size.y / segs - 1.0); | |||
| if (segValue > 0.f) { | |||
| nvgFillColor(vg, colorAlpha(nvgRGBf(0.33, 0.33, 0.33), segValue)); | |||
| nvgFill(vg); | |||
| } | |||
| if (segAmplitude > 0.f) { | |||
| nvgFillColor(vg, colorAlpha(COLOR_GREEN, segAmplitude)); | |||
| nvgFill(vg); | |||
| } | |||
| } | |||
| } | |||
| }; | |||
| struct VCA_1Widget : ModuleWidget { | |||
| VCA_1Widget(VCA_1 *module) : ModuleWidget(module) { | |||
| setPanel(SVG::load(assetPlugin(plugin, "res/VCA-1.svg"))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); | |||
| addParam(ParamWidget::create<VCA_1VUKnob>(mm2px(Vec(2.62103, 12.31692)), module, VCA_1::LEVEL_PARAM, 0.0, 1.0, 1.0)); | |||
| addParam(ParamWidget::create<CKSS>(mm2px(Vec(5.24619, 79.9593)), module, VCA_1::EXP_PARAM, 0.0, 1.0, 1.0)); | |||
| addInput(Port::create<PJ301MPort>(mm2px(Vec(3.51261, 60.4008)), Port::INPUT, module, VCA_1::CV_INPUT)); | |||
| addInput(Port::create<PJ301MPort>(mm2px(Vec(3.51398, 97.74977)), Port::INPUT, module, VCA_1::IN_INPUT)); | |||
| addOutput(Port::create<PJ301MPort>(mm2px(Vec(3.51398, 108.64454)), Port::OUTPUT, module, VCA_1::OUT_OUTPUT)); | |||
| } | |||
| }; | |||
| RACK_PLUGIN_MODEL_INIT(Fundamental, VCA_1) { | |||
| Model *modelVCA_1 = Model::create<VCA_1, VCA_1Widget>("Fundamental", "VCA-1", "VCA-1", AMPLIFIER_TAG); | |||
| return modelVCA_1; | |||
| } | |||
| RACK_PLUGIN_MODEL_INIT(Fundamental, VCA) { | |||
| Model *modelVCA = Model::create<VCA, VCAWidget>("Fundamental", "VCA", "VCA", AMPLIFIER_TAG, DUAL_TAG); | |||
| Model *modelVCA = Model::create<VCA, VCAWidget>("Fundamental", "VCA", "VCA-2", AMPLIFIER_TAG, DUAL_TAG); | |||
| return modelVCA; | |||
| } | |||
| @@ -1,15 +1,22 @@ | |||
| ALL_OBJ= \ | |||
| src/dsp/DSPMath.o \ | |||
| src/dsp/LadderFilter.o \ | |||
| src/dsp/LambertW.o \ | |||
| src/dsp/Lockhart.o \ | |||
| src/dsp/MS20zdf.o \ | |||
| src/dsp/Oscillator.o \ | |||
| src/dsp/SergeWavefolder.o \ | |||
| src/dsp/Serge.o \ | |||
| src/dsp/WaveShaper.o \ | |||
| src/widgets/LRCVIndicator.o \ | |||
| src/widgets/LRKnob.o \ | |||
| src/widgets/LRLCDWidget.o \ | |||
| src/widgets/LRLight.o \ | |||
| src/widgets/LRPanel.o \ | |||
| src/widgets/LRShadow.o \ | |||
| src/widgets/LRSVGRotator.o \ | |||
| src/AlmaFilter.o \ | |||
| src/BlankPanel.o \ | |||
| src/BlankPanelM1.o \ | |||
| src/LRComponents.o \ | |||
| src/LindenbergResearch.o \ | |||
| src/MS20Filter.o \ | |||
| src/ReShaper.o \ | |||
| @@ -1,17 +1,20 @@ | |||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
| <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> | |||
| <svg width="56px" height="56px" version="1.1" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;"> | |||
| <svg width="56px" height="56px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;"> | |||
| <g id="BigKnob"> | |||
| <circle cx="28" cy="28" r="28" style="fill:#232323;fill-opacity:0.372549;"/> | |||
| <g transform="matrix(1,0,0,1,1,1)"> | |||
| <circle cx="28" cy="28" r="28" style="fill:#232323;fill-opacity:0.372549;"/> | |||
| </g> | |||
| <path d="M21.609,3.309c0.54,-0.601 1.023,-1.258 1.437,-1.965c1.607,-0.31 3.262,-0.477 4.955,-0.477c1.692,0 3.352,0.167 4.956,0.477c0.414,0.707 0.896,1.364 1.436,1.965c3.19,0.825 6.14,2.253 8.719,4.155c0.718,0.032 1.443,-0.001 2.163,-0.104c2.504,2.179 4.608,4.818 6.176,7.796c-0.212,0.559 -0.381,1.131 -0.507,1.71c1.6,3.29 2.514,6.974 2.554,10.866c0.333,0.411 0.694,0.801 1.081,1.166c-0.114,3.412 -0.846,6.661 -2.09,9.64c-0.531,0.161 -1.046,0.361 -1.544,0.594c-1.652,3.395 -4.036,6.37 -6.945,8.719c-0.141,0.629 -0.233,1.271 -0.273,1.922c-2.566,1.914 -5.485,3.367 -8.631,4.254c-0.58,-0.415 -1.192,-0.773 -1.828,-1.073c-1.7,0.358 -3.462,0.546 -5.268,0.546c-1.805,0 -3.567,-0.188 -5.267,-0.546c-0.636,0.3 -1.248,0.658 -1.828,1.073c-3.147,-0.885 -6.063,-2.338 -8.627,-4.254c-0.04,-0.65 -0.133,-1.291 -0.274,-1.919c-2.912,-2.35 -5.297,-5.326 -6.95,-8.724c-0.496,-0.233 -1.009,-0.431 -1.537,-0.592c-1.244,-2.98 -1.976,-6.23 -2.095,-9.64c0.387,-0.364 0.747,-0.753 1.079,-1.163c0.04,-3.894 0.955,-7.58 2.556,-10.871c-0.127,-0.579 -0.296,-1.15 -0.508,-1.708c1.568,-2.978 3.673,-5.617 6.177,-7.796c0.72,0.103 1.444,0.136 2.162,0.104c2.58,-1.902 5.53,-3.33 8.721,-4.155Z" style="fill:#fbeede;stroke:#262626;stroke-width:0.6px;"/> | |||
| <path id="path8603" d="M51.451,15.156c-1.568,-2.978 -3.672,-5.617 -6.176,-7.796c-4.828,0.69 -9.827,-1.756 -12.318,-6.016c-1.604,-0.31 -3.264,-0.477 -4.956,-0.477c-1.693,0 -3.348,0.167 -4.955,0.477c-2.495,4.26 -7.492,6.706 -12.32,6.016c-2.504,2.179 -4.609,4.818 -6.177,7.796c1.788,4.702 0.513,10.314 -3.127,13.742c0.119,3.41 0.851,6.66 2.095,9.64c4.841,1.476 8.444,6.098 8.761,11.235c2.564,1.916 5.48,3.369 8.627,4.254c4.168,-2.986 10.025,-2.986 14.191,0c3.146,-0.887 6.065,-2.34 8.631,-4.254c0.312,-5.137 3.914,-9.76 8.762,-11.235c1.244,-2.979 1.976,-6.228 2.09,-9.64c-3.636,-3.428 -4.911,-9.039 -3.128,-13.742" style="fill:#fbeede;fill-rule:nonzero;stroke:#272727;stroke-width:0.7px;stroke-linejoin:miter;stroke-miterlimit:1.414;"/> | |||
| <g transform="matrix(1.27941,0,0,1.98808,-6.88531,-21.9967)"> | |||
| <path d="M34.791,14.092c0,-1.249 -1.576,-2.264 -3.517,-2.264l-7.035,0c-1.941,0 -3.517,1.015 -3.517,2.264l0,22.312c0,1.249 1.576,2.264 3.517,2.264l7.035,0c1.941,0 3.517,-1.015 3.517,-2.264l0,-22.312Z" style="fill:#fbe6c9;stroke:#262626;stroke-width:0.54px;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:1.414;"/> | |||
| <path d="M34.791,14.092c0,-1.249 -1.576,-2.264 -3.517,-2.264l-7.035,0c-1.941,0 -3.517,1.015 -3.517,2.264l0,22.312c0,1.249 1.576,2.264 3.517,2.264l7.035,0c1.941,0 3.517,-1.015 3.517,-2.264l0,-22.312Z" style="fill:#fbe6c9;fill-opacity:0.223529;stroke:#262626;stroke-opacity:0.384314;stroke-width:0.54px;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:1.414;"/> | |||
| </g> | |||
| <g transform="matrix(1.27941,0,0,1.98808,-7.512,-22.3542)"> | |||
| <path d="M34.791,14.092c0,-1.249 -1.576,-2.264 -3.517,-2.264l-7.035,0c-1.941,0 -3.517,1.015 -3.517,2.264l0,22.312c0,1.249 1.576,2.264 3.517,2.264l7.035,0c1.941,0 3.517,-1.015 3.517,-2.264l0,-22.312Z" style="fill:#fcf3e8;stroke:#262626;stroke-width:0.45px;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:1.414;"/> | |||
| <path d="M34.791,14.092c0,-1.249 -1.576,-2.264 -3.517,-2.264l-7.035,0c-1.941,0 -3.517,1.015 -3.517,2.264l0,22.312c0,1.249 1.576,2.264 3.517,2.264l7.035,0c1.941,0 3.517,-1.015 3.517,-2.264l0,-22.312Z" style="fill:#f0e4d5;stroke:#262626;stroke-width:0.45px;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:1.414;"/> | |||
| </g> | |||
| <g transform="matrix(0.714042,0,0,0.842226,7.91244,1.3791)"> | |||
| <rect x="26.732" y="1.915" width="2.801" height="12.374" style="stroke:#000;stroke-width:0.58px;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:1.414;"/> | |||
| <g transform="matrix(0.166676,0,0,0.166676,23.3332,1.15966)"> | |||
| <circle cx="27.999" cy="28" r="17.999"/> | |||
| </g> | |||
| </g> | |||
| </svg> | |||
| @@ -1,15 +1,15 @@ | |||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
| <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> | |||
| <svg width="24px" height="24px" version="1.1" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-miterlimit:10;"> | |||
| <g transform="matrix(1,0,0,1,0,-0.251)"> | |||
| <circle cx="12" cy="12.251" r="10.835" style="fill:#797979;stroke:#2d2d2d;stroke-width:0.7px;"/> | |||
| </g> | |||
| <svg width="24px" height="24px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-miterlimit:10;"> | |||
| <g id="SmallKnob" transform="matrix(1,0,0,1,0,-0.251)"> | |||
| <g transform="matrix(0.833333,0,0,0.833333,2,2.20925)"> | |||
| <path d="M9.267,0.673c0.183,-0.222 0.349,-0.459 0.496,-0.71c0.725,-0.139 1.473,-0.214 2.237,-0.214c0.764,0 1.514,0.075 2.237,0.213c0.147,0.251 0.313,0.489 0.496,0.711c1.593,0.384 3.059,1.095 4.322,2.058c0.248,0.001 0.497,-0.017 0.744,-0.052c1.131,0.986 2.081,2.176 2.788,3.521c-0.07,0.185 -0.13,0.374 -0.179,0.564c0.794,1.575 1.242,3.353 1.242,5.236l0,0.041c0.11,0.126 0.227,0.247 0.35,0.363c-0.051,1.541 -0.382,3.008 -0.944,4.353c-0.171,0.052 -0.339,0.113 -0.503,0.182c-0.78,1.662 -1.942,3.11 -3.371,4.232c-0.04,0.217 -0.067,0.437 -0.081,0.659c-1.16,0.863 -2.476,1.522 -3.898,1.92c-0.201,-0.144 -0.411,-0.273 -0.627,-0.386c-0.829,0.187 -1.691,0.286 -2.576,0.286c-0.885,0 -1.747,-0.099 -2.576,-0.286c-0.216,0.113 -0.426,0.242 -0.627,0.386c-1.421,-0.399 -2.737,-1.057 -3.895,-1.92c-0.014,-0.221 -0.041,-0.441 -0.081,-0.657c-1.431,-1.122 -2.593,-2.571 -3.374,-4.235c-0.163,-0.068 -0.33,-0.129 -0.501,-0.181c-0.562,-1.345 -0.893,-2.812 -0.946,-4.353c0.123,-0.116 0.24,-0.237 0.35,-0.363l0,-0.041c0,-1.882 0.447,-3.66 1.241,-5.235c-0.049,-0.191 -0.109,-0.379 -0.18,-0.565c0.707,-1.345 1.658,-2.536 2.789,-3.52c0.248,0.035 0.496,0.052 0.744,0.052c1.263,-0.964 2.729,-1.675 4.323,-2.059Z" style="fill:#fcf1e2;stroke:#3d3d3d;stroke-width:1.02px;stroke-linejoin:round;stroke-miterlimit:1.41421;"/> | |||
| <g transform="matrix(0.830641,0,0,0.830641,2.0323,2.07481)"> | |||
| <circle cx="12" cy="12.251" r="10.835" style="fill:#797979;stroke:#2d2d2d;stroke-width:0.7px;"/> | |||
| </g> | |||
| <g transform="matrix(0.692201,0,0,0.692201,3.69359,3.90991)"> | |||
| <path d="M9.267,0.673c0.183,-0.222 0.349,-0.459 0.496,-0.71c0.725,-0.139 1.473,-0.214 2.237,-0.214c0.764,0 1.514,0.075 2.237,0.213c0.147,0.251 0.313,0.489 0.496,0.711c1.593,0.384 3.059,1.095 4.322,2.058c0.248,0.001 0.497,-0.017 0.744,-0.052c1.131,0.986 2.081,2.176 2.788,3.521c-0.07,0.185 -0.13,0.374 -0.179,0.564c0.794,1.575 1.242,3.353 1.242,5.236l0,0.041c0.11,0.126 0.227,0.247 0.35,0.363c-0.051,1.541 -0.382,3.008 -0.944,4.353c-0.171,0.052 -0.339,0.113 -0.503,0.182c-0.78,1.662 -1.942,3.11 -3.371,4.232c-0.04,0.217 -0.067,0.437 -0.081,0.659c-1.16,0.863 -2.476,1.522 -3.898,1.92c-0.201,-0.144 -0.411,-0.273 -0.627,-0.386c-0.829,0.187 -1.691,0.286 -2.576,0.286c-0.885,0 -1.747,-0.099 -2.576,-0.286c-0.216,0.113 -0.426,0.242 -0.627,0.386c-1.421,-0.399 -2.737,-1.057 -3.895,-1.92c-0.014,-0.221 -0.041,-0.441 -0.081,-0.657c-1.431,-1.122 -2.593,-2.571 -3.374,-4.235c-0.163,-0.068 -0.33,-0.129 -0.501,-0.181c-0.562,-1.345 -0.893,-2.812 -0.946,-4.353c0.123,-0.116 0.24,-0.237 0.35,-0.363l0,-0.041c0,-1.882 0.447,-3.66 1.241,-5.235c-0.049,-0.191 -0.109,-0.379 -0.18,-0.565c0.707,-1.345 1.658,-2.536 2.789,-3.52c0.248,0.035 0.496,0.052 0.744,0.052c1.263,-0.964 2.729,-1.675 4.323,-2.059Z" style="fill:#fcf1e2;stroke:#3d3d3d;stroke-width:0.43px;stroke-linejoin:round;stroke-miterlimit:1.41421;"/> | |||
| </g> | |||
| <g transform="matrix(1.34761,0,0,1.48846,-4.21516,0.249512)"> | |||
| <path d="M13.193,0.526c0,-0.29 -0.26,-0.525 -0.58,-0.525l-1.161,0c-0.32,0 -0.58,0.235 -0.58,0.525l0,7.012c0,0.29 0.26,0.525 0.58,0.525l1.161,0c0.32,0 0.58,-0.235 0.58,-0.525l0,-7.012Z" style="fill:#2b2b2b;"/> | |||
| <path d="M13.193,0.526c0,-0.29 -0.26,-0.525 -0.58,-0.525l-1.161,0c-0.32,0 -0.58,0.235 -0.58,0.525l0,7.012c0,0.29 0.26,0.525 0.58,0.525l1.161,0c0.32,0 0.58,-0.235 0.58,-0.525l0,-7.012Z" style="fill:#080808;stroke:#8e8e8e;stroke-width:0.14px;stroke-linejoin:round;stroke-miterlimit:1.41421;"/> | |||
| </g> | |||
| </g> | |||
| </svg> | |||
| @@ -1,13 +1,15 @@ | |||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
| <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> | |||
| <svg width="28px" height="28px" version="1.1" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-miterlimit:10;"> | |||
| <svg width="28px" height="28px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-miterlimit:10;"> | |||
| <g id="IOPortB_3_"> | |||
| <g> | |||
| <circle cx="14" cy="14" r="14" style="fill:#979797;stroke:#313131;stroke-width:3px;"/> | |||
| <g transform="matrix(1.14225,0,0,1,0.958098,0.0571711)"> | |||
| <g transform="matrix(0.964286,0,0,0.964286,0.5,0.5)"> | |||
| <circle cx="14" cy="14" r="14" style="fill:#979797;stroke:#313131;stroke-width:1.5px;"/> | |||
| </g> | |||
| <g transform="matrix(1.6023,0,0,1,-0.523693,0.0571711)"> | |||
| <rect x="0.304" y="13.174" width="2.917" height="1.537" style="fill:#1c1c1c;"/> | |||
| </g> | |||
| <g transform="matrix(1.14225,0,0,1,22.9581,0.0571711)"> | |||
| <g transform="matrix(1.6023,0,0,1,22.8183,0.0571711)"> | |||
| <rect x="0.304" y="13.174" width="2.917" height="1.537" style="fill:#1c1c1c;"/> | |||
| </g> | |||
| <circle cx="13.982" cy="14.085" r="9.333" style="fill:#444;stroke:#1a1a1a;stroke-width:2px;stroke-linejoin:round;stroke-miterlimit:1.41421;"/> | |||
| @@ -2,6 +2,7 @@ | |||
| #include "LindenbergResearch.hpp" | |||
| namespace rack_plugin_LindenbergResearch { | |||
| using namespace lrt; | |||
| struct AlmaFilter : LRModule { | |||
| @@ -1,6 +1,7 @@ | |||
| #include "LindenbergResearch.hpp" | |||
| namespace rack_plugin_LindenbergResearch { | |||
| using namespace lrt; | |||
| struct BlankPanel : Module { | |||
| enum ParamIds { | |||
| @@ -1,6 +1,7 @@ | |||
| #include "LindenbergResearch.hpp" | |||
| namespace rack_plugin_LindenbergResearch { | |||
| using namespace lrt; | |||
| struct BlankPanelM1 : Module { | |||
| enum ParamIds { | |||
| @@ -1,314 +0,0 @@ | |||
| #include "LRComponents.hpp" | |||
| /** | |||
| * @brief Constructor of LCD Widget | |||
| */ | |||
| LCDWidget::LCDWidget(NVGcolor fg, unsigned char length, std::string format, LCDType type, float fontsize) { | |||
| /** load LCD ttf font */ | |||
| ttfLCDDig7 = Font::load(assetPlugin(plugin, LCD_FONT_DIG7)); | |||
| LCDWidget::fontsize = fontsize; | |||
| LCDWidget::type = type; | |||
| LCDWidget::length = length; | |||
| LCDWidget::format = format; | |||
| LCDWidget::fg = fg; | |||
| LCDWidget::bg = nvgRGBAf(fg.r, fg.g, fg.b, 0.15f); | |||
| for (int i = 0; i < LCDWidget::length; ++i) { | |||
| s1.append("O"); | |||
| s2.append("X"); | |||
| } | |||
| } | |||
| /** | |||
| * @brief Draw method of custom LCD widget | |||
| * @param vg | |||
| */ | |||
| void LCDWidget::draw(NVGcontext *vg) { | |||
| nvgFontSize(vg, fontsize); | |||
| nvgFontFaceId(vg, ttfLCDDig7->handle); | |||
| nvgTextLetterSpacing(vg, LCD_LETTER_SPACING); | |||
| nvgFillColor(vg, bg); | |||
| std::string str; | |||
| nvgTextBox(vg, 0, 0, 220, s1.c_str(), nullptr); | |||
| nvgTextBox(vg, 0, 0, 220, s2.c_str(), nullptr); | |||
| /** if set to inactive just draw the background segments */ | |||
| if (!active) return; | |||
| // if set to numeric, do some formatting | |||
| if (type == NUMERIC) { | |||
| str = stringf(format.c_str(), value); | |||
| // quick and dirty, urgs | |||
| if (value < 10) | |||
| text = "0" + text; | |||
| } | |||
| // on text mode just format | |||
| if (type == TEXT) { | |||
| str = stringf(format.c_str(), text.c_str()); | |||
| } | |||
| // on list mode get current item out of the current value | |||
| if (type == LIST) { | |||
| unsigned long index; | |||
| long current = lround(value); | |||
| if (current < 0) { | |||
| index = 0; | |||
| } else if ((unsigned long) current >= items.size()) { | |||
| index = items.size() - 1; | |||
| } else { | |||
| index = (unsigned long) current; | |||
| } | |||
| str = stringf(format.c_str(), items[index].c_str()); | |||
| } | |||
| nvgFillColor(vg, fg); | |||
| nvgTextBox(vg, 0, 0, 220, str.c_str(), nullptr); | |||
| } | |||
| void LRLight::draw(NVGcontext *vg) { | |||
| float radius = box.size.x / 1.5f; | |||
| float oradius = radius + 14.0f; | |||
| // Solid | |||
| nvgBeginPath(vg); | |||
| nvgCircle(vg, radius, radius, radius); | |||
| nvgFillColor(vg, bgColor); | |||
| nvgFill(vg); | |||
| // Border | |||
| nvgStrokeWidth(vg, 1.0f); | |||
| NVGcolor borderColor = bgColor; | |||
| borderColor.a *= 0.5f; | |||
| nvgStrokeColor(vg, borderColor); | |||
| nvgStroke(vg); | |||
| // Inner glow | |||
| nvgGlobalCompositeOperation(vg, NVG_LIGHTER); | |||
| nvgFillColor(vg, color); | |||
| nvgFill(vg); | |||
| // Outer glow | |||
| nvgBeginPath(vg); | |||
| nvgRect(vg, radius - oradius, radius - oradius, 2 * oradius, 2 * oradius); | |||
| NVGpaint paint; | |||
| NVGcolor icol = color; | |||
| icol.a *= 0.30f; | |||
| NVGcolor ocol = color; | |||
| ocol.a = 0.00f; | |||
| paint = nvgRadialGradient(vg, radius, radius, radius, oradius, icol, ocol); | |||
| nvgFillPaint(vg, paint); | |||
| nvgFill(vg); | |||
| } | |||
| /** | |||
| * @brief Constructor | |||
| */ | |||
| LRLight::LRLight() { | |||
| addBaseColor(nvgRGBAf(0.1, 0.3, 0.9, 0.99)); | |||
| } | |||
| /** | |||
| * @brief Draw routine for cv indicator | |||
| * @param vg | |||
| */ | |||
| void Indicator::draw(NVGcontext *vg) { | |||
| NVGcolor current = normalColor; | |||
| if (active) { | |||
| /** underrun */ | |||
| if (cv < 0.f - OVERFLOW_THRESHOLD) { | |||
| cv = 0.f - OVERFLOW_THRESHOLD; | |||
| current = overflowColor; | |||
| } | |||
| /** overrun */ | |||
| if (cv > 1.f + OVERFLOW_THRESHOLD) { | |||
| cv = 1.f + OVERFLOW_THRESHOLD; | |||
| current = overflowColor; | |||
| } | |||
| float a = -angle + cv * angle2; | |||
| float d = distance - 4.f; | |||
| Vec p1, p2, p3; | |||
| /** compute correct point of indicator on circle */ | |||
| p1.x = middle.x - sin(-a * (float) M_PI) * distance; | |||
| p1.y = middle.y - cos(-a * (float) M_PI) * distance; | |||
| p2.x = middle.x - sin(-(a + 0.1f) * (float) M_PI) * d; | |||
| p2.y = middle.y - cos(-(a + 0.1f) * (float) M_PI) * d; | |||
| p3.x = middle.x - sin(-(a - 0.1f) * (float) M_PI) * d; | |||
| p3.y = middle.y - cos(-(a - 0.1f) * (float) M_PI) * d; | |||
| nvgBeginPath(vg); | |||
| nvgMoveTo(vg, p1.x, p1.y); | |||
| nvgLineTo(vg, p2.x, p2.y); | |||
| nvgLineTo(vg, p3.x, p3.y); | |||
| nvgLineTo(vg, p1.x, p1.y); | |||
| nvgClosePath(vg); | |||
| nvgFillColor(vg, current); | |||
| nvgFill(vg); | |||
| } | |||
| } | |||
| /** | |||
| * @brief Draw shadow for circular knobs | |||
| * @param vg NVGcontext | |||
| * @param strength Alpha value of outside gradient | |||
| * @param size Outer size | |||
| * @param shift XY Offset shift from middle | |||
| */ | |||
| void LRShadow::drawShadow(NVGcontext *vg, float strength, float size) { | |||
| // add shadow | |||
| nvgBeginPath(vg); | |||
| nvgRect(vg, -20, -20, box.size.x + 40, box.size.y + 40); | |||
| NVGcolor icol = nvgRGBAf(0.0f, 0.0f, 0.0f, strength); | |||
| NVGcolor ocol = nvgRGBAf(0.0f, 0.0f, 0.0f, 0.f);; | |||
| NVGpaint paint = nvgRadialGradient(vg, box.size.x / 2 + shadowPos.x, box.size.y / 2 + shadowPos.y, | |||
| box.size.x * 0.3f, box.size.x * size, icol, ocol); | |||
| nvgFillPaint(vg, paint); | |||
| nvgFill(vg); | |||
| } | |||
| /** | |||
| * @brief Hook into widget draw routine to simulate shadow | |||
| * @param vg | |||
| */ | |||
| void LRShadow::draw(NVGcontext *vg) { | |||
| drawShadow(vg, strength, size); | |||
| } | |||
| /** | |||
| * @brief Setter for box dimensions | |||
| * @param box | |||
| */ | |||
| void LRShadow::setBox(const Rect &box) { | |||
| LRShadow::box = box; | |||
| } | |||
| /** | |||
| * @brief Setter for outer radius size | |||
| * @param size | |||
| */ | |||
| void LRShadow::setSize(float size) { | |||
| LRShadow::size = size; | |||
| } | |||
| /** | |||
| * @brief Setter for draw strength of shadow | |||
| * @param strength | |||
| */ | |||
| void LRShadow::setStrength(float strength) { | |||
| LRShadow::strength = strength; | |||
| } | |||
| /** | |||
| * @brief Extention for panel background | |||
| * @param vg | |||
| */ | |||
| void LRPanel::draw(NVGcontext *vg) { | |||
| FramebufferWidget::draw(vg); | |||
| nvgBeginPath(vg); | |||
| nvgRect(vg, -MARGIN, -MARGIN, box.size.x + MARGIN * 2, box.size.y + MARGIN * 2); | |||
| NVGpaint paint = nvgLinearGradient(vg, offset.x, offset.y, box.size.x, box.size.y, inner, outer); | |||
| nvgFillPaint(vg, paint); | |||
| nvgFill(vg); | |||
| } | |||
| void LRPanel::setInner(const NVGcolor &inner) { | |||
| LRPanel::inner = inner; | |||
| } | |||
| void LRPanel::setOuter(const NVGcolor &outer) { | |||
| LRPanel::outer = outer; | |||
| } | |||
| LRPanel::LRPanel() {} | |||
| const NVGcolor &LRPanel::getInner() const { | |||
| return inner; | |||
| } | |||
| const NVGcolor &LRPanel::getOuter() const { | |||
| return outer; | |||
| } | |||
| SVGRotator::SVGRotator() : FramebufferWidget() { | |||
| tw = new TransformWidget(); | |||
| addChild(tw); | |||
| sw = new SVGWidget(); | |||
| tw->addChild(sw); | |||
| } | |||
| /** | |||
| * @brief Set SVG image to rotator | |||
| * @param svg | |||
| */ | |||
| void SVGRotator::setSVG(std::shared_ptr<SVG> svg) { | |||
| sw->setSVG(svg); | |||
| tw->box.size = sw->box.size; | |||
| box.size = sw->box.size; | |||
| } | |||
| /** | |||
| * @brief Rotate one step | |||
| */ | |||
| void SVGRotator::step() { | |||
| tw->identity(); | |||
| angle = fmodf(angle + inc, 2 * M_PI);; | |||
| Vec center = sw->box.getCenter(); | |||
| tw->translate(center); | |||
| tw->rotate(angle); | |||
| tw->translate(center.neg()); | |||
| dirty = true; | |||
| FramebufferWidget::step(); | |||
| } | |||
| /** | |||
| * @brief | |||
| * @param module | |||
| */ | |||
| LRModuleWidget::LRModuleWidget(Module *module) : ModuleWidget(module) { | |||
| } | |||
| @@ -2,6 +2,7 @@ | |||
| #include "LindenbergResearch.hpp" | |||
| namespace rack_plugin_LindenbergResearch { | |||
| using namespace lrt; | |||
| struct MS20Filter : LRModule { | |||
| @@ -1,6 +1,7 @@ | |||
| #include "LindenbergResearch.hpp" | |||
| namespace rack_plugin_LindenbergResearch { | |||
| using namespace lrt; | |||
| struct ReShaper : Module { | |||
| enum ParamIds { | |||
| @@ -1,6 +1,7 @@ | |||
| #include "LindenbergResearch.hpp" | |||
| namespace rack_plugin_LindenbergResearch { | |||
| using namespace lrt; | |||
| struct SimpleFilter : Module { | |||
| enum ParamIds { | |||
| @@ -2,6 +2,7 @@ | |||
| #include "LindenbergResearch.hpp" | |||
| namespace rack_plugin_LindenbergResearch { | |||
| using namespace lrt; | |||
| struct VCO : LRModule { | |||
| enum ParamIds { | |||
| @@ -37,7 +38,7 @@ struct VCO : LRModule { | |||
| }; | |||
| dsp::DSPBLOscillator *osc = new dsp::DSPBLOscillator(engineGetSampleRate()); | |||
| LCDWidget *lcd = new LCDWidget(nvgRGBAf(0.9, 0.2, 0.1, 1.0), 9, "%00004.3f Hz", LCDWidget::NUMERIC); | |||
| LRLCDWidget *lcd = new LRLCDWidget(nvgRGBAf(0.9, 0.2, 0.1, 1.0), 9, "%00004.3f Hz", LRLCDWidget::NUMERIC); | |||
| LRBigKnob *frqKnob = NULL; | |||
| @@ -1,11 +1,22 @@ | |||
| #include "dsp/SergeWavefolder.hpp" | |||
| #include "dsp/Serge.hpp" | |||
| #include "dsp/Lockhart.hpp" | |||
| #include "LindenbergResearch.hpp" | |||
| namespace rack_plugin_LindenbergResearch { | |||
| using namespace lrt; | |||
| struct Westcoast : LRModule { | |||
| enum RotaryStages { | |||
| OVERDRIVE = 1, | |||
| LOCKHART, | |||
| SERGE, | |||
| SATURATE, | |||
| POLYNOM, | |||
| SOFTCLIP, | |||
| HARDCLIP | |||
| }; | |||
| enum ParamIds { | |||
| GAIN_PARAM, | |||
| CV_GAIN_PARAM, | |||
| @@ -25,7 +36,6 @@ struct Westcoast : LRModule { | |||
| enum OutputIds { | |||
| SHAPER_OUTPUT, | |||
| SG_OUTPUT, | |||
| NUM_OUTPUTS | |||
| }; | |||
| @@ -34,11 +44,15 @@ struct Westcoast : LRModule { | |||
| }; | |||
| Westcoast() : LRModule(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} | |||
| Westcoast() : LRModule(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { | |||
| hs = new dsp::LockhartWavefolder(engineGetSampleRate()); | |||
| sg = new dsp::SergeWavefolder(engineGetSampleRate()); | |||
| } | |||
| dsp::LockhartWavefolder *hs = new dsp::LockhartWavefolder(engineGetSampleRate()); | |||
| dsp::SergeWavefolder *sg = new dsp::SergeWavefolder(engineGetSampleRate()); | |||
| dsp::LockhartWavefolder *hs; | |||
| dsp::SergeWavefolder *sg; | |||
| LRAlternateBigKnob *gain; | |||
| LRAlternateMiddleKnob *bias; | |||
| void step() override; | |||
| void onSampleRateChange() override; | |||
| @@ -46,46 +60,55 @@ struct Westcoast : LRModule { | |||
| void Westcoast::step() { | |||
| hs->setGain((params[GAIN_PARAM].value)); | |||
| hs->setBias(params[BIAS_PARAM].value); | |||
| hs->setIn(inputs[SHAPER_INPUT].value); | |||
| sg->setGain((params[GAIN_PARAM].value)); | |||
| sg->setBias(params[BIAS_PARAM].value); | |||
| sg->setIn(inputs[SHAPER_INPUT].value); | |||
| if (params[DCBLOCK_PARAM].value == 1) | |||
| hs->setBlockDC(true); | |||
| else | |||
| hs->setBlockDC(false); | |||
| hs->process(); | |||
| sg->process(); | |||
| // [bsp] let's hear what this sounds like :-) | |||
| // (note) too much gain makes all following modules go quiet permanently | |||
| float hsOut = hs->getOut(); | |||
| float sgOut = sg->getOut(); | |||
| switch((int)params[TYPE_PARAM].value) { | |||
| default: | |||
| case -2: | |||
| if(params[GAIN_PARAM].value < 9.8f) | |||
| outputs[SHAPER_OUTPUT].value = hsOut; | |||
| else | |||
| outputs[SHAPER_OUTPUT].value = 0.0f; | |||
| break; | |||
| case -1: | |||
| if(params[GAIN_PARAM].value < 15.8f) | |||
| outputs[SHAPER_OUTPUT].value = sgOut; | |||
| else | |||
| outputs[SHAPER_OUTPUT].value = 0.0f; | |||
| break; | |||
| outputs[SHAPER_OUTPUT].value = 0.0f; | |||
| float gaincv = 0; | |||
| float biascv = 0; | |||
| if (inputs[CV_GAIN_INPUT].active) { | |||
| gaincv = inputs[CV_GAIN_INPUT].value * quadraticBipolar(params[CV_GAIN_PARAM].value) * 4.0f; | |||
| } | |||
| if (inputs[CV_BIAS_INPUT].active) { | |||
| biascv = inputs[CV_BIAS_INPUT].value * quadraticBipolar(params[CV_BIAS_PARAM].value) * 2.0f; | |||
| } | |||
| if (bias != nullptr && gain != nullptr) { | |||
| gain->setIndicatorActive(inputs[CV_GAIN_INPUT].active); | |||
| bias->setIndicatorActive(inputs[CV_BIAS_INPUT].active); | |||
| gain->setIndicatorValue((params[GAIN_PARAM].value + gaincv) / 20); | |||
| bias->setIndicatorValue((params[BIAS_PARAM].value + (biascv + 3)) / 6); | |||
| } | |||
| outputs[SG_OUTPUT].value = sgOut; | |||
| float out; | |||
| switch (lround(params[TYPE_PARAM].value)) { | |||
| case LOCKHART: // Lockhart Model | |||
| hs->setGain((params[GAIN_PARAM].value + gaincv)); | |||
| hs->setBias(params[BIAS_PARAM].value + biascv); | |||
| hs->setIn(inputs[SHAPER_INPUT].value); | |||
| hs->setBlockDC(params[DCBLOCK_PARAM].value == 1); | |||
| hs->process(); | |||
| out = (float) hs->getOut(); | |||
| break; | |||
| case SERGE: // Serge Model | |||
| sg->setGain((params[GAIN_PARAM].value + gaincv)); | |||
| sg->setBias(params[BIAS_PARAM].value + biascv); | |||
| sg->setIn(inputs[SHAPER_INPUT].value); | |||
| sg->setBlockDC(params[DCBLOCK_PARAM].value == 1); | |||
| sg->process(); | |||
| out = (float) sg->getOut(); | |||
| break; | |||
| default: // invalid state, should not happen | |||
| out = 0; | |||
| break; | |||
| } | |||
| outputs[SHAPER_OUTPUT].value = out; | |||
| } | |||
| @@ -116,9 +139,13 @@ WestcoastWidget::WestcoastWidget(Westcoast *module) : LRModuleWidget(module) { | |||
| // ***** SCREWS ********** | |||
| // ***** MAIN KNOBS ****** | |||
| addParam(LRKnob::create<LRAlternateBigKnob>(Vec(128.7, 63.0), module, Westcoast::GAIN_PARAM, 0.25, 20.f, 1.f)); | |||
| addParam(LRKnob::create<LRAlternateMiddleKnob>(Vec(136.4, 153.3), module, Westcoast::BIAS_PARAM, -0.5f, 0.5f, 0.f)); | |||
| addParam(LRKnob::create<LRMiddleIncremental>(Vec(85, 274.3), module, Westcoast::TYPE_PARAM, -3, 3, 0)); | |||
| module->gain = LRKnob::create<LRAlternateBigKnob>(Vec(128.7, 63.0), module, Westcoast::GAIN_PARAM, 0.0, 20.f, 1.f); | |||
| module->bias = LRKnob::create<LRAlternateMiddleKnob>(Vec(136.4, 153.3), module, Westcoast::BIAS_PARAM, -6.f, 6.f, 0.f); | |||
| addParam(module->gain); | |||
| addParam(module->bias); | |||
| addParam(LRKnob::create<LRMiddleIncremental>(Vec(85, 274.3), module, Westcoast::TYPE_PARAM, 1, 6, 1)); | |||
| addParam(LRKnob::create<LRAlternateSmallKnob>(Vec(83.4, 101.00), module, Westcoast::CV_GAIN_PARAM, -1.f, 1.f, 0.f)); | |||
| addParam(LRKnob::create<LRAlternateSmallKnob>(Vec(83.4, 183.0), module, Westcoast::CV_BIAS_PARAM, -1.f, 1.f, 0.f)); | |||
| @@ -135,11 +162,10 @@ WestcoastWidget::WestcoastWidget(Westcoast *module) : LRModuleWidget(module) { | |||
| // ***** OUTPUTS ********* | |||
| addOutput(Port::create<LRIOPortC>(Vec(159.4, 324.6), Port::OUTPUT, module, Westcoast::SHAPER_OUTPUT)); | |||
| // addOutput(Port::create<LRIOPortC>(Vec(159.4, 300.7), Port::OUTPUT, module, Westcoast::SG_OUTPUT)); | |||
| // ***** OUTPUTS ********* | |||
| // ***** SWITCH ********* | |||
| // addParam(ParamWidget::create<LRSwitch>(Vec(119, 331), module, Westcoast::DCBLOCK_PARAM, 0.0, 1.0, 1.0)); | |||
| addParam(ParamWidget::create<LRSwitch>(Vec(119, 331), module, Westcoast::DCBLOCK_PARAM, 0.0, 1.0, 1.0)); | |||
| // ***** SWITCH ********* | |||
| } | |||
| @@ -365,7 +365,7 @@ inline double sign(double x) { | |||
| * @param ln1 | |||
| * @return | |||
| */ | |||
| inline double lambert_W(double x, double ln1) { | |||
| inline double lambert_W_Halley(double x, double ln1) { | |||
| double w; | |||
| double p, r, s, err; | |||
| double expw; | |||
| @@ -59,7 +59,7 @@ namespace dsp { | |||
| * @param x | |||
| * @return | |||
| */ | |||
| double computeAA(double x) { | |||
| inline double computeAA(double x) { | |||
| double fn = log(cosh(x)); | |||
| double xn, out; | |||
| @@ -80,7 +80,7 @@ namespace dsp { | |||
| /** | |||
| * @brief Compute tanh | |||
| */ | |||
| void process() override { | |||
| inline void process() override { | |||
| rs->doUpsample(STD_CHANNEL, in); | |||
| for (int i = 0; i < rs->getFactor(); i++) { | |||
| @@ -0,0 +1,97 @@ | |||
| /* | |||
| Implementation of the Horner method of polynomial evaluation | |||
| Copyright (C) 2011 Darko Veberic, darko.veberic@ijs.si | |||
| This program is free software: you can redistribute it and/or modify | |||
| it under the terms of the GNU General Public License as published by | |||
| the Free Software Foundation, either version 3 of the License, or | |||
| (at your option) any later version. | |||
| This program is distributed in the hope that it will be useful, | |||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
| GNU General Public License for more details. | |||
| You should have received a copy of the GNU General Public License | |||
| along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
| */ | |||
| #pragma once | |||
| namespace dsp { | |||
| template<typename Float, class Tag, unsigned int order> | |||
| struct Polynomial { | |||
| static inline Float Coeff(); | |||
| static inline Float Coeff(const Float x); | |||
| }; | |||
| template<typename Float, class Tag, unsigned int order> | |||
| struct Horner { | |||
| static Float Recurse(const Float term, const Float x) { | |||
| return Horner<Float, Tag, order - 1>::Recurse(term * x + Polynomial<Float, Tag, order>::Coeff(), x); | |||
| } | |||
| static Float RecurseAlt(const Float term, const Float x) { | |||
| return Horner<Float, Tag, order - 1>::RecurseAlt(Polynomial<Float, Tag, order>::Coeff() + x * term, x); | |||
| } | |||
| static Float Eval(const Float x) { return Horner<Float, Tag, order - 1>::Recurse(Polynomial<Float, Tag, order>::Coeff(), x); } | |||
| static Float EvalAlt(const Float x) { return Horner<Float, Tag, order - 1>::RecurseAlt(Polynomial<Float, Tag, order>::Coeff(), x); } | |||
| // | |||
| static Float Recurse(const Float term, const Float x, const Float y) { | |||
| return Horner<Float, Tag, order - 1>::Recurse(term * x + Polynomial<Float, Tag, order>::Coeff(y), x, y); | |||
| } | |||
| static Float Eval(const Float x, const Float y) { | |||
| return Horner<Float, Tag, order - 1>::Recurse(Polynomial<Float, Tag, order>::Coeff(y), x, y); | |||
| } | |||
| }; | |||
| template<typename Float, class Tag> | |||
| struct Horner<Float, Tag, 0> { | |||
| static Float Recurse(const Float term, const Float x) { return term * x + Polynomial<Float, Tag, 0>::Coeff(); } | |||
| static Float Eval(const Float x) { return Polynomial<Float, Tag, 0>::Coeff(); } | |||
| // | |||
| static Float Recurse(const Float term, const Float x, const Float y) { return term * x + Polynomial<Float, Tag, 0>::Coeff(y); } | |||
| static Float Eval(const Float x, const Float y) { return Polynomial<Float, Tag, 0>::Coeff(y); } | |||
| }; | |||
| #define HORNER_COEFF(_Tag_, _i_, _c_) \ | |||
| template<typename Float> struct Polynomial<Float, _Tag_, _i_> { static Float Coeff() { return Float(_c_); } } | |||
| #define HORNER_COEFF2(_Tag_, _i_, _c_y_) \ | |||
| template<typename Float> struct Polynomial<Float, _Tag_, _i_> { static Float Coeff(const Float y) { return Float(_c_y_); } } | |||
| #define HORNER0(F, x, c0) (F)(c0) | |||
| #define HORNER1(F, x, c1, c0) HORNER0(F, x, (F)(c1)*(x) + (F)(c0) ) | |||
| #define HORNER2(F, x, c2, c1, c0) HORNER1(F, x, (F)(c2)*(x) + (F)(c1), c0) | |||
| #define HORNER3(F, x, c3, c2, c1, c0) HORNER2(F, x, (F)(c3)*(x) + (F)(c2), c1, c0) | |||
| #define HORNER4(F, x, c4, c3, c2, c1, c0) HORNER3(F, x, (F)(c4)*(x) + (F)(c3), c2, c1, c0) | |||
| #define HORNER5(F, x, c5, c4, c3, c2, c1, c0) HORNER4(F, x, (F)(c5)*(x) + (F)(c4), c3, c2, c1, c0) | |||
| #define HORNER6(F, x, c6, c5, c4, c3, c2, c1, c0) HORNER5(F, x, (F)(c6)*(x) + (F)(c5), c4, c3, c2, c1, c0) | |||
| #define HORNER7(F, x, c7, c6, c5, c4, c3, c2, c1, c0) HORNER6(F, x, (F)(c7)*(x) + (F)(c6), c5, c4, c3, c2, c1, c0) | |||
| #define HORNER8(F, x, c8, c7, c6, c5, c4, c3, c2, c1, c0) HORNER7(F, x, (F)(c8)*(x) + (F)(c7), c6, c5, c4, c3, c2, c1, c0) | |||
| #define HORNER9(F, x, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0) HORNER8(F, x, (F)(c9)*(x) + (F)(c8), c7, c6, c5, c4, c3, c2, c1, c0) | |||
| } | |||
| @@ -3,7 +3,6 @@ | |||
| using namespace dsp; | |||
| /** | |||
| * @brief Check parameter | |||
| */ | |||
| @@ -0,0 +1,330 @@ | |||
| /* | |||
| Implementation of the Lambert W function | |||
| Copyright (C) 2011 Darko Veberic, darko.veberic@ijs.si | |||
| This program is free software: you can redistribute it and/or modify | |||
| it under the terms of the GNU General Public License as published by | |||
| the Free Software Foundation, either version 3 of the License, or | |||
| (at your option) any later version. | |||
| This program is distributed in the hope that it will be useful, | |||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
| GNU General Public License for more details. | |||
| You should have received a copy of the GNU General Public License | |||
| along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
| */ | |||
| #include <cmath> | |||
| #include "Horner.h" | |||
| using namespace dsp; | |||
| // fork macro to keep the tree balanced | |||
| #define Y2(d1, c12, d2) \ | |||
| ((c12) ? (d1) : (d2)) | |||
| #define Y3(d1, c12, d2, c23, d3) \ | |||
| Y2(Y2(d1, c12, d2), c23, d3) | |||
| #define Y4(d1, c12, d2, c23, d3, c34, d4) \ | |||
| Y3(d1, c12, d2, c23, Y2(d3, c34, d4)) | |||
| #define Y5(d1, c12, d2, c23, d3, c34, d4, c45, d5) \ | |||
| Y4(Y2(d1, c12, d2), c23, d3, c34, d4, c45, d5) | |||
| #define Y6(d1, c12, d2, c23, d3, c34, d4, c45, d5, c56, d6) \ | |||
| Y5(d1, c12, d2, c23, d3, c34, d4, c45, Y2(d5, c56, d6)) | |||
| #define Y7(d1, c12, d2, c23, d3, c34, d4, c45, d5, c56, d6, c67, d7) \ | |||
| Y6(d1, c12, d2, c23, Y2(d3, c34, d4), c45, d5, c56, d6, c67, d7) | |||
| namespace dsp { | |||
| class BranchPoint { }; | |||
| HORNER_COEFF(BranchPoint, 0, -1); | |||
| HORNER_COEFF(BranchPoint, 1, 1); | |||
| HORNER_COEFF(BranchPoint, 2, -0.333333333333333333e0); | |||
| HORNER_COEFF(BranchPoint, 3, 0.152777777777777777e0); | |||
| HORNER_COEFF(BranchPoint, 4, -0.79629629629629630e-1); | |||
| HORNER_COEFF(BranchPoint, 5, 0.44502314814814814e-1); | |||
| HORNER_COEFF(BranchPoint, 6, -0.25984714873603760e-1); | |||
| HORNER_COEFF(BranchPoint, 7, 0.15635632532333920e-1); | |||
| HORNER_COEFF(BranchPoint, 8, -0.96168920242994320e-2); | |||
| HORNER_COEFF(BranchPoint, 9, 0.60145432529561180e-2); | |||
| HORNER_COEFF(BranchPoint, 10, -0.38112980348919993e-2); | |||
| HORNER_COEFF(BranchPoint, 11, 0.24408779911439826e-2); | |||
| HORNER_COEFF(BranchPoint, 12, -0.15769303446867841e-2); | |||
| HORNER_COEFF(BranchPoint, 13, 0.10262633205076071e-2); | |||
| HORNER_COEFF(BranchPoint, 14, -0.67206163115613620e-3); | |||
| HORNER_COEFF(BranchPoint, 15, 0.44247306181462090e-3); | |||
| HORNER_COEFF(BranchPoint, 16, -0.29267722472962746e-3); | |||
| HORNER_COEFF(BranchPoint, 17, 0.19438727605453930e-3); | |||
| HORNER_COEFF(BranchPoint, 18, -0.12957426685274883e-3); | |||
| HORNER_COEFF(BranchPoint, 19, 0.86650358052081260e-4); | |||
| template<unsigned int order> | |||
| class AsymptoticPolynomialB { }; | |||
| //HORNER_COEFF(AsymptoticPolynomialB<0>, 0, 0); | |||
| //HORNER_COEFF(AsymptoticPolynomialB<0>, 1, -1); | |||
| //HORNER_COEFF(AsymptoticPolynomialB<1>, 0, 0); | |||
| //HORNER_COEFF(AsymptoticPolynomialB<1>, 1, 1); | |||
| HORNER_COEFF(AsymptoticPolynomialB<2>, 0, 0); | |||
| HORNER_COEFF(AsymptoticPolynomialB<2>, 1, -1); | |||
| HORNER_COEFF(AsymptoticPolynomialB<2>, 2, 1./2); | |||
| HORNER_COEFF(AsymptoticPolynomialB<3>, 0, 0); | |||
| HORNER_COEFF(AsymptoticPolynomialB<3>, 1, 1); | |||
| HORNER_COEFF(AsymptoticPolynomialB<3>, 2, -3./2); | |||
| HORNER_COEFF(AsymptoticPolynomialB<3>, 3, 1./3); | |||
| HORNER_COEFF(AsymptoticPolynomialB<4>, 0, 0); | |||
| HORNER_COEFF(AsymptoticPolynomialB<4>, 1, -1); | |||
| HORNER_COEFF(AsymptoticPolynomialB<4>, 2, 3); | |||
| HORNER_COEFF(AsymptoticPolynomialB<4>, 3, -11./6); | |||
| HORNER_COEFF(AsymptoticPolynomialB<4>, 4, 1./4); | |||
| HORNER_COEFF(AsymptoticPolynomialB<5>, 0, 0); | |||
| HORNER_COEFF(AsymptoticPolynomialB<5>, 1, 1); | |||
| HORNER_COEFF(AsymptoticPolynomialB<5>, 2, -5); | |||
| HORNER_COEFF(AsymptoticPolynomialB<5>, 3, 35./6); | |||
| HORNER_COEFF(AsymptoticPolynomialB<5>, 4, -25./12); | |||
| HORNER_COEFF(AsymptoticPolynomialB<5>, 5, 1./5); | |||
| class AsymptoticPolynomialA { }; | |||
| //HORNER_COEFF2(AsymptoticPolynomialA, 0, (Horner<Float, AsymptoticPolynomialB<0>, 1>::Eval(y))); | |||
| HORNER_COEFF2(AsymptoticPolynomialA, 0, -y); | |||
| //HORNER_COEFF2(AsymptoticPolynomialA, 1, (Horner<Float, AsymptoticPolynomialB<1>, 1>::Eval(y))); | |||
| HORNER_COEFF2(AsymptoticPolynomialA, 1, y); | |||
| HORNER_COEFF2(AsymptoticPolynomialA, 2, (Horner<Float, AsymptoticPolynomialB<2>, 2>::Eval(y))); | |||
| HORNER_COEFF2(AsymptoticPolynomialA, 3, (Horner<Float, AsymptoticPolynomialB<3>, 3>::Eval(y))); | |||
| HORNER_COEFF2(AsymptoticPolynomialA, 4, (Horner<Float, AsymptoticPolynomialB<4>, 4>::Eval(y))); | |||
| HORNER_COEFF2(AsymptoticPolynomialA, 5, (Horner<Float, AsymptoticPolynomialB<5>, 5>::Eval(y))); | |||
| template<typename Float, int order> | |||
| inline | |||
| Float | |||
| AsymptoticExpansionImpl(const Float a, const Float b) | |||
| { | |||
| return a + Horner<Float, AsymptoticPolynomialA, order>::Eval(1/a, b); | |||
| } | |||
| template<typename Float, int branch, int order> | |||
| struct LogRecursionImpl { | |||
| enum { eSign = 2*branch + 1 }; | |||
| static Float Step(const Float logsx) | |||
| { return logsx - log(eSign * LogRecursionImpl<Float, branch, order-1>::Step(logsx)); } | |||
| }; | |||
| template<typename Float, int branch> | |||
| struct LogRecursionImpl<Float, branch, 0> { | |||
| static Float Step(const Float logsx) { return logsx; } | |||
| }; | |||
| template<typename Float, int branch> | |||
| class Branch { | |||
| public: | |||
| template<int order> | |||
| static Float BranchPointExpansion(const Float x) | |||
| { return Horner<Float, BranchPoint, order>::Eval(eSign * sqrt(2*(Float(M_E)*x+1))); } | |||
| // Asymptotic expansion: Corless et al. 1996, de Bruijn (1981) | |||
| template<int order> | |||
| static | |||
| Float | |||
| AsymptoticExpansion(const Float x) | |||
| { | |||
| const Float logsx = log(eSign * x); | |||
| const Float logslogsx = log(eSign * logsx); | |||
| return AsymptoticExpansionImpl<Float, order>(logsx, logslogsx); | |||
| } | |||
| // Logarithmic recursion | |||
| template<int order> | |||
| static Float LogRecursion(const Float x) | |||
| { return LogRecursionImpl<Float, branch, order>::Step(log(eSign * x)); } | |||
| private: | |||
| enum { eSign = 2*branch + 1 }; | |||
| }; | |||
| // iterations | |||
| template<typename Float> | |||
| inline | |||
| Float | |||
| HalleyStep(const Float x, const Float w) | |||
| { | |||
| const Float ew = exp(w); | |||
| const Float wew = w * ew; | |||
| const Float wewx = wew - x; | |||
| const Float w1 = w + 1; | |||
| return w - wewx / (ew * w1 - (w + 2) * wewx/(2*w1)); | |||
| } | |||
| template<typename Float> | |||
| inline | |||
| Float | |||
| FritschStep(const Float x, const Float w) | |||
| { | |||
| const Float z = log(x/w) - w; | |||
| const Float w1 = w + 1; | |||
| const Float q = 2 * w1 * (w1 + Float(2./3)*z); | |||
| const Float eps = z / w1 * (q - z) / (q - 2*z); | |||
| return w * (1 + eps); | |||
| } | |||
| template<typename Float> | |||
| inline | |||
| Float | |||
| SchroederStep(const Float x, const Float w) | |||
| { | |||
| const Float y = x * exp(-w); | |||
| const Float f0 = w - y; | |||
| const Float f1 = 1 + y; | |||
| const Float f00 = f0*f0; | |||
| const Float f11 = f1*f1; | |||
| const Float f0y = f0*y; | |||
| return w - 4*f0*(6*f1*(f11 + f0y) + f00*y) / (f11*(24*f11 + 36*f0y) + f00*(6*y*y + 8*f1*y + f0y)); | |||
| } | |||
| template< | |||
| typename Float, | |||
| double IterationStep(const Float x, const Float w) | |||
| > | |||
| struct Iterator { | |||
| template<int n, class = void> | |||
| struct Depth { | |||
| static Float Recurse(const Float x, Float w) | |||
| { return Depth<n-1>::Recurse(x, IterationStep(x, w)); } | |||
| }; | |||
| // stop condition | |||
| template<class T> | |||
| struct Depth<1, T> { | |||
| static Float Recurse(const Float x, const Float w) { return IterationStep(x, w); } | |||
| }; | |||
| // identity | |||
| template<class T> | |||
| struct Depth<0, T> { | |||
| static Float Recurse(const Float x, const Float w) { return w; } | |||
| }; | |||
| }; | |||
| // Rational approximations | |||
| template<typename Float, int branch, int n> | |||
| struct Pade { | |||
| static inline Float Approximation(const Float x); | |||
| }; | |||
| template<typename Float> | |||
| struct Pade<Float, 0, 1> { | |||
| static inline Float Approximation(const Float x) | |||
| { return x * HORNER4(Float, x, 0.07066247420543414, 2.4326814530577687, 6.39672835731526, 4.663365025836821, 0.99999908757381) / | |||
| HORNER4(Float, x, 1.2906660139511692, 7.164571775410987, 10.559985088953114, 5.66336307375819, 1); } | |||
| }; | |||
| template<typename Float> | |||
| struct Pade<Float, 0, 2> { | |||
| static inline Float Approximation(const Float x) | |||
| { const Float y = log(Float(0.5)*x) - 2; | |||
| return 2 + y * HORNER3(Float, y, 0.00006979269679670452, 0.017110368846615806, 0.19338607770900237, 0.6666648896499793) / | |||
| HORNER2(Float, y, 0.0188060684652668, 0.23451269827133317, 1); } | |||
| }; | |||
| template<typename Float> | |||
| struct Pade<Float, -1, 4> { | |||
| static inline Float Approximation(const Float x) | |||
| { return HORNER4(Float, x, -2793.4565508841197, -1987.3632221106518, 385.7992853617571, 277.2362778379572, -7.840776922133643) / | |||
| HORNER4(Float, x, 280.6156995997829, 941.9414019982657, 190.64429338894644, -63.93540494358966, 1); } | |||
| }; | |||
| template<typename Float> | |||
| struct Pade<Float, -1, 5> { | |||
| static inline Float Approximation(const Float x) | |||
| { const Float y = log(-x); | |||
| return -exp( | |||
| HORNER3(Float, y, 0.16415668298255184, -3.334873920301941, 2.4831415860003747, 4.173424474574879) / | |||
| HORNER3(Float, y, 0.031239411487374164, -1.2961659693400076, 4.517178492772906, 1) | |||
| ); } | |||
| }; | |||
| template<typename Float> | |||
| struct Pade<Float, -1, 6> { | |||
| static inline Float Approximation(const Float x) | |||
| { const Float y = log(-x); | |||
| return -exp( | |||
| HORNER4(Float, y, 0.000026987243254533254, -0.007692106448267341, 0.28793461719300206, -1.5267058884647018, -0.5370669268991288) / | |||
| HORNER4(Float, y, 3.6006502104930343e-6, -0.0015552463555591487, 0.08801194682489769, -0.8973922357575583, 1) | |||
| ); } | |||
| }; | |||
| template<typename Float> | |||
| struct Pade<Float, -1, 7> { | |||
| static inline Float Approximation(const Float x) | |||
| { return -1 - sqrt( | |||
| HORNER4(Float, x, 988.0070769375508, 1619.8111957356814, 989.2017745708083, 266.9332506485452, 26.875022558546036) / | |||
| HORNER4(Float, x, -205.50469464210596, -270.0440832897079, -109.554245632316, -11.275355431307334, 1) | |||
| ); } | |||
| }; | |||
| template<int branch> | |||
| double LambertW(const double x); | |||
| template<> | |||
| double | |||
| LambertW<0>(const double x) | |||
| { | |||
| typedef double d; | |||
| return Y5( | |||
| (Branch<d, 0>::BranchPointExpansion<8>(x)), | |||
| x < -0.367679, | |||
| (Iterator<d, HalleyStep<d> >::Depth<1>::Recurse(x, Branch<d, 0>::BranchPointExpansion<10>(x))), | |||
| x < -0.311, | |||
| (Iterator<d, HalleyStep<d> >::Depth<1>::Recurse(x, Pade<d, 0, 1>::Approximation(x))), | |||
| x < 1.38, | |||
| (Iterator<d, HalleyStep<d> >::Depth<1>::Recurse(x, Pade<d, 0, 2>::Approximation(x))), | |||
| x < 236, | |||
| (Iterator<d, HalleyStep<d> >::Depth<1>::Recurse(x, Branch<d, 0>::AsymptoticExpansion<6-1>(x))) | |||
| ); | |||
| } | |||
| template<> | |||
| double | |||
| LambertW<-1>(const double x) | |||
| { | |||
| typedef double d; | |||
| return Y7( | |||
| (Branch<d, -1>::BranchPointExpansion<8>(x)), | |||
| x < -0.367579, | |||
| (Iterator<d, HalleyStep<d> >::Depth<1>::Recurse(x, Branch<d, -1>::BranchPointExpansion<4>(x))), | |||
| x < -0.366079, | |||
| (Iterator<d, HalleyStep<d> >::Depth<1>::Recurse(x, Pade<d, -1, 7>::Approximation(x))), | |||
| x < -0.289379, | |||
| (Iterator<d, HalleyStep<d> >::Depth<1>::Recurse(x, Pade<d, -1, 4>::Approximation(x))), | |||
| x < -0.0509, | |||
| (Iterator<d, HalleyStep<d> >::Depth<1>::Recurse(x, Pade<d, -1, 5>::Approximation(x))), | |||
| x < -0.000131826, | |||
| (Iterator<d, HalleyStep<d> >::Depth<1>::Recurse(x, Pade<d, -1, 6>::Approximation(x))), | |||
| x < -6.30957e-31, | |||
| (Iterator<d, HalleyStep<d> >::Depth<1>::Recurse(x, Branch<d, -1>::LogRecursion<3>(x))) | |||
| ); | |||
| } | |||
| // instantiations | |||
| template double LambertW<0>(const double x); | |||
| template double LambertW<-1>(const double x); | |||
| } | |||
| @@ -0,0 +1,46 @@ | |||
| /* | |||
| Implementation of the Lambert W function | |||
| Copyright (C) 2011 Darko Veberic, darko.veberic@ijs.si | |||
| This program is free software: you can redistribute it and/or modify | |||
| it under the terms of the GNU General Public License as published by | |||
| the Free Software Foundation, either version 3 of the License, or | |||
| (at your option) any later version. | |||
| This program is distributed in the hope that it will be useful, | |||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
| GNU General Public License for more details. | |||
| You should have received a copy of the GNU General Public License | |||
| along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
| */ | |||
| #pragma once | |||
| #include <limits> | |||
| namespace dsp { | |||
| template<int branch> | |||
| double LambertW(const double x); | |||
| inline | |||
| double | |||
| LambertW(const int branch, const double x) { | |||
| switch (branch) { | |||
| case -1: | |||
| return LambertW<-1>(x); | |||
| case 0: | |||
| return LambertW<0>(x); | |||
| default: | |||
| return std::numeric_limits<double>::quiet_NaN(); | |||
| } | |||
| } | |||
| } | |||
| @@ -1,4 +1,5 @@ | |||
| #include "Lockhart.hpp" | |||
| #include "LambertW.h" | |||
| using namespace dsp; | |||
| @@ -10,7 +11,7 @@ double LockhartWFStage::compute(double x) { | |||
| // Compute Antiderivative | |||
| l = sign(x); | |||
| u = d * pow(M_E, l * b * x); | |||
| ln = lambert_W_Fritsch(u); | |||
| ln = dsp::LambertW<0>(u); | |||
| fn = (0.5 * LOCKHART_VT / b) * (ln * (ln + 2.)) - 0.5 * a * x * x; | |||
| // Check for ill-conditioning | |||
| @@ -18,7 +19,7 @@ double LockhartWFStage::compute(double x) { | |||
| // Compute Averaged Wavefolder Output | |||
| xn = 0.5 * (x + xn1); | |||
| u = d * pow(M_E, l * b * xn); | |||
| ln = lambert_W_Fritsch(u); | |||
| ln = dsp::LambertW<0>(u); | |||
| out = l * LOCKHART_VT * ln - a * xn; | |||
| } else { | |||
| @@ -59,22 +60,24 @@ void LockhartWavefolder::process() { | |||
| double LockhartWavefolder::compute(double x) { | |||
| double out; | |||
| double in = (x / 8. + bias) * gain; | |||
| double in = clampd(x / 5., -SHAPER_MAX_VOLTS, SHAPER_MAX_VOLTS); | |||
| in *= 0.5; | |||
| in *= clampd(gain, 0., 20.); // add gain | |||
| in += clampd(bias, -6., 6.); // add bias | |||
| in *= 0.33333; | |||
| in = lh1.compute(in); | |||
| in = lh2.compute(in); | |||
| in = lh3.compute(in); | |||
| in = lh4.compute(in); | |||
| in *= 2.f; | |||
| in *= 3.f; | |||
| if (blockDC) in = dc->filter(in); | |||
| out = tanh1->next(in / 2.); | |||
| out = tanh1->next(in); | |||
| return out * 20 * 2; | |||
| return out * 20.; | |||
| } | |||
| @@ -83,12 +86,3 @@ LockhartWavefolder::LockhartWavefolder(float sr) : WaveShaper(sr) { | |||
| tanh1 = new HQTanh(sr, 4); | |||
| } | |||
| bool LockhartWavefolder::isBlockDC() const { | |||
| return blockDC; | |||
| } | |||
| void LockhartWavefolder::setBlockDC(bool blockDC) { | |||
| LockhartWavefolder::blockDC = blockDC; | |||
| } | |||
| @@ -10,7 +10,8 @@ | |||
| #define LOCKHART_Is 10e-16 | |||
| #define LOCKHART_THRESHOLD 10e-10 | |||
| #define DCBLOCK_ALPHA 0.9999 | |||
| namespace dsp { | |||
| /** | |||
| @@ -37,9 +38,7 @@ namespace dsp { | |||
| private: | |||
| LockhartWFStage lh1, lh2, lh3, lh4; | |||
| DCBlocker *dc = new DCBlocker(DCBLOCK_ALPHA); | |||
| HQTanh *tanh1; | |||
| bool blockDC = false; | |||
| public: | |||
| @@ -51,8 +50,7 @@ namespace dsp { | |||
| double compute(double x) override; | |||
| bool isBlockDC() const; | |||
| void setBlockDC(bool blockDC); | |||
| }; | |||
| @@ -8,8 +8,8 @@ | |||
| #define LFO_MODE -4 | |||
| #define CV_BOUNDS 10.f | |||
| #define DETUNE_AMOUNT 2.0f | |||
| #define DRIFT_AMOUNT 1.4f | |||
| #define DRIFT_FREQ 0.005f | |||
| #define DRIFT_AMOUNT 0.8f | |||
| #define DRIFT_FREQ 0.0005f | |||
| #define DRIFT_VARIANZ 0.004 | |||
| namespace dsp { | |||
| @@ -0,0 +1,81 @@ | |||
| #include "Serge.hpp" | |||
| #include "LambertW.h" | |||
| using namespace dsp; | |||
| double SergeWFStage::compute(double x) { | |||
| double out; | |||
| double l, u, ln, fn, xn; | |||
| l = sign(x); | |||
| u = (SERGE_R1 * SERGE_IS) / (SERGE_ETA * SERGE_VT) * pow(M_E, (l * x) / (SERGE_ETA * SERGE_VT)); | |||
| ln = dsp::LambertW<0>(u); | |||
| fn = SERGE_VT * SERGE_ETA * SERGE_ETA * SERGE_VT * (ln * (ln + 2)) - x * x / 2; | |||
| // Check for ill-conditioning | |||
| if (abs(x - xn1) < SERGE_THRESHOLD) { | |||
| // Compute Averaged Wavefolder Output | |||
| xn = 0.5 * (x + xn1); | |||
| u = (SERGE_R1 * SERGE_IS) / (SERGE_ETA * SERGE_VT) * pow(M_E, (l * xn) / (SERGE_VT * SERGE_ETA)); | |||
| ln = dsp::LambertW<0>(u); | |||
| out = 2 * l * SERGE_ETA * SERGE_VT * ln - xn; | |||
| } else { | |||
| // Apply AA Form | |||
| out = (fn - fn1) / (x - xn1); | |||
| } | |||
| fn1 = fn; | |||
| xn1 = x; | |||
| return out; | |||
| } | |||
| SergeWFStage::SergeWFStage() { | |||
| fn1 = 0; | |||
| xn1 = 0; | |||
| } | |||
| SergeWavefolder::SergeWavefolder(float sr) : WaveShaper(sr) { | |||
| init(); | |||
| tanh1 = new HQTanh(sr, 4); | |||
| } | |||
| void SergeWavefolder::init() { | |||
| dsp::WaveShaper::rs = new dsp::Resampler<1>(1); | |||
| } | |||
| void SergeWavefolder::process() { | |||
| WaveShaper::process(); | |||
| } | |||
| double SergeWavefolder::compute(double x) { | |||
| double out; | |||
| double in = clampd(x / 5., -SHAPER_MAX_VOLTS, SHAPER_MAX_VOLTS); | |||
| in *= clampd(gain, 0., 20.); // add gain | |||
| in += clampd(bias, -3., 3.); // add bias | |||
| in *= 0.5; | |||
| in = sg1.compute(in); | |||
| in = sg2.compute(in); | |||
| in = sg3.compute(in); | |||
| in = sg4.compute(in); | |||
| in = sg5.compute(in); | |||
| in = sg6.compute(in); | |||
| in *= 2.f; | |||
| if (blockDC) in = dc->filter(in); | |||
| out = tanh1->next(in); | |||
| return out * 20.; | |||
| } | |||
| @@ -0,0 +1,44 @@ | |||
| #pragma once | |||
| #include "WaveShaper.hpp" | |||
| #include "HQTrig.hpp" | |||
| #define SERGE_R1 33e3 | |||
| #define SERGE_IS 2.52e-9 | |||
| #define SERGE_VT 25.864e-3 | |||
| #define SERGE_ETA 1.752 | |||
| #define SERGE_THRESHOLD 10e-10 | |||
| namespace dsp { | |||
| struct SergeWFStage { | |||
| private: | |||
| double fn1, xn1; | |||
| public: | |||
| SergeWFStage(); | |||
| double compute(double x); | |||
| }; | |||
| struct SergeWavefolder : WaveShaper { | |||
| private: | |||
| SergeWFStage sg1, sg2, sg3, sg4, sg5, sg6; | |||
| // DCBlocker *dc = new DCBlocker(DCBLOCK_ALPHA); | |||
| HQTanh *tanh1; | |||
| bool blockDC = false; | |||
| public: | |||
| explicit SergeWavefolder(float sr); | |||
| void init() override; | |||
| void process() override; | |||
| double compute(double x) override; | |||
| }; | |||
| } | |||
| @@ -81,6 +81,14 @@ void WaveShaper::process() { | |||
| WaveShaper::WaveShaper(float sr) : DSPEffect(sr) {} | |||
| bool WaveShaper::isBlockDC() const { | |||
| return blockDC; | |||
| } | |||
| void WaveShaper::setBlockDC(bool blockDC) { | |||
| WaveShaper::blockDC = blockDC; | |||
| } | |||
| @@ -2,6 +2,10 @@ | |||
| #include "DSPMath.hpp" | |||
| #include "DSPEffect.hpp" | |||
| #include "HQTrig.hpp" | |||
| #define SHAPER_MAX_VOLTS 1.5 | |||
| #define DCBLOCK_ALPHA 0.998 | |||
| namespace dsp { | |||
| @@ -17,6 +21,10 @@ namespace dsp { | |||
| protected: | |||
| Resampler<1> *rs; | |||
| DCBlocker *dc = new DCBlocker(DCBLOCK_ALPHA); | |||
| HQTanh *tanh1; | |||
| bool blockDC = false; | |||
| double in, gain, bias, k; | |||
| double out; | |||
| Vec amp; | |||
| @@ -53,6 +61,8 @@ namespace dsp { | |||
| const Vec &getAmplitude() const; | |||
| bool isBlockDC() const; | |||
| void setBlockDC(bool blockDC); | |||
| /** | |||
| * @brief Implements the oversamping of compute method | |||
| @@ -0,0 +1,69 @@ | |||
| #include "../LRComponents.hpp" | |||
| namespace lrt { | |||
| /** | |||
| * @brief Init indicator | |||
| * @param distance Radius viewed from the middle | |||
| * @param angle Angle of active knob area | |||
| */ | |||
| LRCVIndicator::LRCVIndicator(float distance, float angle) { | |||
| LRCVIndicator::distance = distance; | |||
| LRCVIndicator::angle = angle; | |||
| /** for optimization */ | |||
| angle2 = 2 * angle; | |||
| } | |||
| /** | |||
| * @brief Draw routine for cv indicator | |||
| * @param vg | |||
| */ | |||
| void LRCVIndicator::draw(NVGcontext *vg) { | |||
| NVGcolor current = normalColor; | |||
| if (active) { | |||
| /** underrun */ | |||
| if (cv < 0.f - OVERFLOW_THRESHOLD) { | |||
| cv = 0.f - OVERFLOW_THRESHOLD; | |||
| current = overflowColor; | |||
| } | |||
| /** overrun */ | |||
| if (cv > 1.f + OVERFLOW_THRESHOLD) { | |||
| cv = 1.f + OVERFLOW_THRESHOLD; | |||
| current = overflowColor; | |||
| } | |||
| float a = -angle + cv * angle2; | |||
| float d = distance - 4.f; | |||
| Vec p1, p2, p3; | |||
| /** compute correct point of indicator on circle */ | |||
| p1.x = middle.x - sin(-a * (float) M_PI) * distance; | |||
| p1.y = middle.y - cos(-a * (float) M_PI) * distance; | |||
| p2.x = middle.x - sin(-(a + 0.1f) * (float) M_PI) * d; | |||
| p2.y = middle.y - cos(-(a + 0.1f) * (float) M_PI) * d; | |||
| p3.x = middle.x - sin(-(a - 0.1f) * (float) M_PI) * d; | |||
| p3.y = middle.y - cos(-(a - 0.1f) * (float) M_PI) * d; | |||
| nvgBeginPath(vg); | |||
| nvgMoveTo(vg, p1.x, p1.y); | |||
| nvgLineTo(vg, p2.x, p2.y); | |||
| nvgLineTo(vg, p3.x, p3.y); | |||
| nvgLineTo(vg, p1.x, p1.y); | |||
| nvgClosePath(vg); | |||
| nvgFillColor(vg, current); | |||
| nvgFill(vg); | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,67 @@ | |||
| #include "../LRComponents.hpp" | |||
| namespace lrt { | |||
| LRKnob::LRKnob() { | |||
| minAngle = -ANGLE * (float) M_PI; | |||
| maxAngle = ANGLE * (float) M_PI; | |||
| shader = new LRShadow(); | |||
| removeChild(shadow); // uninstall default | |||
| font = Font::load(assetGlobal("res/fonts/ShareTechMono-Regular.ttf")); | |||
| indicator = new LRCVIndicator(15.f, ANGLE); | |||
| addChild(indicator); | |||
| } | |||
| void LRKnob::setSVG(std::shared_ptr<SVG> svg) { | |||
| SVGKnob::setSVG(svg); | |||
| /** inherit dimensions after loaded svg */ | |||
| indicator->box.size = sw->box.size; | |||
| indicator->middle = Vec(box.size.x / 2, box.size.y / 2); | |||
| shader->setBox(box); | |||
| } | |||
| void LRKnob::draw(NVGcontext *vg) { | |||
| /** shadow */ | |||
| shader->draw(vg); | |||
| /** component */ | |||
| FramebufferWidget::draw(vg); | |||
| /** debug numerical values */ | |||
| if (debug) { | |||
| auto text = stringf("%4.2f", value); | |||
| nvgFontSize(vg, 15); | |||
| nvgFontFaceId(vg, font->handle); | |||
| nvgFillColor(vg, nvgRGBAf(1.f, 1.f, 1.0f, 1.0f)); | |||
| nvgText(vg, box.size.x - 5, box.size.y + 10, text.c_str(), NULL); | |||
| } | |||
| } | |||
| void LRKnob::setSnap(float position, float sensitivity) { | |||
| snap = true; | |||
| snapSens = sensitivity; | |||
| snapAt = position; | |||
| } | |||
| void LRKnob::unsetSnap() { | |||
| snap = false; | |||
| } | |||
| void LRKnob::onChange(EventChange &e) { | |||
| // if the value still inside snap-tolerance keep the value zero | |||
| if (snap && value > -snapSens + snapAt && value < snapSens + snapAt) value = 0; | |||
| SVGKnob::onChange(e); | |||
| } | |||
| } | |||
| @@ -0,0 +1,80 @@ | |||
| #include "../LRComponents.hpp" | |||
| namespace lrt { | |||
| /** | |||
| * @brief Constructor of LCD Widget | |||
| */ | |||
| LRLCDWidget::LRLCDWidget(NVGcolor fg, unsigned char length, std::string format, LCDType type, float fontsize) { | |||
| /** load LCD ttf font */ | |||
| ttfLCDDig7 = Font::load(assetPlugin(plugin, LCD_FONT_DIG7)); | |||
| LRLCDWidget::fontsize = fontsize; | |||
| LRLCDWidget::type = type; | |||
| LRLCDWidget::length = length; | |||
| LRLCDWidget::format = format; | |||
| LRLCDWidget::fg = fg; | |||
| LRLCDWidget::bg = nvgRGBAf(fg.r, fg.g, fg.b, 0.15f); | |||
| for (int i = 0; i < LRLCDWidget::length; ++i) { | |||
| s1.append("O"); | |||
| s2.append("X"); | |||
| } | |||
| } | |||
| /** | |||
| * @brief Draw method of custom LCD widget | |||
| * @param vg | |||
| */ | |||
| void LRLCDWidget::draw(NVGcontext *vg) { | |||
| nvgFontSize(vg, fontsize); | |||
| nvgFontFaceId(vg, ttfLCDDig7->handle); | |||
| nvgTextLetterSpacing(vg, LCD_LETTER_SPACING); | |||
| nvgFillColor(vg, bg); | |||
| std::string str; | |||
| nvgTextBox(vg, 0, 0, 220, s1.c_str(), nullptr); | |||
| nvgTextBox(vg, 0, 0, 220, s2.c_str(), nullptr); | |||
| /** if set to inactive just draw the background segments */ | |||
| if (!active) return; | |||
| // if set to numeric, do some formatting | |||
| if (type == NUMERIC) { | |||
| str = stringf(format.c_str(), value); | |||
| // quick and dirty, urgs | |||
| if (value < 10) | |||
| text = "0" + text; | |||
| } | |||
| // on text mode just format | |||
| if (type == TEXT) { | |||
| str = stringf(format.c_str(), text.c_str()); | |||
| } | |||
| // on list mode get current item out of the current value | |||
| if (type == LIST) { | |||
| unsigned long index; | |||
| long current = lround(value); | |||
| if (current < 0) { | |||
| index = 0; | |||
| } else if ((unsigned long) current >= items.size()) { | |||
| index = items.size() - 1; | |||
| } else { | |||
| index = (unsigned long) current; | |||
| } | |||
| str = stringf(format.c_str(), items[index].c_str()); | |||
| } | |||
| nvgFillColor(vg, fg); | |||
| nvgTextBox(vg, 0, 0, 220, str.c_str(), nullptr); | |||
| } | |||
| } | |||
| @@ -0,0 +1,48 @@ | |||
| #include "../LRComponents.hpp" | |||
| namespace lrt { | |||
| void LRLight::draw(NVGcontext *vg) { | |||
| float radius = box.size.x / 1.5f; | |||
| float oradius = radius + 14.0f; | |||
| // Solid | |||
| nvgBeginPath(vg); | |||
| nvgCircle(vg, radius, radius, radius); | |||
| nvgFillColor(vg, bgColor); | |||
| nvgFill(vg); | |||
| // Border | |||
| nvgStrokeWidth(vg, 1.0f); | |||
| NVGcolor borderColor = bgColor; | |||
| borderColor.a *= 0.5f; | |||
| nvgStrokeColor(vg, borderColor); | |||
| nvgStroke(vg); | |||
| // Inner glow | |||
| nvgGlobalCompositeOperation(vg, NVG_LIGHTER); | |||
| nvgFillColor(vg, color); | |||
| nvgFill(vg); | |||
| // Outer glow | |||
| nvgBeginPath(vg); | |||
| nvgRect(vg, radius - oradius, radius - oradius, 2 * oradius, 2 * oradius); | |||
| NVGpaint paint; | |||
| NVGcolor icol = color; | |||
| icol.a *= 0.30f; | |||
| NVGcolor ocol = color; | |||
| ocol.a = 0.00f; | |||
| paint = nvgRadialGradient(vg, radius, radius, radius, oradius, icol, ocol); | |||
| nvgFillPaint(vg, paint); | |||
| nvgFill(vg); | |||
| } | |||
| /** | |||
| * @brief Constructor | |||
| */ | |||
| LRLight::LRLight() { | |||
| addBaseColor(nvgRGBAf(0.1, 0.3, 0.9, 0.99)); | |||
| } | |||
| } | |||
| @@ -0,0 +1,43 @@ | |||
| #include "../LRComponents.hpp" | |||
| namespace lrt { | |||
| /** | |||
| * @brief Extention for panel background | |||
| * @param vg | |||
| */ | |||
| void LRPanel::draw(NVGcontext *vg) { | |||
| FramebufferWidget::draw(vg); | |||
| nvgBeginPath(vg); | |||
| nvgRect(vg, -MARGIN, -MARGIN, box.size.x + MARGIN * 2, box.size.y + MARGIN * 2); | |||
| NVGpaint paint = nvgLinearGradient(vg, offset.x, offset.y, box.size.x, box.size.y, inner, outer); | |||
| nvgFillPaint(vg, paint); | |||
| nvgFill(vg); | |||
| } | |||
| void LRPanel::setInner(const NVGcolor &inner) { | |||
| LRPanel::inner = inner; | |||
| } | |||
| void LRPanel::setOuter(const NVGcolor &outer) { | |||
| LRPanel::outer = outer; | |||
| } | |||
| LRPanel::LRPanel() {} | |||
| const NVGcolor &LRPanel::getInner() const { | |||
| return inner; | |||
| } | |||
| const NVGcolor &LRPanel::getOuter() const { | |||
| return outer; | |||
| } | |||
| } | |||
| @@ -0,0 +1,42 @@ | |||
| #include "../LRComponents.hpp" | |||
| namespace lrt { | |||
| SVGRotator::SVGRotator() : FramebufferWidget() { | |||
| tw = new TransformWidget(); | |||
| addChild(tw); | |||
| sw = new SVGWidget(); | |||
| tw->addChild(sw); | |||
| } | |||
| /** | |||
| * @brief Set SVG image to rotator | |||
| * @param svg | |||
| */ | |||
| void SVGRotator::setSVG(std::shared_ptr<SVG> svg) { | |||
| sw->setSVG(svg); | |||
| tw->box.size = sw->box.size; | |||
| box.size = sw->box.size; | |||
| } | |||
| /** | |||
| * @brief Rotate one step | |||
| */ | |||
| void SVGRotator::step() { | |||
| tw->identity(); | |||
| angle = fmodf(angle + inc, 2 * M_PI);; | |||
| Vec center = sw->box.getCenter(); | |||
| tw->translate(center); | |||
| tw->rotate(angle); | |||
| tw->translate(center.neg()); | |||
| dirty = true; | |||
| FramebufferWidget::step(); | |||
| } | |||
| } | |||
| @@ -0,0 +1,69 @@ | |||
| #include "../LRComponents.hpp" | |||
| namespace lrt { | |||
| /** | |||
| * @brief Draw shadow for circular knobs | |||
| * @param vg NVGcontext | |||
| * @param strength Alpha value of outside gradient | |||
| * @param size Outer size | |||
| * @param shift XY Offset shift from middle | |||
| */ | |||
| void LRShadow::drawShadow(NVGcontext *vg, float strength, float size) { | |||
| // add shader | |||
| nvgBeginPath(vg); | |||
| nvgRect(vg, -20, -20, box.size.x + 40, box.size.y + 40); | |||
| NVGcolor icol = nvgRGBAf(0.0f, 0.0f, 0.0f, strength); | |||
| NVGcolor ocol = nvgRGBAf(0.0f, 0.0f, 0.0f, 0.f);; | |||
| NVGpaint paint = nvgRadialGradient(vg, box.size.x / 2 + shadowPos.x, box.size.y / 2 + shadowPos.y, | |||
| box.size.x * 0.3f, box.size.x * size, icol, ocol); | |||
| nvgFillPaint(vg, paint); | |||
| nvgFill(vg); | |||
| } | |||
| /** | |||
| * @brief Hook into widget draw routine to simulate shadow | |||
| * @param vg | |||
| */ | |||
| void LRShadow::draw(NVGcontext *vg) { | |||
| drawShadow(vg, strength, size); | |||
| } | |||
| /** | |||
| * @brief Setter for box dimensions | |||
| * @param box | |||
| */ | |||
| void LRShadow::setBox(const Rect &box) { | |||
| LRShadow::box = box; | |||
| } | |||
| /** | |||
| * @brief Setter for outer radius size | |||
| * @param size | |||
| */ | |||
| void LRShadow::setSize(float size) { | |||
| LRShadow::size = size; | |||
| } | |||
| /** | |||
| * @brief Setter for draw strength of shadow | |||
| * @param strength | |||
| */ | |||
| void LRShadow::setStrength(float strength) { | |||
| LRShadow::strength = strength; | |||
| } | |||
| LRShadow::LRShadow() { | |||
| } | |||
| } | |||
| @@ -0,0 +1,6 @@ | |||
| /build | |||
| /dist | |||
| /plugin.dylib | |||
| /plugin.dll | |||
| /plugin.so | |||
| .DS_Store | |||
| @@ -0,0 +1,121 @@ | |||
| Creative Commons Legal Code | |||
| CC0 1.0 Universal | |||
| CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE | |||
| LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN | |||
| ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS | |||
| INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES | |||
| REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS | |||
| PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM | |||
| THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED | |||
| HEREUNDER. | |||
| Statement of Purpose | |||
| The laws of most jurisdictions throughout the world automatically confer | |||
| exclusive Copyright and Related Rights (defined below) upon the creator | |||
| and subsequent owner(s) (each and all, an "owner") of an original work of | |||
| authorship and/or a database (each, a "Work"). | |||
| Certain owners wish to permanently relinquish those rights to a Work for | |||
| the purpose of contributing to a commons of creative, cultural and | |||
| scientific works ("Commons") that the public can reliably and without fear | |||
| of later claims of infringement build upon, modify, incorporate in other | |||
| works, reuse and redistribute as freely as possible in any form whatsoever | |||
| and for any purposes, including without limitation commercial purposes. | |||
| These owners may contribute to the Commons to promote the ideal of a free | |||
| culture and the further production of creative, cultural and scientific | |||
| works, or to gain reputation or greater distribution for their Work in | |||
| part through the use and efforts of others. | |||
| For these and/or other purposes and motivations, and without any | |||
| expectation of additional consideration or compensation, the person | |||
| associating CC0 with a Work (the "Affirmer"), to the extent that he or she | |||
| is an owner of Copyright and Related Rights in the Work, voluntarily | |||
| elects to apply CC0 to the Work and publicly distribute the Work under its | |||
| terms, with knowledge of his or her Copyright and Related Rights in the | |||
| Work and the meaning and intended legal effect of CC0 on those rights. | |||
| 1. Copyright and Related Rights. A Work made available under CC0 may be | |||
| protected by copyright and related or neighboring rights ("Copyright and | |||
| Related Rights"). Copyright and Related Rights include, but are not | |||
| limited to, the following: | |||
| i. the right to reproduce, adapt, distribute, perform, display, | |||
| communicate, and translate a Work; | |||
| ii. moral rights retained by the original author(s) and/or performer(s); | |||
| iii. publicity and privacy rights pertaining to a person's image or | |||
| likeness depicted in a Work; | |||
| iv. rights protecting against unfair competition in regards to a Work, | |||
| subject to the limitations in paragraph 4(a), below; | |||
| v. rights protecting the extraction, dissemination, use and reuse of data | |||
| in a Work; | |||
| vi. database rights (such as those arising under Directive 96/9/EC of the | |||
| European Parliament and of the Council of 11 March 1996 on the legal | |||
| protection of databases, and under any national implementation | |||
| thereof, including any amended or successor version of such | |||
| directive); and | |||
| vii. other similar, equivalent or corresponding rights throughout the | |||
| world based on applicable law or treaty, and any national | |||
| implementations thereof. | |||
| 2. Waiver. To the greatest extent permitted by, but not in contravention | |||
| of, applicable law, Affirmer hereby overtly, fully, permanently, | |||
| irrevocably and unconditionally waives, abandons, and surrenders all of | |||
| Affirmer's Copyright and Related Rights and associated claims and causes | |||
| of action, whether now known or unknown (including existing as well as | |||
| future claims and causes of action), in the Work (i) in all territories | |||
| worldwide, (ii) for the maximum duration provided by applicable law or | |||
| treaty (including future time extensions), (iii) in any current or future | |||
| medium and for any number of copies, and (iv) for any purpose whatsoever, | |||
| including without limitation commercial, advertising or promotional | |||
| purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each | |||
| member of the public at large and to the detriment of Affirmer's heirs and | |||
| successors, fully intending that such Waiver shall not be subject to | |||
| revocation, rescission, cancellation, termination, or any other legal or | |||
| equitable action to disrupt the quiet enjoyment of the Work by the public | |||
| as contemplated by Affirmer's express Statement of Purpose. | |||
| 3. Public License Fallback. Should any part of the Waiver for any reason | |||
| be judged legally invalid or ineffective under applicable law, then the | |||
| Waiver shall be preserved to the maximum extent permitted taking into | |||
| account Affirmer's express Statement of Purpose. In addition, to the | |||
| extent the Waiver is so judged Affirmer hereby grants to each affected | |||
| person a royalty-free, non transferable, non sublicensable, non exclusive, | |||
| irrevocable and unconditional license to exercise Affirmer's Copyright and | |||
| Related Rights in the Work (i) in all territories worldwide, (ii) for the | |||
| maximum duration provided by applicable law or treaty (including future | |||
| time extensions), (iii) in any current or future medium and for any number | |||
| of copies, and (iv) for any purpose whatsoever, including without | |||
| limitation commercial, advertising or promotional purposes (the | |||
| "License"). The License shall be deemed effective as of the date CC0 was | |||
| applied by Affirmer to the Work. Should any part of the License for any | |||
| reason be judged legally invalid or ineffective under applicable law, such | |||
| partial invalidity or ineffectiveness shall not invalidate the remainder | |||
| of the License, and in such case Affirmer hereby affirms that he or she | |||
| will not (i) exercise any of his or her remaining Copyright and Related | |||
| Rights in the Work or (ii) assert any associated claims and causes of | |||
| action with respect to the Work, in either case contrary to Affirmer's | |||
| express Statement of Purpose. | |||
| 4. Limitations and Disclaimers. | |||
| a. No trademark or patent rights held by Affirmer are waived, abandoned, | |||
| surrendered, licensed or otherwise affected by this document. | |||
| b. Affirmer offers the Work as-is and makes no representations or | |||
| warranties of any kind concerning the Work, express, implied, | |||
| statutory or otherwise, including without limitation warranties of | |||
| title, merchantability, fitness for a particular purpose, non | |||
| infringement, or the absence of latent or other defects, accuracy, or | |||
| the present or absence of errors, whether or not discoverable, all to | |||
| the greatest extent permissible under applicable law. | |||
| c. Affirmer disclaims responsibility for clearing rights of other persons | |||
| that may apply to the Work or any use thereof, including without | |||
| limitation any person's Copyright and Related Rights in the Work. | |||
| Further, Affirmer disclaims responsibility for obtaining any necessary | |||
| consents, permissions or other rights required for any use of the | |||
| Work. | |||
| d. Affirmer understands and acknowledges that Creative Commons is not a | |||
| party to this document and has no duty or obligation with respect to | |||
| this CC0 or use of the Work. | |||
| @@ -0,0 +1,29 @@ | |||
| # If RACK_DIR is not defined when calling the Makefile, default to three directories above | |||
| RACK_DIR ?= ../.. | |||
| # Must follow the format in the Naming section of | |||
| # https://vcvrack.com/manual/PluginDevelopmentTutorial.html | |||
| SLUG = PG-Instruments | |||
| # Must follow the format in the Versioning section of | |||
| # https://vcvrack.com/manual/PluginDevelopmentTutorial.html | |||
| VERSION = 0.6.4 | |||
| # FLAGS will be passed to both the C and C++ compiler | |||
| FLAGS += | |||
| CFLAGS += | |||
| CXXFLAGS += | |||
| # Careful about linking to shared libraries, since you can't assume much about the user's environment and library search path. | |||
| # Static libraries are fine. | |||
| LDFLAGS += | |||
| # Add .cpp and .c files to the build | |||
| SOURCES += $(wildcard src/*.cpp) | |||
| # Add files to the ZIP package when running `make dist` | |||
| # The compiled plugin is automatically added. | |||
| DISTRIBUTABLES += $(wildcard LICENSE*) res | |||
| # Include the VCV Rack plugin Makefile framework | |||
| include $(RACK_DIR)/plugin.mk | |||
| @@ -0,0 +1,39 @@ | |||
| # PG Instruments | |||
| ## PG-SEQ-3 plugin | |||
| An implementation of SEQ-3 with 16 steps instead of 8 | |||
| As this was my first plugin, I took the SEQ-3 plugin and extended it to 16 steps. The front panel is a design from scratch | |||
| as per the SEQ-3 license. | |||
| ## PG Panner | |||
| Simple stereo panner, mono in, stereo out. The panner knob sets the panning either fully left or right or centered. | |||
| This is a simple cosine/sine panner. | |||
| ## PG Quad Panner | |||
| Quad panner - four mono inputs, each with their own panner and level control. One stereo output mixed from all four inputs. | |||
| ## PG Oct Panner | |||
| Oct (yes 8!) panner, eight mono inputs, each with their own panner and level control. One stereo output mixed from all eight inputs. | |||
| ## PG VCF | |||
| Voltage Controlled Filter | |||
| ## PG Stereo VCF | |||
| Voltage Controlled Stereo Filter | |||
| ## PG Echo | |||
| Echo/delay | |||
| ## PG Stereo Echo | |||
| Stereo echo/delay | |||
| @@ -0,0 +1,11 @@ | |||
| ALL_OBJ= \ | |||
| src/PGEcho.o \ | |||
| src/PGOctPanner.o \ | |||
| src/PGPanner.o \ | |||
| src/PGQuadPanner.o \ | |||
| src/PGSEQ3.o \ | |||
| src/PGStereoEcho.o \ | |||
| src/PGStereoPingPongEcho.o \ | |||
| src/PGStereoVCF.o \ | |||
| src/PGVCF.o \ | |||
| src/Template.o | |||
| @@ -0,0 +1,7 @@ | |||
| SLUG=PG-Instruments | |||
| include ../../../build_plugin_pre.mk | |||
| include make.objects | |||
| include ../../../build_plugin_post.mk | |||
| @@ -0,0 +1,211 @@ | |||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
| <!-- Created with Inkscape (http://www.inkscape.org/) --> | |||
| <svg | |||
| xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
| xmlns:cc="http://creativecommons.org/ns#" | |||
| xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
| xmlns:svg="http://www.w3.org/2000/svg" | |||
| xmlns="http://www.w3.org/2000/svg" | |||
| xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
| xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
| width="195.29379" | |||
| height="380.00003" | |||
| viewBox="0 0 51.671483 100.54167" | |||
| version="1.1" | |||
| id="svg8630" | |||
| inkscape:version="0.92.3 (2405546, 2018-03-11)" | |||
| sodipodi:docname="PGEcho.svg"> | |||
| <defs | |||
| id="defs8624" /> | |||
| <sodipodi:namedview | |||
| id="base" | |||
| pagecolor="#ffffff" | |||
| bordercolor="#666666" | |||
| borderopacity="1.0" | |||
| inkscape:pageopacity="0.0" | |||
| inkscape:pageshadow="2" | |||
| inkscape:zoom="1.979899" | |||
| inkscape:cx="113.86719" | |||
| inkscape:cy="185.98498" | |||
| inkscape:document-units="mm" | |||
| inkscape:current-layer="layer1" | |||
| showgrid="false" | |||
| fit-margin-top="0" | |||
| fit-margin-left="0" | |||
| fit-margin-right="0" | |||
| fit-margin-bottom="0" | |||
| units="px" | |||
| inkscape:window-width="1920" | |||
| inkscape:window-height="1017" | |||
| inkscape:window-x="-8" | |||
| inkscape:window-y="-8" | |||
| inkscape:window-maximized="1" | |||
| showguides="true" | |||
| inkscape:guide-bbox="true"> | |||
| <sodipodi:guide | |||
| position="-23.386084,70.291882" | |||
| orientation="0,1" | |||
| id="guide924" | |||
| inkscape:locked="false" /> | |||
| <sodipodi:guide | |||
| position="45.836724,77.909063" | |||
| orientation="0,1" | |||
| id="guide946" | |||
| inkscape:locked="false" /> | |||
| </sodipodi:namedview> | |||
| <metadata | |||
| id="metadata8627"> | |||
| <rdf:RDF> | |||
| <cc:Work | |||
| rdf:about=""> | |||
| <dc:format>image/svg+xml</dc:format> | |||
| <dc:type | |||
| rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
| <dc:title /> | |||
| </cc:Work> | |||
| </rdf:RDF> | |||
| </metadata> | |||
| <g | |||
| inkscape:label="layer 1" | |||
| inkscape:groupmode="layer" | |||
| id="layer1" | |||
| transform="translate(-44.467833,-88.735117)"> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path33449" | |||
| d="M 44.541176,88.808436 H 96.065974 V 189.20454 H 44.541176 Z m 0,0" | |||
| style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.27602378" | |||
| sodipodi:insensitive="true" /> | |||
| <g | |||
| id="logo" | |||
| inkscape:label="#g2255" | |||
| transform="translate(11.759859,53.053001)"> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path3737" | |||
| style="font-style:normal;font-weight:normal;font-size:5.43959379px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.13598984" | |||
| d="m 55.047763,130.90923 v 1.43277 h 0.7016 q 0.38947,0 0.60216,-0.18644 0.21269,-0.18643 0.21269,-0.53122 0,-0.34223 -0.21269,-0.52867 -0.21269,-0.18644 -0.60216,-0.18644 z m -0.55797,-0.42396 h 1.25957 q 0.69332,0 1.04688,0.29115 0.35633,0.2886 0.35633,0.84792 0,0.56443 -0.35633,0.85302 -0.35356,0.2886 -1.04688,0.2886 h -0.7016 v 1.53239 h -0.55797 z" /> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path3739" | |||
| style="font-style:normal;font-weight:normal;font-size:5.43959379px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.13598984" | |||
| d="m 60.715833,133.75435 v -1.02414 h -0.91154 v -0.42396 h 1.46398 v 1.63709 q -0.32318,0.21198 -0.71265,0.3218 -0.38947,0.10726 -0.83143,0.10726 -0.96678,0 -1.5137,-0.521 -0.54415,-0.52356 -0.54415,-1.45576 0,-0.93476 0.54415,-1.45576 0.54692,-0.52357 1.5137,-0.52357 0.40328,0 0.76513,0.0919 0.36462,0.0919 0.67122,0.27072 v 0.5491 q -0.30936,-0.24263 -0.6574,-0.36522 -0.34804,-0.12259 -0.73199,-0.12259 -0.75685,0 -1.13804,0.39076 -0.37842,0.39075 -0.37842,1.16461 0,0.77129 0.37842,1.16205 0.38119,0.39076 1.13804,0.39076 0.29556,0 0.52758,-0.046 0.23203,-0.0486 0.4171,-0.14813 z" /> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path3741" | |||
| style="font-style:normal;font-weight:normal;font-size:5.43959379px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.13598984" | |||
| d="m 62.268193,131.4379 h 0.50825 v 2.86045 h -0.50825 z m 0,-1.11353 h 0.50825 v 0.59507 h -0.50825 z" /> | |||
| </g> | |||
| <g | |||
| aria-label="ECHO" | |||
| transform="scale(0.9981775,1.0018258)" | |||
| style="font-style:normal;font-weight:normal;font-size:11.10610676px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.04119742" | |||
| id="text928"> | |||
| <path | |||
| d="m 56.206211,93.880373 h 5.119221 v 0.921894 h -4.023795 v 2.396923 h 3.855685 v 0.921894 h -3.855685 v 2.933786 h 4.121407 v 0.9219 h -5.216833 z" | |||
| style="stroke-width:1.04119742" | |||
| id="path986" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 69.2971,94.504007 v 1.155079 q -0.553136,-0.515176 -1.182193,-0.770053 -0.623634,-0.254876 -1.328611,-0.254876 -1.388263,0 -2.125778,0.851396 -0.737515,0.845973 -0.737515,2.451152 0,1.599757 0.737515,2.451155 0.737515,0.84597 2.125778,0.84597 0.704977,0 1.328611,-0.25488 0.629057,-0.25487 1.182193,-0.77005 v 1.14423 q -0.574827,0.39045 -1.220153,0.58568 -0.639903,0.19522 -1.355726,0.19522 -1.838364,0 -2.89583,-1.12254 -1.057467,-1.127962 -1.057467,-3.074785 0,-1.952245 1.057467,-3.074786 1.057466,-1.127964 2.89583,-1.127964 0.726669,0 1.366572,0.195224 0.645325,0.189802 1.209307,0.574828 z" | |||
| style="stroke-width:1.04119742" | |||
| id="path988" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 70.999893,93.880373 h 1.095426 v 3.318817 h 3.980412 v -3.318817 h 1.095426 v 8.096397 h -1.095426 v -3.855686 h -3.980412 v 3.855686 h -1.095426 z" | |||
| style="stroke-width:1.04119742" | |||
| id="path990" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 82.637443,94.623311 q -1.193039,0 -1.898016,0.889356 -0.699555,0.889356 -0.699555,2.424038 0,1.529259 0.699555,2.418615 0.704977,0.88936 1.898016,0.88936 1.193039,0 1.887171,-0.88936 0.699554,-0.889356 0.699554,-2.418615 0,-1.534682 -0.699554,-2.424038 -0.694132,-0.889356 -1.887171,-0.889356 z m 0,-0.889356 q 1.702792,0 2.722298,1.144233 1.019506,1.138809 1.019506,3.058517 0,1.914285 -1.019506,3.058515 -1.019506,1.13881 -2.722298,1.13881 -1.708214,0 -2.733143,-1.13881 -1.019506,-1.138807 -1.019506,-3.058515 0,-1.919708 1.019506,-3.058517 1.024929,-1.144233 2.733143,-1.144233 z" | |||
| style="stroke-width:1.04119742" | |||
| id="path992" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="In" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text932" | |||
| transform="translate(3.346277,0.09970174)"> | |||
| <path | |||
| d="m 51.426556,109.17668 h 0.278364 v 2.05741 h -0.278364 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path981" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 53.53082,110.30254 v 0.93155 h -0.253559 v -0.92328 q 0,-0.21911 -0.08544,-0.32798 -0.08544,-0.10886 -0.256315,-0.10886 -0.205328,0 -0.323839,0.13091 -0.118511,0.13092 -0.118511,0.35691 v 0.8723 h -0.254937 v -1.5434 h 0.254937 v 0.23978 q 0.09095,-0.13918 0.213596,-0.20809 0.124023,-0.0689 0.285254,-0.0689 0.265961,0 0.402387,0.16537 0.136425,0.16398 0.136425,0.48369 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path983" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="Time" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text936" | |||
| transform="translate(2.2395567,0.13362716)"> | |||
| <path | |||
| d="m 60.228464,109.17668 h 1.740462 v 0.23427 h -0.73036 v 1.82314 h -0.279742 v -1.82314 h -0.73036 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path972" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 62.139803,109.69069 h 0.253559 v 1.5434 h -0.253559 z m 0,-0.60082 h 0.253559 v 0.32108 h -0.253559 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path974" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 64.124178,109.98697 q 0.09508,-0.17088 0.227377,-0.25218 0.132291,-0.0813 0.311436,-0.0813 0.241157,0 0.372071,0.1695 0.130913,0.16812 0.130913,0.47956 v 0.93155 h -0.254937 v -0.92328 q 0,-0.22187 -0.07855,-0.32935 -0.07855,-0.10749 -0.239779,-0.10749 -0.197059,0 -0.311436,0.13091 -0.114378,0.13092 -0.114378,0.35691 v 0.8723 H 63.91196 v -0.92328 q 0,-0.22325 -0.07855,-0.32935 -0.07855,-0.10749 -0.242535,-0.10749 -0.194303,0 -0.30868,0.13229 -0.114377,0.13091 -0.114377,0.35553 v 0.8723 h -0.254937 v -1.5434 h 0.254937 v 0.23978 q 0.08682,-0.14194 0.208084,-0.20946 0.121267,-0.0675 0.288009,-0.0675 0.168121,0 0.285254,0.0854 0.118512,0.0854 0.175011,0.24805 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path976" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 66.993254,110.399 v 0.12403 h -1.16582 q 0.01654,0.26182 0.157096,0.39963 0.141938,0.13642 0.394119,0.13642 0.146072,0 0.282498,-0.0358 0.137804,-0.0358 0.272851,-0.10748 v 0.23977 q -0.136425,0.0579 -0.279741,0.0882 -0.143316,0.0303 -0.290766,0.0303 -0.369315,0 -0.585667,-0.21498 -0.214974,-0.21497 -0.214974,-0.58153 0,-0.37896 0.20395,-0.60082 0.205328,-0.22325 0.552593,-0.22325 0.311437,0 0.49196,0.2012 0.181901,0.19981 0.181901,0.54432 z m -0.253559,-0.0744 q -0.0028,-0.20809 -0.117133,-0.33211 -0.112999,-0.12402 -0.300412,-0.12402 -0.212218,0 -0.340376,0.11989 -0.126779,0.11989 -0.146072,0.33762 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path978" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="Out" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text944" | |||
| transform="translate(-1.7194991,0.09273174)"> | |||
| <path | |||
| d="m 87.273957,109.36547 q -0.303168,0 -0.482313,0.226 -0.177767,0.226 -0.177767,0.61598 0,0.38861 0.177767,0.61461 0.179145,0.226 0.482313,0.226 0.303169,0 0.479558,-0.226 0.177767,-0.226 0.177767,-0.61461 0,-0.38998 -0.177767,-0.61598 -0.176389,-0.226 -0.479558,-0.226 z m 0,-0.226 q 0.432704,0 0.691775,0.29077 0.259072,0.28939 0.259072,0.77721 0,0.48645 -0.259072,0.77722 -0.259071,0.28939 -0.691775,0.28939 -0.434082,0 -0.694531,-0.28939 -0.259071,-0.28939 -0.259071,-0.77722 0,-0.48782 0.259071,-0.77721 0.260449,-0.29077 0.694531,-0.29077 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path948" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 88.623057,110.625 v -0.93431 h 0.253559 v 0.92466 q 0,0.21911 0.08544,0.32935 0.08544,0.10887 0.256315,0.10887 0.205328,0 0.323839,-0.13091 0.11989,-0.13092 0.11989,-0.35692 v -0.87505 h 0.253559 v 1.5434 H 89.6621 v -0.23702 q -0.09233,0.14056 -0.214974,0.20946 -0.121268,0.0675 -0.282498,0.0675 -0.265962,0 -0.403765,-0.16537 -0.137804,-0.16536 -0.137804,-0.48369 z m 0.638031,-0.97152 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path950" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 90.691492,109.25247 v 0.43822 h 0.522277 v 0.19706 h -0.522277 v 0.83785 q 0,0.18879 0.05099,0.24253 0.05236,0.0537 0.210839,0.0537 h 0.26045 v 0.21222 h -0.26045 q -0.293522,0 -0.405143,-0.10886 -0.111621,-0.11025 -0.111621,-0.39963 v -0.83785 H 90.25052 v -0.19706 h 0.186035 v -0.43822 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path952" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="Fbk" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text997" | |||
| transform="translate(1.0583333)"> | |||
| <path | |||
| d="m 74.261986,109.27271 h 1.182357 v 0.23426 H 74.54035 v 0.60634 h 0.815799 v 0.23427 H 74.54035 v 0.98254 h -0.278364 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path999" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 76.98499,110.55979 q 0,-0.27974 -0.115755,-0.43821 -0.114378,-0.15986 -0.315571,-0.15986 -0.201194,0 -0.316949,0.15986 -0.114377,0.15847 -0.114377,0.43821 0,0.27974 0.114377,0.4396 0.115755,0.15847 0.316949,0.15847 0.201193,0 0.315571,-0.15847 0.115755,-0.15986 0.115755,-0.4396 z m -0.862652,-0.53881 q 0.07993,-0.1378 0.201193,-0.20395 0.122646,-0.0675 0.292145,-0.0675 0.281119,0 0.45613,0.22324 0.176389,0.22324 0.176389,0.58704 0,0.36381 -0.176389,0.58705 -0.175011,0.22324 -0.45613,0.22324 -0.169499,0 -0.292145,-0.0662 -0.121267,-0.0675 -0.201193,-0.20532 v 0.23151 h -0.254937 v -2.14423 h 0.254937 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path1001" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 77.658851,109.18589 h 0.254937 v 1.26642 l 0.756543,-0.6656 h 0.323839 l -0.818555,0.7221 0.853006,0.82131 h -0.33073 l -0.784103,-0.75379 v 0.75379 h -0.254937 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path1003" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| </g> | |||
| </svg> | |||
| @@ -0,0 +1,395 @@ | |||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
| <!-- Created with Inkscape (http://www.inkscape.org/) --> | |||
| <svg | |||
| xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
| xmlns:cc="http://creativecommons.org/ns#" | |||
| xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
| xmlns:svg="http://www.w3.org/2000/svg" | |||
| xmlns="http://www.w3.org/2000/svg" | |||
| xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
| xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
| width="195.29379" | |||
| height="380.00003" | |||
| viewBox="0 0 51.671483 100.54167" | |||
| version="1.1" | |||
| id="svg8630" | |||
| inkscape:version="0.92.2 (5c3e80d, 2017-08-06)" | |||
| sodipodi:docname="PGOctPanner.svg"> | |||
| <defs | |||
| id="defs8624" /> | |||
| <sodipodi:namedview | |||
| id="base" | |||
| pagecolor="#ffffff" | |||
| bordercolor="#666666" | |||
| borderopacity="1.0" | |||
| inkscape:pageopacity="0.0" | |||
| inkscape:pageshadow="2" | |||
| inkscape:zoom="1.979899" | |||
| inkscape:cx="103.00805" | |||
| inkscape:cy="185.98498" | |||
| inkscape:document-units="mm" | |||
| inkscape:current-layer="text4686" | |||
| showgrid="false" | |||
| fit-margin-top="0" | |||
| fit-margin-left="0" | |||
| fit-margin-right="0" | |||
| fit-margin-bottom="0" | |||
| units="px" | |||
| inkscape:window-width="1511" | |||
| inkscape:window-height="1008" | |||
| inkscape:window-x="373" | |||
| inkscape:window-y="0" | |||
| inkscape:window-maximized="0" | |||
| showguides="true" | |||
| inkscape:guide-bbox="true"> | |||
| <sodipodi:guide | |||
| position="-30.86963,78.176333" | |||
| orientation="0,1" | |||
| id="guide2276" | |||
| inkscape:locked="false" /> | |||
| </sodipodi:namedview> | |||
| <metadata | |||
| id="metadata8627"> | |||
| <rdf:RDF> | |||
| <cc:Work | |||
| rdf:about=""> | |||
| <dc:format>image/svg+xml</dc:format> | |||
| <dc:type | |||
| rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
| <dc:title /> | |||
| </cc:Work> | |||
| </rdf:RDF> | |||
| </metadata> | |||
| <g | |||
| inkscape:label="layer 1" | |||
| inkscape:groupmode="layer" | |||
| id="layer1" | |||
| transform="translate(-44.467833,-88.735117)"> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path33449" | |||
| d="M 44.541176,88.808436 H 96.065974 V 189.20454 H 44.541176 Z m 0,0" | |||
| style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.27602378" | |||
| sodipodi:insensitive="true" /> | |||
| <g | |||
| id="logo" | |||
| inkscape:label="#g2255" | |||
| transform="translate(11.759859,53.053001)"> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path3737" | |||
| style="font-style:normal;font-weight:normal;font-size:5.43959379px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.13598984" | |||
| d="m 55.047763,130.90923 v 1.43277 h 0.7016 q 0.38947,0 0.60216,-0.18644 0.21269,-0.18643 0.21269,-0.53122 0,-0.34223 -0.21269,-0.52867 -0.21269,-0.18644 -0.60216,-0.18644 z m -0.55797,-0.42396 h 1.25957 q 0.69332,0 1.04688,0.29115 0.35633,0.2886 0.35633,0.84792 0,0.56443 -0.35633,0.85302 -0.35356,0.2886 -1.04688,0.2886 h -0.7016 v 1.53239 h -0.55797 z" /> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path3739" | |||
| style="font-style:normal;font-weight:normal;font-size:5.43959379px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.13598984" | |||
| d="m 60.715833,133.75435 v -1.02414 h -0.91154 v -0.42396 h 1.46398 v 1.63709 q -0.32318,0.21198 -0.71265,0.3218 -0.38947,0.10726 -0.83143,0.10726 -0.96678,0 -1.5137,-0.521 -0.54415,-0.52356 -0.54415,-1.45576 0,-0.93476 0.54415,-1.45576 0.54692,-0.52357 1.5137,-0.52357 0.40328,0 0.76513,0.0919 0.36462,0.0919 0.67122,0.27072 v 0.5491 q -0.30936,-0.24263 -0.6574,-0.36522 -0.34804,-0.12259 -0.73199,-0.12259 -0.75685,0 -1.13804,0.39076 -0.37842,0.39075 -0.37842,1.16461 0,0.77129 0.37842,1.16205 0.38119,0.39076 1.13804,0.39076 0.29556,0 0.52758,-0.046 0.23203,-0.0486 0.4171,-0.14813 z" /> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path3741" | |||
| style="font-style:normal;font-weight:normal;font-size:5.43959379px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.13598984" | |||
| d="m 62.268193,131.4379 h 0.50825 v 2.86045 h -0.50825 z m 0,-1.11353 h 0.50825 v 0.59507 h -0.50825 z" /> | |||
| </g> | |||
| <g | |||
| aria-label="QUAD PANNER" | |||
| transform="matrix(0.97416344,0,0,1.0265218,0,-1.5875)" | |||
| style="font-style:normal;font-weight:normal;font-size:4.54266644px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.42587495" | |||
| id="text2270"> | |||
| <path | |||
| d="m 72.235814,92.427745 v 1.244354 h 0.563397 q 0.312752,0 0.483545,-0.161922 0.170794,-0.161921 0.170794,-0.461364 0,-0.297225 -0.170794,-0.459147 -0.170793,-0.161921 -0.483545,-0.161921 z m -0.448056,-0.368204 h 1.011453 q 0.556743,0 0.840659,0.252863 0.286135,0.250645 0.286135,0.736409 0,0.4902 -0.286135,0.740845 -0.283916,0.250645 -0.840659,0.250645 h -0.563397 v 1.330859 h -0.448056 z" | |||
| style="stroke-width:0.42587495" | |||
| id="path2331" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 75.34337,92.500943 -0.607759,1.648047 h 1.217736 z m -0.252863,-0.441402 h 0.507944 l 1.262099,3.311621 h -0.465801 l -0.301661,-0.849531 h -1.492781 l -0.301661,0.849531 H 73.82619 Z" | |||
| style="stroke-width:0.42587495" | |||
| id="path2333" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 77.341876,92.059541 h 0.603323 l 1.468381,2.770405 v -2.770405 h 0.434748 v 3.311621 h -0.603323 l -1.468382,-2.770405 v 2.770405 h -0.434747 z" | |||
| style="stroke-width:0.42587495" | |||
| id="path2335" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 80.740004,92.059541 h 0.603323 l 1.468382,2.770405 v -2.770405 h 0.434747 v 3.311621 h -0.603323 l -1.468381,-2.770405 v 2.770405 h -0.434748 z" | |||
| style="stroke-width:0.42587495" | |||
| id="path2337" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 84.138131,92.059541 h 2.093885 v 0.377077 h -1.645829 v 0.980399 h 1.577068 v 0.377077 h -1.577068 v 1.199992 h 1.685755 v 0.377076 h -2.133811 z" | |||
| style="stroke-width:0.42587495" | |||
| id="path2339" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 88.583202,93.818493 q 0.144176,0.0488 0.27948,0.208502 0.137522,0.159703 0.275044,0.439183 l 0.454711,0.904984 h -0.481328 l -0.423657,-0.849531 q -0.164139,-0.332715 -0.319406,-0.441402 -0.153049,-0.108687 -0.419221,-0.108687 h -0.487981 v 1.39962 h -0.448056 v -3.311621 h 1.011453 q 0.567833,0 0.847314,0.237336 0.27948,0.237337 0.27948,0.716446 0,0.312752 -0.146395,0.519035 -0.144176,0.206284 -0.421438,0.286135 z m -1.122358,-1.390748 v 1.175593 h 0.563397 q 0.323842,0 0.487982,-0.148613 0.166357,-0.150831 0.166357,-0.441402 0,-0.290571 -0.166357,-0.436965 -0.16414,-0.148613 -0.487982,-0.148613 z" | |||
| style="stroke-width:0.42587495" | |||
| id="path2341" | |||
| inkscape:connector-curvature="0" /> | |||
| <g | |||
| aria-label="OCT (8)" | |||
| transform="scale(0.72969808,1.3704298)" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.8110671px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.2561141" | |||
| id="text4624"> | |||
| <path | |||
| d="m 80.140617,66.697985 q -0.516814,0 -0.822204,0.385262 -0.30304,0.385261 -0.30304,1.050071 0,0.662462 0.30304,1.047723 0.30539,0.385261 0.822204,0.385261 0.516814,0 0.817506,-0.385261 0.303041,-0.385261 0.303041,-1.047723 0,-0.66481 -0.303041,-1.050071 -0.300692,-0.385262 -0.817506,-0.385262 z m 0,-0.385261 q 0.737635,0 1.179276,0.495672 0.44164,0.493322 0.44164,1.324922 0,0.829252 -0.44164,1.324923 -0.441641,0.493323 -1.179276,0.493323 -0.739983,0 -1.183973,-0.493323 -0.441641,-0.493322 -0.441641,-1.324923 0,-0.8316 0.441641,-1.324922 0.44399,-0.495672 1.183973,-0.495672 z" | |||
| style="stroke-width:0.2561141" | |||
| id="path4626" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 85.13022,66.646304 v 0.50037 q -0.239614,-0.22317 -0.512116,-0.33358 -0.270152,-0.11041 -0.575542,-0.11041 -0.601384,0 -0.920869,0.368817 -0.319484,0.366468 -0.319484,1.061817 0,0.693001 0.319484,1.061818 0.319485,0.366468 0.920869,0.366468 0.30539,0 0.575542,-0.11041 0.272502,-0.11041 0.512116,-0.33358 v 0.495671 q -0.24901,0.169139 -0.52856,0.253709 -0.2772,0.08457 -0.587288,0.08457 -0.796363,0 -1.254448,-0.486275 -0.458085,-0.488624 -0.458085,-1.331971 0,-0.845695 0.458085,-1.33197 0.458085,-0.488624 1.254448,-0.488624 0.314787,0 0.591987,0.08457 0.279549,0.08222 0.523861,0.24901 z" | |||
| style="stroke-width:0.2561141" | |||
| id="path4628" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 85.38158,66.376151 h 2.966981 v 0.399357 H 87.10351 v 3.10793 h -0.476879 v -3.10793 H 85.38158 Z" | |||
| style="stroke-width:0.2561141" | |||
| id="path4630" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="M 91.360176,66.232853 Q 91.04539,66.773158 90.892695,67.301718 90.74,67.830278 90.74,68.372932 q 0,0.542655 0.152695,1.075913 0.155044,0.530908 0.467481,1.068865 h -0.375864 q -0.352373,-0.552052 -0.52856,-1.085309 -0.173837,-0.533258 -0.173837,-1.059469 0,-0.523861 0.173837,-1.05477 0.173837,-0.530909 0.52856,-1.085309 z" | |||
| style="stroke-width:0.2561141" | |||
| id="path4632" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 93.277086,68.217888 q -0.338278,0 -0.533258,0.180885 -0.192631,0.180885 -0.192631,0.49802 0,0.317136 0.192631,0.498021 0.19498,0.180885 0.533258,0.180885 0.338278,0 0.533258,-0.180885 0.194979,-0.183234 0.194979,-0.498021 0,-0.317135 -0.194979,-0.49802 -0.192631,-0.180885 -0.533258,-0.180885 z m -0.474529,-0.202027 q -0.30539,-0.07517 -0.476879,-0.284248 -0.169139,-0.209075 -0.169139,-0.509766 0,-0.420499 0.298343,-0.664811 0.300692,-0.244312 0.822204,-0.244312 0.523861,0 0.822204,0.244312 0.298342,0.244312 0.298342,0.664811 0,0.300691 -0.171488,0.509766 -0.169139,0.209075 -0.47218,0.284248 0.342976,0.07987 0.533258,0.312437 0.19263,0.232566 0.19263,0.568495 0,0.509767 -0.312437,0.782269 -0.310088,0.272502 -0.890329,0.272502 -0.580241,0 -0.892679,-0.272502 -0.310088,-0.272502 -0.310088,-0.782269 0,-0.335929 0.192631,-0.568495 0.19263,-0.232566 0.535607,-0.312437 z m -0.173838,-0.74938 q 0,0.272502 0.169139,0.425197 0.171489,0.152695 0.479228,0.152695 0.30539,0 0.476878,-0.152695 0.173837,-0.152695 0.173837,-0.425197 0,-0.272502 -0.173837,-0.425197 -0.171488,-0.152695 -0.476878,-0.152695 -0.307739,0 -0.479228,0.152695 -0.169139,0.152695 -0.169139,0.425197 z" | |||
| style="stroke-width:0.2561141" | |||
| id="path4634" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 95.196344,66.232853 h 0.375865 q 0.352373,0.5544 0.52621,1.085309 0.176187,0.530909 0.176187,1.05477 0,0.526211 -0.176187,1.059469 -0.173837,0.533257 -0.52621,1.085309 h -0.375865 q 0.312438,-0.537957 0.465133,-1.068865 0.155044,-0.533258 0.155044,-1.075913 0,-0.542654 -0.155044,-1.071214 -0.152695,-0.52856 -0.465133,-1.068865 z" | |||
| style="stroke-width:0.2561141" | |||
| id="path4636" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="5 | |||
| 6 | |||
| 7 | |||
| 8" | |||
| transform="matrix(1.0265218,0,0,0.97416344,-0.27160056,-1.5464844)" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666679px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.11267941" | |||
| id="text4641"> | |||
| <path | |||
| d="m 46.968034,148.16173 h 0.819588 v 0.1757 h -0.628385 v 0.37827 q 0.04548,-0.0155 0.09095,-0.0227 0.04548,-0.008 0.09095,-0.008 0.258382,0 0.409277,0.14159 0.150895,0.14159 0.150895,0.38344 0,0.24908 -0.155029,0.38757 -0.155029,0.13746 -0.437183,0.13746 -0.09715,0 -0.198437,-0.0165 -0.100252,-0.0165 -0.207739,-0.0496 v -0.2098 q 0.09302,0.0506 0.192236,0.0754 0.09922,0.0248 0.209806,0.0248 0.178801,0 0.283187,-0.094 0.104386,-0.0941 0.104386,-0.25528 0,-0.16123 -0.104386,-0.25528 -0.104386,-0.0941 -0.283187,-0.0941 -0.08372,0 -0.167431,0.0186 -0.08268,0.0186 -0.169499,0.0579 z" | |||
| style="stroke-width:0.11267941" | |||
| id="path4667" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 47.438289,158.37505 q -0.140559,0 -0.223242,0.0961 -0.08165,0.0961 -0.08165,0.26355 0,0.1664 0.08165,0.26355 0.08268,0.0961 0.223242,0.0961 0.14056,0 0.222209,-0.0961 0.08268,-0.0971 0.08268,-0.26355 0,-0.16743 -0.08268,-0.26355 -0.08165,-0.0961 -0.222209,-0.0961 z m 0.414445,-0.65422 v 0.19017 q -0.07855,-0.0372 -0.159163,-0.0568 -0.07958,-0.0196 -0.15813,-0.0196 -0.206706,0 -0.31626,0.13952 -0.10852,0.13953 -0.124023,0.42168 0.06098,-0.0899 0.152962,-0.13745 0.09198,-0.0486 0.202572,-0.0486 0.232544,0 0.366902,0.14159 0.135393,0.14056 0.135393,0.38344 0,0.23771 -0.14056,0.38137 -0.14056,0.14366 -0.374138,0.14366 -0.267684,0 -0.409277,-0.20463 -0.141593,-0.20568 -0.141593,-0.59532 0,-0.36587 0.173632,-0.58291 0.173633,-0.21807 0.466122,-0.21807 0.07855,0 0.15813,0.0155 0.08062,0.0155 0.167431,0.0465 z" | |||
| style="stroke-width:0.11267941" | |||
| id="path4669" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 46.913257,167.21172 h 0.992187 v 0.0889 l -0.560172,1.45418 h -0.218075 l 0.5271,-1.36736 h -0.74104 z" | |||
| style="stroke-width:0.11267941" | |||
| id="path4671" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 47.412451,178.07617 q -0.148828,0 -0.234611,0.0796 -0.08475,0.0796 -0.08475,0.21911 0,0.13952 0.08475,0.21911 0.08578,0.0796 0.234611,0.0796 0.148828,0 0.234611,-0.0796 0.08578,-0.0806 0.08578,-0.21911 0,-0.13953 -0.08578,-0.21911 -0.08475,-0.0796 -0.234611,-0.0796 z m -0.208773,-0.0889 q -0.134358,-0.0331 -0.209806,-0.12505 -0.07441,-0.092 -0.07441,-0.22428 0,-0.185 0.131258,-0.29249 0.132292,-0.10748 0.361735,-0.10748 0.230477,0 0.361735,0.10748 0.131258,0.10749 0.131258,0.29249 0,0.13229 -0.07545,0.22428 -0.07441,0.092 -0.207739,0.12505 0.150895,0.0351 0.234611,0.13746 0.08475,0.10232 0.08475,0.25012 0,0.22427 -0.137459,0.34416 -0.136426,0.11989 -0.391708,0.11989 -0.255281,0 -0.392741,-0.11989 -0.136425,-0.11989 -0.136425,-0.34416 0,-0.1478 0.08475,-0.25012 0.08475,-0.10232 0.235644,-0.13746 z m -0.07648,-0.32969 q 0,0.11989 0.07441,0.18707 0.07545,0.0672 0.21084,0.0672 0.134359,0 0.209807,-0.0672 0.07648,-0.0672 0.07648,-0.18707 0,-0.11989 -0.07648,-0.18707 -0.07545,-0.0672 -0.209807,-0.0672 -0.135392,0 -0.21084,0.0672 -0.07441,0.0672 -0.07441,0.18707 z" | |||
| style="stroke-width:0.11267941" | |||
| id="path4673" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="1 | |||
| 2 | |||
| 3 | |||
| 4" | |||
| transform="matrix(1.0265218,0,0,0.97416344,0,-2.0619792)" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666679px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.11267941" | |||
| id="text4686"> | |||
| <path | |||
| d="m 46.734871,111.98309 h 0.341065 v -1.17719 l -0.371037,0.0744 v -0.19017 l 0.36897,-0.0744 h 0.208772 v 1.36736 h 0.341065 v 0.1757 h -0.888835 z" | |||
| style="stroke-width:0.11267941" | |||
| id="path4710" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 46.878532,121.77267 h 0.728637 v 0.1757 h -0.979785 v -0.1757 q 0.118856,-0.12299 0.323495,-0.32969 0.205672,-0.20774 0.258382,-0.26769 0.100252,-0.11265 0.139526,-0.19017 0.04031,-0.0786 0.04031,-0.15399 0,-0.12299 -0.08682,-0.20051 -0.08578,-0.0775 -0.224275,-0.0775 -0.09819,0 -0.20774,0.0341 -0.10852,0.0341 -0.232544,0.10336 v -0.21084 q 0.126091,-0.0507 0.235645,-0.0765 0.109554,-0.0258 0.200505,-0.0258 0.239778,0 0.382405,0.11989 0.142627,0.11989 0.142627,0.32039 0,0.0951 -0.03617,0.18087 -0.03514,0.0847 -0.129191,0.2005 -0.02584,0.03 -0.164331,0.17364 -0.138493,0.14262 -0.390674,0.39997 z" | |||
| style="stroke-width:0.11267941" | |||
| id="path4712" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 47.331217,130.64138 q 0.149862,0.032 0.233578,0.13332 0.08475,0.10129 0.08475,0.25011 0,0.22841 -0.157096,0.35347 -0.157097,0.12506 -0.446485,0.12506 -0.09715,0 -0.200504,-0.0196 -0.10232,-0.0186 -0.211874,-0.0568 v -0.20154 q 0.08682,0.0506 0.19017,0.0765 0.103353,0.0258 0.216007,0.0258 0.196371,0 0.29869,-0.0775 0.103353,-0.0775 0.103353,-0.22531 0,-0.13642 -0.09612,-0.2129 -0.09508,-0.0775 -0.265617,-0.0775 h -0.179834 v -0.17156 h 0.188102 q 0.153996,0 0.235645,-0.061 0.08165,-0.062 0.08165,-0.17777 0,-0.11885 -0.08475,-0.1819 -0.08372,-0.0641 -0.240812,-0.0641 -0.08578,0 -0.183968,0.0186 -0.09819,0.0186 -0.216008,0.0579 v -0.18603 q 0.118856,-0.0331 0.222209,-0.0496 0.104386,-0.0165 0.19637,-0.0165 0.237712,0 0.376205,0.10852 0.138493,0.10749 0.138493,0.29146 0,0.12816 -0.07338,0.21704 -0.07338,0.0879 -0.208773,0.12196 z" | |||
| style="stroke-width:0.11267941" | |||
| id="path4714" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 47.272306,139.9018 -0.5271,0.82372 h 0.5271 z m -0.05478,-0.1819 h 0.262516 v 1.00562 h 0.220142 v 0.17363 h -0.220142 v 0.36381 h -0.207739 v -0.36381 h -0.696598 v -0.20153 z" | |||
| style="stroke-width:0.11267941" | |||
| id="path4716" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| </g> | |||
| <g | |||
| aria-label="Input" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text2274" | |||
| transform="translate(0,-10.054167)"> | |||
| <path | |||
| d="m 47.551148,108.90941 h 0.278364 v 2.05741 h -0.278364 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2362" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 49.655412,110.03527 v 0.93155 h -0.253559 v -0.92329 q 0,-0.2191 -0.08544,-0.32797 -0.08544,-0.10886 -0.256315,-0.10886 -0.205328,0 -0.323839,0.13091 -0.118511,0.13091 -0.118511,0.35691 v 0.8723 H 48.36281 v -1.5434 h 0.254938 v 0.23978 q 0.09095,-0.13919 0.213595,-0.20809 0.124024,-0.0689 0.285254,-0.0689 0.265962,0 0.402388,0.16536 0.136425,0.16399 0.136425,0.4837 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2364" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 50.409199,110.73531 v 0.81855 h -0.254937 v -2.13044 h 0.254937 v 0.23426 q 0.07993,-0.1378 0.201194,-0.20395 0.122645,-0.0675 0.292144,-0.0675 0.28112,0 0.456131,0.22324 0.176388,0.22324 0.176388,0.58705 0,0.3638 -0.176388,0.58704 -0.175011,0.22324 -0.456131,0.22324 -0.169499,0 -0.292144,-0.0661 -0.121268,-0.0675 -0.201194,-0.20533 z m 0.862652,-0.53881 q 0,-0.27975 -0.115755,-0.43822 -0.114377,-0.15985 -0.315571,-0.15985 -0.201193,0 -0.316949,0.15985 -0.114377,0.15847 -0.114377,0.43822 0,0.27974 0.114377,0.43959 0.115756,0.15847 0.316949,0.15847 0.201194,0 0.315571,-0.15847 0.115755,-0.15985 0.115755,-0.43959 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2366" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 51.929176,110.35773 v -0.93431 h 0.253559 v 0.92466 q 0,0.21911 0.08544,0.32935 0.08544,0.10887 0.256315,0.10887 0.205328,0 0.323839,-0.13092 0.119889,-0.13091 0.119889,-0.35691 v -0.87505 h 0.253559 v 1.5434 h -0.253559 v -0.23702 q -0.09233,0.14056 -0.214974,0.20946 -0.121267,0.0675 -0.282497,0.0675 -0.265962,0 -0.403766,-0.16536 -0.137803,-0.16537 -0.137803,-0.48369 z m 0.638031,-0.97152 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2368" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 53.997611,108.9852 v 0.43822 h 0.522276 v 0.19706 h -0.522276 v 0.83784 q 0,0.18879 0.05099,0.24254 0.05237,0.0537 0.21084,0.0537 h 0.260449 v 0.21222 h -0.260449 q -0.293522,0 -0.405143,-0.10887 -0.111621,-0.11024 -0.111621,-0.39963 v -0.83784 h -0.186035 v -0.19706 h 0.186035 v -0.43822 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2370" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="Pan" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text2280" | |||
| transform="translate(1.5875,-10.054167)"> | |||
| <path | |||
| d="m 60.39118,109.2718 v 0.77308 h 0.350022 q 0.194303,0 0.300412,-0.1006 0.106109,-0.10059 0.106109,-0.28663 0,-0.18466 -0.106109,-0.28525 -0.106109,-0.1006 -0.300412,-0.1006 z m -0.278364,-0.22875 h 0.628386 q 0.345887,0 0.522276,0.15709 0.177767,0.15572 0.177767,0.45751 0,0.30455 -0.177767,0.46027 -0.176389,0.15571 -0.522276,0.15571 H 60.39118 v 0.82683 h -0.278364 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2355" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 62.379689,110.32462 q -0.307302,0 -0.425814,0.0703 -0.118511,0.0703 -0.118511,0.23978 0,0.13505 0.08819,0.21497 0.08957,0.0786 0.242534,0.0786 0.21084,0 0.33762,-0.14883 0.128157,-0.1502 0.128157,-0.39825 v -0.0565 z m 0.50574,-0.10473 v 0.88057 H 62.63187 v -0.23427 q -0.08682,0.14056 -0.216352,0.20808 -0.129535,0.0662 -0.316949,0.0662 -0.237022,0 -0.377582,-0.13229 -0.139182,-0.13367 -0.139182,-0.35691 0,-0.26045 0.173633,-0.39275 0.175011,-0.13229 0.520898,-0.13229 h 0.355534 v -0.0248 q 0,-0.17501 -0.115755,-0.2701 -0.114377,-0.0965 -0.322461,-0.0965 -0.132292,0 -0.257693,0.0317 -0.125402,0.0317 -0.241157,0.0951 v -0.23427 q 0.139182,-0.0537 0.270096,-0.0799 0.130913,-0.0276 0.254937,-0.0276 0.334863,0 0.500228,0.17363 0.165364,0.17363 0.165364,0.52641 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2357" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 64.692037,110.1689 v 0.93156 h -0.253559 v -0.92329 q 0,-0.21911 -0.08544,-0.32797 -0.08544,-0.10887 -0.256315,-0.10887 -0.205328,0 -0.323839,0.13092 -0.118511,0.13091 -0.118511,0.35691 v 0.8723 h -0.254937 v -1.54341 h 0.254937 v 0.23978 q 0.09095,-0.13918 0.213596,-0.20808 0.124023,-0.0689 0.285253,-0.0689 0.265962,0 0.402388,0.16536 0.136425,0.16399 0.136425,0.48369 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2359" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="Level" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text2284" | |||
| transform="translate(0.52916667,-10.054167)"> | |||
| <path | |||
| d="m 70.937226,109.04305 h 0.278364 v 1.82314 h 1.001833 v 0.23427 h -1.280197 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2344" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 73.767716,110.26537 v 0.12402 h -1.16582 q 0.01654,0.26183 0.157096,0.39963 0.141938,0.13643 0.394119,0.13643 0.146072,0 0.282498,-0.0358 0.137804,-0.0358 0.272852,-0.10749 v 0.23978 q -0.136426,0.0579 -0.279742,0.0882 -0.143316,0.0303 -0.290766,0.0303 -0.369314,0 -0.585666,-0.21497 -0.214974,-0.21498 -0.214974,-0.58154 0,-0.37896 0.203949,-0.60082 0.205328,-0.22324 0.552594,-0.22324 0.311436,0 0.491959,0.20119 0.181901,0.19982 0.181901,0.54433 z m -0.253559,-0.0744 q -0.0028,-0.20808 -0.117133,-0.33211 -0.112999,-0.12402 -0.300412,-0.12402 -0.212218,0 -0.340376,0.11989 -0.126779,0.11989 -0.146072,0.33762 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2346" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="M 74.001983,109.55705 H 74.2707 l 0.482314,1.29536 0.482313,-1.29536 h 0.268717 l -0.578776,1.54341 h -0.344509 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2348" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 77.174227,110.26537 v 0.12402 h -1.165821 q 0.01654,0.26183 0.157097,0.39963 0.141938,0.13643 0.394119,0.13643 0.146072,0 0.282497,-0.0358 0.137804,-0.0358 0.272852,-0.10749 v 0.23978 q -0.136426,0.0579 -0.279742,0.0882 -0.143316,0.0303 -0.290766,0.0303 -0.369314,0 -0.585666,-0.21497 -0.214974,-0.21498 -0.214974,-0.58154 0,-0.37896 0.20395,-0.60082 0.205327,-0.22324 0.552593,-0.22324 0.311437,0 0.49196,0.20119 0.181901,0.19982 0.181901,0.54433 z m -0.253559,-0.0744 q -0.0028,-0.20808 -0.117134,-0.33211 -0.112999,-0.12402 -0.300412,-0.12402 -0.212218,0 -0.340375,0.11989 -0.12678,0.11989 -0.146072,0.33762 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2350" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 77.590394,108.95623 h 0.253559 v 2.14423 h -0.253559 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2352" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| id="g2321" | |||
| transform="translate(-1.6036172,-10.054167)"> | |||
| <g | |||
| transform="translate(2.6619506)" | |||
| aria-label="Output" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text2288"> | |||
| <path | |||
| d="m 81.260392,116.31448 q -0.303168,0 -0.482313,0.226 -0.177767,0.22599 -0.177767,0.61598 0,0.38861 0.177767,0.6146 0.179145,0.226 0.482313,0.226 0.303169,0 0.479558,-0.226 0.177766,-0.22599 0.177766,-0.6146 0,-0.38999 -0.177766,-0.61598 -0.176389,-0.226 -0.479558,-0.226 z m 0,-0.226 q 0.432704,0 0.691775,0.29077 0.259072,0.28938 0.259072,0.77721 0,0.48645 -0.259072,0.77721 -0.259071,0.28939 -0.691775,0.28939 -0.434082,0 -0.694531,-0.28939 -0.259071,-0.28939 -0.259071,-0.77721 0,-0.48783 0.259071,-0.77721 0.260449,-0.29077 0.694531,-0.29077 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2385" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 82.609492,117.574 v -0.9343 h 0.253559 v 0.92466 q 0,0.21911 0.08544,0.32935 0.08544,0.10886 0.256315,0.10886 0.205328,0 0.323839,-0.13091 0.11989,-0.13091 0.11989,-0.35691 v -0.87505 h 0.253559 v 1.5434 h -0.253559 v -0.23702 q -0.09233,0.14056 -0.214974,0.20946 -0.121268,0.0675 -0.282498,0.0675 -0.265962,0 -0.403765,-0.16536 -0.137804,-0.16537 -0.137804,-0.4837 z m 0.638031,-0.97151 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2387" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 84.677927,116.20148 v 0.43822 h 0.522277 v 0.19705 h -0.522277 v 0.83785 q 0,0.18879 0.05099,0.24254 0.05236,0.0537 0.210839,0.0537 h 0.26045 v 0.21222 h -0.26045 q -0.293522,0 -0.405143,-0.10887 -0.111621,-0.11024 -0.111621,-0.39963 v -0.83785 h -0.186035 v -0.19705 h 0.186035 v -0.43822 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2389" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 85.780358,117.95159 v 0.81855 h -0.254937 v -2.13044 h 0.254937 v 0.23426 q 0.07993,-0.1378 0.201193,-0.20395 0.122646,-0.0675 0.292144,-0.0675 0.28112,0 0.456131,0.22324 0.176389,0.22324 0.176389,0.58704 0,0.36381 -0.176389,0.58705 -0.175011,0.22324 -0.456131,0.22324 -0.169498,0 -0.292144,-0.0661 -0.121267,-0.0675 -0.201193,-0.20533 z m 0.862652,-0.53882 q 0,-0.27974 -0.115756,-0.43821 -0.114377,-0.15985 -0.31557,-0.15985 -0.201194,0 -0.316949,0.15985 -0.114377,0.15847 -0.114377,0.43821 0,0.27975 0.114377,0.4396 0.115755,0.15847 0.316949,0.15847 0.201193,0 0.31557,-0.15847 0.115756,-0.15985 0.115756,-0.4396 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2391" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 87.300334,117.574 v -0.9343 h 0.253559 v 0.92466 q 0,0.21911 0.08544,0.32935 0.08544,0.10886 0.256315,0.10886 0.205328,0 0.323839,-0.13091 0.119889,-0.13091 0.119889,-0.35691 v -0.87505 h 0.253559 v 1.5434 h -0.253559 v -0.23702 q -0.09233,0.14056 -0.214974,0.20946 -0.121267,0.0675 -0.282497,0.0675 -0.265962,0 -0.403766,-0.16536 -0.137803,-0.16537 -0.137803,-0.4837 z m 0.638031,-0.97151 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2393" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 89.368769,116.20148 v 0.43822 h 0.522277 v 0.19705 h -0.522277 v 0.83785 q 0,0.18879 0.05099,0.24254 0.05236,0.0537 0.21084,0.0537 h 0.260449 v 0.21222 h -0.260449 q -0.293523,0 -0.405144,-0.10887 -0.111621,-0.11024 -0.111621,-0.39963 v -0.83785 h -0.186035 v -0.19705 h 0.186035 v -0.43822 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2395" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <rect | |||
| y="120.58852" | |||
| x="82.692741" | |||
| height="24.722433" | |||
| width="7.6171818" | |||
| id="rect2306" | |||
| style="fill:#000000;fill-opacity:1;stroke-width:0.33650789" /> | |||
| <g | |||
| aria-label="L" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text2310" | |||
| transform="translate(-0.52916667)"> | |||
| <path | |||
| d="m 86.30523,121.47107 h 0.278363 v 1.82314 h 1.001834 v 0.23427 H 86.30523 Z" | |||
| style="fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| id="path2401" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="R" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text2314" | |||
| transform="translate(-0.5291667,2.1166667)"> | |||
| <path | |||
| d="m 87.013608,141.1391 q 0.08957,0.0303 0.173633,0.12954 0.08544,0.0992 0.170876,0.27285 l 0.282498,0.56224 h -0.299034 l -0.263205,-0.52779 q -0.101975,-0.20671 -0.198438,-0.27423 -0.09508,-0.0675 -0.260449,-0.0675 H 86.31632 v 0.86954 h -0.278363 v -2.05741 h 0.628385 q 0.352778,0 0.526411,0.14745 0.173633,0.14745 0.173633,0.4451 0,0.19431 -0.09095,0.32247 -0.08957,0.12815 -0.261827,0.17776 z m -0.697288,-0.86403 v 0.73036 h 0.350022 q 0.201194,0 0.303169,-0.0923 0.103352,-0.0937 0.103352,-0.27423 0,-0.18052 -0.103352,-0.27147 -0.101975,-0.0923 -0.303169,-0.0923 z" | |||
| style="fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| id="path2398" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| </g> | |||
| </g> | |||
| </svg> | |||
| @@ -0,0 +1,295 @@ | |||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
| <!-- Created with Inkscape (http://www.inkscape.org/) --> | |||
| <svg | |||
| xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
| xmlns:cc="http://creativecommons.org/ns#" | |||
| xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
| xmlns:svg="http://www.w3.org/2000/svg" | |||
| xmlns="http://www.w3.org/2000/svg" | |||
| xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
| xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
| width="75" | |||
| height="379.99997" | |||
| viewBox="0 0 19.84375 100.54166" | |||
| version="1.1" | |||
| id="svg11003" | |||
| inkscape:version="0.92.3 (2405546, 2018-03-11)" | |||
| sodipodi:docname="PGPanner.svg"> | |||
| <defs | |||
| id="defs10997" /> | |||
| <sodipodi:namedview | |||
| id="base" | |||
| pagecolor="#ffffff" | |||
| bordercolor="#666666" | |||
| borderopacity="1.0" | |||
| inkscape:pageopacity="0.0" | |||
| inkscape:pageshadow="2" | |||
| inkscape:zoom="1.979899" | |||
| inkscape:cx="-78.319185" | |||
| inkscape:cy="181.36953" | |||
| inkscape:document-units="mm" | |||
| inkscape:current-layer="svg11003" | |||
| showgrid="false" | |||
| fit-margin-top="0" | |||
| fit-margin-left="0" | |||
| fit-margin-right="0" | |||
| fit-margin-bottom="0" | |||
| inkscape:window-width="1920" | |||
| inkscape:window-height="1017" | |||
| inkscape:window-x="-8" | |||
| inkscape:window-y="-8" | |||
| inkscape:window-maximized="1" | |||
| units="px" | |||
| showguides="true" | |||
| inkscape:guide-bbox="true"> | |||
| <sodipodi:guide | |||
| position="-99.691533,91.673449" | |||
| orientation="0,1" | |||
| id="guide3755" | |||
| inkscape:locked="false" /> | |||
| <sodipodi:guide | |||
| position="-88.065309,75.637277" | |||
| orientation="0,1" | |||
| id="guide3757" | |||
| inkscape:locked="false" /> | |||
| <sodipodi:guide | |||
| position="-82.987188,60.269279" | |||
| orientation="0,1" | |||
| id="guide3759" | |||
| inkscape:locked="false" /> | |||
| <sodipodi:guide | |||
| position="-70.024616,44.366742" | |||
| orientation="0,1" | |||
| id="guide3761" | |||
| inkscape:locked="false" /> | |||
| <sodipodi:guide | |||
| position="-41.293142,20.045215" | |||
| orientation="0,1" | |||
| id="guide3763" | |||
| inkscape:locked="false" /> | |||
| </sodipodi:namedview> | |||
| <metadata | |||
| id="metadata11000"> | |||
| <rdf:RDF> | |||
| <cc:Work | |||
| rdf:about=""> | |||
| <dc:format>image/svg+xml</dc:format> | |||
| <dc:type | |||
| rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
| <dc:title></dc:title> | |||
| </cc:Work> | |||
| </rdf:RDF> | |||
| </metadata> | |||
| <g | |||
| inkscape:label="Layer 1" | |||
| inkscape:groupmode="layer" | |||
| id="layer1" | |||
| transform="translate(-64.792954,-75.127975)"> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path33429" | |||
| d="M 64.866273,75.201293 H 84.82275 V 175.59739 H 64.866273 Z m 0,0" | |||
| style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.19594605" | |||
| sodipodi:insensitive="true" /> | |||
| <g | |||
| aria-label="PGi" | |||
| transform="matrix(1.0399713,0,0,0.96156501,0.40090429,-3.3365914e-5)" | |||
| style="font-style:normal;font-weight:normal;font-size:5.43959379px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.13598984" | |||
| id="text3735"> | |||
| <path | |||
| d="m 68.720886,171.87987 v 1.49004 h 0.674637 q 0.374504,0 0.57902,-0.19389 0.204516,-0.19389 0.204516,-0.55246 0,-0.35591 -0.204516,-0.5498 -0.204516,-0.19389 -0.57902,-0.19389 z m -0.536522,-0.44091 h 1.211159 q 0.666669,0 1.006644,0.30279 0.342631,0.30013 0.342631,0.88181 0,0.58699 -0.342631,0.88712 -0.339975,0.30013 -1.006644,0.30013 h -0.674637 v 1.59364 h -0.536522 z" | |||
| style="stroke-width:0.13598984" | |||
| id="path3737" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 74.171104,174.83871 v -1.06508 h -0.876497 v -0.4409 h 1.407708 v 1.70252 q -0.310758,0.22046 -0.685262,0.33467 -0.374503,0.11155 -0.799471,0.11155 -0.929618,0 -1.455517,-0.54183 -0.523242,-0.54449 -0.523242,-1.51395 0,-0.97212 0.523242,-1.51395 0.525899,-0.54449 1.455517,-0.54449 0.387783,0 0.735726,0.0956 0.350599,0.0956 0.645421,0.28154 v 0.57105 q -0.297478,-0.25233 -0.632141,-0.37982 -0.334662,-0.12749 -0.703853,-0.12749 -0.727759,0 -1.094294,0.40638 -0.363879,0.40637 -0.363879,1.21116 0,0.80212 0.363879,1.2085 0.366535,0.40638 1.094294,0.40638 0.284197,0 0.507305,-0.0478 0.223109,-0.0505 0.401064,-0.15405 z" | |||
| style="stroke-width:0.13598984" | |||
| id="path3739" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 75.663805,172.42967 h 0.488714 v 2.97478 h -0.488714 z m 0,-1.15804 h 0.488714 v 0.61886 h -0.488714 z" | |||
| style="stroke-width:0.13598984" | |||
| id="path3741" | |||
| inkscape:connector-curvature="0" /> | |||
| <g | |||
| aria-label="Panner | |||
| " | |||
| transform="scale(0.961565,1.0399713)" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.03598065" | |||
| id="text3767"> | |||
| <path | |||
| d="m 70.560057,153.79576 v 0.77308 h 0.350021 q 0.194304,0 0.300413,-0.10059 0.106109,-0.1006 0.106109,-0.28664 0,-0.18465 -0.106109,-0.28525 -0.106109,-0.1006 -0.300413,-0.1006 z m -0.278364,-0.22875 h 0.628385 q 0.345888,0 0.522277,0.1571 0.177767,0.15571 0.177767,0.4575 0,0.30455 -0.177767,0.46027 -0.176389,0.15572 -0.522277,0.15572 h -0.350021 v 0.82682 h -0.278364 z" | |||
| style="stroke-width:0.03598065" | |||
| id="path3771" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 72.548566,154.84858 q -0.307303,0 -0.425814,0.0703 -0.118511,0.0703 -0.118511,0.23978 0,0.13505 0.08819,0.21498 0.08957,0.0786 0.242535,0.0786 0.21084,0 0.337619,-0.14883 0.128158,-0.15021 0.128158,-0.39826 v -0.0565 z m 0.50574,-0.10473 v 0.88057 h -0.253559 v -0.23427 q -0.08682,0.14056 -0.216352,0.20809 -0.129536,0.0661 -0.316949,0.0661 -0.237022,0 -0.377582,-0.13229 -0.139182,-0.13367 -0.139182,-0.35691 0,-0.26045 0.173633,-0.39274 0.17501,-0.13229 0.520898,-0.13229 h 0.355534 v -0.0248 q 0,-0.17501 -0.115755,-0.27009 -0.114377,-0.0965 -0.322461,-0.0965 -0.132292,0 -0.257693,0.0317 -0.125402,0.0317 -0.241157,0.0951 v -0.23426 q 0.139182,-0.0537 0.270095,-0.0799 0.130914,-0.0276 0.254937,-0.0276 0.334864,0 0.500228,0.17363 0.165365,0.17364 0.165365,0.52641 z" | |||
| style="stroke-width:0.03598065" | |||
| id="path3773" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 74.860914,154.69287 v 0.93155 h -0.253559 v -0.92329 q 0,-0.2191 -0.08544,-0.32797 -0.08544,-0.10886 -0.256315,-0.10886 -0.205328,0 -0.323839,0.13091 -0.118512,0.13091 -0.118512,0.35691 v 0.8723 h -0.254937 v -1.5434 h 0.254937 v 0.23978 q 0.09095,-0.13919 0.213596,-0.20809 0.124024,-0.0689 0.285254,-0.0689 0.265961,0 0.402387,0.16536 0.136426,0.16399 0.136426,0.4837 z" | |||
| style="stroke-width:0.03598065" | |||
| id="path3775" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 76.652364,154.69287 v 0.93155 h -0.253559 v -0.92329 q 0,-0.2191 -0.08544,-0.32797 -0.08544,-0.10886 -0.256315,-0.10886 -0.205327,0 -0.323839,0.13091 -0.118511,0.13091 -0.118511,0.35691 v 0.8723 h -0.254937 v -1.5434 H 75.6147 v 0.23978 q 0.09095,-0.13919 0.213596,-0.20809 0.124023,-0.0689 0.285254,-0.0689 0.265961,0 0.402387,0.16536 0.136426,0.16399 0.136426,0.4837 z" | |||
| style="stroke-width:0.03598065" | |||
| id="path3777" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 78.48102,154.78933 v 0.12402 H 77.3152 q 0.01654,0.26183 0.157096,0.39963 0.141938,0.13643 0.394119,0.13643 0.146072,0 0.282498,-0.0358 0.137804,-0.0358 0.272852,-0.10749 v 0.23978 q -0.136426,0.0579 -0.279742,0.0882 -0.143316,0.0303 -0.290766,0.0303 -0.369314,0 -0.585666,-0.21497 -0.214974,-0.21497 -0.214974,-0.58153 0,-0.37896 0.203949,-0.60083 0.205328,-0.22324 0.552594,-0.22324 0.311436,0 0.491959,0.20119 0.181901,0.19982 0.181901,0.54433 z m -0.253559,-0.0744 q -0.0028,-0.20808 -0.117133,-0.3321 -0.112999,-0.12403 -0.300412,-0.12403 -0.212218,0 -0.340376,0.11989 -0.126779,0.11989 -0.146072,0.33762 z" | |||
| style="stroke-width:0.03598065" | |||
| id="path3779" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 79.791535,154.31804 q -0.04272,-0.0248 -0.09371,-0.0358 -0.04961,-0.0124 -0.110243,-0.0124 -0.214974,0 -0.330729,0.14056 -0.114377,0.13918 -0.114377,0.40101 v 0.81304 h -0.254937 v -1.5434 h 0.254937 v 0.23978 q 0.07993,-0.14056 0.208083,-0.20809 0.128158,-0.0689 0.311437,-0.0689 0.02618,0 0.05788,0.004 0.03169,0.003 0.07028,0.01 z" | |||
| style="stroke-width:0.03598065" | |||
| id="path3781" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="L" | |||
| transform="scale(0.961565,1.0399713)" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.03598065" | |||
| id="text3786"> | |||
| <path | |||
| d="m 70.816231,129.24548 h 0.278364 v 1.82314 h 1.001834 v 0.23427 h -1.280198 z" | |||
| style="stroke-width:0.03598065" | |||
| id="path3837" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="R | |||
| " | |||
| transform="scale(0.961565,1.0399713)" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.03598065" | |||
| id="text3790"> | |||
| <path | |||
| d="m 78.874532,130.33826 q 0.08957,0.0303 0.173632,0.12954 0.08544,0.0992 0.170877,0.27285 l 0.282498,0.56224 h -0.299034 l -0.263206,-0.52779 q -0.101974,-0.20671 -0.198437,-0.27423 -0.09509,-0.0675 -0.260449,-0.0675 h -0.303169 v 0.86955 h -0.278363 v -2.05741 h 0.628385 q 0.352778,0 0.526411,0.14745 0.173632,0.14745 0.173632,0.4451 0,0.19431 -0.09095,0.32246 -0.08957,0.12816 -0.261827,0.17777 z m -0.697288,-0.86403 v 0.73036 h 0.350022 q 0.201194,0 0.303168,-0.0923 0.103353,-0.0937 0.103353,-0.27423 0,-0.18052 -0.103353,-0.27147 -0.101974,-0.0923 -0.303168,-0.0923 z" | |||
| style="stroke-width:0.03598065" | |||
| id="path3834" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="Panner CV | |||
| " | |||
| transform="scale(0.961565,1.0399713)" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.03598065" | |||
| id="text3796"> | |||
| <path | |||
| d="m 68.020994,113.5717 v 0.77308 h 0.350022 q 0.194303,0 0.300412,-0.10059 0.106109,-0.1006 0.106109,-0.28664 0,-0.18465 -0.106109,-0.28525 -0.106109,-0.1006 -0.300412,-0.1006 z m -0.278363,-0.22875 h 0.628385 q 0.345888,0 0.522276,0.1571 0.177767,0.15571 0.177767,0.4575 0,0.30455 -0.177767,0.46027 -0.176388,0.15572 -0.522276,0.15572 h -0.350022 v 0.82682 h -0.278363 z" | |||
| style="stroke-width:0.03598065" | |||
| id="path3817" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 70.009503,114.62452 q -0.307302,0 -0.425813,0.0703 -0.118512,0.0703 -0.118512,0.23978 0,0.13505 0.08819,0.21498 0.08957,0.0786 0.242534,0.0786 0.21084,0 0.33762,-0.14883 0.128157,-0.15021 0.128157,-0.39826 v -0.0565 z m 0.50574,-0.10473 v 0.88057 h -0.253559 v -0.23427 q -0.08682,0.14056 -0.216352,0.20809 -0.129535,0.0661 -0.316948,0.0661 -0.237023,0 -0.377583,-0.13229 -0.139182,-0.13367 -0.139182,-0.35691 0,-0.26045 0.173633,-0.39274 0.175011,-0.13229 0.520899,-0.13229 h 0.355533 v -0.0248 q 0,-0.17501 -0.115755,-0.27009 -0.114377,-0.0965 -0.322461,-0.0965 -0.132291,0 -0.257693,0.0317 -0.125401,0.0317 -0.241157,0.0951 v -0.23426 q 0.139182,-0.0537 0.270096,-0.0799 0.130914,-0.0276 0.254937,-0.0276 0.334863,0 0.500228,0.17363 0.165364,0.17364 0.165364,0.52641 z" | |||
| style="stroke-width:0.03598065" | |||
| id="path3819" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 72.321852,114.46881 v 0.93155 h -0.25356 v -0.92329 q 0,-0.2191 -0.08544,-0.32797 -0.08544,-0.10886 -0.256315,-0.10886 -0.205328,0 -0.323839,0.13091 -0.118511,0.13091 -0.118511,0.35691 v 0.8723 H 71.02925 v -1.5434 h 0.254937 v 0.23978 q 0.09095,-0.13919 0.213596,-0.20809 0.124023,-0.0689 0.285254,-0.0689 0.265961,0 0.402387,0.16536 0.136426,0.16399 0.136426,0.4837 z" | |||
| style="stroke-width:0.03598065" | |||
| id="path3821" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 74.113301,114.46881 v 0.93155 h -0.253559 v -0.92329 q 0,-0.2191 -0.08544,-0.32797 -0.08544,-0.10886 -0.256315,-0.10886 -0.205328,0 -0.323839,0.13091 -0.118511,0.13091 -0.118511,0.35691 v 0.8723 h -0.254938 v -1.5434 h 0.254938 v 0.23978 q 0.09095,-0.13919 0.213595,-0.20809 0.124024,-0.0689 0.285254,-0.0689 0.265962,0 0.402388,0.16536 0.136425,0.16399 0.136425,0.4837 z" | |||
| style="stroke-width:0.03598065" | |||
| id="path3823" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 75.941958,114.56527 v 0.12402 h -1.16582 q 0.01654,0.26183 0.157096,0.39963 0.141938,0.13643 0.394119,0.13643 0.146072,0 0.282498,-0.0358 0.137803,-0.0358 0.272851,-0.10749 v 0.23978 q -0.136426,0.0579 -0.279742,0.0882 -0.143315,0.0303 -0.290766,0.0303 -0.369314,0 -0.585666,-0.21497 -0.214974,-0.21497 -0.214974,-0.58153 0,-0.37896 0.20395,-0.60083 0.205328,-0.22324 0.552593,-0.22324 0.311437,0 0.49196,0.20119 0.181901,0.19982 0.181901,0.54433 z m -0.253559,-0.0744 q -0.0028,-0.20808 -0.117133,-0.3321 -0.113,-0.12403 -0.300413,-0.12403 -0.212218,0 -0.340375,0.11989 -0.12678,0.11989 -0.146072,0.33762 z" | |||
| style="stroke-width:0.03598065" | |||
| id="path3825" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 77.252472,114.09398 q -0.04272,-0.0248 -0.09371,-0.0358 -0.04961,-0.0124 -0.110243,-0.0124 -0.214974,0 -0.33073,0.14056 -0.114377,0.13918 -0.114377,0.40101 v 0.81304 h -0.254937 v -1.5434 h 0.254937 v 0.23978 q 0.07993,-0.14056 0.208084,-0.20809 0.128158,-0.0689 0.311437,-0.0689 0.02618,0 0.05788,0.004 0.03169,0.003 0.07028,0.01 z" | |||
| style="stroke-width:0.03598065" | |||
| id="path3827" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 79.971342,113.50142 v 0.29353 q -0.14056,-0.13092 -0.300413,-0.19569 -0.158474,-0.0648 -0.337619,-0.0648 -0.352778,0 -0.540191,0.21635 -0.187413,0.21497 -0.187413,0.62287 0,0.40652 0.187413,0.62287 0.187413,0.21498 0.540191,0.21498 0.179145,0 0.337619,-0.0648 0.159853,-0.0648 0.300413,-0.19568 v 0.29077 q -0.146072,0.0992 -0.310059,0.14882 -0.162608,0.0496 -0.344509,0.0496 -0.467155,0 -0.735873,-0.28525 -0.268717,-0.28663 -0.268717,-0.78135 0,-0.49609 0.268717,-0.78135 0.268718,-0.28663 0.735873,-0.28663 0.184657,0 0.347265,0.0496 0.163987,0.0482 0.307303,0.14607 z" | |||
| style="stroke-width:0.03598065" | |||
| id="path3829" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 80.93459,115.40036 -0.785481,-2.05741 h 0.290766 l 0.651812,1.73219 0.65319,-1.73219 h 0.289388 l -0.784104,2.05741 z" | |||
| style="stroke-width:0.03598065" | |||
| id="path3831" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="Input" | |||
| transform="scale(0.961565,1.0399713)" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.03598065" | |||
| id="text3802"> | |||
| <path | |||
| d="m 70.949875,98.108582 h 0.278364 v 2.057408 h -0.278364 z" | |||
| style="stroke-width:0.03598065" | |||
| id="path3806" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 73.05414,99.234439 v 0.931551 h -0.253559 v -0.923283 q 0,-0.219108 -0.08544,-0.327973 -0.08544,-0.108865 -0.256315,-0.108865 -0.205327,0 -0.323839,0.130914 -0.118511,0.130913 -0.118511,0.356912 v 0.872295 H 71.76154 v -1.5434 h 0.254937 v 0.239779 q 0.09095,-0.139182 0.213596,-0.208084 0.124023,-0.0689 0.285254,-0.0689 0.265961,0 0.402387,0.165365 0.136426,0.163986 0.136426,0.483691 z" | |||
| style="stroke-width:0.03598065" | |||
| id="path3808" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 73.807927,99.934482 v 0.818558 H 73.55299 v -2.13045 h 0.254937 v 0.234266 q 0.07993,-0.137803 0.201193,-0.203949 0.122646,-0.06752 0.292144,-0.06752 0.28112,0 0.456131,0.223242 0.176389,0.223242 0.176389,0.587044 0,0.363802 -0.176389,0.587045 -0.175011,0.223242 -0.456131,0.223242 -0.169498,0 -0.292144,-0.0662 -0.121267,-0.0675 -0.201193,-0.205324 z m 0.862652,-0.538813 q 0,-0.279741 -0.115756,-0.438216 -0.114377,-0.159852 -0.31557,-0.159852 -0.201194,0 -0.316949,0.159852 -0.114377,0.158475 -0.114377,0.438216 0,0.279742 0.114377,0.439595 0.115755,0.158474 0.316949,0.158474 0.201193,0 0.31557,-0.158474 0.115756,-0.159853 0.115756,-0.439595 z" | |||
| style="stroke-width:0.03598065" | |||
| id="path3810" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 75.327903,99.5569 v -0.93431 h 0.253559 v 0.924664 q 0,0.219108 0.08544,0.329351 0.08544,0.108865 0.256315,0.108865 0.205328,0 0.323839,-0.130914 0.11989,-0.130914 0.11989,-0.356912 V 98.62259 h 0.253559 v 1.5434 h -0.253559 v -0.23702 q -0.09233,0.14056 -0.214974,0.20946 -0.121268,0.0675 -0.282498,0.0675 -0.265961,0 -0.403765,-0.16537 -0.137804,-0.165363 -0.137804,-0.48369 z m 0.638032,-0.971517 z" | |||
| style="stroke-width:0.03598065" | |||
| id="path3812" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 77.396338,98.184374 v 0.438216 h 0.522277 v 0.197059 h -0.522277 v 0.837848 q 0,0.188791 0.05099,0.242534 0.05236,0.05374 0.210839,0.05374 h 0.26045 v 0.212219 h -0.26045 q -0.293522,0 -0.405143,-0.10886 -0.111621,-0.110249 -0.111621,-0.399637 V 98.819649 H 76.955366 V 98.62259 h 0.186035 v -0.438216 z" | |||
| style="stroke-width:0.03598065" | |||
| id="path3814" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| </g> | |||
| <g | |||
| aria-label="Panning" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text3842"> | |||
| <path | |||
| d="m 69.49098,82.167529 v 0.773079 h 0.350022 q 0.194303,0 0.300412,-0.100597 0.106109,-0.100597 0.106109,-0.286632 0,-0.184657 -0.106109,-0.285254 -0.106109,-0.100596 -0.300412,-0.100596 z m -0.278364,-0.228755 h 0.628386 q 0.345887,0 0.522276,0.157097 0.177767,0.155718 0.177767,0.457508 0,0.304547 -0.177767,0.460265 -0.176389,0.155718 -0.522276,0.155718 H 69.49098 v 0.826823 h -0.278364 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path3844" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 71.479489,83.22035 q -0.307302,0 -0.425813,0.07028 -0.118512,0.07028 -0.118512,0.239778 0,0.135048 0.08819,0.214974 0.08957,0.07855 0.242534,0.07855 0.21084,0 0.33762,-0.148829 0.128157,-0.150206 0.128157,-0.398253 v -0.0565 z m 0.50574,-0.104731 v 0.880566 H 71.73167 v -0.234266 q -0.08682,0.14056 -0.216352,0.208084 -0.129535,0.06614 -0.316948,0.06614 -0.237023,0 -0.377583,-0.132291 -0.139182,-0.13367 -0.139182,-0.356912 0,-0.260449 0.173633,-0.392741 0.175011,-0.132292 0.520898,-0.132292 h 0.355534 v -0.0248 q 0,-0.175011 -0.115755,-0.270096 -0.114377,-0.09646 -0.322461,-0.09646 -0.132291,0 -0.257693,0.03169 -0.125401,0.03169 -0.241157,0.09508 v -0.234267 q 0.139182,-0.05374 0.270096,-0.07993 0.130913,-0.02756 0.254937,-0.02756 0.334863,0 0.500228,0.173633 0.165364,0.173633 0.165364,0.526411 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path3846" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 73.791837,83.064631 v 0.931554 H 73.538278 V 83.0729 q 0,-0.219108 -0.08544,-0.327973 -0.08544,-0.108865 -0.256315,-0.108865 -0.205328,0 -0.323839,0.130913 -0.118511,0.130914 -0.118511,0.356912 v 0.872298 h -0.254937 v -1.543402 h 0.254937 v 0.239778 q 0.09095,-0.139182 0.213596,-0.208084 0.124023,-0.0689 0.285254,-0.0689 0.265961,0 0.402387,0.165365 0.136425,0.163987 0.136425,0.483691 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path3848" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 75.583287,83.064631 v 0.931554 H 75.329728 V 83.0729 q 0,-0.219108 -0.08544,-0.327973 -0.08544,-0.108865 -0.256315,-0.108865 -0.205328,0 -0.323839,0.130913 -0.118511,0.130914 -0.118511,0.356912 v 0.872298 h -0.254938 v -1.543402 h 0.254938 v 0.239778 q 0.09095,-0.139182 0.213595,-0.208084 0.124024,-0.0689 0.285254,-0.0689 0.265962,0 0.402387,0.165365 0.136426,0.163987 0.136426,0.483691 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path3850" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 76.091783,82.452783 h 0.253559 v 1.543402 h -0.253559 z m 0,-0.600825 h 0.253559 v 0.321083 h -0.253559 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path3852" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 78.157463,83.064631 v 0.931554 H 77.903904 V 83.0729 q 0,-0.219108 -0.08544,-0.327973 -0.08544,-0.108865 -0.256315,-0.108865 -0.205328,0 -0.323839,0.130913 -0.118511,0.130914 -0.118511,0.356912 v 0.872298 H 76.864863 V 82.452783 H 77.1198 v 0.239778 q 0.09095,-0.139182 0.213596,-0.208084 0.124023,-0.0689 0.285254,-0.0689 0.265961,0 0.402387,0.165365 0.136426,0.163987 0.136426,0.483691 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path3854" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 79.681573,83.206569 q 0,-0.275607 -0.114377,-0.427191 -0.112999,-0.151585 -0.318327,-0.151585 -0.203949,0 -0.318327,0.151585 -0.112999,0.151584 -0.112999,0.427191 0,0.27423 0.112999,0.425814 0.114378,0.151584 0.318327,0.151584 0.205328,0 0.318327,-0.151584 0.114377,-0.151584 0.114377,-0.425814 z m 0.253559,0.598069 q 0,0.394119 -0.175011,0.585666 -0.17501,0.192926 -0.536056,0.192926 -0.13367,0 -0.252181,-0.02067 -0.118512,-0.01929 -0.230133,-0.06063 v -0.246669 q 0.111621,0.06063 0.220486,0.08957 0.108865,0.02894 0.221864,0.02894 0.249425,0 0.373449,-0.130914 0.124023,-0.129535 0.124023,-0.392741 v -0.125401 q -0.07855,0.136426 -0.201193,0.203949 -0.122646,0.06752 -0.293522,0.06752 -0.283876,0 -0.457509,-0.216352 -0.173633,-0.216352 -0.173633,-0.573264 0,-0.35829 0.173633,-0.574642 0.173633,-0.216352 0.457509,-0.216352 0.170876,0 0.293522,0.06752 0.122645,0.06752 0.201193,0.20395 v -0.234266 h 0.253559 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path3856" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| </g> | |||
| </svg> | |||
| @@ -0,0 +1,347 @@ | |||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
| <!-- Created with Inkscape (http://www.inkscape.org/) --> | |||
| <svg | |||
| xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
| xmlns:cc="http://creativecommons.org/ns#" | |||
| xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
| xmlns:svg="http://www.w3.org/2000/svg" | |||
| xmlns="http://www.w3.org/2000/svg" | |||
| xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
| xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
| width="195.29379" | |||
| height="380.00003" | |||
| viewBox="0 0 51.671483 100.54167" | |||
| version="1.1" | |||
| id="svg8630" | |||
| inkscape:version="0.92.3 (2405546, 2018-03-11)" | |||
| sodipodi:docname="PGQuadPanner.svg"> | |||
| <defs | |||
| id="defs8624" /> | |||
| <sodipodi:namedview | |||
| id="base" | |||
| pagecolor="#ffffff" | |||
| bordercolor="#666666" | |||
| borderopacity="1.0" | |||
| inkscape:pageopacity="0.0" | |||
| inkscape:pageshadow="2" | |||
| inkscape:zoom="1.979899" | |||
| inkscape:cx="113.86719" | |||
| inkscape:cy="185.98498" | |||
| inkscape:document-units="mm" | |||
| inkscape:current-layer="layer1" | |||
| showgrid="false" | |||
| fit-margin-top="0" | |||
| fit-margin-left="0" | |||
| fit-margin-right="0" | |||
| fit-margin-bottom="0" | |||
| units="px" | |||
| inkscape:window-width="1920" | |||
| inkscape:window-height="1017" | |||
| inkscape:window-x="-8" | |||
| inkscape:window-y="-8" | |||
| inkscape:window-maximized="1" | |||
| showguides="true" | |||
| inkscape:guide-bbox="true"> | |||
| <sodipodi:guide | |||
| position="-30.86963,78.176333" | |||
| orientation="0,1" | |||
| id="guide2276" | |||
| inkscape:locked="false" /> | |||
| </sodipodi:namedview> | |||
| <metadata | |||
| id="metadata8627"> | |||
| <rdf:RDF> | |||
| <cc:Work | |||
| rdf:about=""> | |||
| <dc:format>image/svg+xml</dc:format> | |||
| <dc:type | |||
| rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
| <dc:title></dc:title> | |||
| </cc:Work> | |||
| </rdf:RDF> | |||
| </metadata> | |||
| <g | |||
| inkscape:label="layer 1" | |||
| inkscape:groupmode="layer" | |||
| id="layer1" | |||
| transform="translate(-44.467833,-88.735117)"> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path33449" | |||
| d="M 44.541176,88.808436 H 96.065974 V 189.20454 H 44.541176 Z m 0,0" | |||
| style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.27602378" | |||
| sodipodi:insensitive="true" /> | |||
| <g | |||
| id="logo" | |||
| inkscape:label="#g2255" | |||
| transform="translate(11.759859,53.053001)"> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path3737" | |||
| style="font-style:normal;font-weight:normal;font-size:5.43959379px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.13598984" | |||
| d="m 55.047763,130.90923 v 1.43277 h 0.7016 q 0.38947,0 0.60216,-0.18644 0.21269,-0.18643 0.21269,-0.53122 0,-0.34223 -0.21269,-0.52867 -0.21269,-0.18644 -0.60216,-0.18644 z m -0.55797,-0.42396 h 1.25957 q 0.69332,0 1.04688,0.29115 0.35633,0.2886 0.35633,0.84792 0,0.56443 -0.35633,0.85302 -0.35356,0.2886 -1.04688,0.2886 h -0.7016 v 1.53239 h -0.55797 z" /> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path3739" | |||
| style="font-style:normal;font-weight:normal;font-size:5.43959379px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.13598984" | |||
| d="m 60.715833,133.75435 v -1.02414 h -0.91154 v -0.42396 h 1.46398 v 1.63709 q -0.32318,0.21198 -0.71265,0.3218 -0.38947,0.10726 -0.83143,0.10726 -0.96678,0 -1.5137,-0.521 -0.54415,-0.52356 -0.54415,-1.45576 0,-0.93476 0.54415,-1.45576 0.54692,-0.52357 1.5137,-0.52357 0.40328,0 0.76513,0.0919 0.36462,0.0919 0.67122,0.27072 v 0.5491 q -0.30936,-0.24263 -0.6574,-0.36522 -0.34804,-0.12259 -0.73199,-0.12259 -0.75685,0 -1.13804,0.39076 -0.37842,0.39075 -0.37842,1.16461 0,0.77129 0.37842,1.16205 0.38119,0.39076 1.13804,0.39076 0.29556,0 0.52758,-0.046 0.23203,-0.0486 0.4171,-0.14813 z" /> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path3741" | |||
| style="font-style:normal;font-weight:normal;font-size:5.43959379px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.13598984" | |||
| d="m 62.268193,131.4379 h 0.50825 v 2.86045 h -0.50825 z m 0,-1.11353 h 0.50825 v 0.59507 h -0.50825 z" /> | |||
| </g> | |||
| <g | |||
| aria-label="QUAD PANNER" | |||
| transform="scale(0.97416344,1.0265218)" | |||
| style="font-style:normal;font-weight:normal;font-size:4.54266644px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.42587495" | |||
| id="text2270"> | |||
| <path | |||
| d="m 58.181939,92.36342 q -0.487982,0 -0.776334,0.363769 -0.286135,0.363768 -0.286135,0.99149 0,0.625504 0.286135,0.989272 0.288352,0.363768 0.776334,0.363768 0.487982,0 0.771899,-0.363768 0.286134,-0.363768 0.286134,-0.989272 0,-0.627722 -0.286134,-0.99149 -0.283917,-0.363769 -0.771899,-0.363769 z m 0.627722,2.947854 0.590014,0.645467 H 58.858459 L 58.36826,95.426615 q -0.0732,0.0044 -0.113124,0.0067 -0.03771,0.0022 -0.0732,0.0022 -0.698701,0 -1.117922,-0.4658 -0.417002,-0.468019 -0.417002,-1.251008 0,-0.785207 0.417002,-1.251008 0.419221,-0.468019 1.117922,-0.468019 0.696483,0 1.113486,0.468019 0.417002,0.465801 0.417002,1.251008 0,0.576705 -0.2329,0.987054 -0.230682,0.410348 -0.669866,0.605541 z" | |||
| style="stroke-width:0.42587495" | |||
| id="path2323" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 60.36233,92.059541 h 0.450274 v 2.011815 q 0,0.532344 0.192975,0.767463 0.192975,0.2329 0.625504,0.2329 0.430311,0 0.623286,-0.2329 0.192974,-0.235119 0.192974,-0.767463 v -2.011815 h 0.450274 v 2.067268 q 0,0.647685 -0.321624,0.978182 -0.319406,0.330496 -0.94491,0.330496 -0.627722,0 -0.949346,-0.330496 -0.319407,-0.330497 -0.319407,-0.978182 z" | |||
| style="stroke-width:0.42587495" | |||
| id="path2325" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 64.847326,92.500943 -0.607759,1.648047 h 1.217736 z m -0.252863,-0.441402 h 0.507944 l 1.262099,3.311621 h -0.465801 l -0.301662,-0.849531 h -1.49278 l -0.301662,0.849531 h -0.472455 z" | |||
| style="stroke-width:0.42587495" | |||
| id="path2327" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 67.29389,92.427745 v 2.575213 h 0.541216 q 0.685392,0 1.00258,-0.310534 0.319407,-0.310534 0.319407,-0.9804 0,-0.665429 -0.319407,-0.973745 -0.317188,-0.310534 -1.00258,-0.310534 z m -0.448056,-0.368204 h 0.920511 q 0.962655,0 1.412929,0.401476 0.450274,0.399258 0.450274,1.251007 0,0.856187 -0.452492,1.257663 -0.452493,0.401475 -1.410711,0.401475 h -0.920511 z" | |||
| style="stroke-width:0.42587495" | |||
| id="path2329" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 72.235814,92.427745 v 1.244354 h 0.563397 q 0.312752,0 0.483545,-0.161922 0.170794,-0.161921 0.170794,-0.461364 0,-0.297225 -0.170794,-0.459147 -0.170793,-0.161921 -0.483545,-0.161921 z m -0.448056,-0.368204 h 1.011453 q 0.556743,0 0.840659,0.252863 0.286135,0.250645 0.286135,0.736409 0,0.4902 -0.286135,0.740845 -0.283916,0.250645 -0.840659,0.250645 h -0.563397 v 1.330859 h -0.448056 z" | |||
| style="stroke-width:0.42587495" | |||
| id="path2331" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 75.34337,92.500943 -0.607759,1.648047 h 1.217736 z m -0.252863,-0.441402 h 0.507944 l 1.262099,3.311621 h -0.465801 l -0.301661,-0.849531 h -1.492781 l -0.301661,0.849531 H 73.82619 Z" | |||
| style="stroke-width:0.42587495" | |||
| id="path2333" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 77.341876,92.059541 h 0.603323 l 1.468381,2.770405 v -2.770405 h 0.434748 v 3.311621 h -0.603323 l -1.468382,-2.770405 v 2.770405 h -0.434747 z" | |||
| style="stroke-width:0.42587495" | |||
| id="path2335" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 80.740004,92.059541 h 0.603323 l 1.468382,2.770405 v -2.770405 h 0.434747 v 3.311621 h -0.603323 l -1.468381,-2.770405 v 2.770405 h -0.434748 z" | |||
| style="stroke-width:0.42587495" | |||
| id="path2337" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 84.138131,92.059541 h 2.093885 v 0.377077 h -1.645829 v 0.980399 h 1.577068 v 0.377077 h -1.577068 v 1.199992 h 1.685755 v 0.377076 h -2.133811 z" | |||
| style="stroke-width:0.42587495" | |||
| id="path2339" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 88.583202,93.818493 q 0.144176,0.0488 0.27948,0.208502 0.137522,0.159703 0.275044,0.439183 l 0.454711,0.904984 h -0.481328 l -0.423657,-0.849531 q -0.164139,-0.332715 -0.319406,-0.441402 -0.153049,-0.108687 -0.419221,-0.108687 h -0.487981 v 1.39962 h -0.448056 v -3.311621 h 1.011453 q 0.567833,0 0.847314,0.237336 0.27948,0.237337 0.27948,0.716446 0,0.312752 -0.146395,0.519035 -0.144176,0.206284 -0.421438,0.286135 z m -1.122358,-1.390748 v 1.175593 h 0.563397 q 0.323842,0 0.487982,-0.148613 0.166357,-0.150831 0.166357,-0.441402 0,-0.290571 -0.166357,-0.436965 -0.16414,-0.148613 -0.487982,-0.148613 z" | |||
| style="stroke-width:0.42587495" | |||
| id="path2341" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="Input" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text2274"> | |||
| <path | |||
| d="m 47.551148,108.90941 h 0.278364 v 2.05741 h -0.278364 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2362" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 49.655412,110.03527 v 0.93155 h -0.253559 v -0.92329 q 0,-0.2191 -0.08544,-0.32797 -0.08544,-0.10886 -0.256315,-0.10886 -0.205328,0 -0.323839,0.13091 -0.118511,0.13091 -0.118511,0.35691 v 0.8723 H 48.36281 v -1.5434 h 0.254938 v 0.23978 q 0.09095,-0.13919 0.213595,-0.20809 0.124024,-0.0689 0.285254,-0.0689 0.265962,0 0.402388,0.16536 0.136425,0.16399 0.136425,0.4837 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2364" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 50.409199,110.73531 v 0.81855 h -0.254937 v -2.13044 h 0.254937 v 0.23426 q 0.07993,-0.1378 0.201194,-0.20395 0.122645,-0.0675 0.292144,-0.0675 0.28112,0 0.456131,0.22324 0.176388,0.22324 0.176388,0.58705 0,0.3638 -0.176388,0.58704 -0.175011,0.22324 -0.456131,0.22324 -0.169499,0 -0.292144,-0.0661 -0.121268,-0.0675 -0.201194,-0.20533 z m 0.862652,-0.53881 q 0,-0.27975 -0.115755,-0.43822 -0.114377,-0.15985 -0.315571,-0.15985 -0.201193,0 -0.316949,0.15985 -0.114377,0.15847 -0.114377,0.43822 0,0.27974 0.114377,0.43959 0.115756,0.15847 0.316949,0.15847 0.201194,0 0.315571,-0.15847 0.115755,-0.15985 0.115755,-0.43959 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2366" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 51.929176,110.35773 v -0.93431 h 0.253559 v 0.92466 q 0,0.21911 0.08544,0.32935 0.08544,0.10887 0.256315,0.10887 0.205328,0 0.323839,-0.13092 0.119889,-0.13091 0.119889,-0.35691 v -0.87505 h 0.253559 v 1.5434 h -0.253559 v -0.23702 q -0.09233,0.14056 -0.214974,0.20946 -0.121267,0.0675 -0.282497,0.0675 -0.265962,0 -0.403766,-0.16536 -0.137803,-0.16537 -0.137803,-0.48369 z m 0.638031,-0.97152 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2368" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 53.997611,108.9852 v 0.43822 h 0.522276 v 0.19706 h -0.522276 v 0.83784 q 0,0.18879 0.05099,0.24254 0.05237,0.0537 0.21084,0.0537 h 0.260449 v 0.21222 h -0.260449 q -0.293522,0 -0.405143,-0.10887 -0.111621,-0.11024 -0.111621,-0.39963 v -0.83784 h -0.186035 v -0.19706 h 0.186035 v -0.43822 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2370" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="Pan" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text2280" | |||
| transform="translate(1.5875)"> | |||
| <path | |||
| d="m 60.39118,109.2718 v 0.77308 h 0.350022 q 0.194303,0 0.300412,-0.1006 0.106109,-0.10059 0.106109,-0.28663 0,-0.18466 -0.106109,-0.28525 -0.106109,-0.1006 -0.300412,-0.1006 z m -0.278364,-0.22875 h 0.628386 q 0.345887,0 0.522276,0.15709 0.177767,0.15572 0.177767,0.45751 0,0.30455 -0.177767,0.46027 -0.176389,0.15571 -0.522276,0.15571 H 60.39118 v 0.82683 h -0.278364 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2355" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 62.379689,110.32462 q -0.307302,0 -0.425814,0.0703 -0.118511,0.0703 -0.118511,0.23978 0,0.13505 0.08819,0.21497 0.08957,0.0786 0.242534,0.0786 0.21084,0 0.33762,-0.14883 0.128157,-0.1502 0.128157,-0.39825 v -0.0565 z m 0.50574,-0.10473 v 0.88057 H 62.63187 v -0.23427 q -0.08682,0.14056 -0.216352,0.20808 -0.129535,0.0662 -0.316949,0.0662 -0.237022,0 -0.377582,-0.13229 -0.139182,-0.13367 -0.139182,-0.35691 0,-0.26045 0.173633,-0.39275 0.175011,-0.13229 0.520898,-0.13229 h 0.355534 v -0.0248 q 0,-0.17501 -0.115755,-0.2701 -0.114377,-0.0965 -0.322461,-0.0965 -0.132292,0 -0.257693,0.0317 -0.125402,0.0317 -0.241157,0.0951 v -0.23427 q 0.139182,-0.0537 0.270096,-0.0799 0.130913,-0.0276 0.254937,-0.0276 0.334863,0 0.500228,0.17363 0.165364,0.17363 0.165364,0.52641 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2357" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 64.692037,110.1689 v 0.93156 h -0.253559 v -0.92329 q 0,-0.21911 -0.08544,-0.32797 -0.08544,-0.10887 -0.256315,-0.10887 -0.205328,0 -0.323839,0.13092 -0.118511,0.13091 -0.118511,0.35691 v 0.8723 h -0.254937 v -1.54341 h 0.254937 v 0.23978 q 0.09095,-0.13918 0.213596,-0.20808 0.124023,-0.0689 0.285253,-0.0689 0.265962,0 0.402388,0.16536 0.136425,0.16399 0.136425,0.48369 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2359" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="Level" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text2284" | |||
| transform="translate(0.52916667)"> | |||
| <path | |||
| d="m 70.937226,109.04305 h 0.278364 v 1.82314 h 1.001833 v 0.23427 h -1.280197 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2344" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 73.767716,110.26537 v 0.12402 h -1.16582 q 0.01654,0.26183 0.157096,0.39963 0.141938,0.13643 0.394119,0.13643 0.146072,0 0.282498,-0.0358 0.137804,-0.0358 0.272852,-0.10749 v 0.23978 q -0.136426,0.0579 -0.279742,0.0882 -0.143316,0.0303 -0.290766,0.0303 -0.369314,0 -0.585666,-0.21497 -0.214974,-0.21498 -0.214974,-0.58154 0,-0.37896 0.203949,-0.60082 0.205328,-0.22324 0.552594,-0.22324 0.311436,0 0.491959,0.20119 0.181901,0.19982 0.181901,0.54433 z m -0.253559,-0.0744 q -0.0028,-0.20808 -0.117133,-0.33211 -0.112999,-0.12402 -0.300412,-0.12402 -0.212218,0 -0.340376,0.11989 -0.126779,0.11989 -0.146072,0.33762 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2346" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="M 74.001983,109.55705 H 74.2707 l 0.482314,1.29536 0.482313,-1.29536 h 0.268717 l -0.578776,1.54341 h -0.344509 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2348" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 77.174227,110.26537 v 0.12402 h -1.165821 q 0.01654,0.26183 0.157097,0.39963 0.141938,0.13643 0.394119,0.13643 0.146072,0 0.282497,-0.0358 0.137804,-0.0358 0.272852,-0.10749 v 0.23978 q -0.136426,0.0579 -0.279742,0.0882 -0.143316,0.0303 -0.290766,0.0303 -0.369314,0 -0.585666,-0.21497 -0.214974,-0.21498 -0.214974,-0.58154 0,-0.37896 0.20395,-0.60082 0.205327,-0.22324 0.552593,-0.22324 0.311437,0 0.49196,0.20119 0.181901,0.19982 0.181901,0.54433 z m -0.253559,-0.0744 q -0.0028,-0.20808 -0.117134,-0.33211 -0.112999,-0.12402 -0.300412,-0.12402 -0.212218,0 -0.340375,0.11989 -0.12678,0.11989 -0.146072,0.33762 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2350" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 77.590394,108.95623 h 0.253559 v 2.14423 h -0.253559 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2352" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="1" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text2292" | |||
| transform="translate(0,1.0583333)"> | |||
| <path | |||
| d="m 47.223282,118.2161 h 0.454753 v -1.56958 l -0.494716,0.0992 v -0.25356 l 0.49196,-0.0992 h 0.278363 v 1.82314 h 0.454753 v 0.23427 h -1.185113 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2382" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="2" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text2296" | |||
| transform="translate(-0.52916667,1.0583333)"> | |||
| <path | |||
| d="m 47.815731,127.43691 h 0.971517 v 0.23426 h -1.30638 v -0.23426 q 0.158474,-0.16399 0.431326,-0.4396 0.27423,-0.27698 0.34451,-0.35691 0.133669,-0.15021 0.186035,-0.25356 0.05374,-0.10473 0.05374,-0.20533 0,-0.16398 -0.115755,-0.26734 -0.114377,-0.10335 -0.299034,-0.10335 -0.130914,0 -0.276986,0.0455 -0.144694,0.0455 -0.310059,0.1378 V 125.713 q 0.168121,-0.0675 0.314193,-0.10197 0.146072,-0.0344 0.26734,-0.0344 0.319704,0 0.509874,0.15985 0.190169,0.15985 0.190169,0.42719 0,0.12678 -0.04823,0.24116 -0.04685,0.113 -0.172255,0.26734 -0.03445,0.04 -0.219108,0.23151 -0.184657,0.19017 -0.520899,0.5333 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2379" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="3" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text2300" | |||
| transform="translate(-0.52916667,2.6458334)"> | |||
| <path | |||
| d="m 48.152043,134.71356 q 0.199815,0.0427 0.311437,0.17776 0.112999,0.13505 0.112999,0.33349 0,0.30454 -0.209462,0.47129 -0.209462,0.16674 -0.595313,0.16674 -0.129535,0 -0.267339,-0.0262 -0.136426,-0.0248 -0.282498,-0.0758 v -0.26871 q 0.115755,0.0675 0.253559,0.10197 0.137804,0.0344 0.28801,0.0344 0.261827,0 0.398253,-0.10335 0.137804,-0.10335 0.137804,-0.30041 0,-0.1819 -0.128158,-0.28388 -0.126779,-0.10335 -0.354155,-0.10335 h -0.239779 v -0.22876 h 0.250803 q 0.205328,0 0.314193,-0.0813 0.108865,-0.0827 0.108865,-0.23702 0,-0.15848 -0.112999,-0.24254 -0.111622,-0.0854 -0.321083,-0.0854 -0.114378,0 -0.245291,0.0248 -0.130914,0.0248 -0.28801,0.0772 v -0.24805 q 0.158474,-0.0441 0.296278,-0.0661 0.139182,-0.0221 0.261827,-0.0221 0.316949,0 0.501606,0.14469 0.184657,0.14332 0.184657,0.38861 0,0.17088 -0.09784,0.28939 -0.09784,0.11713 -0.278364,0.16261 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2376" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="4" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text2304" | |||
| transform="translate(-0.52916667,3.7041668)"> | |||
| <path | |||
| d="m 48.207131,143.09517 -0.702799,1.0983 h 0.702799 z m -0.07304,-0.24253 h 0.350022 v 1.34083 h 0.293522 v 0.23151 h -0.293522 v 0.48507 h -0.276986 v -0.48507 h -0.928798 v -0.26872 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2373" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| id="g2321" | |||
| transform="translate(-1.6036172)"> | |||
| <g | |||
| transform="translate(2.6619506)" | |||
| aria-label="Output" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text2288"> | |||
| <path | |||
| d="m 81.260392,116.31448 q -0.303168,0 -0.482313,0.226 -0.177767,0.22599 -0.177767,0.61598 0,0.38861 0.177767,0.6146 0.179145,0.226 0.482313,0.226 0.303169,0 0.479558,-0.226 0.177766,-0.22599 0.177766,-0.6146 0,-0.38999 -0.177766,-0.61598 -0.176389,-0.226 -0.479558,-0.226 z m 0,-0.226 q 0.432704,0 0.691775,0.29077 0.259072,0.28938 0.259072,0.77721 0,0.48645 -0.259072,0.77721 -0.259071,0.28939 -0.691775,0.28939 -0.434082,0 -0.694531,-0.28939 -0.259071,-0.28939 -0.259071,-0.77721 0,-0.48783 0.259071,-0.77721 0.260449,-0.29077 0.694531,-0.29077 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2385" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 82.609492,117.574 v -0.9343 h 0.253559 v 0.92466 q 0,0.21911 0.08544,0.32935 0.08544,0.10886 0.256315,0.10886 0.205328,0 0.323839,-0.13091 0.11989,-0.13091 0.11989,-0.35691 v -0.87505 h 0.253559 v 1.5434 h -0.253559 v -0.23702 q -0.09233,0.14056 -0.214974,0.20946 -0.121268,0.0675 -0.282498,0.0675 -0.265962,0 -0.403765,-0.16536 -0.137804,-0.16537 -0.137804,-0.4837 z m 0.638031,-0.97151 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2387" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 84.677927,116.20148 v 0.43822 h 0.522277 v 0.19705 h -0.522277 v 0.83785 q 0,0.18879 0.05099,0.24254 0.05236,0.0537 0.210839,0.0537 h 0.26045 v 0.21222 h -0.26045 q -0.293522,0 -0.405143,-0.10887 -0.111621,-0.11024 -0.111621,-0.39963 v -0.83785 h -0.186035 v -0.19705 h 0.186035 v -0.43822 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2389" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 85.780358,117.95159 v 0.81855 h -0.254937 v -2.13044 h 0.254937 v 0.23426 q 0.07993,-0.1378 0.201193,-0.20395 0.122646,-0.0675 0.292144,-0.0675 0.28112,0 0.456131,0.22324 0.176389,0.22324 0.176389,0.58704 0,0.36381 -0.176389,0.58705 -0.175011,0.22324 -0.456131,0.22324 -0.169498,0 -0.292144,-0.0661 -0.121267,-0.0675 -0.201193,-0.20533 z m 0.862652,-0.53882 q 0,-0.27974 -0.115756,-0.43821 -0.114377,-0.15985 -0.31557,-0.15985 -0.201194,0 -0.316949,0.15985 -0.114377,0.15847 -0.114377,0.43821 0,0.27975 0.114377,0.4396 0.115755,0.15847 0.316949,0.15847 0.201193,0 0.31557,-0.15847 0.115756,-0.15985 0.115756,-0.4396 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2391" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 87.300334,117.574 v -0.9343 h 0.253559 v 0.92466 q 0,0.21911 0.08544,0.32935 0.08544,0.10886 0.256315,0.10886 0.205328,0 0.323839,-0.13091 0.119889,-0.13091 0.119889,-0.35691 v -0.87505 h 0.253559 v 1.5434 h -0.253559 v -0.23702 q -0.09233,0.14056 -0.214974,0.20946 -0.121267,0.0675 -0.282497,0.0675 -0.265962,0 -0.403766,-0.16536 -0.137803,-0.16537 -0.137803,-0.4837 z m 0.638031,-0.97151 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2393" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 89.368769,116.20148 v 0.43822 h 0.522277 v 0.19705 h -0.522277 v 0.83785 q 0,0.18879 0.05099,0.24254 0.05236,0.0537 0.21084,0.0537 h 0.260449 v 0.21222 h -0.260449 q -0.293523,0 -0.405144,-0.10887 -0.111621,-0.11024 -0.111621,-0.39963 v -0.83785 h -0.186035 v -0.19705 h 0.186035 v -0.43822 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path2395" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <rect | |||
| y="120.58852" | |||
| x="82.692741" | |||
| height="24.722433" | |||
| width="7.6171818" | |||
| id="rect2306" | |||
| style="fill:#000000;fill-opacity:1;stroke-width:0.33650789" /> | |||
| <g | |||
| aria-label="L" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text2310" | |||
| transform="translate(-0.52916667)"> | |||
| <path | |||
| d="m 86.30523,121.47107 h 0.278363 v 1.82314 h 1.001834 v 0.23427 H 86.30523 Z" | |||
| style="fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| id="path2401" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="R" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text2314" | |||
| transform="translate(-0.5291667,2.1166667)"> | |||
| <path | |||
| d="m 87.013608,141.1391 q 0.08957,0.0303 0.173633,0.12954 0.08544,0.0992 0.170876,0.27285 l 0.282498,0.56224 h -0.299034 l -0.263205,-0.52779 q -0.101975,-0.20671 -0.198438,-0.27423 -0.09508,-0.0675 -0.260449,-0.0675 H 86.31632 v 0.86954 h -0.278363 v -2.05741 h 0.628385 q 0.352778,0 0.526411,0.14745 0.173633,0.14745 0.173633,0.4451 0,0.19431 -0.09095,0.32247 -0.08957,0.12815 -0.261827,0.17776 z m -0.697288,-0.86403 v 0.73036 h 0.350022 q 0.201194,0 0.303169,-0.0923 0.103352,-0.0937 0.103352,-0.27423 0,-0.18052 -0.103352,-0.27147 -0.101975,-0.0923 -0.303169,-0.0923 z" | |||
| style="fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| id="path2398" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| </g> | |||
| </g> | |||
| </svg> | |||
| @@ -0,0 +1,593 @@ | |||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
| <!-- Created with Inkscape (http://www.inkscape.org/) --> | |||
| <svg | |||
| xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
| xmlns:cc="http://creativecommons.org/ns#" | |||
| xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
| xmlns:svg="http://www.w3.org/2000/svg" | |||
| xmlns="http://www.w3.org/2000/svg" | |||
| xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
| xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
| width="660.49908" | |||
| height="380" | |||
| viewBox="0 0 174.75705 100.54166" | |||
| version="1.1" | |||
| id="svg12553" | |||
| inkscape:version="0.92.3 (2405546, 2018-03-11)" | |||
| sodipodi:docname="PGSEQ3.svg"> | |||
| <defs | |||
| id="defs12547" /> | |||
| <sodipodi:namedview | |||
| id="base" | |||
| pagecolor="#ffffff" | |||
| bordercolor="#666666" | |||
| borderopacity="1.0" | |||
| inkscape:pageopacity="0.0" | |||
| inkscape:pageshadow="2" | |||
| inkscape:zoom="2" | |||
| inkscape:cx="389.58525" | |||
| inkscape:cy="189.59439" | |||
| inkscape:document-units="mm" | |||
| inkscape:current-layer="layer1" | |||
| showgrid="true" | |||
| fit-margin-top="0" | |||
| fit-margin-left="0" | |||
| fit-margin-right="0" | |||
| fit-margin-bottom="0" | |||
| units="px" | |||
| inkscape:window-width="1920" | |||
| inkscape:window-height="1017" | |||
| inkscape:window-x="-8" | |||
| inkscape:window-y="-8" | |||
| inkscape:window-maximized="1"> | |||
| <inkscape:grid | |||
| type="xygrid" | |||
| id="grid12870" | |||
| originx="-20.372917" | |||
| originy="84.666661" /> | |||
| </sodipodi:namedview> | |||
| <metadata | |||
| id="metadata12550"> | |||
| <rdf:RDF> | |||
| <cc:Work | |||
| rdf:about=""> | |||
| <dc:format>image/svg+xml</dc:format> | |||
| <dc:type | |||
| rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
| <dc:title /> | |||
| </cc:Work> | |||
| </rdf:RDF> | |||
| </metadata> | |||
| <g | |||
| inkscape:label="Layer 1" | |||
| inkscape:groupmode="layer" | |||
| id="layer1" | |||
| transform="translate(-26.543497,-161.30655)"> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path33453" | |||
| d="M 26.616839,161.37987 H 201.96225 v 100.3961 H 26.616839 Z m 0,0" | |||
| style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.39119366" | |||
| sodipodi:insensitive="true" /> | |||
| <text | |||
| xml:space="preserve" | |||
| style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| x="114.64974" | |||
| y="199.67114" | |||
| id="text4659"><tspan | |||
| sodipodi:role="line" | |||
| id="tspan4657" | |||
| x="114.64974" | |||
| y="209.03491" | |||
| style="stroke-width:0.26458332" /></text> | |||
| <text | |||
| xml:space="preserve" | |||
| style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| x="117.29558" | |||
| y="199.67114" | |||
| id="text4663"><tspan | |||
| sodipodi:role="line" | |||
| id="tspan4661" | |||
| x="117.29558" | |||
| y="209.03491" | |||
| style="stroke-width:0.26458332" /></text> | |||
| <text | |||
| xml:space="preserve" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| x="114.64974" | |||
| y="198.34822" | |||
| id="text4667"><tspan | |||
| sodipodi:role="line" | |||
| id="tspan4665" | |||
| x="114.64974" | |||
| y="200.84523" | |||
| style="stroke-width:0.26458332" /></text> | |||
| <text | |||
| xml:space="preserve" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| x="114.64974" | |||
| y="200.99405" | |||
| id="text4671"><tspan | |||
| sodipodi:role="line" | |||
| id="tspan4669" | |||
| x="114.64974" | |||
| y="203.49106" | |||
| style="stroke-width:0.26458332" /></text> | |||
| <text | |||
| xml:space="preserve" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| x="114.64974" | |||
| y="199.67114" | |||
| id="text4675"><tspan | |||
| sodipodi:role="line" | |||
| id="tspan4673" | |||
| x="114.64974" | |||
| y="201.5439" | |||
| style="stroke-width:0.26458332" /></text> | |||
| <path | |||
| d="m 108.98168,256.35727 v 1.43277 h 0.7016 q 0.38947,0 0.60216,-0.18644 0.21269,-0.18643 0.21269,-0.53122 0,-0.34223 -0.21269,-0.52867 -0.21269,-0.18644 -0.60216,-0.18644 z m -0.55797,-0.42396 h 1.25957 q 0.69332,0 1.04688,0.29115 0.35633,0.2886 0.35633,0.84792 0,0.56443 -0.35633,0.85302 -0.35356,0.2886 -1.04688,0.2886 h -0.7016 v 1.53239 h -0.55797 z" | |||
| style="font-style:normal;font-weight:normal;font-size:5.43959379px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.13598984" | |||
| id="path3737" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 114.64975,259.20239 v -1.02414 h -0.91154 v -0.42396 h 1.46398 v 1.63709 q -0.32318,0.21198 -0.71265,0.3218 -0.38947,0.10726 -0.83143,0.10726 -0.96678,0 -1.5137,-0.521 -0.54415,-0.52356 -0.54415,-1.45576 0,-0.93476 0.54415,-1.45576 0.54692,-0.52357 1.5137,-0.52357 0.40328,0 0.76513,0.0919 0.36462,0.0919 0.67122,0.27072 v 0.5491 q -0.30936,-0.24263 -0.6574,-0.36522 -0.34804,-0.12259 -0.73199,-0.12259 -0.75685,0 -1.13804,0.39076 -0.37842,0.39075 -0.37842,1.16461 0,0.77129 0.37842,1.16205 0.38119,0.39076 1.13804,0.39076 0.29556,0 0.52758,-0.046 0.23203,-0.0486 0.4171,-0.14813 z" | |||
| style="font-style:normal;font-weight:normal;font-size:5.43959379px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.13598984" | |||
| id="path3739" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 116.20211,256.88594 h 0.50825 v 2.86045 h -0.50825 z m 0,-1.11353 h 0.50825 v 0.59507 h -0.50825 z" | |||
| style="font-style:normal;font-weight:normal;font-size:5.43959379px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.13598984" | |||
| id="path3741" | |||
| inkscape:connector-curvature="0" /> | |||
| <g | |||
| aria-label="PG-SEQ-3 a 16 step sequencer" | |||
| transform="matrix(1.0459845,0,0,1.2264996,-43.724866,0)" | |||
| style="font-style:normal;font-weight:normal;font-size:3.66321492px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.34342638" | |||
| id="text4072"> | |||
| <path | |||
| d="m 160.30281,153.56112 v 1.00344 h 0.45432 q 0.25221,0 0.38993,-0.13057 0.13773,-0.13057 0.13773,-0.37204 0,-0.23969 -0.13773,-0.37026 -0.13772,-0.13057 -0.38993,-0.13057 z m -0.36132,-0.29693 h 0.81564 q 0.44896,0 0.67791,0.20391 0.23074,0.20212 0.23074,0.59385 0,0.39529 -0.23074,0.59741 -0.22895,0.20212 -0.67791,0.20212 h -0.45432 v 1.07321 h -0.36132 z" | |||
| style="stroke-width:0.34342638" | |||
| id="path4074" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 163.97318,155.5537 v -0.71726 h -0.59027 v -0.29692 h 0.948 v 1.14655 q -0.20927,0.14846 -0.46148,0.22537 -0.2522,0.0751 -0.53839,0.0751 -0.62604,0 -0.98019,-0.36489 -0.35237,-0.36668 -0.35237,-1.01954 0,-0.65466 0.35237,-1.01955 0.35415,-0.36668 0.98019,-0.36668 0.26115,0 0.49547,0.0644 0.2361,0.0644 0.43465,0.1896 v 0.38457 q -0.20034,-0.16993 -0.42571,-0.25578 -0.22537,-0.0859 -0.474,-0.0859 -0.4901,0 -0.73694,0.27367 -0.24505,0.27367 -0.24505,0.81564 0,0.54018 0.24505,0.81385 0.24684,0.27366 0.73694,0.27366 0.19139,0 0.34164,-0.0322 0.15025,-0.034 0.27009,-0.10375 z" | |||
| style="stroke-width:0.34342638" | |||
| id="path4076" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 164.81207,154.78457 h 0.9641 v 0.29335 h -0.9641 z" | |||
| style="stroke-width:0.34342638" | |||
| id="path4078" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 167.91722,153.35184 v 0.35237 q -0.2057,-0.0984 -0.38815,-0.14667 -0.18244,-0.0483 -0.35237,-0.0483 -0.29513,0 -0.45611,0.11448 -0.15919,0.11447 -0.15919,0.32554 0,0.17708 0.10553,0.2683 0.10732,0.0894 0.40424,0.14488 l 0.21822,0.0447 q 0.40424,0.0769 0.59563,0.27188 0.19318,0.19318 0.19318,0.51872 0,0.38814 -0.26115,0.58847 -0.25936,0.20033 -0.76198,0.20033 -0.1896,0 -0.40424,-0.0429 -0.21285,-0.0429 -0.4418,-0.127 v -0.37205 q 0.22,0.12342 0.43107,0.18603 0.21106,0.0626 0.41497,0.0626 0.30944,0 0.47758,-0.12163 0.16814,-0.12163 0.16814,-0.347 0,-0.19676 -0.12164,-0.30766 -0.11984,-0.11089 -0.39529,-0.16634 l -0.22001,-0.0429 q -0.40424,-0.0805 -0.5849,-0.25221 -0.18066,-0.17171 -0.18066,-0.47757 0,-0.35416 0.24863,-0.55807 0.25042,-0.20391 0.68864,-0.20391 0.18781,0 0.38278,0.034 0.19497,0.034 0.39888,0.10196 z" | |||
| style="stroke-width:0.34342638" | |||
| id="path4080" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 168.64163,153.26419 h 1.68851 v 0.30408 h -1.3272 v 0.7906 h 1.27175 v 0.30407 h -1.27175 v 0.96768 h 1.3594 v 0.30407 h -1.72071 z" | |||
| style="stroke-width:0.34342638" | |||
| id="path4082" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 172.0437,153.50924 q -0.39351,0 -0.62604,0.29335 -0.23074,0.29334 -0.23074,0.79954 0,0.5044 0.23074,0.79775 0.23253,0.29334 0.62604,0.29334 0.39351,0 0.62246,-0.29334 0.23074,-0.29335 0.23074,-0.79775 0,-0.5062 -0.23074,-0.79954 -0.22895,-0.29335 -0.62246,-0.29335 z m 0.50619,2.37716 0.47579,0.5205 h -0.43643 l -0.3953,-0.42749 q -0.059,0.004 -0.0912,0.005 -0.0304,0.002 -0.059,0.002 -0.56344,0 -0.9015,-0.37562 -0.33627,-0.37741 -0.33627,-1.00881 0,-0.6332 0.33627,-1.00882 0.33806,-0.37741 0.9015,-0.37741 0.56164,0 0.89792,0.37741 0.33627,0.37562 0.33627,1.00882 0,0.46505 -0.18781,0.79596 -0.18603,0.3309 -0.54019,0.48831 z" | |||
| style="stroke-width:0.34342638" | |||
| id="path4084" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 173.76262,154.78457 h 0.9641 v 0.29335 h -0.9641 z" | |||
| style="stroke-width:0.34342638" | |||
| id="path4086" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 176.39377,154.49481 q 0.25935,0.0554 0.40424,0.23074 0.14667,0.17529 0.14667,0.43286 0,0.39529 -0.27188,0.61172 -0.27188,0.21643 -0.77271,0.21643 -0.16814,0 -0.347,-0.034 -0.17708,-0.0322 -0.36668,-0.0984 v -0.34879 q 0.15025,0.0876 0.32911,0.13236 0.17887,0.0447 0.37384,0.0447 0.33985,0 0.51693,-0.13415 0.17886,-0.13415 0.17886,-0.38993 0,-0.23611 -0.16634,-0.36847 -0.16456,-0.13415 -0.45969,-0.13415 h -0.31123 v -0.29692 h 0.32554 q 0.26651,0 0.40782,-0.10554 0.1413,-0.10732 0.1413,-0.30765 0,-0.2057 -0.14667,-0.31481 -0.14488,-0.11089 -0.41676,-0.11089 -0.14846,0 -0.31839,0.0322 -0.16992,0.0322 -0.37383,0.10017 v -0.32196 q 0.2057,-0.0572 0.38456,-0.0859 0.18066,-0.0286 0.33985,-0.0286 0.4114,0 0.65108,0.18781 0.23969,0.18602 0.23969,0.50441 0,0.2218 -0.127,0.37562 -0.127,0.15204 -0.36131,0.21107 z" | |||
| style="stroke-width:0.34342638" | |||
| id="path4088" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 179.66168,154.92767 q -0.39887,0 -0.5527,0.0912 -0.15383,0.0912 -0.15383,0.31123 0,0.17529 0.11448,0.27903 0.11626,0.10196 0.31481,0.10196 0.27366,0 0.43822,-0.19318 0.16635,-0.19497 0.16635,-0.51693 v -0.0733 z m 0.65645,-0.13594 v 1.14296 h -0.32912 v -0.30407 q -0.11269,0.18244 -0.28082,0.27009 -0.16814,0.0858 -0.4114,0.0858 -0.30765,0 -0.4901,-0.17171 -0.18065,-0.1735 -0.18065,-0.46327 0,-0.33806 0.22537,-0.50977 0.22716,-0.17171 0.67612,-0.17171 h 0.46148 v -0.0322 q 0,-0.22716 -0.15025,-0.35058 -0.14846,-0.12521 -0.41855,-0.12521 -0.17171,0 -0.33448,0.0411 -0.16277,0.0411 -0.31302,0.12342 v -0.30408 q 0.18065,-0.0697 0.35058,-0.10374 0.16992,-0.0358 0.3309,-0.0358 0.43465,0 0.6493,0.22537 0.21464,0.22537 0.21464,0.68328 z" | |||
| style="stroke-width:0.34342638" | |||
| id="path4090" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 182.27315,155.63062 h 0.59027 v -2.03731 l -0.64214,0.12879 v -0.32912 l 0.63856,-0.12879 h 0.36131 v 2.36643 h 0.59027 v 0.30407 h -1.53827 z" | |||
| style="stroke-width:0.34342638" | |||
| id="path4092" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 185.36041,154.45545 q -0.24326,0 -0.38635,0.16635 -0.14131,0.16635 -0.14131,0.45612 0,0.28797 0.14131,0.45611 0.14309,0.16635 0.38635,0.16635 0.24326,0 0.38457,-0.16635 0.14309,-0.16814 0.14309,-0.45611 0,-0.28977 -0.14309,-0.45612 -0.14131,-0.16635 -0.38457,-0.16635 z m 0.71726,-1.13223 v 0.32912 q -0.13594,-0.0644 -0.27545,-0.0984 -0.13773,-0.034 -0.27367,-0.034 -0.35774,0 -0.54734,0.24147 -0.18781,0.24147 -0.21464,0.72978 0.10553,-0.15562 0.26473,-0.2379 0.15919,-0.0841 0.35058,-0.0841 0.40245,0 0.63498,0.24505 0.23432,0.24326 0.23432,0.6636 0,0.41139 -0.24326,0.66002 -0.24327,0.24862 -0.64751,0.24862 -0.46326,0 -0.70831,-0.35415 -0.24505,-0.35595 -0.24505,-1.03028 0,-0.6332 0.3005,-1.00882 0.30049,-0.37741 0.80669,-0.37741 0.13594,0 0.27367,0.0268 0.13951,0.0268 0.28976,0.0805 z" | |||
| style="stroke-width:0.34342638" | |||
| id="path4094" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 189.27226,153.9904 v 0.31123 q -0.13952,-0.0716 -0.28977,-0.10732 -0.15025,-0.0358 -0.31123,-0.0358 -0.24505,0 -0.36847,0.0751 -0.12163,0.0751 -0.12163,0.22537 0,0.11448 0.0876,0.18066 0.0876,0.0644 0.35237,0.12342 l 0.11268,0.025 q 0.35058,0.0751 0.49726,0.21285 0.14846,0.13594 0.14846,0.38099 0,0.27903 -0.2218,0.4418 -0.22001,0.16277 -0.60636,0.16277 -0.16098,0 -0.33627,-0.0322 -0.17351,-0.0304 -0.36668,-0.093 v -0.33985 q 0.18244,0.0948 0.35952,0.14309 0.17708,0.0465 0.35058,0.0465 0.23253,0 0.35774,-0.0787 0.12521,-0.0805 0.12521,-0.22538 0,-0.13415 -0.0912,-0.2057 -0.0894,-0.0715 -0.3953,-0.13772 l -0.11447,-0.0268 q -0.30586,-0.0644 -0.4418,-0.19676 -0.13594,-0.13415 -0.13594,-0.36668 0,-0.28261 0.20033,-0.43644 0.20033,-0.15382 0.5688,-0.15382 0.18244,0 0.34342,0.0268 0.16099,0.0268 0.29693,0.0805 z" | |||
| style="stroke-width:0.34342638" | |||
| id="path4096" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 190.23099,153.36257 v 0.5688 h 0.67791 v 0.25578 h -0.67791 v 1.08752 q 0,0.24505 0.0662,0.31481 0.068,0.0698 0.27367,0.0698 h 0.33806 v 0.27545 h -0.33806 q -0.38099,0 -0.52588,-0.1413 -0.14488,-0.1431 -0.14488,-0.51872 v -1.08752 h -0.24147 v -0.25578 h 0.24147 v -0.5688 z" | |||
| style="stroke-width:0.34342638" | |||
| id="path4098" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 193.0571,154.85075 v 0.16098 h -1.51322 q 0.0215,0.33985 0.20391,0.51872 0.18423,0.17708 0.51156,0.17708 0.1896,0 0.36668,-0.0465 0.17887,-0.0465 0.35416,-0.13951 v 0.31123 q -0.17708,0.0751 -0.3631,0.11447 -0.18603,0.0393 -0.37742,0.0393 -0.47936,0 -0.76018,-0.27903 -0.27904,-0.27903 -0.27904,-0.75482 0,-0.49189 0.26473,-0.77987 0.26651,-0.28976 0.71726,-0.28976 0.40424,0 0.63856,0.26114 0.2361,0.25936 0.2361,0.70653 z m -0.32912,-0.0966 q -0.004,-0.27009 -0.15203,-0.43107 -0.14668,-0.16098 -0.38994,-0.16098 -0.27545,0 -0.4418,0.15562 -0.16456,0.15561 -0.1896,0.43822 z" | |||
| style="stroke-width:0.34342638" | |||
| id="path4100" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 193.91567,155.63419 v 1.06248 h -0.33091 v -2.7653 h 0.33091 v 0.30408 q 0.10374,-0.17887 0.26114,-0.26473 0.1592,-0.0876 0.3792,-0.0876 0.3649,0 0.59206,0.28976 0.22895,0.28977 0.22895,0.76198 0,0.47221 -0.22895,0.76198 -0.22716,0.28976 -0.59206,0.28976 -0.22,0 -0.3792,-0.0858 -0.1574,-0.0876 -0.26114,-0.26652 z m 1.11971,-0.69937 q 0,-0.3631 -0.15025,-0.5688 -0.14846,-0.20749 -0.40961,-0.20749 -0.26114,0 -0.41139,0.20749 -0.14846,0.2057 -0.14846,0.5688 0,0.3631 0.14846,0.57059 0.15025,0.2057 0.41139,0.2057 0.26115,0 0.40961,-0.2057 0.15025,-0.20749 0.15025,-0.57059 z" | |||
| style="stroke-width:0.34342638" | |||
| id="path4102" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 198.3659,153.9904 v 0.31123 q -0.13952,-0.0716 -0.28977,-0.10732 -0.15024,-0.0358 -0.31123,-0.0358 -0.24504,0 -0.36846,0.0751 -0.12163,0.0751 -0.12163,0.22537 0,0.11448 0.0876,0.18066 0.0876,0.0644 0.35237,0.12342 l 0.11269,0.025 q 0.35058,0.0751 0.49725,0.21285 0.14846,0.13594 0.14846,0.38099 0,0.27903 -0.2218,0.4418 -0.22,0.16277 -0.60636,0.16277 -0.16098,0 -0.33627,-0.0322 -0.1735,-0.0304 -0.36668,-0.093 v -0.33985 q 0.18245,0.0948 0.35953,0.14309 0.17708,0.0465 0.35058,0.0465 0.23253,0 0.35773,-0.0787 0.12521,-0.0805 0.12521,-0.22538 0,-0.13415 -0.0912,-0.2057 -0.0894,-0.0715 -0.3953,-0.13772 l -0.11448,-0.0268 q -0.30586,-0.0644 -0.4418,-0.19676 -0.13594,-0.13415 -0.13594,-0.36668 0,-0.28261 0.20033,-0.43644 0.20034,-0.15382 0.5688,-0.15382 0.18245,0 0.34343,0.0268 0.16098,0.0268 0.29692,0.0805 z" | |||
| style="stroke-width:0.34342638" | |||
| id="path4104" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 200.71265,154.85075 v 0.16098 h -1.51323 q 0.0215,0.33985 0.20391,0.51872 0.18424,0.17708 0.51157,0.17708 0.1896,0 0.36668,-0.0465 0.17886,-0.0465 0.35415,-0.13951 v 0.31123 q -0.17708,0.0751 -0.3631,0.11447 -0.18602,0.0393 -0.37741,0.0393 -0.47937,0 -0.76019,-0.27903 -0.27903,-0.27903 -0.27903,-0.75482 0,-0.49189 0.26472,-0.77987 0.26652,-0.28976 0.71726,-0.28976 0.40424,0 0.63856,0.26114 0.23611,0.25936 0.23611,0.70653 z m -0.32912,-0.0966 q -0.004,-0.27009 -0.15204,-0.43107 -0.14667,-0.16098 -0.38993,-0.16098 -0.27546,0 -0.4418,0.15562 -0.16456,0.15561 -0.1896,0.43822 z" | |||
| style="stroke-width:0.34342638" | |||
| id="path4106" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 201.44958,154.93482 q 0,0.3631 0.14846,0.57059 0.15025,0.2057 0.4114,0.2057 0.26115,0 0.41139,-0.2057 0.15025,-0.20749 0.15025,-0.57059 0,-0.3631 -0.15025,-0.5688 -0.15024,-0.20749 -0.41139,-0.20749 -0.26115,0 -0.4114,0.20749 -0.14846,0.2057 -0.14846,0.5688 z m 1.1215,0.69937 q -0.10374,0.17887 -0.26293,0.26652 -0.15741,0.0858 -0.3792,0.0858 -0.3631,0 -0.59206,-0.28976 -0.22716,-0.28977 -0.22716,-0.76198 0,-0.47221 0.22716,-0.76198 0.22896,-0.28976 0.59206,-0.28976 0.22179,0 0.3792,0.0876 0.15919,0.0859 0.26293,0.26473 v -0.30408 h 0.32912 v 2.7653 h -0.32912 z" | |||
| style="stroke-width:0.34342638" | |||
| id="path4108" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 203.54413,155.1441 v -1.21273 h 0.32911 v 1.20021 q 0,0.2844 0.1109,0.42749 0.1109,0.14131 0.33269,0.14131 0.26652,0 0.42034,-0.16993 0.15562,-0.16992 0.15562,-0.46327 v -1.13581 h 0.32912 v 2.00332 h -0.32912 v -0.30765 q -0.11984,0.18244 -0.27903,0.27188 -0.15741,0.0876 -0.36668,0.0876 -0.34522,0 -0.52409,-0.21464 -0.17886,-0.21464 -0.17886,-0.62782 z m 0.82815,-1.26102 z" | |||
| style="stroke-width:0.34342638" | |||
| id="path4110" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 207.61695,154.85075 v 0.16098 h -1.51322 q 0.0215,0.33985 0.2039,0.51872 0.18424,0.17708 0.51157,0.17708 0.1896,0 0.36668,-0.0465 0.17886,-0.0465 0.35415,-0.13951 v 0.31123 q -0.17707,0.0751 -0.3631,0.11447 -0.18602,0.0393 -0.37741,0.0393 -0.47936,0 -0.76019,-0.27903 -0.27903,-0.27903 -0.27903,-0.75482 0,-0.49189 0.26472,-0.77987 0.26652,-0.28976 0.71726,-0.28976 0.40425,0 0.63856,0.26114 0.23611,0.25936 0.23611,0.70653 z m -0.32912,-0.0966 q -0.004,-0.27009 -0.15204,-0.43107 -0.14667,-0.16098 -0.38993,-0.16098 -0.27546,0 -0.4418,0.15562 -0.16456,0.15561 -0.1896,0.43822 z" | |||
| style="stroke-width:0.34342638" | |||
| id="path4112" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 209.82239,154.72555 v 1.20914 h -0.32912 v -1.19841 q 0,-0.2844 -0.1109,-0.42571 -0.1109,-0.1413 -0.33269,-0.1413 -0.26651,0 -0.42034,0.16992 -0.15383,0.16993 -0.15383,0.46327 v 1.13223 h -0.3309 v -2.00332 h 0.3309 v 0.31123 q 0.11806,-0.18065 0.27725,-0.27009 0.16098,-0.0894 0.37025,-0.0894 0.34522,0 0.5223,0.21464 0.17708,0.21285 0.17708,0.62783 z" | |||
| style="stroke-width:0.34342638" | |||
| id="path4114" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 211.92409,154.00828 v 0.30766 q -0.13952,-0.0769 -0.28083,-0.11448 -0.13951,-0.0393 -0.28261,-0.0393 -0.32017,0 -0.49725,0.20391 -0.17708,0.20212 -0.17708,0.5688 0,0.36668 0.17708,0.57059 0.17708,0.20212 0.49725,0.20212 0.1431,0 0.28261,-0.0376 0.14131,-0.0394 0.28083,-0.11627 v 0.30408 q -0.13773,0.0644 -0.28619,0.0966 -0.14667,0.0322 -0.31302,0.0322 -0.45254,0 -0.71905,-0.2844 -0.26651,-0.2844 -0.26651,-0.76734 0,-0.4901 0.2683,-0.77092 0.27009,-0.28082 0.73872,-0.28082 0.15204,0 0.29692,0.0322 0.14489,0.0304 0.28083,0.093 z" | |||
| style="stroke-width:0.34342638" | |||
| id="path4116" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 214.2136,154.85075 v 0.16098 h -1.51323 q 0.0215,0.33985 0.20391,0.51872 0.18424,0.17708 0.51157,0.17708 0.1896,0 0.36668,-0.0465 0.17886,-0.0465 0.35415,-0.13951 v 0.31123 q -0.17708,0.0751 -0.3631,0.11447 -0.18602,0.0393 -0.37741,0.0393 -0.47937,0 -0.76019,-0.27903 -0.27903,-0.27903 -0.27903,-0.75482 0,-0.49189 0.26472,-0.77987 0.26652,-0.28976 0.71726,-0.28976 0.40424,0 0.63856,0.26114 0.23611,0.25936 0.23611,0.70653 z m -0.32912,-0.0966 q -0.004,-0.27009 -0.15204,-0.43107 -0.14667,-0.16098 -0.38993,-0.16098 -0.27546,0 -0.4418,0.15562 -0.16456,0.15561 -0.1896,0.43822 z" | |||
| style="stroke-width:0.34342638" | |||
| id="path4118" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 215.91463,154.23902 q -0.0554,-0.0322 -0.12163,-0.0465 -0.0644,-0.0161 -0.14309,-0.0161 -0.27904,0 -0.42929,0.18245 -0.14846,0.18065 -0.14846,0.5205 v 1.05532 h -0.3309 v -2.00332 h 0.3309 v 0.31123 q 0.10375,-0.18244 0.27009,-0.27009 0.16635,-0.0894 0.40424,-0.0894 0.034,0 0.0751,0.005 0.0411,0.004 0.0912,0.0125 z" | |||
| style="stroke-width:0.34342638" | |||
| id="path4120" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="Gate Out" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text150"> | |||
| <path | |||
| d="m 108.12748,253.48492 v -0.55259 h -0.45476 v -0.22876 h 0.73036 v 0.88333 q -0.16123,0.11437 -0.35553,0.17363 -0.1943,0.0579 -0.41479,0.0579 -0.48231,0 -0.75516,-0.28112 -0.27148,-0.2825 -0.27148,-0.78549 0,-0.50436 0.27148,-0.78548 0.27285,-0.2825 0.75516,-0.2825 0.20119,0 0.38172,0.0496 0.1819,0.0496 0.33486,0.14608 v 0.29627 q -0.15434,-0.13091 -0.32797,-0.19706 -0.17364,-0.0661 -0.36518,-0.0661 -0.37759,0 -0.56776,0.21084 -0.18879,0.21084 -0.18879,0.62838 0,0.41617 0.18879,0.62701 0.19017,0.21084 0.56776,0.21084 0.14745,0 0.2632,-0.0248 0.11576,-0.0262 0.20809,-0.0799 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path188" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 109.60335,253.00261 q -0.3073,0 -0.42581,0.0703 -0.11851,0.0703 -0.11851,0.23978 0,0.13504 0.0882,0.21497 0.0896,0.0786 0.24254,0.0786 0.21084,0 0.33762,-0.14883 0.12816,-0.15021 0.12816,-0.39825 v -0.0565 z m 0.50574,-0.10473 v 0.88056 h -0.25355 v -0.23426 q -0.0868,0.14056 -0.21636,0.20808 -0.12953,0.0661 -0.31695,0.0661 -0.23702,0 -0.37758,-0.1323 -0.13918,-0.13367 -0.13918,-0.35691 0,-0.26045 0.17363,-0.39274 0.17501,-0.13229 0.5209,-0.13229 h 0.35554 v -0.0248 q 0,-0.17501 -0.11576,-0.27009 -0.11438,-0.0965 -0.32246,-0.0965 -0.13229,0 -0.25769,0.0317 -0.12541,0.0317 -0.24116,0.0951 v -0.23427 q 0.13918,-0.0537 0.2701,-0.0799 0.13091,-0.0276 0.25493,-0.0276 0.33487,0 0.50023,0.17364 0.16536,0.17363 0.16536,0.52641 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path190" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 110.88355,251.79682 v 0.43822 h 0.52228 v 0.19706 h -0.52228 v 0.83785 q 0,0.18879 0.051,0.24253 0.0524,0.0537 0.21084,0.0537 h 0.26045 v 0.21222 h -0.26045 q -0.29352,0 -0.40514,-0.10886 -0.11162,-0.11025 -0.11162,-0.39963 v -0.83785 h -0.18604 V 252.235 h 0.18604 v -0.43822 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path192" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 113.06085,252.94335 v 0.12402 h -1.16582 q 0.0165,0.26183 0.1571,0.39964 0.14194,0.13642 0.39412,0.13642 0.14607,0 0.2825,-0.0358 0.1378,-0.0358 0.27285,-0.10748 v 0.23977 q -0.13643,0.0579 -0.27974,0.0882 -0.14332,0.0303 -0.29077,0.0303 -0.36932,0 -0.58567,-0.21498 -0.21497,-0.21497 -0.21497,-0.58153 0,-0.37896 0.20395,-0.60083 0.20533,-0.22324 0.55259,-0.22324 0.31144,0 0.49196,0.2012 0.1819,0.19981 0.1819,0.54432 z m -0.25356,-0.0744 q -0.003,-0.20809 -0.11713,-0.33211 -0.113,-0.12402 -0.30041,-0.12402 -0.21222,0 -0.34038,0.11989 -0.12678,0.11989 -0.14607,0.33762 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path194" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 115.22162,251.90982 q -0.30317,0 -0.48232,0.226 -0.17776,0.226 -0.17776,0.61598 0,0.38861 0.17776,0.61461 0.17915,0.226 0.48232,0.226 0.30316,0 0.47955,-0.226 0.17777,-0.226 0.17777,-0.61461 0,-0.38998 -0.17777,-0.61598 -0.17639,-0.226 -0.47955,-0.226 z m 0,-0.226 q 0.4327,0 0.69177,0.29077 0.25907,0.28939 0.25907,0.77721 0,0.48645 -0.25907,0.77722 -0.25907,0.28939 -0.69177,0.28939 -0.43409,0 -0.69453,-0.28939 -0.25908,-0.28939 -0.25908,-0.77722 0,-0.48782 0.25908,-0.77721 0.26044,-0.29077 0.69453,-0.29077 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path196" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 116.57072,253.16935 v -0.93431 h 0.25356 v 0.92466 q 0,0.21911 0.0854,0.32935 0.0854,0.10887 0.25632,0.10887 0.20533,0 0.32384,-0.13091 0.11989,-0.13092 0.11989,-0.35692 v -0.87505 h 0.25356 v 1.5434 h -0.25356 v -0.23702 q -0.0923,0.14056 -0.21498,0.20946 -0.12126,0.0675 -0.28249,0.0675 -0.26597,0 -0.40377,-0.16537 -0.1378,-0.16536 -0.1378,-0.48369 z m 0.63803,-0.97152 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path198" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 118.63915,251.79682 v 0.43822 h 0.52228 v 0.19706 h -0.52228 v 0.83785 q 0,0.18879 0.051,0.24253 0.0524,0.0537 0.21084,0.0537 h 0.26045 v 0.21222 h -0.26045 q -0.29352,0 -0.40514,-0.10886 -0.11163,-0.11025 -0.11163,-0.39963 v -0.83785 h -0.18603 V 252.235 h 0.18603 v -0.43822 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path200" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="Ext Clock" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text154" | |||
| transform="translate(0,-1.0583333)"> | |||
| <path | |||
| d="m 38.462151,184.78144 h 1.300868 v 0.23427 h -1.022504 v 0.60909 H 39.7203 v 0.23427 h -0.979785 v 0.74552 h 1.047309 v 0.23426 h -1.325673 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path241" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 41.520018,185.29545 -0.558106,0.75103 0.587045,0.79237 h -0.299035 l -0.44924,-0.60633 -0.449241,0.60633 h -0.299034 l 0.599447,-0.80753 -0.548459,-0.73587 h 0.299034 l 0.409277,0.54984 0.409278,-0.54984 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path243" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 42.15805,184.85723 v 0.43822 h 0.522276 v 0.19706 H 42.15805 v 0.83785 q 0,0.18879 0.05099,0.24253 0.05237,0.0537 0.21084,0.0537 h 0.260449 v 0.21222 H 42.41988 q -0.293522,0 -0.405143,-0.10886 -0.111621,-0.11025 -0.111621,-0.39963 v -0.83785 h -0.186035 v -0.19706 h 0.186035 v -0.43822 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path245" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 45.465341,184.93992 v 0.29352 q -0.14056,-0.13092 -0.300412,-0.19568 -0.158474,-0.0648 -0.337619,-0.0648 -0.352778,0 -0.540191,0.21635 -0.187414,0.21497 -0.187414,0.62287 0,0.40652 0.187414,0.62288 0.187413,0.21497 0.540191,0.21497 0.179145,0 0.337619,-0.0648 0.159852,-0.0648 0.300412,-0.19568 v 0.29077 q -0.146072,0.0992 -0.310058,0.14883 -0.162609,0.0496 -0.34451,0.0496 -0.467155,0 -0.735872,-0.28526 -0.268718,-0.28663 -0.268718,-0.78135 0,-0.49609 0.268718,-0.78134 0.268717,-0.28664 0.735872,-0.28664 0.184657,0 0.347266,0.0496 0.163986,0.0482 0.307302,0.14608 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path247" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 45.887021,184.69462 h 0.253559 v 2.14423 h -0.253559 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path249" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 47.267816,185.47322 q -0.20395,0 -0.322461,0.15985 -0.118512,0.15847 -0.118512,0.43546 0,0.27698 0.117134,0.43684 0.118511,0.15847 0.323839,0.15847 0.202571,0 0.321083,-0.15985 0.118511,-0.15985 0.118511,-0.43546 0,-0.27423 -0.118511,-0.43408 -0.118512,-0.16123 -0.321083,-0.16123 z m 0,-0.21498 q 0.330729,0 0.51952,0.21498 0.188791,0.21497 0.188791,0.59531 0,0.37896 -0.188791,0.59531 -0.188791,0.21498 -0.51952,0.21498 -0.332108,0 -0.520899,-0.21498 -0.187413,-0.21635 -0.187413,-0.59531 0,-0.38034 0.187413,-0.59531 0.188791,-0.21498 0.520899,-0.21498 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path251" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 49.50575,185.3547 v 0.23703 q -0.107487,-0.0593 -0.216352,-0.0882 -0.107487,-0.0303 -0.217731,-0.0303 -0.246668,0 -0.383094,0.15709 -0.136426,0.15572 -0.136426,0.43822 0,0.2825 0.136426,0.43959 0.136426,0.15572 0.383094,0.15572 0.110244,0 0.217731,-0.0289 0.108865,-0.0303 0.216352,-0.0896 v 0.23427 q -0.106109,0.0496 -0.220487,0.0744 -0.112999,0.0248 -0.241156,0.0248 -0.348644,0 -0.553972,-0.21911 -0.205327,-0.21911 -0.205327,-0.59118 0,-0.37758 0.206705,-0.59394 0.208084,-0.21635 0.56913,-0.21635 0.117133,0 0.228755,0.0248 0.111621,0.0234 0.216352,0.0717 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path253" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 49.939832,184.69462 h 0.254937 v 1.26642 l 0.756543,-0.66559 h 0.323839 l -0.818555,0.72209 0.853006,0.82131 h -0.33073 l -0.784103,-0.75378 v 0.75378 h -0.254937 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path255" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="Gate" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text158"> | |||
| <path | |||
| d="m 73.731655,175.43283 v -0.5526 h -0.454753 v -0.22875 h 0.730361 v 0.88332 q -0.161231,0.11438 -0.355534,0.17363 -0.194304,0.0579 -0.41479,0.0579 -0.482313,0 -0.755165,-0.28112 -0.271473,-0.2825 -0.271473,-0.78548 0,-0.50436 0.271473,-0.78548 0.272852,-0.2825 0.755165,-0.2825 0.201194,0 0.381717,0.0496 0.181901,0.0496 0.334863,0.14607 v 0.29628 q -0.15434,-0.13091 -0.327973,-0.19706 -0.173633,-0.0661 -0.36518,-0.0661 -0.377582,0 -0.567752,0.21083 -0.188791,0.21084 -0.188791,0.62839 0,0.41617 0.188791,0.62701 0.19017,0.21084 0.567752,0.21084 0.14745,0 0.263205,-0.0248 0.115755,-0.0262 0.208084,-0.0799 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path267" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 75.207534,174.95051 q -0.307303,0 -0.425814,0.0703 -0.118511,0.0703 -0.118511,0.23978 0,0.13505 0.08819,0.21498 0.08957,0.0785 0.242535,0.0785 0.21084,0 0.337619,-0.14882 0.128158,-0.15021 0.128158,-0.39826 v -0.0565 z m 0.50574,-0.10473 v 0.88057 h -0.253559 v -0.23427 q -0.08682,0.14056 -0.216352,0.20809 -0.129536,0.0661 -0.316949,0.0661 -0.237022,0 -0.377582,-0.13229 -0.139182,-0.13367 -0.139182,-0.35691 0,-0.26045 0.173633,-0.39274 0.175011,-0.13229 0.520898,-0.13229 h 0.355534 v -0.0248 q 0,-0.17501 -0.115755,-0.27009 -0.114377,-0.0965 -0.322461,-0.0965 -0.132292,0 -0.257693,0.0317 -0.125402,0.0317 -0.241157,0.0951 v -0.23426 q 0.139182,-0.0538 0.270095,-0.0799 0.130914,-0.0276 0.254938,-0.0276 0.334863,0 0.500227,0.17363 0.165365,0.17363 0.165365,0.52641 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path269" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 76.487732,173.74473 v 0.43822 h 0.522276 v 0.19706 h -0.522276 v 0.83784 q 0,0.18879 0.05099,0.24254 0.05236,0.0537 0.21084,0.0537 h 0.260449 v 0.21222 h -0.260449 q -0.293522,0 -0.405143,-0.10887 -0.111621,-0.11024 -0.111621,-0.39963 v -0.83784 h -0.186036 v -0.19706 h 0.186036 v -0.43822 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path271" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 78.665032,174.89126 v 0.12402 h -1.16582 q 0.01654,0.26183 0.157096,0.39963 0.141938,0.13643 0.394119,0.13643 0.146072,0 0.282498,-0.0358 0.137803,-0.0358 0.272851,-0.10749 v 0.23978 q -0.136426,0.0579 -0.279742,0.0882 -0.143316,0.0303 -0.290766,0.0303 -0.369314,0 -0.585666,-0.21497 -0.214974,-0.21498 -0.214974,-0.58153 0,-0.37896 0.20395,-0.60083 0.205328,-0.22324 0.552593,-0.22324 0.311437,0 0.49196,0.20119 0.181901,0.19982 0.181901,0.54433 z m -0.253559,-0.0744 q -0.0028,-0.20808 -0.117133,-0.3321 -0.113,-0.12403 -0.300413,-0.12403 -0.212218,0 -0.340375,0.11989 -0.12678,0.11989 -0.146072,0.33762 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path273" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="A" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text162"> | |||
| <path | |||
| d="m 85.45187,174.07545 -0.377582,1.02388 h 0.756543 z m -0.157096,-0.27423 h 0.315571 l 0.784104,2.05741 H 86.10506 l -0.187413,-0.52779 h -0.927419 l -0.187414,0.52779 h -0.293522 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path264" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="B" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text166" | |||
| transform="translate(-0.52916667)"> | |||
| <path | |||
| d="m 95.493628,174.74381 v 0.75378 h 0.446484 q 0.22462,0 0.332107,-0.0923 0.108865,-0.0937 0.108865,-0.28526 0,-0.19292 -0.108865,-0.28387 -0.107487,-0.0923 -0.332107,-0.0923 z m 0,-0.84612 v 0.62012 h 0.412033 q 0.20395,0 0.303168,-0.0758 0.100597,-0.0772 0.100597,-0.23427 0,-0.15572 -0.100597,-0.23289 -0.09922,-0.0772 -0.303168,-0.0772 z m -0.278364,-0.22875 h 0.711068 q 0.318326,0 0.490581,0.13229 0.172255,0.13229 0.172255,0.3762 0,0.1888 -0.08819,0.30042 -0.08819,0.11162 -0.259072,0.13918 0.205328,0.0441 0.318327,0.18466 0.114377,0.13918 0.114377,0.34864 0,0.27561 -0.187413,0.42581 -0.187413,0.15021 -0.533301,0.15021 h -0.738628 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path261" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="C" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text170" | |||
| transform="translate(0.03444667,0.01791566)"> | |||
| <path | |||
| d="m 106.6778,173.69512 v 0.29352 q -0.14056,-0.13091 -0.30041,-0.19568 -0.15848,-0.0648 -0.33762,-0.0648 -0.35278,0 -0.54019,0.21635 -0.18742,0.21498 -0.18742,0.62288 0,0.40652 0.18742,0.62287 0.18741,0.21497 0.54019,0.21497 0.17914,0 0.33762,-0.0648 0.15985,-0.0648 0.30041,-0.19569 v 0.29077 q -0.14607,0.0992 -0.31006,0.14883 -0.16261,0.0496 -0.34451,0.0496 -0.46715,0 -0.73587,-0.28526 -0.26872,-0.28663 -0.26872,-0.78134 0,-0.4961 0.26872,-0.78135 0.26872,-0.28663 0.73587,-0.28663 0.18466,0 0.34727,0.0496 0.16398,0.0482 0.3073,0.14607 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path258" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="Steps" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text174"> | |||
| <path | |||
| d="m 62.846534,170.95834 v 0.27147 q -0.158474,-0.0758 -0.299034,-0.113 -0.14056,-0.0372 -0.271473,-0.0372 -0.227377,0 -0.3514,0.0882 -0.122646,0.0882 -0.122646,0.2508 0,0.13643 0.08131,0.20671 0.08268,0.0689 0.311436,0.11162 l 0.168121,0.0344 q 0.311437,0.0593 0.458887,0.20946 0.148828,0.14883 0.148828,0.39964 0,0.29903 -0.201194,0.45337 -0.199815,0.15434 -0.587044,0.15434 -0.146072,0 -0.311437,-0.0331 -0.163986,-0.0331 -0.340375,-0.0978 v -0.28664 q 0.169499,0.0951 0.332107,0.14332 0.162609,0.0482 0.319705,0.0482 0.238401,0 0.367936,-0.0937 0.129536,-0.0937 0.129536,-0.26734 0,-0.15159 -0.09371,-0.23703 -0.09233,-0.0854 -0.304546,-0.12815 l -0.169499,-0.0331 q -0.311437,-0.062 -0.450618,-0.1943 -0.139182,-0.13229 -0.139182,-0.36794 0,-0.27285 0.191547,-0.42994 0.192925,-0.1571 0.530545,-0.1571 0.144694,0 0.2949,0.0262 0.150206,0.0262 0.307302,0.0785 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path230" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 63.644419,170.96661 v 0.43821 h 0.522276 v 0.19706 h -0.522276 v 0.83785 q 0,0.18879 0.05099,0.24254 0.05237,0.0537 0.21084,0.0537 h 0.260449 v 0.21222 h -0.260449 q -0.293522,0 -0.405143,-0.10887 -0.111622,-0.11024 -0.111622,-0.39963 v -0.83785 h -0.186035 v -0.19706 h 0.186035 v -0.43821 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path232" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 65.821719,172.11314 v 0.12402 h -1.16582 q 0.01654,0.26183 0.157096,0.39963 0.141938,0.13643 0.394119,0.13643 0.146072,0 0.282498,-0.0358 0.137803,-0.0358 0.272851,-0.10749 v 0.23978 q -0.136426,0.0579 -0.279742,0.0882 -0.143316,0.0303 -0.290766,0.0303 -0.369314,0 -0.585666,-0.21497 -0.214974,-0.21498 -0.214974,-0.58154 0,-0.37896 0.20395,-0.60082 0.205328,-0.22324 0.552593,-0.22324 0.311437,0 0.49196,0.20119 0.181901,0.19982 0.181901,0.54433 z m -0.253559,-0.0744 q -0.0028,-0.20808 -0.117133,-0.33211 -0.113,-0.12402 -0.300413,-0.12402 -0.212218,0 -0.340375,0.11989 -0.12678,0.11989 -0.146072,0.33762 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path234" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 66.483177,172.71672 v 0.81855 H 66.22824 v -2.13045 h 0.254937 v 0.23427 q 0.07993,-0.1378 0.201194,-0.20395 0.122645,-0.0675 0.292144,-0.0675 0.281119,0 0.45613,0.22324 0.176389,0.22324 0.176389,0.58704 0,0.36381 -0.176389,0.58705 -0.175011,0.22324 -0.45613,0.22324 -0.169499,0 -0.292144,-0.0661 -0.121268,-0.0675 -0.201194,-0.20532 z m 0.862652,-0.53882 q 0,-0.27974 -0.115755,-0.43821 -0.114378,-0.15986 -0.315571,-0.15986 -0.201194,0 -0.316949,0.15986 -0.114377,0.15847 -0.114377,0.43821 0,0.27975 0.114377,0.4396 0.115755,0.15847 0.316949,0.15847 0.201193,0 0.315571,-0.15847 0.115755,-0.15985 0.115755,-0.4396 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path236" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 69.013255,171.4503 v 0.23978 q -0.107487,-0.0551 -0.223242,-0.0827 -0.115755,-0.0276 -0.239778,-0.0276 -0.188792,0 -0.283876,0.0579 -0.09371,0.0579 -0.09371,0.17364 0,0.0882 0.06752,0.13918 0.06752,0.0496 0.271474,0.0951 l 0.08682,0.0193 q 0.270095,0.0579 0.383095,0.16399 0.114377,0.10473 0.114377,0.29352 0,0.21498 -0.170877,0.34038 -0.169499,0.1254 -0.467155,0.1254 -0.124023,0 -0.259071,-0.0248 -0.13367,-0.0234 -0.282498,-0.0717 v -0.26183 q 0.14056,0.073 0.276986,0.11024 0.136426,0.0358 0.270095,0.0358 0.179145,0 0.275608,-0.0606 0.09646,-0.062 0.09646,-0.17363 0,-0.10336 -0.07028,-0.15848 -0.0689,-0.0551 -0.304547,-0.10611 l -0.08819,-0.0207 q -0.235645,-0.0496 -0.340376,-0.15158 -0.104731,-0.10336 -0.104731,-0.2825 0,-0.21773 0.154341,-0.33624 0.15434,-0.11851 0.438216,-0.11851 0.14056,0 0.264583,0.0207 0.124024,0.0207 0.228754,0.062 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path238" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="Clock" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text178"> | |||
| <path | |||
| d="m 32.859045,171.31386 v 0.29352 q -0.14056,-0.13091 -0.300413,-0.19568 -0.158474,-0.0648 -0.337619,-0.0648 -0.352778,0 -0.540191,0.21635 -0.187413,0.21497 -0.187413,0.62287 0,0.40652 0.187413,0.62287 0.187413,0.21498 0.540191,0.21498 0.179145,0 0.337619,-0.0648 0.159853,-0.0648 0.300413,-0.19568 v 0.29076 q -0.146072,0.0992 -0.310059,0.14883 -0.162608,0.0496 -0.344509,0.0496 -0.467155,0 -0.735873,-0.28525 -0.268717,-0.28663 -0.268717,-0.78135 0,-0.49609 0.268717,-0.78135 0.268718,-0.28663 0.735873,-0.28663 0.184657,0 0.347265,0.0496 0.163987,0.0482 0.307303,0.14607 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path219" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 33.280724,171.06857 h 0.253559 v 2.14423 h -0.253559 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path221" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 34.661519,171.84716 q -0.20395,0 -0.322461,0.15986 -0.118512,0.15847 -0.118512,0.43546 0,0.27698 0.117134,0.43683 0.118511,0.15848 0.323839,0.15848 0.202571,0 0.321083,-0.15985 0.118511,-0.15986 0.118511,-0.43546 0,-0.27423 -0.118511,-0.43409 -0.118512,-0.16123 -0.321083,-0.16123 z m 0,-0.21497 q 0.330729,0 0.51952,0.21497 0.188791,0.21498 0.188791,0.59532 0,0.37896 -0.188791,0.59531 -0.188791,0.21497 -0.51952,0.21497 -0.332108,0 -0.520899,-0.21497 -0.187413,-0.21635 -0.187413,-0.59531 0,-0.38034 0.187413,-0.59532 0.188791,-0.21497 0.520899,-0.21497 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path223" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 36.899453,171.72865 v 0.23702 q -0.107487,-0.0592 -0.216352,-0.0882 -0.107487,-0.0303 -0.217731,-0.0303 -0.246668,0 -0.383094,0.1571 -0.136426,0.15572 -0.136426,0.43822 0,0.28249 0.136426,0.43959 0.136426,0.15572 0.383094,0.15572 0.110244,0 0.217731,-0.0289 0.108865,-0.0303 0.216352,-0.0896 v 0.23426 q -0.106109,0.0496 -0.220487,0.0744 -0.112999,0.0248 -0.241156,0.0248 -0.348644,0 -0.553972,-0.21911 -0.205327,-0.2191 -0.205327,-0.59117 0,-0.37759 0.206705,-0.59394 0.208084,-0.21635 0.56913,-0.21635 0.117133,0 0.228755,0.0248 0.111621,0.0234 0.216352,0.0717 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path225" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 37.333535,171.06857 h 0.254937 v 1.26642 l 0.756543,-0.66559 h 0.323839 l -0.818555,0.72209 0.853006,0.82131 h -0.33073 l -0.784103,-0.75379 v 0.75379 h -0.254937 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path227" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="Go" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text182"> | |||
| <path | |||
| d="m 44.627491,175.16824 v -0.55259 h -0.454753 v -0.22876 h 0.730361 v 0.88332 q -0.161231,0.11438 -0.355534,0.17364 -0.194304,0.0579 -0.41479,0.0579 -0.482313,0 -0.755165,-0.28112 -0.271473,-0.28249 -0.271473,-0.78548 0,-0.50436 0.271473,-0.78548 0.272852,-0.2825 0.755165,-0.2825 0.201194,0 0.381717,0.0496 0.181901,0.0496 0.334863,0.14607 v 0.29628 q -0.15434,-0.13091 -0.327973,-0.19706 -0.173633,-0.0661 -0.36518,-0.0661 -0.377583,0 -0.567752,0.21084 -0.188791,0.21084 -0.188791,0.62838 0,0.41617 0.188791,0.62701 0.190169,0.21084 0.567752,0.21084 0.14745,0 0.263205,-0.0248 0.115755,-0.0262 0.208084,-0.0799 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path214" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 46.000017,174.09613 q -0.20395,0 -0.322461,0.15985 -0.118511,0.15847 -0.118511,0.43546 0,0.27698 0.117133,0.43684 0.118511,0.15847 0.323839,0.15847 0.202572,0 0.321083,-0.15985 0.118511,-0.15985 0.118511,-0.43546 0,-0.27423 -0.118511,-0.43408 -0.118511,-0.16123 -0.321083,-0.16123 z m 0,-0.21498 q 0.330729,0 0.51952,0.21498 0.188792,0.21497 0.188792,0.59531 0,0.37896 -0.188792,0.59531 -0.188791,0.21497 -0.51952,0.21497 -0.332107,0 -0.520898,-0.21497 -0.187414,-0.21635 -0.187414,-0.59531 0,-0.38034 0.187414,-0.59531 0.188791,-0.21498 0.520898,-0.21498 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path216" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="Reset" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text186"> | |||
| <path | |||
| d="m 52.270093,174.49713 q 0.08957,0.0303 0.173633,0.12954 0.08544,0.0992 0.170876,0.27285 l 0.282498,0.56224 h -0.299034 l -0.263205,-0.52779 q -0.101975,-0.2067 -0.198438,-0.27423 -0.09508,-0.0675 -0.260449,-0.0675 h -0.303169 v 0.86954 h -0.278363 v -2.05741 h 0.628385 q 0.352778,0 0.526411,0.14745 0.173633,0.14745 0.173633,0.44511 0,0.1943 -0.09095,0.32246 -0.08957,0.12816 -0.261827,0.17776 z m -0.697288,-0.86403 v 0.73037 h 0.350022 q 0.201194,0 0.303169,-0.0923 0.103352,-0.0937 0.103352,-0.27423 0,-0.18053 -0.103352,-0.27148 -0.101975,-0.0923 -0.303169,-0.0923 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path203" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 54.439125,174.62667 v 0.12402 h -1.16582 q 0.01654,0.26183 0.157096,0.39963 0.141938,0.13643 0.394119,0.13643 0.146072,0 0.282498,-0.0358 0.137803,-0.0358 0.272851,-0.10749 v 0.23978 q -0.136426,0.0579 -0.279742,0.0882 -0.143315,0.0303 -0.290766,0.0303 -0.369314,0 -0.585666,-0.21497 -0.214974,-0.21497 -0.214974,-0.58153 0,-0.37896 0.20395,-0.60083 0.205328,-0.22324 0.552593,-0.22324 0.311437,0 0.49196,0.2012 0.181901,0.19981 0.181901,0.54432 z m -0.253559,-0.0744 q -0.0028,-0.20809 -0.117133,-0.33211 -0.113,-0.12402 -0.300413,-0.12402 -0.212218,0 -0.340375,0.11988 -0.12678,0.11989 -0.146072,0.33762 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path205" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 55.839212,173.96383 v 0.23978 q -0.107487,-0.0551 -0.223242,-0.0827 -0.115756,-0.0276 -0.239779,-0.0276 -0.188791,0 -0.283876,0.0579 -0.09371,0.0579 -0.09371,0.17363 0,0.0882 0.06752,0.13918 0.06752,0.0496 0.271474,0.0951 l 0.08682,0.0193 q 0.270096,0.0579 0.383095,0.16399 0.114377,0.10473 0.114377,0.29352 0,0.21497 -0.170877,0.34037 -0.169498,0.1254 -0.467155,0.1254 -0.124023,0 -0.259071,-0.0248 -0.133669,-0.0234 -0.282498,-0.0717 v -0.26183 q 0.14056,0.073 0.276986,0.11025 0.136426,0.0358 0.270096,0.0358 0.179145,0 0.275607,-0.0606 0.09646,-0.062 0.09646,-0.17363 0,-0.10335 -0.07028,-0.15847 -0.0689,-0.0551 -0.304547,-0.10611 l -0.08819,-0.0207 q -0.235644,-0.0496 -0.340375,-0.15159 -0.104731,-0.10335 -0.104731,-0.2825 0,-0.21773 0.15434,-0.33624 0.15434,-0.11851 0.438216,-0.11851 0.14056,0 0.264583,0.0207 0.124024,0.0207 0.228755,0.062 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path207" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 57.647198,174.62667 v 0.12402 h -1.165821 q 0.01654,0.26183 0.157097,0.39963 0.141938,0.13643 0.394119,0.13643 0.146072,0 0.282497,-0.0358 0.137804,-0.0358 0.272852,-0.10749 v 0.23978 q -0.136426,0.0579 -0.279742,0.0882 -0.143316,0.0303 -0.290766,0.0303 -0.369314,0 -0.585666,-0.21497 -0.214974,-0.21497 -0.214974,-0.58153 0,-0.37896 0.20395,-0.60083 0.205327,-0.22324 0.552593,-0.22324 0.311437,0 0.49196,0.2012 0.181901,0.19981 0.181901,0.54432 z m -0.253559,-0.0744 q -0.0028,-0.20809 -0.117134,-0.33211 -0.112999,-0.12402 -0.300412,-0.12402 -0.212218,0 -0.340375,0.11988 -0.12678,0.11989 -0.146072,0.33762 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path209" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 58.314168,173.48014 v 0.43822 h 0.522277 v 0.19706 h -0.522277 v 0.83785 q 0,0.18879 0.05099,0.24253 0.05237,0.0537 0.210839,0.0537 h 0.26045 v 0.21222 h -0.26045 q -0.293522,0 -0.405143,-0.10886 -0.111621,-0.11025 -0.111621,-0.39963 v -0.83785 h -0.186035 v -0.19706 h 0.186035 v -0.43822 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path211" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <rect | |||
| id="rect276" | |||
| width="38.36459" | |||
| height="7.9375" | |||
| x="71.522652" | |||
| y="186.70657" | |||
| style="stroke-width:0.26926658" /> | |||
| <rect | |||
| id="rect278" | |||
| width="161.66042" | |||
| height="7.9374986" | |||
| x="30.512241" | |||
| y="242.00447" | |||
| style="stroke-width:0.26589206" /> | |||
| <rect | |||
| id="rect280" | |||
| width="7.9375" | |||
| height="7.9375" | |||
| x="30.776825" | |||
| y="242.00447" | |||
| style="fill:#ff0000;fill-opacity:1;stroke-width:0.26458332" /> | |||
| <rect | |||
| id="rect280-3" | |||
| width="7.9375" | |||
| height="7.9375" | |||
| x="71.522667" | |||
| y="242.00447" | |||
| style="fill:#ff0000;fill-opacity:1;stroke-width:0.26458332" /> | |||
| <rect | |||
| id="rect280-4" | |||
| width="7.9375" | |||
| height="7.9375" | |||
| x="112.00391" | |||
| y="242.00447" | |||
| style="fill:#ff0000;fill-opacity:1;stroke-width:0.26458332" /> | |||
| <rect | |||
| id="rect280-39" | |||
| width="7.9375" | |||
| height="7.9375" | |||
| x="152.48515" | |||
| y="242.00447" | |||
| style="fill:#ff0000;fill-opacity:1;stroke-width:0.26458332" /> | |||
| <g | |||
| transform="translate(108.95046,30.92181)" | |||
| aria-label="A" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text162-0"> | |||
| <path | |||
| d="m 85.45187,174.07545 -0.377582,1.02388 h 0.756543 z m -0.157096,-0.27423 h 0.315571 l 0.784104,2.05741 H 86.10506 l -0.187413,-0.52779 h -0.927419 l -0.187414,0.52779 h -0.293522 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path264-1" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| transform="translate(98.539379,43.045776)" | |||
| aria-label="B" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text166-6"> | |||
| <path | |||
| d="m 95.493628,174.74381 v 0.75378 h 0.446484 q 0.22462,0 0.332107,-0.0923 0.108865,-0.0937 0.108865,-0.28526 0,-0.19292 -0.108865,-0.28387 -0.107487,-0.0923 -0.332107,-0.0923 z m 0,-0.84612 v 0.62012 h 0.412033 q 0.20395,0 0.303168,-0.0758 0.100597,-0.0772 0.100597,-0.23427 0,-0.15572 -0.100597,-0.23289 -0.09922,-0.0772 -0.303168,-0.0772 z m -0.278364,-0.22875 h 0.711068 q 0.318326,0 0.490581,0.13229 0.172255,0.13229 0.172255,0.3762 0,0.1888 -0.08819,0.30042 -0.08819,0.11162 -0.259072,0.13918 0.205328,0.0441 0.318327,0.18466 0.114377,0.13918 0.114377,0.34864 0,0.27561 -0.187413,0.42581 -0.187413,0.15021 -0.533301,0.15021 h -0.738628 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path261-9" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| transform="translate(88.632653,54.424316)" | |||
| aria-label="C" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text170-9"> | |||
| <path | |||
| d="m 106.6778,173.69512 v 0.29352 q -0.14056,-0.13091 -0.30041,-0.19568 -0.15848,-0.0648 -0.33762,-0.0648 -0.35278,0 -0.54019,0.21635 -0.18742,0.21498 -0.18742,0.62288 0,0.40652 0.18742,0.62287 0.18741,0.21497 0.54019,0.21497 0.17914,0 0.33762,-0.0648 0.15985,-0.0648 0.30041,-0.19569 v 0.29077 q -0.14607,0.0992 -0.31006,0.14883 -0.16261,0.0496 -0.34451,0.0496 -0.46715,0 -0.73587,-0.28526 -0.26872,-0.28663 -0.26872,-0.78134 0,-0.4961 0.26872,-0.78135 0.26872,-0.28663 0.73587,-0.28663 0.18466,0 0.34727,0.0496 0.16398,0.0482 0.3073,0.14607 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path258-9" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| </g> | |||
| </svg> | |||
| @@ -0,0 +1,268 @@ | |||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
| <!-- Created with Inkscape (http://www.inkscape.org/) --> | |||
| <svg | |||
| xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
| xmlns:cc="http://creativecommons.org/ns#" | |||
| xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
| xmlns:svg="http://www.w3.org/2000/svg" | |||
| xmlns="http://www.w3.org/2000/svg" | |||
| xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
| xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
| width="195.29379" | |||
| height="380.00003" | |||
| viewBox="0 0 51.671483 100.54167" | |||
| version="1.1" | |||
| id="svg8630" | |||
| inkscape:version="0.92.3 (2405546, 2018-03-11)" | |||
| sodipodi:docname="PGStereoEcho.svg"> | |||
| <defs | |||
| id="defs8624" /> | |||
| <sodipodi:namedview | |||
| id="base" | |||
| pagecolor="#ffffff" | |||
| bordercolor="#666666" | |||
| borderopacity="1.0" | |||
| inkscape:pageopacity="0.0" | |||
| inkscape:pageshadow="2" | |||
| inkscape:zoom="1.979899" | |||
| inkscape:cx="113.86719" | |||
| inkscape:cy="185.98498" | |||
| inkscape:document-units="mm" | |||
| inkscape:current-layer="layer1" | |||
| showgrid="false" | |||
| fit-margin-top="0" | |||
| fit-margin-left="0" | |||
| fit-margin-right="0" | |||
| fit-margin-bottom="0" | |||
| units="px" | |||
| inkscape:window-width="1920" | |||
| inkscape:window-height="1017" | |||
| inkscape:window-x="-8" | |||
| inkscape:window-y="-8" | |||
| inkscape:window-maximized="1" | |||
| showguides="true" | |||
| inkscape:guide-bbox="true"> | |||
| <sodipodi:guide | |||
| position="-23.386084,70.291882" | |||
| orientation="0,1" | |||
| id="guide924" | |||
| inkscape:locked="false" /> | |||
| <sodipodi:guide | |||
| position="45.836724,77.909063" | |||
| orientation="0,1" | |||
| id="guide946" | |||
| inkscape:locked="false" /> | |||
| </sodipodi:namedview> | |||
| <metadata | |||
| id="metadata8627"> | |||
| <rdf:RDF> | |||
| <cc:Work | |||
| rdf:about=""> | |||
| <dc:format>image/svg+xml</dc:format> | |||
| <dc:type | |||
| rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
| <dc:title /> | |||
| </cc:Work> | |||
| </rdf:RDF> | |||
| </metadata> | |||
| <g | |||
| inkscape:label="layer 1" | |||
| inkscape:groupmode="layer" | |||
| id="layer1" | |||
| transform="translate(-44.467833,-88.735117)"> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path33449" | |||
| d="M 44.541176,88.808436 H 96.065974 V 189.20454 H 44.541176 Z m 0,0" | |||
| style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.27602378" | |||
| sodipodi:insensitive="true" /> | |||
| <g | |||
| id="logo" | |||
| inkscape:label="#g2255" | |||
| transform="translate(11.759859,53.053001)"> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path3737" | |||
| style="font-style:normal;font-weight:normal;font-size:5.43959379px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.13598984" | |||
| d="m 55.047763,130.90923 v 1.43277 h 0.7016 q 0.38947,0 0.60216,-0.18644 0.21269,-0.18643 0.21269,-0.53122 0,-0.34223 -0.21269,-0.52867 -0.21269,-0.18644 -0.60216,-0.18644 z m -0.55797,-0.42396 h 1.25957 q 0.69332,0 1.04688,0.29115 0.35633,0.2886 0.35633,0.84792 0,0.56443 -0.35633,0.85302 -0.35356,0.2886 -1.04688,0.2886 h -0.7016 v 1.53239 h -0.55797 z" /> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path3739" | |||
| style="font-style:normal;font-weight:normal;font-size:5.43959379px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.13598984" | |||
| d="m 60.715833,133.75435 v -1.02414 h -0.91154 v -0.42396 h 1.46398 v 1.63709 q -0.32318,0.21198 -0.71265,0.3218 -0.38947,0.10726 -0.83143,0.10726 -0.96678,0 -1.5137,-0.521 -0.54415,-0.52356 -0.54415,-1.45576 0,-0.93476 0.54415,-1.45576 0.54692,-0.52357 1.5137,-0.52357 0.40328,0 0.76513,0.0919 0.36462,0.0919 0.67122,0.27072 v 0.5491 q -0.30936,-0.24263 -0.6574,-0.36522 -0.34804,-0.12259 -0.73199,-0.12259 -0.75685,0 -1.13804,0.39076 -0.37842,0.39075 -0.37842,1.16461 0,0.77129 0.37842,1.16205 0.38119,0.39076 1.13804,0.39076 0.29556,0 0.52758,-0.046 0.23203,-0.0486 0.4171,-0.14813 z" /> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path3741" | |||
| style="font-style:normal;font-weight:normal;font-size:5.43959379px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.13598984" | |||
| d="m 62.268193,131.4379 h 0.50825 v 2.86045 h -0.50825 z m 0,-1.11353 h 0.50825 v 0.59507 h -0.50825 z" /> | |||
| </g> | |||
| <g | |||
| aria-label="ECHO" | |||
| transform="matrix(0.9981775,0,0,1.0018258,6.1471991,1.4699824)" | |||
| style="font-style:normal;font-weight:normal;font-size:11.10610676px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.04119742" | |||
| id="text928"> | |||
| <path | |||
| d="m 56.206211,93.880373 h 5.119221 v 0.921894 h -4.023795 v 2.396923 h 3.855685 v 0.921894 h -3.855685 v 2.933786 h 4.121407 v 0.9219 h -5.216833 z" | |||
| style="stroke-width:1.04119742" | |||
| id="path986" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 69.2971,94.504007 v 1.155079 q -0.553136,-0.515176 -1.182193,-0.770053 -0.623634,-0.254876 -1.328611,-0.254876 -1.388263,0 -2.125778,0.851396 -0.737515,0.845973 -0.737515,2.451152 0,1.599757 0.737515,2.451155 0.737515,0.84597 2.125778,0.84597 0.704977,0 1.328611,-0.25488 0.629057,-0.25487 1.182193,-0.77005 v 1.14423 q -0.574827,0.39045 -1.220153,0.58568 -0.639903,0.19522 -1.355726,0.19522 -1.838364,0 -2.89583,-1.12254 -1.057467,-1.127962 -1.057467,-3.074785 0,-1.952245 1.057467,-3.074786 1.057466,-1.127964 2.89583,-1.127964 0.726669,0 1.366572,0.195224 0.645325,0.189802 1.209307,0.574828 z" | |||
| style="stroke-width:1.04119742" | |||
| id="path988" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 70.999893,93.880373 h 1.095426 v 3.318817 h 3.980412 v -3.318817 h 1.095426 v 8.096397 h -1.095426 v -3.855686 h -3.980412 v 3.855686 h -1.095426 z" | |||
| style="stroke-width:1.04119742" | |||
| id="path990" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 82.637443,94.623311 q -1.193039,0 -1.898016,0.889356 -0.699555,0.889356 -0.699555,2.424038 0,1.529259 0.699555,2.418615 0.704977,0.88936 1.898016,0.88936 1.193039,0 1.887171,-0.88936 0.699554,-0.889356 0.699554,-2.418615 0,-1.534682 -0.699554,-2.424038 -0.694132,-0.889356 -1.887171,-0.889356 z m 0,-0.889356 q 1.702792,0 2.722298,1.144233 1.019506,1.138809 1.019506,3.058517 0,1.914285 -1.019506,3.058515 -1.019506,1.13881 -2.722298,1.13881 -1.708214,0 -2.733143,-1.13881 -1.019506,-1.138807 -1.019506,-3.058515 0,-1.919708 1.019506,-3.058517 1.024929,-1.144233 2.733143,-1.144233 z" | |||
| style="stroke-width:1.04119742" | |||
| id="path992" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="In" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text932" | |||
| transform="translate(3.346277,0.09970174)"> | |||
| <path | |||
| d="m 51.426556,109.17668 h 0.278364 v 2.05741 h -0.278364 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path981" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 53.53082,110.30254 v 0.93155 h -0.253559 v -0.92328 q 0,-0.21911 -0.08544,-0.32798 -0.08544,-0.10886 -0.256315,-0.10886 -0.205328,0 -0.323839,0.13091 -0.118511,0.13092 -0.118511,0.35691 v 0.8723 h -0.254937 v -1.5434 h 0.254937 v 0.23978 q 0.09095,-0.13918 0.213596,-0.20809 0.124023,-0.0689 0.285254,-0.0689 0.265961,0 0.402387,0.16537 0.136425,0.16398 0.136425,0.48369 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path983" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="Time" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text936" | |||
| transform="translate(2.2395567,0.13362716)"> | |||
| <path | |||
| d="m 60.228464,109.17668 h 1.740462 v 0.23427 h -0.73036 v 1.82314 h -0.279742 v -1.82314 h -0.73036 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path972" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 62.139803,109.69069 h 0.253559 v 1.5434 h -0.253559 z m 0,-0.60082 h 0.253559 v 0.32108 h -0.253559 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path974" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 64.124178,109.98697 q 0.09508,-0.17088 0.227377,-0.25218 0.132291,-0.0813 0.311436,-0.0813 0.241157,0 0.372071,0.1695 0.130913,0.16812 0.130913,0.47956 v 0.93155 h -0.254937 v -0.92328 q 0,-0.22187 -0.07855,-0.32935 -0.07855,-0.10749 -0.239779,-0.10749 -0.197059,0 -0.311436,0.13091 -0.114378,0.13092 -0.114378,0.35691 v 0.8723 H 63.91196 v -0.92328 q 0,-0.22325 -0.07855,-0.32935 -0.07855,-0.10749 -0.242535,-0.10749 -0.194303,0 -0.30868,0.13229 -0.114377,0.13091 -0.114377,0.35553 v 0.8723 h -0.254937 v -1.5434 h 0.254937 v 0.23978 q 0.08682,-0.14194 0.208084,-0.20946 0.121267,-0.0675 0.288009,-0.0675 0.168121,0 0.285254,0.0854 0.118512,0.0854 0.175011,0.24805 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path976" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 66.993254,110.399 v 0.12403 h -1.16582 q 0.01654,0.26182 0.157096,0.39963 0.141938,0.13642 0.394119,0.13642 0.146072,0 0.282498,-0.0358 0.137804,-0.0358 0.272851,-0.10748 v 0.23977 q -0.136425,0.0579 -0.279741,0.0882 -0.143316,0.0303 -0.290766,0.0303 -0.369315,0 -0.585667,-0.21498 -0.214974,-0.21497 -0.214974,-0.58153 0,-0.37896 0.20395,-0.60082 0.205328,-0.22325 0.552593,-0.22325 0.311437,0 0.49196,0.2012 0.181901,0.19981 0.181901,0.54432 z m -0.253559,-0.0744 q -0.0028,-0.20809 -0.117133,-0.33211 -0.112999,-0.12402 -0.300412,-0.12402 -0.212218,0 -0.340376,0.11989 -0.126779,0.11989 -0.146072,0.33762 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path978" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="Out" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text944" | |||
| transform="translate(-1.7194991,0.09273174)"> | |||
| <path | |||
| d="m 87.273957,109.36547 q -0.303168,0 -0.482313,0.226 -0.177767,0.226 -0.177767,0.61598 0,0.38861 0.177767,0.61461 0.179145,0.226 0.482313,0.226 0.303169,0 0.479558,-0.226 0.177767,-0.226 0.177767,-0.61461 0,-0.38998 -0.177767,-0.61598 -0.176389,-0.226 -0.479558,-0.226 z m 0,-0.226 q 0.432704,0 0.691775,0.29077 0.259072,0.28939 0.259072,0.77721 0,0.48645 -0.259072,0.77722 -0.259071,0.28939 -0.691775,0.28939 -0.434082,0 -0.694531,-0.28939 -0.259071,-0.28939 -0.259071,-0.77722 0,-0.48782 0.259071,-0.77721 0.260449,-0.29077 0.694531,-0.29077 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path948" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 88.623057,110.625 v -0.93431 h 0.253559 v 0.92466 q 0,0.21911 0.08544,0.32935 0.08544,0.10887 0.256315,0.10887 0.205328,0 0.323839,-0.13091 0.11989,-0.13092 0.11989,-0.35692 v -0.87505 h 0.253559 v 1.5434 H 89.6621 v -0.23702 q -0.09233,0.14056 -0.214974,0.20946 -0.121268,0.0675 -0.282498,0.0675 -0.265962,0 -0.403765,-0.16537 -0.137804,-0.16536 -0.137804,-0.48369 z m 0.638031,-0.97152 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path950" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 90.691492,109.25247 v 0.43822 h 0.522277 v 0.19706 h -0.522277 v 0.83785 q 0,0.18879 0.05099,0.24253 0.05236,0.0537 0.210839,0.0537 h 0.26045 v 0.21222 h -0.26045 q -0.293522,0 -0.405143,-0.10886 -0.111621,-0.11025 -0.111621,-0.39963 v -0.83785 H 90.25052 v -0.19706 h 0.186035 v -0.43822 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path952" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="Fbk" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text997" | |||
| transform="translate(1.0583333)"> | |||
| <path | |||
| d="m 74.261986,109.27271 h 1.182357 v 0.23426 H 74.54035 v 0.60634 h 0.815799 v 0.23427 H 74.54035 v 0.98254 h -0.278364 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path999" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 76.98499,110.55979 q 0,-0.27974 -0.115755,-0.43821 -0.114378,-0.15986 -0.315571,-0.15986 -0.201194,0 -0.316949,0.15986 -0.114377,0.15847 -0.114377,0.43821 0,0.27974 0.114377,0.4396 0.115755,0.15847 0.316949,0.15847 0.201193,0 0.315571,-0.15847 0.115755,-0.15986 0.115755,-0.4396 z m -0.862652,-0.53881 q 0.07993,-0.1378 0.201193,-0.20395 0.122646,-0.0675 0.292145,-0.0675 0.281119,0 0.45613,0.22324 0.176389,0.22324 0.176389,0.58704 0,0.36381 -0.176389,0.58705 -0.175011,0.22324 -0.45613,0.22324 -0.169499,0 -0.292145,-0.0662 -0.121267,-0.0675 -0.201193,-0.20532 v 0.23151 h -0.254937 v -2.14423 h 0.254937 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path1001" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 77.658851,109.18589 h 0.254937 v 1.26642 l 0.756543,-0.6656 h 0.323839 l -0.818555,0.7221 0.853006,0.82131 h -0.33073 l -0.784103,-0.75379 v 0.75379 h -0.254937 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path1003" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="STEREO" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text883"> | |||
| <path | |||
| d="m 49.719936,95.880726 v 0.271473 q -0.158474,-0.07579 -0.299034,-0.112999 -0.14056,-0.03721 -0.271474,-0.03721 -0.227376,0 -0.3514,0.08819 -0.122645,0.08819 -0.122645,0.250803 0,0.136425 0.0813,0.206705 0.08268,0.0689 0.311437,0.111622 l 0.168121,0.03445 q 0.311436,0.05926 0.458886,0.209462 0.148828,0.148828 0.148828,0.399631 0,0.299035 -0.201193,0.453375 -0.199816,0.15434 -0.587044,0.15434 -0.146072,0 -0.311437,-0.03307 -0.163987,-0.03307 -0.340375,-0.09784 v -0.286632 q 0.169498,0.09508 0.332107,0.143316 0.162608,0.04823 0.319705,0.04823 0.2384,0 0.367936,-0.09371 0.129535,-0.09371 0.129535,-0.267339 0,-0.151584 -0.09371,-0.237023 -0.09233,-0.08544 -0.304547,-0.128157 l -0.169498,-0.03307 q -0.311437,-0.06201 -0.450619,-0.194303 -0.139182,-0.132292 -0.139182,-0.367937 0,-0.272851 0.191548,-0.429948 0.192925,-0.157096 0.530544,-0.157096 0.144694,0 0.294901,0.02618 0.150206,0.02618 0.307302,0.07855 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path893" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 49.992788,95.813202 h 1.740462 v 0.234267 h -0.73036 v 1.823144 h -0.279742 v -1.823144 h -0.73036 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path895" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 52.003345,95.813202 h 1.300868 v 0.234267 h -1.022504 v 0.609092 h 0.979785 v 0.234267 h -0.979785 v 0.745519 h 1.047309 v 0.234266 h -1.325673 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path897" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 54.764934,96.905986 q 0.08957,0.03032 0.173633,0.129536 0.08544,0.09922 0.170876,0.272852 l 0.282498,0.562239 h -0.299034 l -0.263205,-0.527789 q -0.101975,-0.206705 -0.198438,-0.274229 -0.09508,-0.06752 -0.260449,-0.06752 h -0.303168 v 0.869542 h -0.278364 v -2.057411 h 0.628385 q 0.352778,0 0.526411,0.14745 0.173633,0.14745 0.173633,0.445106 0,0.194304 -0.09095,0.322461 -0.08957,0.128158 -0.261827,0.177767 z m -0.697287,-0.86403 v 0.730361 h 0.350021 q 0.201194,0 0.303169,-0.09233 0.103353,-0.09371 0.103353,-0.27423 0,-0.180523 -0.103353,-0.271473 -0.101975,-0.09233 -0.303169,-0.09233 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path899" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 55.751609,95.813202 h 1.300868 v 0.234267 h -1.022504 v 0.609092 h 0.979785 v 0.234267 h -0.979785 v 0.745519 h 1.047309 v 0.234266 h -1.325673 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path901" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 58.372638,96.001993 q -0.303169,0 -0.482314,0.225999 -0.177766,0.225998 -0.177766,0.615983 0,0.388606 0.177766,0.614605 0.179145,0.225998 0.482314,0.225998 0.303168,0 0.479557,-0.225998 0.177767,-0.225999 0.177767,-0.614605 0,-0.389985 -0.177767,-0.615983 -0.176389,-0.225999 -0.479557,-0.225999 z m 0,-0.225998 q 0.432704,0 0.691775,0.290766 0.259071,0.289388 0.259071,0.777214 0,0.486447 -0.259071,0.777213 -0.259071,0.289388 -0.691775,0.289388 -0.434082,0 -0.694531,-0.289388 -0.259072,-0.289388 -0.259072,-0.777213 0,-0.487826 0.259072,-0.777214 0.260449,-0.290766 0.694531,-0.290766 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path903" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="L" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text887" | |||
| transform="translate(0,0.52916663)"> | |||
| <path | |||
| d="m 47.551148,116.5266 h 0.278364 v 1.82314 h 1.001833 v 0.23427 h -1.280197 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path909" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="R" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text891" | |||
| transform="translate(0,3.7041668)"> | |||
| <path | |||
| d="m 48.393166,125.23656 q 0.08957,0.0303 0.173633,0.12954 0.08544,0.0992 0.170877,0.27285 l 0.282498,0.56224 h -0.299035 l -0.263205,-0.52779 q -0.101975,-0.20671 -0.198437,-0.27423 -0.09509,-0.0675 -0.26045,-0.0675 h -0.303168 v 0.86954 h -0.278364 v -2.05741 h 0.628386 q 0.352778,0 0.52641,0.14745 0.173633,0.14745 0.173633,0.4451 0,0.19431 -0.09095,0.32246 -0.08957,0.12816 -0.261828,0.17777 z m -0.697287,-0.86403 v 0.73036 h 0.350022 q 0.201193,0 0.303168,-0.0923 0.103353,-0.0937 0.103353,-0.27423 0,-0.18052 -0.103353,-0.27147 -0.101975,-0.0923 -0.303168,-0.0923 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path906" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| </g> | |||
| </svg> | |||
| @@ -0,0 +1,268 @@ | |||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
| <!-- Created with Inkscape (http://www.inkscape.org/) --> | |||
| <svg | |||
| xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
| xmlns:cc="http://creativecommons.org/ns#" | |||
| xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
| xmlns:svg="http://www.w3.org/2000/svg" | |||
| xmlns="http://www.w3.org/2000/svg" | |||
| xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
| xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
| width="195.29379" | |||
| height="380.00003" | |||
| viewBox="0 0 51.671483 100.54167" | |||
| version="1.1" | |||
| id="svg8630" | |||
| inkscape:version="0.92.3 (2405546, 2018-03-11)" | |||
| sodipodi:docname="PGStereoEcho.svg"> | |||
| <defs | |||
| id="defs8624" /> | |||
| <sodipodi:namedview | |||
| id="base" | |||
| pagecolor="#ffffff" | |||
| bordercolor="#666666" | |||
| borderopacity="1.0" | |||
| inkscape:pageopacity="0.0" | |||
| inkscape:pageshadow="2" | |||
| inkscape:zoom="1.979899" | |||
| inkscape:cx="113.86719" | |||
| inkscape:cy="185.98498" | |||
| inkscape:document-units="mm" | |||
| inkscape:current-layer="layer1" | |||
| showgrid="false" | |||
| fit-margin-top="0" | |||
| fit-margin-left="0" | |||
| fit-margin-right="0" | |||
| fit-margin-bottom="0" | |||
| units="px" | |||
| inkscape:window-width="1920" | |||
| inkscape:window-height="1017" | |||
| inkscape:window-x="-8" | |||
| inkscape:window-y="-8" | |||
| inkscape:window-maximized="1" | |||
| showguides="true" | |||
| inkscape:guide-bbox="true"> | |||
| <sodipodi:guide | |||
| position="-23.386084,70.291882" | |||
| orientation="0,1" | |||
| id="guide924" | |||
| inkscape:locked="false" /> | |||
| <sodipodi:guide | |||
| position="45.836724,77.909063" | |||
| orientation="0,1" | |||
| id="guide946" | |||
| inkscape:locked="false" /> | |||
| </sodipodi:namedview> | |||
| <metadata | |||
| id="metadata8627"> | |||
| <rdf:RDF> | |||
| <cc:Work | |||
| rdf:about=""> | |||
| <dc:format>image/svg+xml</dc:format> | |||
| <dc:type | |||
| rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
| <dc:title /> | |||
| </cc:Work> | |||
| </rdf:RDF> | |||
| </metadata> | |||
| <g | |||
| inkscape:label="layer 1" | |||
| inkscape:groupmode="layer" | |||
| id="layer1" | |||
| transform="translate(-44.467833,-88.735117)"> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path33449" | |||
| d="M 44.541176,88.808436 H 96.065974 V 189.20454 H 44.541176 Z m 0,0" | |||
| style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.27602378" | |||
| sodipodi:insensitive="true" /> | |||
| <g | |||
| id="logo" | |||
| inkscape:label="#g2255" | |||
| transform="translate(11.759859,53.053001)"> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path3737" | |||
| style="font-style:normal;font-weight:normal;font-size:5.43959379px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.13598984" | |||
| d="m 55.047763,130.90923 v 1.43277 h 0.7016 q 0.38947,0 0.60216,-0.18644 0.21269,-0.18643 0.21269,-0.53122 0,-0.34223 -0.21269,-0.52867 -0.21269,-0.18644 -0.60216,-0.18644 z m -0.55797,-0.42396 h 1.25957 q 0.69332,0 1.04688,0.29115 0.35633,0.2886 0.35633,0.84792 0,0.56443 -0.35633,0.85302 -0.35356,0.2886 -1.04688,0.2886 h -0.7016 v 1.53239 h -0.55797 z" /> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path3739" | |||
| style="font-style:normal;font-weight:normal;font-size:5.43959379px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.13598984" | |||
| d="m 60.715833,133.75435 v -1.02414 h -0.91154 v -0.42396 h 1.46398 v 1.63709 q -0.32318,0.21198 -0.71265,0.3218 -0.38947,0.10726 -0.83143,0.10726 -0.96678,0 -1.5137,-0.521 -0.54415,-0.52356 -0.54415,-1.45576 0,-0.93476 0.54415,-1.45576 0.54692,-0.52357 1.5137,-0.52357 0.40328,0 0.76513,0.0919 0.36462,0.0919 0.67122,0.27072 v 0.5491 q -0.30936,-0.24263 -0.6574,-0.36522 -0.34804,-0.12259 -0.73199,-0.12259 -0.75685,0 -1.13804,0.39076 -0.37842,0.39075 -0.37842,1.16461 0,0.77129 0.37842,1.16205 0.38119,0.39076 1.13804,0.39076 0.29556,0 0.52758,-0.046 0.23203,-0.0486 0.4171,-0.14813 z" /> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path3741" | |||
| style="font-style:normal;font-weight:normal;font-size:5.43959379px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.13598984" | |||
| d="m 62.268193,131.4379 h 0.50825 v 2.86045 h -0.50825 z m 0,-1.11353 h 0.50825 v 0.59507 h -0.50825 z" /> | |||
| </g> | |||
| <g | |||
| aria-label="ECHO" | |||
| transform="matrix(0.9981775,0,0,1.0018258,6.1471991,1.4699824)" | |||
| style="font-style:normal;font-weight:normal;font-size:11.10610676px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.04119742" | |||
| id="text928"> | |||
| <path | |||
| d="m 56.206211,93.880373 h 5.119221 v 0.921894 h -4.023795 v 2.396923 h 3.855685 v 0.921894 h -3.855685 v 2.933786 h 4.121407 v 0.9219 h -5.216833 z" | |||
| style="stroke-width:1.04119742" | |||
| id="path986" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 69.2971,94.504007 v 1.155079 q -0.553136,-0.515176 -1.182193,-0.770053 -0.623634,-0.254876 -1.328611,-0.254876 -1.388263,0 -2.125778,0.851396 -0.737515,0.845973 -0.737515,2.451152 0,1.599757 0.737515,2.451155 0.737515,0.84597 2.125778,0.84597 0.704977,0 1.328611,-0.25488 0.629057,-0.25487 1.182193,-0.77005 v 1.14423 q -0.574827,0.39045 -1.220153,0.58568 -0.639903,0.19522 -1.355726,0.19522 -1.838364,0 -2.89583,-1.12254 -1.057467,-1.127962 -1.057467,-3.074785 0,-1.952245 1.057467,-3.074786 1.057466,-1.127964 2.89583,-1.127964 0.726669,0 1.366572,0.195224 0.645325,0.189802 1.209307,0.574828 z" | |||
| style="stroke-width:1.04119742" | |||
| id="path988" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 70.999893,93.880373 h 1.095426 v 3.318817 h 3.980412 v -3.318817 h 1.095426 v 8.096397 h -1.095426 v -3.855686 h -3.980412 v 3.855686 h -1.095426 z" | |||
| style="stroke-width:1.04119742" | |||
| id="path990" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 82.637443,94.623311 q -1.193039,0 -1.898016,0.889356 -0.699555,0.889356 -0.699555,2.424038 0,1.529259 0.699555,2.418615 0.704977,0.88936 1.898016,0.88936 1.193039,0 1.887171,-0.88936 0.699554,-0.889356 0.699554,-2.418615 0,-1.534682 -0.699554,-2.424038 -0.694132,-0.889356 -1.887171,-0.889356 z m 0,-0.889356 q 1.702792,0 2.722298,1.144233 1.019506,1.138809 1.019506,3.058517 0,1.914285 -1.019506,3.058515 -1.019506,1.13881 -2.722298,1.13881 -1.708214,0 -2.733143,-1.13881 -1.019506,-1.138807 -1.019506,-3.058515 0,-1.919708 1.019506,-3.058517 1.024929,-1.144233 2.733143,-1.144233 z" | |||
| style="stroke-width:1.04119742" | |||
| id="path992" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="In" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text932" | |||
| transform="translate(3.346277,0.09970174)"> | |||
| <path | |||
| d="m 51.426556,109.17668 h 0.278364 v 2.05741 h -0.278364 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path981" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 53.53082,110.30254 v 0.93155 h -0.253559 v -0.92328 q 0,-0.21911 -0.08544,-0.32798 -0.08544,-0.10886 -0.256315,-0.10886 -0.205328,0 -0.323839,0.13091 -0.118511,0.13092 -0.118511,0.35691 v 0.8723 h -0.254937 v -1.5434 h 0.254937 v 0.23978 q 0.09095,-0.13918 0.213596,-0.20809 0.124023,-0.0689 0.285254,-0.0689 0.265961,0 0.402387,0.16537 0.136425,0.16398 0.136425,0.48369 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path983" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="Time" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text936" | |||
| transform="translate(2.2395567,0.13362716)"> | |||
| <path | |||
| d="m 60.228464,109.17668 h 1.740462 v 0.23427 h -0.73036 v 1.82314 h -0.279742 v -1.82314 h -0.73036 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path972" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 62.139803,109.69069 h 0.253559 v 1.5434 h -0.253559 z m 0,-0.60082 h 0.253559 v 0.32108 h -0.253559 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path974" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 64.124178,109.98697 q 0.09508,-0.17088 0.227377,-0.25218 0.132291,-0.0813 0.311436,-0.0813 0.241157,0 0.372071,0.1695 0.130913,0.16812 0.130913,0.47956 v 0.93155 h -0.254937 v -0.92328 q 0,-0.22187 -0.07855,-0.32935 -0.07855,-0.10749 -0.239779,-0.10749 -0.197059,0 -0.311436,0.13091 -0.114378,0.13092 -0.114378,0.35691 v 0.8723 H 63.91196 v -0.92328 q 0,-0.22325 -0.07855,-0.32935 -0.07855,-0.10749 -0.242535,-0.10749 -0.194303,0 -0.30868,0.13229 -0.114377,0.13091 -0.114377,0.35553 v 0.8723 h -0.254937 v -1.5434 h 0.254937 v 0.23978 q 0.08682,-0.14194 0.208084,-0.20946 0.121267,-0.0675 0.288009,-0.0675 0.168121,0 0.285254,0.0854 0.118512,0.0854 0.175011,0.24805 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path976" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 66.993254,110.399 v 0.12403 h -1.16582 q 0.01654,0.26182 0.157096,0.39963 0.141938,0.13642 0.394119,0.13642 0.146072,0 0.282498,-0.0358 0.137804,-0.0358 0.272851,-0.10748 v 0.23977 q -0.136425,0.0579 -0.279741,0.0882 -0.143316,0.0303 -0.290766,0.0303 -0.369315,0 -0.585667,-0.21498 -0.214974,-0.21497 -0.214974,-0.58153 0,-0.37896 0.20395,-0.60082 0.205328,-0.22325 0.552593,-0.22325 0.311437,0 0.49196,0.2012 0.181901,0.19981 0.181901,0.54432 z m -0.253559,-0.0744 q -0.0028,-0.20809 -0.117133,-0.33211 -0.112999,-0.12402 -0.300412,-0.12402 -0.212218,0 -0.340376,0.11989 -0.126779,0.11989 -0.146072,0.33762 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path978" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="Out" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text944" | |||
| transform="translate(-1.7194991,0.09273174)"> | |||
| <path | |||
| d="m 87.273957,109.36547 q -0.303168,0 -0.482313,0.226 -0.177767,0.226 -0.177767,0.61598 0,0.38861 0.177767,0.61461 0.179145,0.226 0.482313,0.226 0.303169,0 0.479558,-0.226 0.177767,-0.226 0.177767,-0.61461 0,-0.38998 -0.177767,-0.61598 -0.176389,-0.226 -0.479558,-0.226 z m 0,-0.226 q 0.432704,0 0.691775,0.29077 0.259072,0.28939 0.259072,0.77721 0,0.48645 -0.259072,0.77722 -0.259071,0.28939 -0.691775,0.28939 -0.434082,0 -0.694531,-0.28939 -0.259071,-0.28939 -0.259071,-0.77722 0,-0.48782 0.259071,-0.77721 0.260449,-0.29077 0.694531,-0.29077 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path948" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 88.623057,110.625 v -0.93431 h 0.253559 v 0.92466 q 0,0.21911 0.08544,0.32935 0.08544,0.10887 0.256315,0.10887 0.205328,0 0.323839,-0.13091 0.11989,-0.13092 0.11989,-0.35692 v -0.87505 h 0.253559 v 1.5434 H 89.6621 v -0.23702 q -0.09233,0.14056 -0.214974,0.20946 -0.121268,0.0675 -0.282498,0.0675 -0.265962,0 -0.403765,-0.16537 -0.137804,-0.16536 -0.137804,-0.48369 z m 0.638031,-0.97152 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path950" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 90.691492,109.25247 v 0.43822 h 0.522277 v 0.19706 h -0.522277 v 0.83785 q 0,0.18879 0.05099,0.24253 0.05236,0.0537 0.210839,0.0537 h 0.26045 v 0.21222 h -0.26045 q -0.293522,0 -0.405143,-0.10886 -0.111621,-0.11025 -0.111621,-0.39963 v -0.83785 H 90.25052 v -0.19706 h 0.186035 v -0.43822 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path952" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="Fbk" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text997" | |||
| transform="translate(1.0583333)"> | |||
| <path | |||
| d="m 74.261986,109.27271 h 1.182357 v 0.23426 H 74.54035 v 0.60634 h 0.815799 v 0.23427 H 74.54035 v 0.98254 h -0.278364 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path999" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 76.98499,110.55979 q 0,-0.27974 -0.115755,-0.43821 -0.114378,-0.15986 -0.315571,-0.15986 -0.201194,0 -0.316949,0.15986 -0.114377,0.15847 -0.114377,0.43821 0,0.27974 0.114377,0.4396 0.115755,0.15847 0.316949,0.15847 0.201193,0 0.315571,-0.15847 0.115755,-0.15986 0.115755,-0.4396 z m -0.862652,-0.53881 q 0.07993,-0.1378 0.201193,-0.20395 0.122646,-0.0675 0.292145,-0.0675 0.281119,0 0.45613,0.22324 0.176389,0.22324 0.176389,0.58704 0,0.36381 -0.176389,0.58705 -0.175011,0.22324 -0.45613,0.22324 -0.169499,0 -0.292145,-0.0662 -0.121267,-0.0675 -0.201193,-0.20532 v 0.23151 h -0.254937 v -2.14423 h 0.254937 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path1001" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 77.658851,109.18589 h 0.254937 v 1.26642 l 0.756543,-0.6656 h 0.323839 l -0.818555,0.7221 0.853006,0.82131 h -0.33073 l -0.784103,-0.75379 v 0.75379 h -0.254937 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path1003" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="STEREO" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text883"> | |||
| <path | |||
| d="m 49.719936,95.880726 v 0.271473 q -0.158474,-0.07579 -0.299034,-0.112999 -0.14056,-0.03721 -0.271474,-0.03721 -0.227376,0 -0.3514,0.08819 -0.122645,0.08819 -0.122645,0.250803 0,0.136425 0.0813,0.206705 0.08268,0.0689 0.311437,0.111622 l 0.168121,0.03445 q 0.311436,0.05926 0.458886,0.209462 0.148828,0.148828 0.148828,0.399631 0,0.299035 -0.201193,0.453375 -0.199816,0.15434 -0.587044,0.15434 -0.146072,0 -0.311437,-0.03307 -0.163987,-0.03307 -0.340375,-0.09784 v -0.286632 q 0.169498,0.09508 0.332107,0.143316 0.162608,0.04823 0.319705,0.04823 0.2384,0 0.367936,-0.09371 0.129535,-0.09371 0.129535,-0.267339 0,-0.151584 -0.09371,-0.237023 -0.09233,-0.08544 -0.304547,-0.128157 l -0.169498,-0.03307 q -0.311437,-0.06201 -0.450619,-0.194303 -0.139182,-0.132292 -0.139182,-0.367937 0,-0.272851 0.191548,-0.429948 0.192925,-0.157096 0.530544,-0.157096 0.144694,0 0.294901,0.02618 0.150206,0.02618 0.307302,0.07855 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path893" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 49.992788,95.813202 h 1.740462 v 0.234267 h -0.73036 v 1.823144 h -0.279742 v -1.823144 h -0.73036 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path895" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 52.003345,95.813202 h 1.300868 v 0.234267 h -1.022504 v 0.609092 h 0.979785 v 0.234267 h -0.979785 v 0.745519 h 1.047309 v 0.234266 h -1.325673 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path897" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 54.764934,96.905986 q 0.08957,0.03032 0.173633,0.129536 0.08544,0.09922 0.170876,0.272852 l 0.282498,0.562239 h -0.299034 l -0.263205,-0.527789 q -0.101975,-0.206705 -0.198438,-0.274229 -0.09508,-0.06752 -0.260449,-0.06752 h -0.303168 v 0.869542 h -0.278364 v -2.057411 h 0.628385 q 0.352778,0 0.526411,0.14745 0.173633,0.14745 0.173633,0.445106 0,0.194304 -0.09095,0.322461 -0.08957,0.128158 -0.261827,0.177767 z m -0.697287,-0.86403 v 0.730361 h 0.350021 q 0.201194,0 0.303169,-0.09233 0.103353,-0.09371 0.103353,-0.27423 0,-0.180523 -0.103353,-0.271473 -0.101975,-0.09233 -0.303169,-0.09233 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path899" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 55.751609,95.813202 h 1.300868 v 0.234267 h -1.022504 v 0.609092 h 0.979785 v 0.234267 h -0.979785 v 0.745519 h 1.047309 v 0.234266 h -1.325673 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path901" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 58.372638,96.001993 q -0.303169,0 -0.482314,0.225999 -0.177766,0.225998 -0.177766,0.615983 0,0.388606 0.177766,0.614605 0.179145,0.225998 0.482314,0.225998 0.303168,0 0.479557,-0.225998 0.177767,-0.225999 0.177767,-0.614605 0,-0.389985 -0.177767,-0.615983 -0.176389,-0.225999 -0.479557,-0.225999 z m 0,-0.225998 q 0.432704,0 0.691775,0.290766 0.259071,0.289388 0.259071,0.777214 0,0.486447 -0.259071,0.777213 -0.259071,0.289388 -0.691775,0.289388 -0.434082,0 -0.694531,-0.289388 -0.259072,-0.289388 -0.259072,-0.777213 0,-0.487826 0.259072,-0.777214 0.260449,-0.290766 0.694531,-0.290766 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path903" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="L" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text887" | |||
| transform="translate(0,0.52916663)"> | |||
| <path | |||
| d="m 47.551148,116.5266 h 0.278364 v 1.82314 h 1.001833 v 0.23427 h -1.280197 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path909" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="R" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text891" | |||
| transform="translate(0,3.7041668)"> | |||
| <path | |||
| d="m 48.393166,125.23656 q 0.08957,0.0303 0.173633,0.12954 0.08544,0.0992 0.170877,0.27285 l 0.282498,0.56224 h -0.299035 l -0.263205,-0.52779 q -0.101975,-0.20671 -0.198437,-0.27423 -0.09509,-0.0675 -0.26045,-0.0675 h -0.303168 v 0.86954 h -0.278364 v -2.05741 h 0.628386 q 0.352778,0 0.52641,0.14745 0.173633,0.14745 0.173633,0.4451 0,0.19431 -0.09095,0.32246 -0.08957,0.12816 -0.261828,0.17777 z m -0.697287,-0.86403 v 0.73036 h 0.350022 q 0.201193,0 0.303168,-0.0923 0.103353,-0.0937 0.103353,-0.27423 0,-0.18052 -0.103353,-0.27147 -0.101975,-0.0923 -0.303168,-0.0923 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path906" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| </g> | |||
| </svg> | |||
| @@ -0,0 +1,301 @@ | |||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
| <!-- Created with Inkscape (http://www.inkscape.org/) --> | |||
| <svg | |||
| xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
| xmlns:cc="http://creativecommons.org/ns#" | |||
| xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
| xmlns:svg="http://www.w3.org/2000/svg" | |||
| xmlns="http://www.w3.org/2000/svg" | |||
| xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
| xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
| width="195.29379" | |||
| height="380.00003" | |||
| viewBox="0 0 51.671483 100.54167" | |||
| version="1.1" | |||
| id="svg8630" | |||
| inkscape:version="0.92.3 (2405546, 2018-03-11)" | |||
| sodipodi:docname="PGStereoVCF.svg"> | |||
| <defs | |||
| id="defs8624" /> | |||
| <sodipodi:namedview | |||
| id="base" | |||
| pagecolor="#ffffff" | |||
| bordercolor="#666666" | |||
| borderopacity="1.0" | |||
| inkscape:pageopacity="0.0" | |||
| inkscape:pageshadow="2" | |||
| inkscape:zoom="1.979899" | |||
| inkscape:cx="113.86719" | |||
| inkscape:cy="185.98498" | |||
| inkscape:document-units="mm" | |||
| inkscape:current-layer="layer1" | |||
| showgrid="false" | |||
| fit-margin-top="0" | |||
| fit-margin-left="0" | |||
| fit-margin-right="0" | |||
| fit-margin-bottom="0" | |||
| units="px" | |||
| inkscape:window-width="1246" | |||
| inkscape:window-height="976" | |||
| inkscape:window-x="104" | |||
| inkscape:window-y="20" | |||
| inkscape:window-maximized="0" | |||
| showguides="true" | |||
| inkscape:guide-bbox="true"> | |||
| <sodipodi:guide | |||
| position="6.2808337,73.900022" | |||
| orientation="0,1" | |||
| id="guide836" | |||
| inkscape:locked="false" /> | |||
| <sodipodi:guide | |||
| position="-17.639789,44.09947" | |||
| orientation="0,1" | |||
| id="guide838" | |||
| inkscape:locked="false" /> | |||
| <sodipodi:guide | |||
| position="-23.519718,60.002006" | |||
| orientation="0,1" | |||
| id="guide840" | |||
| inkscape:locked="false" /> | |||
| </sodipodi:namedview> | |||
| <metadata | |||
| id="metadata8627"> | |||
| <rdf:RDF> | |||
| <cc:Work | |||
| rdf:about=""> | |||
| <dc:format>image/svg+xml</dc:format> | |||
| <dc:type | |||
| rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
| <dc:title /> | |||
| </cc:Work> | |||
| </rdf:RDF> | |||
| </metadata> | |||
| <g | |||
| inkscape:label="layer 1" | |||
| inkscape:groupmode="layer" | |||
| id="layer1" | |||
| transform="translate(-44.467833,-88.735117)"> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path33449" | |||
| d="M 44.541176,88.808436 H 96.065974 V 189.20454 H 44.541176 Z m 0,0" | |||
| style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.27602378" | |||
| sodipodi:insensitive="true" /> | |||
| <g | |||
| id="logo" | |||
| inkscape:label="#g2255" | |||
| transform="translate(11.759859,53.053001)"> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path3737" | |||
| style="font-style:normal;font-weight:normal;font-size:5.43959379px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.13598984" | |||
| d="m 55.047763,130.90923 v 1.43277 h 0.7016 q 0.38947,0 0.60216,-0.18644 0.21269,-0.18643 0.21269,-0.53122 0,-0.34223 -0.21269,-0.52867 -0.21269,-0.18644 -0.60216,-0.18644 z m -0.55797,-0.42396 h 1.25957 q 0.69332,0 1.04688,0.29115 0.35633,0.2886 0.35633,0.84792 0,0.56443 -0.35633,0.85302 -0.35356,0.2886 -1.04688,0.2886 h -0.7016 v 1.53239 h -0.55797 z" /> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path3739" | |||
| style="font-style:normal;font-weight:normal;font-size:5.43959379px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.13598984" | |||
| d="m 60.715833,133.75435 v -1.02414 h -0.91154 v -0.42396 h 1.46398 v 1.63709 q -0.32318,0.21198 -0.71265,0.3218 -0.38947,0.10726 -0.83143,0.10726 -0.96678,0 -1.5137,-0.521 -0.54415,-0.52356 -0.54415,-1.45576 0,-0.93476 0.54415,-1.45576 0.54692,-0.52357 1.5137,-0.52357 0.40328,0 0.76513,0.0919 0.36462,0.0919 0.67122,0.27072 v 0.5491 q -0.30936,-0.24263 -0.6574,-0.36522 -0.34804,-0.12259 -0.73199,-0.12259 -0.75685,0 -1.13804,0.39076 -0.37842,0.39075 -0.37842,1.16461 0,0.77129 0.37842,1.16205 0.38119,0.39076 1.13804,0.39076 0.29556,0 0.52758,-0.046 0.23203,-0.0486 0.4171,-0.14813 z" /> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path3741" | |||
| style="font-style:normal;font-weight:normal;font-size:5.43959379px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.13598984" | |||
| d="m 62.268193,131.4379 h 0.50825 v 2.86045 h -0.50825 z m 0,-1.11353 h 0.50825 v 0.59507 h -0.50825 z" /> | |||
| </g> | |||
| <rect | |||
| style="fill:#000001;fill-opacity:1;stroke-width:0.42887589" | |||
| id="rect842" | |||
| width="17.372519" | |||
| height="38.085903" | |||
| x="76.941078" | |||
| y="110.29865" /> | |||
| <g | |||
| aria-label="Input" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text846" | |||
| transform="translate(-0.40090429,1.7901442)"> | |||
| <path | |||
| d="m 46.882972,120.66927 h 0.278364 v 2.05741 h -0.278364 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path916" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 48.987237,121.79512 v 0.93156 h -0.253559 v -0.92329 q 0,-0.21911 -0.08544,-0.32797 -0.08544,-0.10887 -0.256315,-0.10887 -0.205327,0 -0.323839,0.13092 -0.118511,0.13091 -0.118511,0.35691 v 0.8723 h -0.254937 v -1.5434 h 0.254938 v 0.23977 q 0.09095,-0.13918 0.213596,-0.20808 0.124023,-0.0689 0.285254,-0.0689 0.265961,0 0.402387,0.16536 0.136426,0.16399 0.136426,0.48369 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path918" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="Freq Mod" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text850" | |||
| transform="translate(10.78681,15.490505)"> | |||
| <path | |||
| d="m 46.081166,127.21737 h 1.182357 v 0.23427 H 46.35953 v 0.60633 h 0.815798 v 0.23427 H 46.35953 v 0.98254 h -0.278364 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path901" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 48.386624,127.9684 q -0.04272,-0.0248 -0.09371,-0.0358 -0.04961,-0.0124 -0.110243,-0.0124 -0.214974,0 -0.330729,0.14056 -0.114377,0.13918 -0.114377,0.40101 v 0.81304 h -0.254937 v -1.5434 h 0.254937 v 0.23978 q 0.07993,-0.14056 0.208084,-0.20809 0.128157,-0.0689 0.311436,-0.0689 0.02618,0 0.05788,0.004 0.03169,0.003 0.07028,0.01 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path903" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 49.914868,128.43969 v 0.12402 h -1.16582 q 0.01654,0.26183 0.157096,0.39963 0.141938,0.13643 0.394119,0.13643 0.146072,0 0.282498,-0.0358 0.137804,-0.0358 0.272852,-0.10749 v 0.23978 q -0.136426,0.0579 -0.279742,0.0882 -0.143316,0.0303 -0.290766,0.0303 -0.369314,0 -0.585666,-0.21497 -0.214974,-0.21497 -0.214974,-0.58153 0,-0.37896 0.203949,-0.60083 0.205328,-0.22324 0.552594,-0.22324 0.311436,0 0.491959,0.20119 0.181901,0.19982 0.181901,0.54433 z m -0.253559,-0.0744 q -0.0028,-0.20809 -0.117133,-0.33211 -0.112999,-0.12403 -0.300412,-0.12403 -0.212218,0 -0.340376,0.11989 -0.126779,0.11989 -0.146072,0.33762 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path905" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 50.48262,128.50446 q 0,0.27974 0.114377,0.43959 0.115755,0.15848 0.316949,0.15848 0.201194,0 0.316949,-0.15848 0.115755,-0.15985 0.115755,-0.43959 0,-0.27974 -0.115755,-0.43822 -0.115755,-0.15985 -0.316949,-0.15985 -0.201194,0 -0.316949,0.15985 -0.114377,0.15848 -0.114377,0.43822 z m 0.86403,0.53881 q -0.07993,0.1378 -0.202572,0.20533 -0.121267,0.0661 -0.292144,0.0661 -0.279741,0 -0.45613,-0.22324 -0.175011,-0.22324 -0.175011,-0.58704 0,-0.36381 0.175011,-0.58705 0.176389,-0.22324 0.45613,-0.22324 0.170877,0 0.292144,0.0675 0.122646,0.0661 0.202572,0.20395 v -0.23426 h 0.253559 v 2.13044 H 51.34665 Z" | |||
| style="stroke-width:0.26458332" | |||
| id="path907" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 46.081166,130.74515 h 0.414789 l 0.525033,1.40008 0.527789,-1.40008 h 0.414789 v 2.05741 h -0.271474 v -1.80661 l -0.530544,1.41111 h -0.279742 l -0.530545,-1.41111 v 1.80661 h -0.270095 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path909" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 49.104582,131.43692 q -0.20395,0 -0.322461,0.15985 -0.118512,0.15848 -0.118512,0.43546 0,0.27699 0.117134,0.43684 0.118511,0.15848 0.323839,0.15848 0.202571,0 0.321083,-0.15986 0.118511,-0.15985 0.118511,-0.43546 0,-0.27422 -0.118511,-0.43408 -0.118512,-0.16123 -0.321083,-0.16123 z m 0,-0.21497 q 0.330729,0 0.51952,0.21497 0.188791,0.21498 0.188791,0.59531 0,0.37897 -0.188791,0.59532 -0.188791,0.21497 -0.51952,0.21497 -0.332108,0 -0.520899,-0.21497 -0.187413,-0.21635 -0.187413,-0.59532 0,-0.38033 0.187413,-0.59531 0.188791,-0.21497 0.520899,-0.21497 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path911" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 51.247431,131.49342 v -0.83509 h 0.253559 v 2.14423 h -0.253559 v -0.23151 q -0.07993,0.1378 -0.202571,0.20533 -0.121268,0.0661 -0.292145,0.0661 -0.279741,0 -0.45613,-0.22324 -0.175011,-0.22324 -0.175011,-0.58705 0,-0.3638 0.175011,-0.58704 0.176389,-0.22324 0.45613,-0.22324 0.170877,0 0.292145,0.0675 0.122645,0.0661 0.202571,0.20395 z m -0.86403,0.53881 q 0,0.27975 0.114377,0.4396 0.115756,0.15847 0.316949,0.15847 0.201194,0 0.316949,-0.15847 0.115755,-0.15985 0.115755,-0.4396 0,-0.27974 -0.115755,-0.43821 -0.115755,-0.15985 -0.316949,-0.15985 -0.201193,0 -0.316949,0.15985 -0.114377,0.15847 -0.114377,0.43821 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path913" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="Cutoff" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text856" | |||
| transform="translate(-2.1166667,-1.0583333)"> | |||
| <path | |||
| d="m 61.386194,111.33968 v 0.29352 q -0.14056,-0.13091 -0.300412,-0.19568 -0.158475,-0.0648 -0.33762,-0.0648 -0.352778,0 -0.540191,0.21636 -0.187413,0.21497 -0.187413,0.62287 0,0.40652 0.187413,0.62287 0.187413,0.21498 0.540191,0.21498 0.179145,0 0.33762,-0.0648 0.159852,-0.0648 0.300412,-0.19568 v 0.29076 q -0.146072,0.0992 -0.310059,0.14883 -0.162608,0.0496 -0.344509,0.0496 -0.467155,0 -0.735873,-0.28525 -0.268717,-0.28664 -0.268717,-0.78135 0,-0.4961 0.268717,-0.78135 0.268718,-0.28663 0.735873,-0.28663 0.184657,0 0.347265,0.0496 0.163987,0.0482 0.307303,0.14607 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path890" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 61.781691,112.62952 v -0.93431 h 0.253559 v 0.92467 q 0,0.21911 0.08544,0.32935 0.08544,0.10886 0.256315,0.10886 0.205328,0 0.323839,-0.13091 0.11989,-0.13091 0.11989,-0.35691 v -0.87506 h 0.253559 v 1.54341 h -0.253559 v -0.23703 q -0.09233,0.14056 -0.214974,0.20947 -0.121268,0.0675 -0.282498,0.0675 -0.265962,0 -0.403765,-0.16536 -0.137804,-0.16537 -0.137804,-0.4837 z m 0.638032,-0.97151 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path892" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 63.850126,111.257 v 0.43821 h 0.522277 v 0.19706 h -0.522277 v 0.83785 q 0,0.18879 0.05099,0.24254 0.05237,0.0537 0.210839,0.0537 h 0.26045 v 0.21222 h -0.26045 q -0.293522,0 -0.405143,-0.10887 -0.111621,-0.11024 -0.111621,-0.39963 v -0.83785 h -0.186035 v -0.19706 h 0.186035 V 111.257 Z" | |||
| style="stroke-width:0.26458332" | |||
| id="path894" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 65.305335,111.87298 q -0.20395,0 -0.322461,0.15985 -0.118512,0.15848 -0.118512,0.43546 0,0.27699 0.117134,0.43684 0.118511,0.15848 0.323839,0.15848 0.202571,0 0.321083,-0.15986 0.118511,-0.15985 0.118511,-0.43546 0,-0.27423 -0.118511,-0.43408 -0.118512,-0.16123 -0.321083,-0.16123 z m 0,-0.21497 q 0.330729,0 0.51952,0.21497 0.188791,0.21498 0.188791,0.59531 0,0.37896 -0.188791,0.59532 -0.188791,0.21497 -0.51952,0.21497 -0.332108,0 -0.520899,-0.21497 -0.187413,-0.21636 -0.187413,-0.59532 0,-0.38033 0.187413,-0.59531 0.188791,-0.21497 0.520899,-0.21497 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path896" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 68.164764,111.09439 v 0.21084 h -0.242535 q -0.136426,0 -0.190169,0.0551 -0.05237,0.0551 -0.05237,0.19844 v 0.13642 h 0.417546 v 0.19706 H 67.67969 v 1.34635 h -0.254937 v -1.34635 h -0.695909 v 1.34635 h -0.254937 v -1.34635 h -0.242535 v -0.19706 h 0.242535 v -0.10748 q 0,-0.2577 0.119889,-0.37483 0.119889,-0.11851 0.380339,-0.11851 h 0.239778 v 0.21084 h -0.242534 q -0.136426,0 -0.19017,0.0551 -0.05236,0.0551 -0.05236,0.19844 v 0.13642 h 0.695909 v -0.10748 q 0,-0.2577 0.11989,-0.37483 0.119889,-0.11851 0.380338,-0.11851 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path898" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="Res" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text860" | |||
| transform="translate(-4.2333335,-1.0583333)"> | |||
| <path | |||
| d="m 74.585576,112.14035 q 0.08957,0.0303 0.173633,0.12953 0.08544,0.0992 0.170876,0.27285 l 0.282498,0.56224 h -0.299034 l -0.263205,-0.52779 q -0.101975,-0.2067 -0.198438,-0.27423 -0.09508,-0.0675 -0.260449,-0.0675 h -0.303168 v 0.86954 h -0.278364 v -2.05741 h 0.628385 q 0.352778,0 0.526411,0.14745 0.173633,0.14745 0.173633,0.44511 0,0.1943 -0.09095,0.32246 -0.08957,0.12816 -0.261827,0.17777 z m -0.697287,-0.86403 v 0.73036 h 0.350021 q 0.201194,0 0.303169,-0.0923 0.103353,-0.0937 0.103353,-0.27423 0,-0.18052 -0.103353,-0.27148 -0.101975,-0.0923 -0.303169,-0.0923 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path883" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 76.754608,112.26988 v 0.12403 h -1.16582 q 0.01654,0.26182 0.157096,0.39963 0.141938,0.13642 0.394119,0.13642 0.146072,0 0.282498,-0.0358 0.137804,-0.0358 0.272851,-0.10748 v 0.23977 q -0.136425,0.0579 -0.279741,0.0882 -0.143316,0.0303 -0.290766,0.0303 -0.369315,0 -0.585667,-0.21498 -0.214974,-0.21497 -0.214974,-0.58153 0,-0.37896 0.20395,-0.60082 0.205328,-0.22325 0.552593,-0.22325 0.311437,0 0.49196,0.2012 0.181901,0.19981 0.181901,0.54432 z m -0.253559,-0.0744 q -0.0028,-0.20809 -0.117133,-0.33211 -0.112999,-0.12402 -0.300413,-0.12402 -0.212218,0 -0.340375,0.11989 -0.12678,0.11989 -0.146072,0.33762 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path885" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 78.154695,111.60705 v 0.23977 q -0.107487,-0.0551 -0.223242,-0.0827 -0.115756,-0.0276 -0.239779,-0.0276 -0.188791,0 -0.283876,0.0579 -0.09371,0.0579 -0.09371,0.17363 0,0.0882 0.06752,0.13918 0.06752,0.0496 0.271474,0.0951 l 0.08682,0.0193 q 0.270096,0.0579 0.383095,0.16399 0.114377,0.10473 0.114377,0.29352 0,0.21497 -0.170877,0.34037 -0.169498,0.12541 -0.467155,0.12541 -0.124023,0 -0.259071,-0.0248 -0.133669,-0.0234 -0.282498,-0.0717 v -0.26182 q 0.14056,0.073 0.276986,0.11024 0.136426,0.0358 0.270096,0.0358 0.179145,0 0.275607,-0.0606 0.09646,-0.062 0.09646,-0.17363 0,-0.10335 -0.07028,-0.15847 -0.0689,-0.0551 -0.304546,-0.10611 l -0.08819,-0.0207 q -0.235644,-0.0496 -0.340375,-0.15159 -0.104731,-0.10335 -0.104731,-0.28249 0,-0.21773 0.15434,-0.33625 0.15434,-0.11851 0.438216,-0.11851 0.14056,0 0.264584,0.0207 0.124023,0.0207 0.228754,0.062 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path887" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="VCF" | |||
| transform="scale(0.99826066,1.0017424)" | |||
| style="font-style:normal;font-weight:normal;font-size:11.81254005px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.10742557" | |||
| id="text864"> | |||
| <path | |||
| d="m 63.383713,101.57508 -3.28767,-8.611387 h 1.217015 l 2.728189,7.250177 2.733957,-7.250177 h 1.211247 l -3.281902,8.611387 z" | |||
| style="stroke-width:1.10742557" | |||
| id="path876" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 75.68652,93.626995 v 1.22855 Q 75.0982,94.3076 74.42913,94.036512 q -0.663302,-0.271089 -1.413121,-0.271089 -1.476568,0 -2.260994,0.905551 -0.784427,0.899784 -0.784427,2.607065 0,1.701513 0.784427,2.607064 0.784426,0.899787 2.260994,0.899787 0.749819,0 1.413121,-0.27109 0.66907,-0.27109 1.25739,-0.819036 v 1.217016 q -0.611392,0.41528 -1.297765,0.62293 -0.680605,0.20764 -1.44196,0.20764 -1.955299,0 -3.080028,-1.19394 -1.124729,-1.199716 -1.124729,-3.270371 0,-2.076423 1.124729,-3.270367 1.124729,-1.199711 3.080028,-1.199711 0.772891,0 1.453496,0.207643 0.686373,0.201874 1.286229,0.611391 z" | |||
| style="stroke-width:1.10742557" | |||
| id="path878" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 77.497622,92.963693 h 4.948808 v 0.980533 h -3.783704 v 2.537851 h 3.414562 v 0.980533 h -3.414562 v 4.11247 h -1.165104 z" | |||
| style="stroke-width:1.10742557" | |||
| id="path880" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="LPF BPF HPF " | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text868" | |||
| transform="translate(-1.0583333)"> | |||
| <path | |||
| d="m 85.230777,111.89769 h 0.278364 v 1.82314 h 1.001834 v 0.23427 h -1.280198 z" | |||
| style="fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| id="path927" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 87.080104,112.12644 v 0.77308 h 0.350022 q 0.194304,0 0.300412,-0.1006 0.106109,-0.10059 0.106109,-0.28663 0,-0.18466 -0.106109,-0.28525 -0.106108,-0.1006 -0.300412,-0.1006 z m -0.278363,-0.22875 h 0.628385 q 0.345888,0 0.522277,0.15709 0.177767,0.15572 0.177767,0.45751 0,0.30455 -0.177767,0.46027 -0.176389,0.15571 -0.522277,0.15571 h -0.350022 v 0.82683 h -0.278363 z" | |||
| style="fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| id="path929" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 88.504996,111.89769 h 1.182357 v 0.23426 h -0.903994 v 0.60634 h 0.815799 v 0.23427 h -0.815799 v 0.98254 h -0.278363 z" | |||
| style="fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| id="path931" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 85.247244,124.12288 v 0.75379 h 0.446484 q 0.224621,0 0.332108,-0.0923 0.108865,-0.0937 0.108865,-0.28525 0,-0.19293 -0.108865,-0.28388 -0.107487,-0.0923 -0.332108,-0.0923 z m 0,-0.84611 v 0.62011 h 0.412033 q 0.20395,0 0.303169,-0.0758 0.100597,-0.0772 0.100597,-0.23426 0,-0.15572 -0.100597,-0.23289 -0.09922,-0.0772 -0.303169,-0.0772 z m -0.278364,-0.22876 h 0.711068 q 0.318327,0 0.490582,0.1323 0.172254,0.13229 0.172254,0.3762 0,0.18879 -0.08819,0.30041 -0.08819,0.11162 -0.259071,0.13918 0.205327,0.0441 0.318326,0.18466 0.114378,0.13918 0.114378,0.34864 0,0.27561 -0.187414,0.42582 -0.187413,0.1502 -0.5333,0.1502 H 84.96888 Z" | |||
| style="fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| id="path933" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 87.18201,123.27677 v 0.77308 h 0.350021 q 0.194304,0 0.300413,-0.1006 0.106108,-0.1006 0.106108,-0.28663 0,-0.18466 -0.106108,-0.28526 -0.106109,-0.10059 -0.300413,-0.10059 z m -0.278364,-0.22876 h 0.628385 q 0.345888,0 0.522277,0.1571 0.177767,0.15572 0.177767,0.45751 0,0.30454 -0.177767,0.46026 -0.176389,0.15572 -0.522277,0.15572 H 87.18201 v 0.82682 h -0.278364 z" | |||
| style="fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| id="path935" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 88.606901,123.04801 h 1.182357 v 0.23427 h -0.903993 v 0.60634 h 0.815798 v 0.23426 h -0.815798 v 0.98254 h -0.278364 z" | |||
| style="fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| id="path937" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 84.835245,133.75985 h 0.278364 v 0.84336 h 1.01148 v -0.84336 h 0.278364 v 2.05741 h -0.278364 v -0.97978 h -1.01148 v 0.97978 h -0.278364 z" | |||
| style="fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| id="path939" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 87.235788,133.98861 v 0.77307 h 0.350021 q 0.194304,0 0.300413,-0.10059 0.106109,-0.1006 0.106109,-0.28663 0,-0.18466 -0.106109,-0.28526 -0.106109,-0.10059 -0.300413,-0.10059 z m -0.278364,-0.22876 h 0.628385 q 0.345888,0 0.522277,0.1571 0.177767,0.15572 0.177767,0.45751 0,0.30454 -0.177767,0.46026 -0.176389,0.15572 -0.522277,0.15572 h -0.350021 v 0.82682 h -0.278364 z" | |||
| style="fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| id="path941" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 88.660679,133.75985 h 1.182357 v 0.23427 h -0.903993 v 0.60633 h 0.815799 v 0.23427 h -0.815799 v 0.98254 h -0.278364 z" | |||
| style="fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| id="path943" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <rect | |||
| style="fill:#000000;fill-opacity:1;stroke-width:0.26458332" | |||
| id="rect4616" | |||
| width="2.1381562" | |||
| height="13.898016" | |||
| x="51.806999" | |||
| y="115.90594" /> | |||
| </g> | |||
| </svg> | |||
| @@ -0,0 +1,297 @@ | |||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
| <!-- Created with Inkscape (http://www.inkscape.org/) --> | |||
| <svg | |||
| xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
| xmlns:cc="http://creativecommons.org/ns#" | |||
| xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
| xmlns:svg="http://www.w3.org/2000/svg" | |||
| xmlns="http://www.w3.org/2000/svg" | |||
| xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
| xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
| width="195.29379" | |||
| height="380.00003" | |||
| viewBox="0 0 51.671483 100.54167" | |||
| version="1.1" | |||
| id="svg8630" | |||
| inkscape:version="0.92.3 (2405546, 2018-03-11)" | |||
| sodipodi:docname="PGVCF.svg"> | |||
| <defs | |||
| id="defs8624" /> | |||
| <sodipodi:namedview | |||
| id="base" | |||
| pagecolor="#ffffff" | |||
| bordercolor="#666666" | |||
| borderopacity="1.0" | |||
| inkscape:pageopacity="0.0" | |||
| inkscape:pageshadow="2" | |||
| inkscape:zoom="1.979899" | |||
| inkscape:cx="113.86719" | |||
| inkscape:cy="185.98498" | |||
| inkscape:document-units="mm" | |||
| inkscape:current-layer="layer1" | |||
| showgrid="false" | |||
| fit-margin-top="0" | |||
| fit-margin-left="0" | |||
| fit-margin-right="0" | |||
| fit-margin-bottom="0" | |||
| units="px" | |||
| inkscape:window-width="1920" | |||
| inkscape:window-height="1017" | |||
| inkscape:window-x="-8" | |||
| inkscape:window-y="-8" | |||
| inkscape:window-maximized="1" | |||
| showguides="true" | |||
| inkscape:guide-bbox="true"> | |||
| <sodipodi:guide | |||
| position="-35.814117,76.038176" | |||
| orientation="0,1" | |||
| id="guide836" | |||
| inkscape:locked="false" /> | |||
| <sodipodi:guide | |||
| position="-17.639789,44.09947" | |||
| orientation="0,1" | |||
| id="guide838" | |||
| inkscape:locked="false" /> | |||
| <sodipodi:guide | |||
| position="-23.519718,60.002006" | |||
| orientation="0,1" | |||
| id="guide840" | |||
| inkscape:locked="false" /> | |||
| </sodipodi:namedview> | |||
| <metadata | |||
| id="metadata8627"> | |||
| <rdf:RDF> | |||
| <cc:Work | |||
| rdf:about=""> | |||
| <dc:format>image/svg+xml</dc:format> | |||
| <dc:type | |||
| rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
| <dc:title /> | |||
| </cc:Work> | |||
| </rdf:RDF> | |||
| </metadata> | |||
| <g | |||
| inkscape:label="layer 1" | |||
| inkscape:groupmode="layer" | |||
| id="layer1" | |||
| transform="translate(-44.467833,-88.735117)"> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path33449" | |||
| d="M 44.541176,88.808436 H 96.065974 V 189.20454 H 44.541176 Z m 0,0" | |||
| style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.27602378" | |||
| sodipodi:insensitive="true" /> | |||
| <g | |||
| id="logo" | |||
| inkscape:label="#g2255" | |||
| transform="translate(11.759859,53.053001)"> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path3737" | |||
| style="font-style:normal;font-weight:normal;font-size:5.43959379px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.13598984" | |||
| d="m 55.047763,130.90923 v 1.43277 h 0.7016 q 0.38947,0 0.60216,-0.18644 0.21269,-0.18643 0.21269,-0.53122 0,-0.34223 -0.21269,-0.52867 -0.21269,-0.18644 -0.60216,-0.18644 z m -0.55797,-0.42396 h 1.25957 q 0.69332,0 1.04688,0.29115 0.35633,0.2886 0.35633,0.84792 0,0.56443 -0.35633,0.85302 -0.35356,0.2886 -1.04688,0.2886 h -0.7016 v 1.53239 h -0.55797 z" /> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path3739" | |||
| style="font-style:normal;font-weight:normal;font-size:5.43959379px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.13598984" | |||
| d="m 60.715833,133.75435 v -1.02414 h -0.91154 v -0.42396 h 1.46398 v 1.63709 q -0.32318,0.21198 -0.71265,0.3218 -0.38947,0.10726 -0.83143,0.10726 -0.96678,0 -1.5137,-0.521 -0.54415,-0.52356 -0.54415,-1.45576 0,-0.93476 0.54415,-1.45576 0.54692,-0.52357 1.5137,-0.52357 0.40328,0 0.76513,0.0919 0.36462,0.0919 0.67122,0.27072 v 0.5491 q -0.30936,-0.24263 -0.6574,-0.36522 -0.34804,-0.12259 -0.73199,-0.12259 -0.75685,0 -1.13804,0.39076 -0.37842,0.39075 -0.37842,1.16461 0,0.77129 0.37842,1.16205 0.38119,0.39076 1.13804,0.39076 0.29556,0 0.52758,-0.046 0.23203,-0.0486 0.4171,-0.14813 z" /> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path3741" | |||
| style="font-style:normal;font-weight:normal;font-size:5.43959379px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.13598984" | |||
| d="m 62.268193,131.4379 h 0.50825 v 2.86045 h -0.50825 z m 0,-1.11353 h 0.50825 v 0.59507 h -0.50825 z" /> | |||
| </g> | |||
| <rect | |||
| style="fill:#000001;fill-opacity:1;stroke-width:0.28892556" | |||
| id="rect842" | |||
| width="7.8844509" | |||
| height="38.085903" | |||
| x="83.489182" | |||
| y="110.29865" /> | |||
| <g | |||
| aria-label="Input" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text846" | |||
| transform="translate(-0.53453905,-3.8225158)"> | |||
| <path | |||
| d="m 46.882972,120.66927 h 0.278364 v 2.05741 h -0.278364 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path916" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 48.987237,121.79512 v 0.93156 h -0.253559 v -0.92329 q 0,-0.21911 -0.08544,-0.32797 -0.08544,-0.10887 -0.256315,-0.10887 -0.205327,0 -0.323839,0.13092 -0.118511,0.13091 -0.118511,0.35691 v 0.8723 h -0.254937 v -1.5434 h 0.254938 v 0.23977 q 0.09095,-0.13918 0.213596,-0.20808 0.124023,-0.0689 0.285254,-0.0689 0.265961,0 0.402387,0.16536 0.136426,0.16399 0.136426,0.48369 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path918" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="Freq | |||
| Mod" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text850" | |||
| transform="translate(0,-0.67800549)"> | |||
| <path | |||
| d="m 46.081166,127.21737 h 1.182357 v 0.23427 H 46.35953 v 0.60633 h 0.815798 v 0.23427 H 46.35953 v 0.98254 h -0.278364 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path901" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 48.386624,127.9684 q -0.04272,-0.0248 -0.09371,-0.0358 -0.04961,-0.0124 -0.110243,-0.0124 -0.214974,0 -0.330729,0.14056 -0.114377,0.13918 -0.114377,0.40101 v 0.81304 h -0.254937 v -1.5434 h 0.254937 v 0.23978 q 0.07993,-0.14056 0.208084,-0.20809 0.128157,-0.0689 0.311436,-0.0689 0.02618,0 0.05788,0.004 0.03169,0.003 0.07028,0.01 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path903" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 49.914868,128.43969 v 0.12402 h -1.16582 q 0.01654,0.26183 0.157096,0.39963 0.141938,0.13643 0.394119,0.13643 0.146072,0 0.282498,-0.0358 0.137804,-0.0358 0.272852,-0.10749 v 0.23978 q -0.136426,0.0579 -0.279742,0.0882 -0.143316,0.0303 -0.290766,0.0303 -0.369314,0 -0.585666,-0.21497 -0.214974,-0.21497 -0.214974,-0.58153 0,-0.37896 0.203949,-0.60083 0.205328,-0.22324 0.552594,-0.22324 0.311436,0 0.491959,0.20119 0.181901,0.19982 0.181901,0.54433 z m -0.253559,-0.0744 q -0.0028,-0.20809 -0.117133,-0.33211 -0.112999,-0.12403 -0.300412,-0.12403 -0.212218,0 -0.340376,0.11989 -0.126779,0.11989 -0.146072,0.33762 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path905" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 50.48262,128.50446 q 0,0.27974 0.114377,0.43959 0.115755,0.15848 0.316949,0.15848 0.201194,0 0.316949,-0.15848 0.115755,-0.15985 0.115755,-0.43959 0,-0.27974 -0.115755,-0.43822 -0.115755,-0.15985 -0.316949,-0.15985 -0.201194,0 -0.316949,0.15985 -0.114377,0.15848 -0.114377,0.43822 z m 0.86403,0.53881 q -0.07993,0.1378 -0.202572,0.20533 -0.121267,0.0661 -0.292144,0.0661 -0.279741,0 -0.45613,-0.22324 -0.175011,-0.22324 -0.175011,-0.58704 0,-0.36381 0.175011,-0.58705 0.176389,-0.22324 0.45613,-0.22324 0.170877,0 0.292144,0.0675 0.122646,0.0661 0.202572,0.20395 v -0.23426 h 0.253559 v 2.13044 H 51.34665 Z" | |||
| style="stroke-width:0.26458332" | |||
| id="path907" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 46.081166,130.74515 h 0.414789 l 0.525033,1.40008 0.527789,-1.40008 h 0.414789 v 2.05741 h -0.271474 v -1.80661 l -0.530544,1.41111 h -0.279742 l -0.530545,-1.41111 v 1.80661 h -0.270095 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path909" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 49.104582,131.43692 q -0.20395,0 -0.322461,0.15985 -0.118512,0.15848 -0.118512,0.43546 0,0.27699 0.117134,0.43684 0.118511,0.15848 0.323839,0.15848 0.202571,0 0.321083,-0.15986 0.118511,-0.15985 0.118511,-0.43546 0,-0.27422 -0.118511,-0.43408 -0.118512,-0.16123 -0.321083,-0.16123 z m 0,-0.21497 q 0.330729,0 0.51952,0.21497 0.188791,0.21498 0.188791,0.59531 0,0.37897 -0.188791,0.59532 -0.188791,0.21497 -0.51952,0.21497 -0.332108,0 -0.520899,-0.21497 -0.187413,-0.21635 -0.187413,-0.59532 0,-0.38033 0.187413,-0.59531 0.188791,-0.21497 0.520899,-0.21497 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path911" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 51.247431,131.49342 v -0.83509 h 0.253559 v 2.14423 h -0.253559 v -0.23151 q -0.07993,0.1378 -0.202571,0.20533 -0.121268,0.0661 -0.292145,0.0661 -0.279741,0 -0.45613,-0.22324 -0.175011,-0.22324 -0.175011,-0.58705 0,-0.3638 0.175011,-0.58704 0.176389,-0.22324 0.45613,-0.22324 0.170877,0 0.292145,0.0675 0.122645,0.0661 0.202571,0.20395 z m -0.86403,0.53881 q 0,0.27975 0.114377,0.4396 0.115756,0.15847 0.316949,0.15847 0.201194,0 0.316949,-0.15847 0.115755,-0.15985 0.115755,-0.4396 0,-0.27974 -0.115755,-0.43821 -0.115755,-0.15985 -0.316949,-0.15985 -0.201193,0 -0.316949,0.15985 -0.114377,0.15847 -0.114377,0.43821 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path913" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="Cutoff" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text856" | |||
| transform="translate(2.6458335,-1.0583333)"> | |||
| <path | |||
| d="m 61.386194,111.33968 v 0.29352 q -0.14056,-0.13091 -0.300412,-0.19568 -0.158475,-0.0648 -0.33762,-0.0648 -0.352778,0 -0.540191,0.21636 -0.187413,0.21497 -0.187413,0.62287 0,0.40652 0.187413,0.62287 0.187413,0.21498 0.540191,0.21498 0.179145,0 0.33762,-0.0648 0.159852,-0.0648 0.300412,-0.19568 v 0.29076 q -0.146072,0.0992 -0.310059,0.14883 -0.162608,0.0496 -0.344509,0.0496 -0.467155,0 -0.735873,-0.28525 -0.268717,-0.28664 -0.268717,-0.78135 0,-0.4961 0.268717,-0.78135 0.268718,-0.28663 0.735873,-0.28663 0.184657,0 0.347265,0.0496 0.163987,0.0482 0.307303,0.14607 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path890" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 61.781691,112.62952 v -0.93431 h 0.253559 v 0.92467 q 0,0.21911 0.08544,0.32935 0.08544,0.10886 0.256315,0.10886 0.205328,0 0.323839,-0.13091 0.11989,-0.13091 0.11989,-0.35691 v -0.87506 h 0.253559 v 1.54341 h -0.253559 v -0.23703 q -0.09233,0.14056 -0.214974,0.20947 -0.121268,0.0675 -0.282498,0.0675 -0.265962,0 -0.403765,-0.16536 -0.137804,-0.16537 -0.137804,-0.4837 z m 0.638032,-0.97151 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path892" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 63.850126,111.257 v 0.43821 h 0.522277 v 0.19706 h -0.522277 v 0.83785 q 0,0.18879 0.05099,0.24254 0.05237,0.0537 0.210839,0.0537 h 0.26045 v 0.21222 h -0.26045 q -0.293522,0 -0.405143,-0.10887 -0.111621,-0.11024 -0.111621,-0.39963 v -0.83785 h -0.186035 v -0.19706 h 0.186035 V 111.257 Z" | |||
| style="stroke-width:0.26458332" | |||
| id="path894" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 65.305335,111.87298 q -0.20395,0 -0.322461,0.15985 -0.118512,0.15848 -0.118512,0.43546 0,0.27699 0.117134,0.43684 0.118511,0.15848 0.323839,0.15848 0.202571,0 0.321083,-0.15986 0.118511,-0.15985 0.118511,-0.43546 0,-0.27423 -0.118511,-0.43408 -0.118512,-0.16123 -0.321083,-0.16123 z m 0,-0.21497 q 0.330729,0 0.51952,0.21497 0.188791,0.21498 0.188791,0.59531 0,0.37896 -0.188791,0.59532 -0.188791,0.21497 -0.51952,0.21497 -0.332108,0 -0.520899,-0.21497 -0.187413,-0.21636 -0.187413,-0.59532 0,-0.38033 0.187413,-0.59531 0.188791,-0.21497 0.520899,-0.21497 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path896" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 68.164764,111.09439 v 0.21084 h -0.242535 q -0.136426,0 -0.190169,0.0551 -0.05237,0.0551 -0.05237,0.19844 v 0.13642 h 0.417546 v 0.19706 H 67.67969 v 1.34635 h -0.254937 v -1.34635 h -0.695909 v 1.34635 h -0.254937 v -1.34635 h -0.242535 v -0.19706 h 0.242535 v -0.10748 q 0,-0.2577 0.119889,-0.37483 0.119889,-0.11851 0.380339,-0.11851 h 0.239778 v 0.21084 h -0.242534 q -0.136426,0 -0.19017,0.0551 -0.05236,0.0551 -0.05236,0.19844 v 0.13642 h 0.695909 v -0.10748 q 0,-0.2577 0.11989,-0.37483 0.119889,-0.11851 0.380338,-0.11851 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path898" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="Res" | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text860" | |||
| transform="translate(1.5875001,-1.0583333)"> | |||
| <path | |||
| d="m 74.585576,112.14035 q 0.08957,0.0303 0.173633,0.12953 0.08544,0.0992 0.170876,0.27285 l 0.282498,0.56224 h -0.299034 l -0.263205,-0.52779 q -0.101975,-0.2067 -0.198438,-0.27423 -0.09508,-0.0675 -0.260449,-0.0675 h -0.303168 v 0.86954 h -0.278364 v -2.05741 h 0.628385 q 0.352778,0 0.526411,0.14745 0.173633,0.14745 0.173633,0.44511 0,0.1943 -0.09095,0.32246 -0.08957,0.12816 -0.261827,0.17777 z m -0.697287,-0.86403 v 0.73036 h 0.350021 q 0.201194,0 0.303169,-0.0923 0.103353,-0.0937 0.103353,-0.27423 0,-0.18052 -0.103353,-0.27148 -0.101975,-0.0923 -0.303169,-0.0923 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path883" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 76.754608,112.26988 v 0.12403 h -1.16582 q 0.01654,0.26182 0.157096,0.39963 0.141938,0.13642 0.394119,0.13642 0.146072,0 0.282498,-0.0358 0.137804,-0.0358 0.272851,-0.10748 v 0.23977 q -0.136425,0.0579 -0.279741,0.0882 -0.143316,0.0303 -0.290766,0.0303 -0.369315,0 -0.585667,-0.21498 -0.214974,-0.21497 -0.214974,-0.58153 0,-0.37896 0.20395,-0.60082 0.205328,-0.22325 0.552593,-0.22325 0.311437,0 0.49196,0.2012 0.181901,0.19981 0.181901,0.54432 z m -0.253559,-0.0744 q -0.0028,-0.20809 -0.117133,-0.33211 -0.112999,-0.12402 -0.300413,-0.12402 -0.212218,0 -0.340375,0.11989 -0.12678,0.11989 -0.146072,0.33762 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path885" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 78.154695,111.60705 v 0.23977 q -0.107487,-0.0551 -0.223242,-0.0827 -0.115756,-0.0276 -0.239779,-0.0276 -0.188791,0 -0.283876,0.0579 -0.09371,0.0579 -0.09371,0.17363 0,0.0882 0.06752,0.13918 0.06752,0.0496 0.271474,0.0951 l 0.08682,0.0193 q 0.270096,0.0579 0.383095,0.16399 0.114377,0.10473 0.114377,0.29352 0,0.21497 -0.170877,0.34037 -0.169498,0.12541 -0.467155,0.12541 -0.124023,0 -0.259071,-0.0248 -0.133669,-0.0234 -0.282498,-0.0717 v -0.26182 q 0.14056,0.073 0.276986,0.11024 0.136426,0.0358 0.270096,0.0358 0.179145,0 0.275607,-0.0606 0.09646,-0.062 0.09646,-0.17363 0,-0.10335 -0.07028,-0.15847 -0.0689,-0.0551 -0.304546,-0.10611 l -0.08819,-0.0207 q -0.235644,-0.0496 -0.340375,-0.15159 -0.104731,-0.10335 -0.104731,-0.28249 0,-0.21773 0.15434,-0.33625 0.15434,-0.11851 0.438216,-0.11851 0.14056,0 0.264584,0.0207 0.124023,0.0207 0.228754,0.062 z" | |||
| style="stroke-width:0.26458332" | |||
| id="path887" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="VCF" | |||
| transform="scale(0.99826066,1.0017424)" | |||
| style="font-style:normal;font-weight:normal;font-size:11.81254005px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.10742557" | |||
| id="text864"> | |||
| <path | |||
| d="m 63.383713,101.57508 -3.28767,-8.611387 h 1.217015 l 2.728189,7.250177 2.733957,-7.250177 h 1.211247 l -3.281902,8.611387 z" | |||
| style="stroke-width:1.10742557" | |||
| id="path876" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 75.68652,93.626995 v 1.22855 Q 75.0982,94.3076 74.42913,94.036512 q -0.663302,-0.271089 -1.413121,-0.271089 -1.476568,0 -2.260994,0.905551 -0.784427,0.899784 -0.784427,2.607065 0,1.701513 0.784427,2.607064 0.784426,0.899787 2.260994,0.899787 0.749819,0 1.413121,-0.27109 0.66907,-0.27109 1.25739,-0.819036 v 1.217016 q -0.611392,0.41528 -1.297765,0.62293 -0.680605,0.20764 -1.44196,0.20764 -1.955299,0 -3.080028,-1.19394 -1.124729,-1.199716 -1.124729,-3.270371 0,-2.076423 1.124729,-3.270367 1.124729,-1.199711 3.080028,-1.199711 0.772891,0 1.453496,0.207643 0.686373,0.201874 1.286229,0.611391 z" | |||
| style="stroke-width:1.10742557" | |||
| id="path878" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 77.497622,92.963693 h 4.948808 v 0.980533 h -3.783704 v 2.537851 h 3.414562 v 0.980533 h -3.414562 v 4.11247 h -1.165104 z" | |||
| style="stroke-width:1.10742557" | |||
| id="path880" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| aria-label="LPF | |||
| BPF | |||
| HPF | |||
| " | |||
| style="font-style:normal;font-weight:normal;font-size:2.82222223px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| id="text868"> | |||
| <path | |||
| d="m 85.230777,111.89769 h 0.278364 v 1.82314 h 1.001834 v 0.23427 h -1.280198 z" | |||
| style="fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| id="path927" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 87.080104,112.12644 v 0.77308 h 0.350022 q 0.194304,0 0.300412,-0.1006 0.106109,-0.10059 0.106109,-0.28663 0,-0.18466 -0.106109,-0.28525 -0.106108,-0.1006 -0.300412,-0.1006 z m -0.278363,-0.22875 h 0.628385 q 0.345888,0 0.522277,0.15709 0.177767,0.15572 0.177767,0.45751 0,0.30455 -0.177767,0.46027 -0.176389,0.15571 -0.522277,0.15571 h -0.350022 v 0.82683 h -0.278363 z" | |||
| style="fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| id="path929" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 88.504996,111.89769 h 1.182357 v 0.23426 h -0.903994 v 0.60634 h 0.815799 v 0.23427 h -0.815799 v 0.98254 h -0.278363 z" | |||
| style="fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| id="path931" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 85.247244,124.12288 v 0.75379 h 0.446484 q 0.224621,0 0.332108,-0.0923 0.108865,-0.0937 0.108865,-0.28525 0,-0.19293 -0.108865,-0.28388 -0.107487,-0.0923 -0.332108,-0.0923 z m 0,-0.84611 v 0.62011 h 0.412033 q 0.20395,0 0.303169,-0.0758 0.100597,-0.0772 0.100597,-0.23426 0,-0.15572 -0.100597,-0.23289 -0.09922,-0.0772 -0.303169,-0.0772 z m -0.278364,-0.22876 h 0.711068 q 0.318327,0 0.490582,0.1323 0.172254,0.13229 0.172254,0.3762 0,0.18879 -0.08819,0.30041 -0.08819,0.11162 -0.259071,0.13918 0.205327,0.0441 0.318326,0.18466 0.114378,0.13918 0.114378,0.34864 0,0.27561 -0.187414,0.42582 -0.187413,0.1502 -0.5333,0.1502 H 84.96888 Z" | |||
| style="fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| id="path933" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 87.18201,123.27677 v 0.77308 h 0.350021 q 0.194304,0 0.300413,-0.1006 0.106108,-0.1006 0.106108,-0.28663 0,-0.18466 -0.106108,-0.28526 -0.106109,-0.10059 -0.300413,-0.10059 z m -0.278364,-0.22876 h 0.628385 q 0.345888,0 0.522277,0.1571 0.177767,0.15572 0.177767,0.45751 0,0.30454 -0.177767,0.46026 -0.176389,0.15572 -0.522277,0.15572 H 87.18201 v 0.82682 h -0.278364 z" | |||
| style="fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| id="path935" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 88.606901,123.04801 h 1.182357 v 0.23427 h -0.903993 v 0.60634 h 0.815798 v 0.23426 h -0.815798 v 0.98254 h -0.278364 z" | |||
| style="fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| id="path937" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 84.835245,133.75985 h 0.278364 v 0.84336 h 1.01148 v -0.84336 h 0.278364 v 2.05741 h -0.278364 v -0.97978 h -1.01148 v 0.97978 h -0.278364 z" | |||
| style="fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| id="path939" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 87.235788,133.98861 v 0.77307 h 0.350021 q 0.194304,0 0.300413,-0.10059 0.106109,-0.1006 0.106109,-0.28663 0,-0.18466 -0.106109,-0.28526 -0.106109,-0.10059 -0.300413,-0.10059 z m -0.278364,-0.22876 h 0.628385 q 0.345888,0 0.522277,0.1571 0.177767,0.15572 0.177767,0.45751 0,0.30454 -0.177767,0.46026 -0.176389,0.15572 -0.522277,0.15572 h -0.350021 v 0.82682 h -0.278364 z" | |||
| style="fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| id="path941" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 88.660679,133.75985 h 1.182357 v 0.23427 h -0.903993 v 0.60633 h 0.815799 v 0.23427 h -0.815799 v 0.98254 h -0.278364 z" | |||
| style="fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| id="path943" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| </g> | |||
| </svg> | |||
| @@ -0,0 +1,93 @@ | |||
| Sudo is Copyright (c) 2009-2016, Jens Kutilek (http://www.kutilek.de/). | |||
| This Font Software is licensed under the SIL Open Font License, Version 1.1. | |||
| This license is copied below, and is also available with a FAQ at: | |||
| http://scripts.sil.org/OFL | |||
| ----------------------------------------------------------- | |||
| SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 | |||
| ----------------------------------------------------------- | |||
| PREAMBLE | |||
| The goals of the Open Font License (OFL) are to stimulate worldwide | |||
| development of collaborative font projects, to support the font creation | |||
| efforts of academic and linguistic communities, and to provide a free and | |||
| open framework in which fonts may be shared and improved in partnership | |||
| with others. | |||
| The OFL allows the licensed fonts to be used, studied, modified and | |||
| redistributed freely as long as they are not sold by themselves. The | |||
| fonts, including any derivative works, can be bundled, embedded, | |||
| redistributed and/or sold with any software provided that any reserved | |||
| names are not used by derivative works. The fonts and derivatives, | |||
| however, cannot be released under any other type of license. The | |||
| requirement for fonts to remain under this license does not apply | |||
| to any document created using the fonts or their derivatives. | |||
| DEFINITIONS | |||
| "Font Software" refers to the set of files released by the Copyright | |||
| Holder(s) under this license and clearly marked as such. This may | |||
| include source files, build scripts and documentation. | |||
| "Reserved Font Name" refers to any names specified as such after the | |||
| copyright statement(s). | |||
| "Original Version" refers to the collection of Font Software components as | |||
| distributed by the Copyright Holder(s). | |||
| "Modified Version" refers to any derivative made by adding to, deleting, | |||
| or substituting -- in part or in whole -- any of the components of the | |||
| Original Version, by changing formats or by porting the Font Software to a | |||
| new environment. | |||
| "Author" refers to any designer, engineer, programmer, technical | |||
| writer or other person who contributed to the Font Software. | |||
| PERMISSION & CONDITIONS | |||
| Permission is hereby granted, free of charge, to any person obtaining | |||
| a copy of the Font Software, to use, study, copy, merge, embed, modify, | |||
| redistribute, and sell modified and unmodified copies of the Font | |||
| Software, subject to the following conditions: | |||
| 1) Neither the Font Software nor any of its individual components, | |||
| in Original or Modified Versions, may be sold by itself. | |||
| 2) Original or Modified Versions of the Font Software may be bundled, | |||
| redistributed and/or sold with any software, provided that each copy | |||
| contains the above copyright notice and this license. These can be | |||
| included either as stand-alone text files, human-readable headers or | |||
| in the appropriate machine-readable metadata fields within text or | |||
| binary files as long as those fields can be easily viewed by the user. | |||
| 3) No Modified Version of the Font Software may use the Reserved Font | |||
| Name(s) unless explicit written permission is granted by the corresponding | |||
| Copyright Holder. This restriction only applies to the primary font name as | |||
| presented to the users. | |||
| 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font | |||
| Software shall not be used to promote, endorse or advertise any | |||
| Modified Version, except to acknowledge the contribution(s) of the | |||
| Copyright Holder(s) and the Author(s) or with their explicit written | |||
| permission. | |||
| 5) The Font Software, modified or unmodified, in part or in whole, | |||
| must be distributed entirely under this license, and must not be | |||
| distributed under any other license. The requirement for fonts to | |||
| remain under this license does not apply to any document created | |||
| using the Font Software. | |||
| TERMINATION | |||
| This license becomes null and void if any of the above conditions are | |||
| not met. | |||
| DISCLAIMER | |||
| THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |||
| EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF | |||
| MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT | |||
| OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE | |||
| COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, | |||
| INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL | |||
| DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | |||
| FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM | |||
| OTHER DEALINGS IN THE FONT SOFTWARE. | |||
| @@ -0,0 +1,92 @@ | |||
| #include "Template.hpp" | |||
| namespace rack_plugin_PG_Instruments { | |||
| #define BUFFER_SIZE 65536 * 2 | |||
| #define BUFFER_MASK (BUFFER_SIZE - 1) | |||
| struct PGEcho : Module | |||
| { | |||
| enum ParamIds | |||
| { | |||
| TIME_PARAM, | |||
| FEEDBACK_PARAM, | |||
| NUM_PARAMS | |||
| }; | |||
| enum InputIds | |||
| { | |||
| INPUT, | |||
| NUM_INPUTS | |||
| }; | |||
| enum OutputIds | |||
| { | |||
| OUTPUT, | |||
| NUM_OUTPUTS | |||
| }; | |||
| int reader; | |||
| int writer; | |||
| int offset; | |||
| float buffer[BUFFER_SIZE]; | |||
| PGEcho() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, 0) | |||
| { | |||
| reader = 0; | |||
| offset = BUFFER_SIZE >> 1; | |||
| writer = offset; | |||
| for(int i = 0; i < BUFFER_SIZE; i++) | |||
| buffer[i] = 0.0f; | |||
| } | |||
| void step() override | |||
| { | |||
| int echoOffset = (int)(params[TIME_PARAM].value * BUFFER_SIZE); | |||
| if (echoOffset != offset) | |||
| { | |||
| offset = echoOffset; | |||
| writer = (reader - offset) & BUFFER_MASK; | |||
| } | |||
| float input = inputs[INPUT].value; | |||
| outputs[OUTPUT].value = input + buffer[reader]; | |||
| buffer[writer] = input + buffer[writer] * params[FEEDBACK_PARAM].value; | |||
| reader++; | |||
| writer++; | |||
| reader &= BUFFER_MASK; | |||
| writer &= BUFFER_MASK; | |||
| } | |||
| }; | |||
| struct PGEchoWidget : ModuleWidget | |||
| { | |||
| PGEchoWidget(PGEcho *module) : ModuleWidget(module) | |||
| { | |||
| setPanel(SVG::load(assetPlugin(plugin, "res/PGEcho.svg"))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(15, 0))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 0))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(15, 365))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 365))); | |||
| addInput(Port::create<PJ301MPort>(Vec(30, 100), Port::INPUT, module, PGEcho::INPUT)); | |||
| addParam(ParamWidget::create<RoundBlackKnob>(Vec(70, 100), module, PGEcho::TIME_PARAM, 0.0f, 1.0f, 0.5f)); | |||
| addParam(ParamWidget::create<RoundBlackKnob>(Vec(110, 100), module, PGEcho::FEEDBACK_PARAM, 0.0f, 1.0f, 0.5f)); | |||
| addOutput(Port::create<PJ301MPort>(Vec(150, 100), Port::OUTPUT, module, PGEcho::OUTPUT)); | |||
| } | |||
| }; | |||
| } // namespace rack_plugin_PG_Instruments | |||
| using namespace rack_plugin_PG_Instruments; | |||
| RACK_PLUGIN_MODEL_INIT(PG_Instruments, PGEcho) { | |||
| Model *modelPGEcho = Model::create<PGEcho, PGEchoWidget>("PG-Instruments", "PGEcho", "PG Echo", DELAY_TAG); | |||
| return modelPGEcho; | |||
| } | |||
| @@ -0,0 +1,96 @@ | |||
| #include "Template.hpp" | |||
| namespace rack_plugin_PG_Instruments { | |||
| #define NUM_PANNERS 8 | |||
| #define LEFT_MARGIN 20 | |||
| #define TOP_MARGIN 60 | |||
| #define SPACING 36 | |||
| struct PGOctPanner : Module | |||
| { | |||
| enum ParamIds | |||
| { | |||
| ENUMS(LEVEL_PARAM, NUM_PANNERS), | |||
| ENUMS(PAN_PARAM, NUM_PANNERS), | |||
| NUM_PARAMS | |||
| }; | |||
| enum InputIds | |||
| { | |||
| ENUMS(INPUT, NUM_PANNERS), | |||
| NUM_INPUTS | |||
| }; | |||
| enum OutputIds | |||
| { | |||
| LEFT_OUTPUT, | |||
| RIGHT_OUTPUT, | |||
| NUM_OUTPUTS | |||
| }; | |||
| PGOctPanner() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, 0) | |||
| { | |||
| } | |||
| void step() override | |||
| { | |||
| float left = 0.0f; | |||
| float right = 0.0f; | |||
| for(int i = 0; i < NUM_PANNERS; i++) | |||
| { | |||
| float input = inputs[INPUT + i].value; | |||
| float panning = params[PAN_PARAM + i].value; | |||
| float level = params[LEVEL_PARAM + i].value; | |||
| float l, r; | |||
| pan(input, panning, level, l, r); | |||
| left += l; | |||
| right += r; | |||
| } | |||
| outputs[LEFT_OUTPUT].value = left; | |||
| outputs[RIGHT_OUTPUT].value = right; | |||
| } | |||
| void pan(float input, float panning, float level, float &left, float &right) | |||
| { | |||
| left = cosf(panning * M_PI / 2.0f) * input * level; | |||
| right = sinf(panning * M_PI / 2.0f) * input * level; | |||
| } | |||
| }; | |||
| struct PGOctPannerWidget : ModuleWidget | |||
| { | |||
| PGOctPannerWidget(PGOctPanner *module) : ModuleWidget(module) | |||
| { | |||
| setPanel(SVG::load(assetPlugin(plugin, "res/PGOctPanner.svg"))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(15, 0))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 0))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(15, 365))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 365))); | |||
| for(int i = 0; i < NUM_PANNERS; i++) | |||
| { | |||
| addInput(Port::create<PJ301MPort>(Vec(LEFT_MARGIN, TOP_MARGIN + SPACING * i), Port::INPUT, module, PGOctPanner::INPUT + i)); | |||
| addParam(ParamWidget::create<RoundBlackKnob>(Vec(LEFT_MARGIN + 40, TOP_MARGIN + SPACING * i), module, PGOctPanner::PAN_PARAM + i, 0.0f, 1.0, 0.5f)); | |||
| addParam(ParamWidget::create<RoundBlackKnob>(Vec(LEFT_MARGIN + 80, TOP_MARGIN + SPACING * i), module, PGOctPanner::LEVEL_PARAM + i, 0.0f, 1.0f, 0.7f)); | |||
| } | |||
| addOutput(Port::create<PJ301MPort>(Vec(LEFT_MARGIN + 120, TOP_MARGIN + SPACING), Port::OUTPUT, module, PGOctPanner::LEFT_OUTPUT)); | |||
| addOutput(Port::create<PJ301MPort>(Vec(LEFT_MARGIN + 120, TOP_MARGIN + SPACING * 2), Port::OUTPUT, module, PGOctPanner::RIGHT_OUTPUT)); | |||
| } | |||
| }; | |||
| } // namespace rack_plugin_PG_Instruments | |||
| using namespace rack_plugin_PG_Instruments; | |||
| RACK_PLUGIN_MODEL_INIT(PG_Instruments, PGOctPanner) { | |||
| Model *modelPGOctPanner = Model::create<PGOctPanner, PGOctPannerWidget>("PG-Instruments", "PGOctPanner", "PG Oct Panner", ATTENUATOR_TAG); | |||
| return modelPGOctPanner; | |||
| } | |||
| @@ -0,0 +1,92 @@ | |||
| #include "Template.hpp" | |||
| namespace rack_plugin_PG_Instruments { | |||
| struct PGPanner : Module | |||
| { | |||
| enum ParamIds | |||
| { | |||
| PAN_PARAM, | |||
| NUM_PARAMS | |||
| }; | |||
| enum InputIds | |||
| { | |||
| INPUT, | |||
| PAN_INPUT, | |||
| NUM_INPUTS | |||
| }; | |||
| enum OutputIds | |||
| { | |||
| LEFT_OUTPUT, | |||
| RIGHT_OUTPUT, | |||
| NUM_OUTPUTS | |||
| }; | |||
| enum LightIds | |||
| { | |||
| RUNNING_LIGHT, | |||
| NUM_LIGHTS | |||
| }; | |||
| float panning = 0.5f; | |||
| PGPanner() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) | |||
| { | |||
| onReset(); | |||
| } | |||
| void onReset() override | |||
| { | |||
| } | |||
| void onRandomize() override | |||
| { | |||
| } | |||
| void step() override | |||
| { | |||
| panning = params[PAN_PARAM].value; | |||
| float mono = inputs[INPUT].value; | |||
| float panInput = inputs[PAN_INPUT].value; | |||
| float pan = panning + panInput; | |||
| float leftGain = cosf(pan * M_PI / 2.0f) * mono; | |||
| float rightGain = sinf(pan * M_PI / 2.0f) * mono; | |||
| outputs[LEFT_OUTPUT].value = leftGain; | |||
| outputs[RIGHT_OUTPUT].value = rightGain; | |||
| } | |||
| }; | |||
| struct PGPannerWidget : ModuleWidget | |||
| { | |||
| PGPannerWidget(PGPanner *module) : ModuleWidget(module) | |||
| { | |||
| setPanel(SVG::load(assetPlugin(plugin, "res/PGPanner.svg"))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(15, 0))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 0))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(15, 365))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 365))); | |||
| addParam(ParamWidget::create<RoundLargeBlackKnob>(Vec(20, 40), module, PGPanner::PAN_PARAM, 0.0f, 1.0, 0.5f)); | |||
| addInput(Port::create<PJ301MPort>(Vec(26, 100), Port::INPUT, module, PGPanner::INPUT)); | |||
| addInput(Port::create<PJ301MPort>(Vec(26, 160), Port::INPUT, module, PGPanner::PAN_INPUT)); | |||
| addOutput(Port::create<PJ301MPort>(Vec(12, 220), Port::OUTPUT, module, PGPanner::LEFT_OUTPUT)); | |||
| addOutput(Port::create<PJ301MPort>(Vec(42, 220), Port::OUTPUT, module, PGPanner::RIGHT_OUTPUT)); | |||
| } | |||
| }; | |||
| } // namespace rack_plugin_PG_Instruments | |||
| using namespace rack_plugin_PG_Instruments; | |||
| RACK_PLUGIN_MODEL_INIT(PG_Instruments, PGPanner) { | |||
| Model *modelPGPanner = Model::create<PGPanner, PGPannerWidget>("PG-Instruments", "PGPanner", "PG Panner", ATTENUATOR_TAG); | |||
| return modelPGPanner; | |||
| } | |||
| @@ -0,0 +1,98 @@ | |||
| #include "Template.hpp" | |||
| namespace rack_plugin_PG_Instruments { | |||
| #define NUM_PANNERS 4 | |||
| #define LEFT_MARGIN 20 | |||
| #define TOP_MARGIN 100 | |||
| #define SPACING 36 | |||
| struct PGQuadPanner : Module | |||
| { | |||
| enum ParamIds | |||
| { | |||
| ENUMS(LEVEL_PARAM, NUM_PANNERS), | |||
| ENUMS(PAN_PARAM, NUM_PANNERS), | |||
| NUM_PARAMS | |||
| }; | |||
| enum InputIds | |||
| { | |||
| ENUMS(INPUT, NUM_PANNERS), | |||
| NUM_INPUTS | |||
| }; | |||
| enum OutputIds | |||
| { | |||
| LEFT_OUTPUT, | |||
| RIGHT_OUTPUT, | |||
| NUM_OUTPUTS | |||
| }; | |||
| //float panning[NUM_PANNERS] = { 0.5f, 0.5f, 0.5f, 0.5f }; | |||
| PGQuadPanner() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, 0) | |||
| { | |||
| } | |||
| void step() override | |||
| { | |||
| float left = 0.0f; | |||
| float right = 0.0f; | |||
| for(int i = 0; i < NUM_PANNERS; i++) | |||
| { | |||
| float input = inputs[INPUT + i].value; | |||
| float panning = params[PAN_PARAM + i].value; | |||
| float level = params[LEVEL_PARAM + i].value; | |||
| float l, r; | |||
| pan(input, panning, level, l, r); | |||
| left += l; | |||
| right += r; | |||
| } | |||
| outputs[LEFT_OUTPUT].value = left; | |||
| outputs[RIGHT_OUTPUT].value = right; | |||
| } | |||
| void pan(float input, float panning, float level, float &left, float &right) | |||
| { | |||
| left = cosf(panning * M_PI / 2.0f) * input * level; | |||
| right = sinf(panning * M_PI / 2.0f) * input * level; | |||
| } | |||
| }; | |||
| struct PGQuadPannerWidget : ModuleWidget | |||
| { | |||
| PGQuadPannerWidget(PGQuadPanner *module) : ModuleWidget(module) | |||
| { | |||
| setPanel(SVG::load(assetPlugin(plugin, "res/PGQuadPanner.svg"))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(15, 0))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 0))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(15, 365))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 365))); | |||
| for(int i = 0; i < NUM_PANNERS; i++) | |||
| { | |||
| addInput(Port::create<PJ301MPort>(Vec(LEFT_MARGIN, TOP_MARGIN + SPACING * i), Port::INPUT, module, PGQuadPanner::INPUT + i)); | |||
| addParam(ParamWidget::create<RoundBlackKnob>(Vec(LEFT_MARGIN + 40, TOP_MARGIN + SPACING * i), module, PGQuadPanner::PAN_PARAM + i, 0.0f, 1.0, 0.5f)); | |||
| addParam(ParamWidget::create<RoundBlackKnob>(Vec(LEFT_MARGIN + 80, TOP_MARGIN + SPACING * i), module, PGQuadPanner::LEVEL_PARAM + i, 0.0f, 1.0f, 0.7f)); | |||
| } | |||
| addOutput(Port::create<PJ301MPort>(Vec(LEFT_MARGIN + 120, TOP_MARGIN + SPACING), Port::OUTPUT, module, PGQuadPanner::LEFT_OUTPUT)); | |||
| addOutput(Port::create<PJ301MPort>(Vec(LEFT_MARGIN + 120, TOP_MARGIN + SPACING * 2), Port::OUTPUT, module, PGQuadPanner::RIGHT_OUTPUT)); | |||
| } | |||
| }; | |||
| } // namespace rack_plugin_PG_Instruments | |||
| using namespace rack_plugin_PG_Instruments; | |||
| RACK_PLUGIN_MODEL_INIT(PG_Instruments, PGQuadPanner) { | |||
| Model *modelPGQuadPanner = Model::create<PGQuadPanner, PGQuadPannerWidget>("PG-Instruments", "PGQuadPanner", "PG Quad Panner", ATTENUATOR_TAG); | |||
| return modelPGQuadPanner; | |||
| } | |||
| @@ -0,0 +1,253 @@ | |||
| #include "dsp/digital.hpp" | |||
| #include "Template.hpp" | |||
| namespace rack_plugin_PG_Instruments { | |||
| #define NUM_SEQ_STEPS 16 | |||
| struct PGSEQ3 : Module | |||
| { | |||
| enum ParamIds | |||
| { | |||
| CLOCK_PARAM, | |||
| RUN_PARAM, | |||
| RESET_PARAM, | |||
| STEPS_PARAM, | |||
| ENUMS(ROW1_PARAM, NUM_SEQ_STEPS), | |||
| ENUMS(ROW2_PARAM, NUM_SEQ_STEPS), | |||
| ENUMS(ROW3_PARAM, NUM_SEQ_STEPS), | |||
| ENUMS(GATE_PARAM, NUM_SEQ_STEPS), | |||
| NUM_PARAMS | |||
| }; | |||
| enum InputIds | |||
| { | |||
| CLOCK_INPUT, | |||
| EXT_CLOCK_INPUT, | |||
| RESET_INPUT, | |||
| STEPS_INPUT, | |||
| NUM_INPUTS | |||
| }; | |||
| enum OutputIds | |||
| { | |||
| GATES_OUTPUT, | |||
| ROW1_OUTPUT, | |||
| ROW2_OUTPUT, | |||
| ROW3_OUTPUT, | |||
| ENUMS(GATE_OUTPUT, NUM_SEQ_STEPS), | |||
| NUM_OUTPUTS | |||
| }; | |||
| enum LightIds | |||
| { | |||
| RUNNING_LIGHT, | |||
| RESET_LIGHT, | |||
| GATES_LIGHT, | |||
| ENUMS(ROW_LIGHTS, 3), | |||
| ENUMS(GATE_LIGHTS, NUM_SEQ_STEPS), | |||
| NUM_LIGHTS | |||
| }; | |||
| bool running = true; | |||
| SchmittTrigger clockTrigger; | |||
| SchmittTrigger runningTrigger; | |||
| SchmittTrigger resetTrigger; | |||
| SchmittTrigger gateTriggers[NUM_SEQ_STEPS]; | |||
| /** Phase of internal LFO */ | |||
| float phase = 0.f; | |||
| int index = 0; | |||
| bool gates[NUM_SEQ_STEPS] = {}; | |||
| PGSEQ3() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) | |||
| { | |||
| onReset(); | |||
| } | |||
| void onReset() override | |||
| { | |||
| for (int i = 0; i < NUM_SEQ_STEPS; i++) | |||
| { | |||
| gates[i] = true; | |||
| } | |||
| } | |||
| void onRandomize() override | |||
| { | |||
| for (int i = 0; i < NUM_SEQ_STEPS; i++) | |||
| { | |||
| gates[i] = (randomUniform() > 0.5f); | |||
| } | |||
| } | |||
| json_t *toJson() override | |||
| { | |||
| json_t *rootJ = json_object(); | |||
| // running | |||
| json_object_set_new(rootJ, "running", json_boolean(running)); | |||
| // gates | |||
| json_t *gatesJ = json_array(); | |||
| for (int i = 0; i < NUM_SEQ_STEPS; i++) | |||
| { | |||
| json_array_insert_new(gatesJ, i, json_integer((int) gates[i])); | |||
| } | |||
| json_object_set_new(rootJ, "gates", gatesJ); | |||
| return rootJ; | |||
| } | |||
| void fromJson(json_t *rootJ) override | |||
| { | |||
| // running | |||
| json_t *runningJ = json_object_get(rootJ, "running"); | |||
| if (runningJ) | |||
| running = json_is_true(runningJ); | |||
| // gates | |||
| json_t *gatesJ = json_object_get(rootJ, "gates"); | |||
| if (gatesJ) | |||
| { | |||
| for (int i = 0; i < NUM_SEQ_STEPS; i++) | |||
| { | |||
| json_t *gateJ = json_array_get(gatesJ, i); | |||
| if (gateJ) | |||
| gates[i] = !!json_integer_value(gateJ); | |||
| } | |||
| } | |||
| } | |||
| void setIndex(int index) | |||
| { | |||
| int numSteps = (int) clamp(roundf(params[STEPS_PARAM].value + inputs[STEPS_INPUT].value), 1.0f, (float)NUM_SEQ_STEPS); | |||
| phase = 0.f; | |||
| this->index = index; | |||
| if (this->index >= numSteps) | |||
| this->index = 0; | |||
| } | |||
| void step() override | |||
| { | |||
| // Run | |||
| if (runningTrigger.process(params[RUN_PARAM].value)) | |||
| { | |||
| running = !running; | |||
| } | |||
| bool gateIn = false; | |||
| if (running) | |||
| { | |||
| if (inputs[EXT_CLOCK_INPUT].active) | |||
| { | |||
| // External clock | |||
| if (clockTrigger.process(inputs[EXT_CLOCK_INPUT].value)) | |||
| { | |||
| setIndex(index + 1); | |||
| } | |||
| gateIn = clockTrigger.isHigh(); | |||
| } | |||
| else | |||
| { | |||
| // Internal clock | |||
| float clockTime = powf(2.0f, params[CLOCK_PARAM].value + inputs[CLOCK_INPUT].value); | |||
| phase += clockTime * engineGetSampleTime(); | |||
| if (phase >= 1.0f) | |||
| { | |||
| setIndex(index + 1); | |||
| } | |||
| gateIn = (phase < 0.5f); | |||
| } | |||
| } | |||
| // Reset | |||
| if (resetTrigger.process(params[RESET_PARAM].value + inputs[RESET_INPUT].value)) | |||
| { | |||
| setIndex(0); | |||
| } | |||
| // Gate buttons | |||
| for (int i = 0; i < NUM_SEQ_STEPS; i++) | |||
| { | |||
| if (gateTriggers[i].process(params[GATE_PARAM + i].value)) | |||
| { | |||
| gates[i] = !gates[i]; | |||
| } | |||
| outputs[GATE_OUTPUT + i].value = (running && gateIn && i == index && gates[i]) ? 10.0f : 0.0f; | |||
| lights[GATE_LIGHTS + i].setBrightnessSmooth((gateIn && i == index) ? (gates[i] ? 1.f : 0.33) : (gates[i] ? 0.66 : 0.0)); | |||
| } | |||
| // Outputs | |||
| outputs[ROW1_OUTPUT].value = params[ROW1_PARAM + index].value; | |||
| outputs[ROW2_OUTPUT].value = params[ROW2_PARAM + index].value; | |||
| outputs[ROW3_OUTPUT].value = params[ROW3_PARAM + index].value; | |||
| outputs[GATES_OUTPUT].value = (gateIn && gates[index]) ? 10.0f : 0.0f; | |||
| lights[RUNNING_LIGHT].value = (running); | |||
| lights[RESET_LIGHT].setBrightnessSmooth(resetTrigger.isHigh()); | |||
| lights[GATES_LIGHT].setBrightnessSmooth(gateIn); | |||
| lights[ROW_LIGHTS].value = outputs[ROW1_OUTPUT].value / 10.0f; | |||
| lights[ROW_LIGHTS + 1].value = outputs[ROW2_OUTPUT].value / 10.0f; | |||
| lights[ROW_LIGHTS + 2].value = outputs[ROW3_OUTPUT].value / 10.0f; | |||
| } | |||
| }; | |||
| struct PGSEQ3Widget : ModuleWidget | |||
| { | |||
| PGSEQ3Widget(PGSEQ3 *module) : ModuleWidget(module) | |||
| { | |||
| setPanel(SVG::load(assetPlugin(plugin, "res/PGSEQ3.svg"))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(15, 0))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 0))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(15, 365))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 365))); | |||
| addParam(ParamWidget::create<RoundBlackKnob>(Vec(18, 56), module, PGSEQ3::CLOCK_PARAM, -2.0f, 6.0f, 2.0f)); | |||
| addParam(ParamWidget::create<LEDButton>(Vec(60, 61-1), module, PGSEQ3::RUN_PARAM, 0.0f, 1.0f, 0.0f)); | |||
| addChild(ModuleLightWidget::create<MediumLight<GreenLight>>(Vec(64.4f, 64.4f), module, PGSEQ3::RUNNING_LIGHT)); | |||
| addParam(ParamWidget::create<LEDButton>(Vec(99, 61-1), module, PGSEQ3::RESET_PARAM, 0.0f, 1.0f, 0.0f)); | |||
| addChild(ModuleLightWidget::create<MediumLight<GreenLight>>(Vec(103.4f, 64.4f), module, PGSEQ3::RESET_LIGHT)); | |||
| addParam(ParamWidget::create<RoundBlackSnapKnob>(Vec(132, 56), module, PGSEQ3::STEPS_PARAM, 1.0f, (float)NUM_SEQ_STEPS, (float)NUM_SEQ_STEPS)); | |||
| addChild(ModuleLightWidget::create<MediumLight<GreenLight>>(Vec(179.4f, 64.4f), module, PGSEQ3::GATES_LIGHT)); | |||
| addChild(ModuleLightWidget::create<MediumLight<GreenLight>>(Vec(218.4f, 64.4f), module, PGSEQ3::ROW_LIGHTS)); | |||
| addChild(ModuleLightWidget::create<MediumLight<GreenLight>>(Vec(256.4f, 64.4f), module, PGSEQ3::ROW_LIGHTS + 1)); | |||
| addChild(ModuleLightWidget::create<MediumLight<GreenLight>>(Vec(295.4f, 64.4f), module, PGSEQ3::ROW_LIGHTS + 2)); | |||
| static const float portX[NUM_SEQ_STEPS] = | |||
| { | |||
| 20, 58, 96, 135, | |||
| 173, 212, 250, 288, | |||
| 327, 366, 404, 442, | |||
| 480, 519, 557, 596 | |||
| }; | |||
| addInput(Port::create<PJ301MPort>(Vec(portX[0]-1, 98), Port::INPUT, module, PGSEQ3::CLOCK_INPUT)); | |||
| addInput(Port::create<PJ301MPort>(Vec(portX[1]-1, 98), Port::INPUT, module, PGSEQ3::EXT_CLOCK_INPUT)); | |||
| addInput(Port::create<PJ301MPort>(Vec(portX[2]-1, 98), Port::INPUT, module, PGSEQ3::RESET_INPUT)); | |||
| addInput(Port::create<PJ301MPort>(Vec(portX[3]-1, 98), Port::INPUT, module, PGSEQ3::STEPS_INPUT)); | |||
| addOutput(Port::create<PJ301MPort>(Vec(portX[4]-1, 98), Port::OUTPUT, module, PGSEQ3::GATES_OUTPUT)); | |||
| addOutput(Port::create<PJ301MPort>(Vec(portX[5]-1, 98), Port::OUTPUT, module, PGSEQ3::ROW1_OUTPUT)); | |||
| addOutput(Port::create<PJ301MPort>(Vec(portX[6]-1, 98), Port::OUTPUT, module, PGSEQ3::ROW2_OUTPUT)); | |||
| addOutput(Port::create<PJ301MPort>(Vec(portX[7]-1, 98), Port::OUTPUT, module, PGSEQ3::ROW3_OUTPUT)); | |||
| for (int i = 0; i < NUM_SEQ_STEPS; i++) | |||
| { | |||
| addParam(ParamWidget::create<RoundBlackKnob>(Vec(portX[i]-2, 157), module, PGSEQ3::ROW1_PARAM + i, 0.0f, 10.0f, 1.0f)); | |||
| addParam(ParamWidget::create<RoundBlackKnob>(Vec(portX[i]-2, 198), module, PGSEQ3::ROW2_PARAM + i, 0.0f, 10.0f, 0.0f)); | |||
| addParam(ParamWidget::create<RoundBlackKnob>(Vec(portX[i]-2, 240), module, PGSEQ3::ROW3_PARAM + i, 0.0f, 10.0f, 0.0f)); | |||
| addParam(ParamWidget::create<LEDButton>(Vec(portX[i]+2, 278-1), module, PGSEQ3::GATE_PARAM + i, 0.0f, 1.0f, 0.0f)); | |||
| addChild(ModuleLightWidget::create<MediumLight<GreenLight>>(Vec(portX[i]+6.4f, 281.4f), module, PGSEQ3::GATE_LIGHTS + i)); | |||
| addOutput(Port::create<PJ301MPort>(Vec(portX[i]-1, 307), Port::OUTPUT, module, PGSEQ3::GATE_OUTPUT + i)); | |||
| } | |||
| } | |||
| }; | |||
| } // namespace rack_plugin_PG_Instruments | |||
| using namespace rack_plugin_PG_Instruments; | |||
| RACK_PLUGIN_MODEL_INIT(PG_Instruments, PGSEQ3) { | |||
| Model *modelPGSEQ3 = Model::create<PGSEQ3, PGSEQ3Widget>("PG-Instruments", "PGSEQ3", "PG-SEQ-3", SEQUENCER_TAG); | |||
| return modelPGSEQ3; | |||
| } | |||
| @@ -0,0 +1,119 @@ | |||
| #include "Template.hpp" | |||
| namespace rack_plugin_PG_Instruments { | |||
| #define HALF_BUFFER_SIZE 65536 | |||
| #define BUFFER_SIZE HALF_BUFFER_SIZE * 2 | |||
| #define BUFFER_MASK (BUFFER_SIZE - 1) | |||
| struct PGStereoEcho : Module | |||
| { | |||
| enum ParamIds | |||
| { | |||
| TIME_PARAM, | |||
| OFFSET_PARAM, | |||
| FEEDBACK_PARAM, | |||
| NUM_PARAMS | |||
| }; | |||
| enum InputIds | |||
| { | |||
| LEFT_INPUT, | |||
| RIGHT_INPUT, | |||
| NUM_INPUTS | |||
| }; | |||
| enum OutputIds | |||
| { | |||
| LEFT_OUTPUT, | |||
| RIGHT_OUTPUT, | |||
| NUM_OUTPUTS | |||
| }; | |||
| int reader; | |||
| int leftWriter; | |||
| int rightWriter; | |||
| int offset; | |||
| int rightOffset; | |||
| float leftBuffer[BUFFER_SIZE]; | |||
| float rightBuffer[BUFFER_SIZE]; | |||
| PGStereoEcho() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, 0) | |||
| { | |||
| reader = 0; | |||
| offset = BUFFER_SIZE >> 1; | |||
| rightOffset = 0; | |||
| leftWriter = offset; | |||
| rightWriter = offset; | |||
| for(int i = 0; i < BUFFER_SIZE; i++) | |||
| { | |||
| leftBuffer[i] = 0.0f; | |||
| rightBuffer[i] = 0.0f; | |||
| } | |||
| } | |||
| void step() override | |||
| { | |||
| int timeParam = (int)(params[TIME_PARAM].value * BUFFER_SIZE); | |||
| int offsetParam = (int)(params[OFFSET_PARAM].value * HALF_BUFFER_SIZE); | |||
| if (timeParam != offset || offsetParam != rightOffset) | |||
| { | |||
| offset = timeParam; | |||
| rightOffset = offsetParam; | |||
| leftWriter = (reader - offset) & BUFFER_MASK; | |||
| rightWriter = (reader - offset - rightOffset) & BUFFER_MASK; | |||
| } | |||
| float input; | |||
| input = inputs[LEFT_INPUT].value; | |||
| outputs[LEFT_OUTPUT].value = input + leftBuffer[reader]; | |||
| leftBuffer[leftWriter] = input + leftBuffer[leftWriter] * params[FEEDBACK_PARAM].value; | |||
| input = inputs[RIGHT_INPUT].value; | |||
| outputs[RIGHT_OUTPUT].value = input + rightBuffer[reader]; | |||
| rightBuffer[rightWriter] = input + rightBuffer[rightWriter] * params[FEEDBACK_PARAM].value; | |||
| reader++; | |||
| leftWriter++; | |||
| rightWriter++; | |||
| reader &= BUFFER_MASK; | |||
| leftWriter &= BUFFER_MASK; | |||
| rightWriter &= BUFFER_MASK; | |||
| } | |||
| }; | |||
| struct PGStereoEchoWidget : ModuleWidget | |||
| { | |||
| PGStereoEchoWidget(PGStereoEcho *module) : ModuleWidget(module) | |||
| { | |||
| setPanel(SVG::load(assetPlugin(plugin, "res/PGStereoEcho.svg"))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(15, 0))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 0))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(15, 365))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 365))); | |||
| addInput(Port::create<PJ301MPort>(Vec(30, 100), Port::INPUT, module, PGStereoEcho::LEFT_INPUT)); | |||
| addInput(Port::create<PJ301MPort>(Vec(30, 140), Port::INPUT, module, PGStereoEcho::RIGHT_INPUT)); | |||
| addParam(ParamWidget::create<RoundBlackKnob>(Vec(70, 100), module, PGStereoEcho::TIME_PARAM, 0.0f, 1.0f, 0.5f)); | |||
| addParam(ParamWidget::create<RoundBlackKnob>(Vec(110, 100), module, PGStereoEcho::FEEDBACK_PARAM, 0.0f, 1.0f, 0.5f)); | |||
| addParam(ParamWidget::create<RoundBlackKnob>(Vec(70, 140), module, PGStereoEcho::OFFSET_PARAM, 0.0f, 1.0f, 0.0f)); | |||
| addOutput(Port::create<PJ301MPort>(Vec(150, 100), Port::OUTPUT, module, PGStereoEcho::LEFT_OUTPUT)); | |||
| addOutput(Port::create<PJ301MPort>(Vec(150, 140), Port::OUTPUT, module, PGStereoEcho::RIGHT_OUTPUT)); | |||
| } | |||
| }; | |||
| } // namespace rack_plugin_PG_Instruments | |||
| using namespace rack_plugin_PG_Instruments; | |||
| RACK_PLUGIN_MODEL_INIT(PG_Instruments, PGStereoEcho) { | |||
| Model *modelPGStereoEcho = Model::create<PGStereoEcho, PGStereoEchoWidget>("PG-Instruments", "PGStereoEcho", "PG Stereo Echo", DELAY_TAG); | |||
| return modelPGStereoEcho; | |||
| } | |||
| @@ -0,0 +1,108 @@ | |||
| #include "Template.hpp" | |||
| namespace rack_plugin_PG_Instruments { | |||
| #define HALF_BUFFER_SIZE 65536 | |||
| #define BUFFER_SIZE HALF_BUFFER_SIZE * 2 | |||
| #define BUFFER_MASK (BUFFER_SIZE - 1) | |||
| struct PGStereoPingPongEcho : Module | |||
| { | |||
| enum ParamIds | |||
| { | |||
| TIME_PARAM, | |||
| FEEDBACK_PARAM, | |||
| NUM_PARAMS | |||
| }; | |||
| enum InputIds | |||
| { | |||
| INPUT, | |||
| NUM_INPUTS | |||
| }; | |||
| enum OutputIds | |||
| { | |||
| LEFT_OUTPUT, | |||
| RIGHT_OUTPUT, | |||
| NUM_OUTPUTS | |||
| }; | |||
| int reader; | |||
| int writer; | |||
| int writer2; | |||
| int offset; | |||
| float buffer[BUFFER_SIZE]; | |||
| PGStereoPingPongEcho() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, 0) | |||
| { | |||
| reader = 0; | |||
| offset = BUFFER_SIZE >> 1; | |||
| writer = offset; | |||
| writer2 = BUFFER_SIZE - 1; | |||
| for(int i = 0; i < BUFFER_SIZE; i++) | |||
| { | |||
| buffer[i] = 0.0f; | |||
| } | |||
| } | |||
| void step() override | |||
| { | |||
| int timeParam = (int)(params[TIME_PARAM].value * BUFFER_SIZE); | |||
| if (timeParam != offset) | |||
| { | |||
| offset = timeParam; | |||
| writer = (reader - offset) & BUFFER_MASK; | |||
| writer2 = (reader - offset * 2 - 1) & BUFFER_MASK; | |||
| } | |||
| float input; | |||
| input = inputs[INPUT].value; | |||
| outputs[LEFT_OUTPUT].value = input * 0.7f + buffer[reader] + buffer[writer]; | |||
| outputs[RIGHT_OUTPUT].value = input * 0.7f + buffer[reader] + buffer[writer2]; | |||
| buffer[writer] = input + buffer[writer] * params[FEEDBACK_PARAM].value; | |||
| buffer[writer2] = input + buffer[writer2] * params[FEEDBACK_PARAM].value / 2.0f; | |||
| reader++; | |||
| writer++; | |||
| writer2++; | |||
| reader &= BUFFER_MASK; | |||
| writer &= BUFFER_MASK; | |||
| writer2 &= BUFFER_MASK; | |||
| } | |||
| }; | |||
| struct PGStereoPingPongEchoWidget : ModuleWidget | |||
| { | |||
| PGStereoPingPongEchoWidget(PGStereoPingPongEcho *module) : ModuleWidget(module) | |||
| { | |||
| setPanel(SVG::load(assetPlugin(plugin, "res/PGStereoPingPongEcho.svg"))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(15, 0))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 0))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(15, 365))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 365))); | |||
| addInput(Port::create<PJ301MPort>(Vec(30, 100), Port::INPUT, module, PGStereoPingPongEcho::INPUT)); | |||
| addParam(ParamWidget::create<RoundBlackKnob>(Vec(70, 100), module, PGStereoPingPongEcho::TIME_PARAM, 0.0f, 1.0f, 0.5f)); | |||
| addParam(ParamWidget::create<RoundBlackKnob>(Vec(110, 100), module, PGStereoPingPongEcho::FEEDBACK_PARAM, 0.0f, 1.0f, 0.5f)); | |||
| addOutput(Port::create<PJ301MPort>(Vec(150, 100), Port::OUTPUT, module, PGStereoPingPongEcho::LEFT_OUTPUT)); | |||
| addOutput(Port::create<PJ301MPort>(Vec(150, 140), Port::OUTPUT, module, PGStereoPingPongEcho::RIGHT_OUTPUT)); | |||
| } | |||
| }; | |||
| } // namespace rack_plugin_PG_Instruments | |||
| using namespace rack_plugin_PG_Instruments; | |||
| RACK_PLUGIN_MODEL_INIT(PG_Instruments, PGStereoPingPongEcho) { | |||
| Model *modelPGStereoPingPongEcho = Model::create<PGStereoPingPongEcho, PGStereoPingPongEchoWidget>("PG-Instruments", "PGStereoPingPongEcho", "PG Stereo Ping Pong Echo", DELAY_TAG); | |||
| return modelPGStereoPingPongEcho; | |||
| } | |||
| @@ -0,0 +1,130 @@ | |||
| #include "Template.hpp" | |||
| namespace rack_plugin_PG_Instruments { | |||
| struct PGStereoVCF : Module | |||
| { | |||
| enum ParamIds | |||
| { | |||
| FREQUENCY_PARAM, | |||
| RESONANCE_PARAM, | |||
| NUM_PARAMS | |||
| }; | |||
| enum InputIds | |||
| { | |||
| LEFT_INPUT, | |||
| RIGHT_INPUT, | |||
| CUTOFF, | |||
| NUM_INPUTS | |||
| }; | |||
| enum OutputIds | |||
| { | |||
| LEFT_LOWPASS_OUTPUT, | |||
| RIGHT_LOWPASS_OUTPUT, | |||
| LEFT_BANDPASS_OUTPUT, | |||
| RIGHT_BANDPASS_OUTPUT, | |||
| LEFT_HIGHPASS_OUTPUT, | |||
| RIGHT_HIGHPASS_OUTPUT, | |||
| NUM_OUTPUTS | |||
| }; | |||
| float buf0[2]; | |||
| float buf1[2]; | |||
| float buf2[2]; | |||
| float buf3[2]; | |||
| float feedback; | |||
| PGStereoVCF() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, 0) | |||
| { | |||
| for(int i = 0; i < 2; i++) | |||
| buf0[i] = buf1[i] = buf2[i] = buf3[i] = 0.0f; | |||
| } | |||
| void step() override | |||
| { | |||
| calculateFeedback(); | |||
| float calcCutoff = getCalculatedCutoff(); | |||
| for(int i = 0; i < 2; i++) | |||
| { | |||
| float input; | |||
| if (i) | |||
| input = inputs[RIGHT_INPUT].value; | |||
| else | |||
| input = inputs[LEFT_INPUT].value; | |||
| buf0[i] += calcCutoff * (input - buf0[i] + feedback * (buf0[i] - buf1[i])); | |||
| buf1[i] += calcCutoff * (buf0[i] - buf1[i]); | |||
| buf2[i] += calcCutoff * (buf1[i] - buf2[i]); | |||
| buf3[i] += calcCutoff * (buf2[i] - buf3[i]); | |||
| if (i) | |||
| { | |||
| outputs[RIGHT_LOWPASS_OUTPUT].value = buf3[i]; | |||
| outputs[RIGHT_BANDPASS_OUTPUT].value = buf0[i] - buf3[i]; | |||
| outputs[RIGHT_HIGHPASS_OUTPUT].value = inputs[RIGHT_INPUT].value - buf3[i]; | |||
| } | |||
| else | |||
| { | |||
| outputs[LEFT_LOWPASS_OUTPUT].value = buf3[i]; | |||
| outputs[LEFT_BANDPASS_OUTPUT].value = buf0[i] - buf3[i]; | |||
| outputs[LEFT_HIGHPASS_OUTPUT].value = inputs[LEFT_INPUT].value - buf3[i]; | |||
| } | |||
| } | |||
| } | |||
| void calculateFeedback() | |||
| { | |||
| feedback = params[RESONANCE_PARAM].value + params[RESONANCE_PARAM].value / (1.0f - getCalculatedCutoff()); | |||
| } | |||
| float getCalculatedCutoff() | |||
| { | |||
| return fmax(fmin(params[FREQUENCY_PARAM].value + inputs[CUTOFF].value, 0.99f), 0.01f); | |||
| } | |||
| }; | |||
| struct PGStereoVCFWidget : ModuleWidget | |||
| { | |||
| PGStereoVCFWidget(PGStereoVCF *module) : ModuleWidget(module) | |||
| { | |||
| setPanel(SVG::load(assetPlugin(plugin, "res/PGStereoVCF.svg"))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(15, 0))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 0))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(15, 365))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 365))); | |||
| addInput(Port::create<PJ301MPort>(Vec(20, 100), Port::INPUT, module, PGStereoVCF::LEFT_INPUT)); | |||
| addInput(Port::create<PJ301MPort>(Vec(20, 140), Port::INPUT, module, PGStereoVCF::RIGHT_INPUT)); | |||
| addInput(Port::create<PJ301MPort>(Vec(20, 180), Port::INPUT, module, PGStereoVCF::CUTOFF)); | |||
| addParam(ParamWidget::create<RoundBlackKnob>(Vec(50, 100), module, PGStereoVCF::FREQUENCY_PARAM, 0.0f, 1.0f, 0.5f)); | |||
| addParam(ParamWidget::create<RoundBlackKnob>(Vec(90, 100), module, PGStereoVCF::RESONANCE_PARAM, 0.0f, 0.99f, 0.5f)); | |||
| addOutput(Port::create<PJ301MPort>(Vec(130, 100), Port::OUTPUT, module, PGStereoVCF::LEFT_LOWPASS_OUTPUT)); | |||
| addOutput(Port::create<PJ301MPort>(Vec(130, 140), Port::OUTPUT, module, PGStereoVCF::LEFT_BANDPASS_OUTPUT)); | |||
| addOutput(Port::create<PJ301MPort>(Vec(130, 180), Port::OUTPUT, module, PGStereoVCF::LEFT_HIGHPASS_OUTPUT)); | |||
| addOutput(Port::create<PJ301MPort>(Vec(160, 100), Port::OUTPUT, module, PGStereoVCF::RIGHT_LOWPASS_OUTPUT)); | |||
| addOutput(Port::create<PJ301MPort>(Vec(160, 140), Port::OUTPUT, module, PGStereoVCF::RIGHT_BANDPASS_OUTPUT)); | |||
| addOutput(Port::create<PJ301MPort>(Vec(160, 180), Port::OUTPUT, module, PGStereoVCF::RIGHT_HIGHPASS_OUTPUT)); | |||
| } | |||
| }; | |||
| } // namespace rack_plugin_PG_Instruments | |||
| using namespace rack_plugin_PG_Instruments; | |||
| RACK_PLUGIN_MODEL_INIT(PG_Instruments, PGStereoVCF) { | |||
| Model *modelPGStereoVCF = Model::create<PGStereoVCF, PGStereoVCFWidget>("PG-Instruments", "PGStereoVCF", "PG Stereo VCF", ATTENUATOR_TAG); | |||
| return modelPGStereoVCF; | |||
| } | |||
| @@ -0,0 +1,95 @@ | |||
| #include "Template.hpp" | |||
| namespace rack_plugin_PG_Instruments { | |||
| struct PGVCF : Module | |||
| { | |||
| enum ParamIds | |||
| { | |||
| FREQUENCY_PARAM, | |||
| RESONANCE_PARAM, | |||
| NUM_PARAMS | |||
| }; | |||
| enum InputIds | |||
| { | |||
| INPUT, | |||
| CUTOFF, | |||
| NUM_INPUTS | |||
| }; | |||
| enum OutputIds | |||
| { | |||
| LOWPASS_OUTPUT, | |||
| BANDPASS_OUTPUT, | |||
| HIGHPASS_OUTPUT, | |||
| NUM_OUTPUTS | |||
| }; | |||
| float buf0; | |||
| float buf1; | |||
| float buf2; | |||
| float buf3; | |||
| float feedback; | |||
| PGVCF() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, 0) | |||
| { | |||
| buf0 = buf1 = buf2 = buf3 = 0.0f; | |||
| } | |||
| void step() override | |||
| { | |||
| calculateFeedback(); | |||
| float calcCutoff = getCalculatedCutoff(); | |||
| buf0 += calcCutoff * (inputs[INPUT].value - buf0 + feedback * (buf0 - buf1)); | |||
| buf1 += calcCutoff * (buf0 - buf1); | |||
| buf2 += calcCutoff * (buf1 - buf2); | |||
| buf3 += calcCutoff * (buf2 - buf3); | |||
| outputs[LOWPASS_OUTPUT].value = buf3; | |||
| outputs[BANDPASS_OUTPUT].value = buf0 - buf3; | |||
| outputs[HIGHPASS_OUTPUT].value = inputs[INPUT].value - buf3; | |||
| } | |||
| void calculateFeedback() | |||
| { | |||
| feedback = params[RESONANCE_PARAM].value + params[RESONANCE_PARAM].value / (1.0f - getCalculatedCutoff()); | |||
| } | |||
| float getCalculatedCutoff() | |||
| { | |||
| return fmax(fmin(params[FREQUENCY_PARAM].value + inputs[CUTOFF].value, 0.99f), 0.01f); | |||
| } | |||
| }; | |||
| struct PGVCFWidget : ModuleWidget | |||
| { | |||
| PGVCFWidget(PGVCF *module) : ModuleWidget(module) | |||
| { | |||
| setPanel(SVG::load(assetPlugin(plugin, "res/PGVCF.svg"))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(15, 0))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 0))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(15, 365))); | |||
| addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 365))); | |||
| addInput(Port::create<PJ301MPort>(Vec(30, 100), Port::INPUT, module, PGVCF::INPUT)); | |||
| addInput(Port::create<PJ301MPort>(Vec(30, 140), Port::INPUT, module, PGVCF::CUTOFF)); | |||
| addParam(ParamWidget::create<RoundBlackKnob>(Vec(70, 100), module, PGVCF::FREQUENCY_PARAM, 0.0f, 1.0f, 0.5f)); | |||
| addParam(ParamWidget::create<RoundBlackKnob>(Vec(110, 100), module, PGVCF::RESONANCE_PARAM, 0.0f, 0.99f, 0.5f)); | |||
| addOutput(Port::create<PJ301MPort>(Vec(150, 100), Port::OUTPUT, module, PGVCF::LOWPASS_OUTPUT)); | |||
| addOutput(Port::create<PJ301MPort>(Vec(150, 140), Port::OUTPUT, module, PGVCF::BANDPASS_OUTPUT)); | |||
| addOutput(Port::create<PJ301MPort>(Vec(150, 180), Port::OUTPUT, module, PGVCF::HIGHPASS_OUTPUT)); | |||
| } | |||
| }; | |||
| } // namespace rack_plugin_PG_Instruments | |||
| using namespace rack_plugin_PG_Instruments; | |||
| RACK_PLUGIN_MODEL_INIT(PG_Instruments, PGVCF) { | |||
| Model *modelPGVCF = Model::create<PGVCF, PGVCFWidget>("PG-Instruments", "PGVCF", "PG VCF", ATTENUATOR_TAG); | |||
| return modelPGVCF; | |||
| } | |||
| @@ -0,0 +1,32 @@ | |||
| #include "Template.hpp" | |||
| RACK_PLUGIN_MODEL_DECLARE(PG_Instruments, PGSEQ3); | |||
| RACK_PLUGIN_MODEL_DECLARE(PG_Instruments, PGPanner); | |||
| RACK_PLUGIN_MODEL_DECLARE(PG_Instruments, PGQuadPanner); | |||
| RACK_PLUGIN_MODEL_DECLARE(PG_Instruments, PGOctPanner); | |||
| RACK_PLUGIN_MODEL_DECLARE(PG_Instruments, PGVCF); | |||
| RACK_PLUGIN_MODEL_DECLARE(PG_Instruments, PGStereoVCF); | |||
| RACK_PLUGIN_MODEL_DECLARE(PG_Instruments, PGEcho); | |||
| RACK_PLUGIN_MODEL_DECLARE(PG_Instruments, PGStereoEcho); | |||
| RACK_PLUGIN_MODEL_DECLARE(PG_Instruments, PGStereoPingPongEcho); | |||
| RACK_PLUGIN_INIT(PG_Instruments) { | |||
| RACK_PLUGIN_INIT_ID(); | |||
| RACK_PLUGIN_INIT_WEBSITE("https://github.com/imekon/PG-Instruments"); | |||
| RACK_PLUGIN_INIT_MANUAL("https://github.com/imekon/PG-Instruments/README.md"); | |||
| // Add all Models defined throughout the plugin | |||
| RACK_PLUGIN_MODEL_ADD(PG_Instruments, PGSEQ3); | |||
| RACK_PLUGIN_MODEL_ADD(PG_Instruments, PGPanner); | |||
| RACK_PLUGIN_MODEL_ADD(PG_Instruments, PGQuadPanner); | |||
| RACK_PLUGIN_MODEL_ADD(PG_Instruments, PGOctPanner); | |||
| RACK_PLUGIN_MODEL_ADD(PG_Instruments, PGVCF); | |||
| RACK_PLUGIN_MODEL_ADD(PG_Instruments, PGStereoVCF); | |||
| RACK_PLUGIN_MODEL_ADD(PG_Instruments, PGEcho); | |||
| RACK_PLUGIN_MODEL_ADD(PG_Instruments, PGStereoEcho); | |||
| RACK_PLUGIN_MODEL_ADD(PG_Instruments, PGStereoPingPongEcho); | |||
| // Any other plugin initialization may go here. | |||
| // As an alternative, consider lazy-loading assets and lookup tables when your module is created to reduce startup times of Rack. | |||
| } | |||
| @@ -0,0 +1,6 @@ | |||
| #include "rack.hpp" | |||
| using namespace rack; | |||
| // Forward-declare the Plugin, defined in Template.cpp | |||
| #define plugin "PG-Instruments" | |||
| @@ -0,0 +1,3 @@ | |||
| [submodule "eurorack"] | |||
| path = eurorack | |||
| url = https://github.com/AndrewBelt/eurorack | |||
| @@ -0,0 +1,29 @@ | |||
| language: cpp | |||
| cache: | |||
| directories: | |||
| - /tmp/Rack | |||
| before_cache: | |||
| - rm -fr /tmp/Rack/plugins/sdr | |||
| osx_image: xcode9.2 | |||
| os: | |||
| - linux | |||
| - osx | |||
| addons: | |||
| apt: | |||
| sources: | |||
| - ubuntu-toolchain-r-test | |||
| packages: | |||
| - g++-7 | |||
| install: | |||
| - if [ $TRAVIS_OS_NAME == linux ]; then sudo apt-get install git libx11-dev libxrandr-dev libxinerama-dev libxcursor-dev libgl1-mesa-dev libglu1-mesa-dev zlib1g-dev libasound2-dev libgtk2.0-dev unzip cmake3 libudev-dev; fi | |||
| before_script: | |||
| - git clone https://github.com/VCVRack/Rack.git /tmp/Rack || cd /tmp/Rack && git pull | |||
| - cd /tmp/Rack | |||
| - git submodule update --init --recursive | |||
| - if [ $TRAVIS_OS_NAME == linux ]; then export CC=gcc-7 && CXX=g++-7; fi | |||
| - make -j 8 dep > /dev/null | |||
| - make -j 8 | |||
| - rm -rf /tmp/Rack/plugins/sdr || true | |||
| - cp -r $TRAVIS_BUILD_DIR /tmp/Rack/plugins/sdr | |||
| script: | |||
| - cd /tmp/Rack/plugins/sdr && VERSION=0.0.0 make dist | |||
| @@ -0,0 +1,137 @@ | |||
| -- 0.5.4 ---- | |||
| - Cornrows X | |||
| - As complete implementation of Braids / macro oscillator as possible | |||
| - so far not available features in the Audible Instruments version | |||
| have been activated and broken out as controls: | |||
| AD-envelope, bit crusher, scale quantizer, tuning | |||
| - or implemented as menu options: AUTO, VCA, FLAT, Paques | |||
| - old Cornrows has been deactivated for now at the cost of 2HP more (lmk if you want it back) | |||
| - i know Plaits is cooler now but this will get you quite far as stand-alone synth voice | |||
| - Ftagn: No Filter | |||
| - transgressive module for your nihilistic no-input patches at the noise show | |||
| - stereo - neither left nor right channel do anything at all | |||
| - patch example: | |||
| - pair with timing module set to 4'33 and reverb for a modular rendition of John Cage's 4'33 | |||
| - (somebody had to do it) | |||
| - Pulse: Pulse Generator | |||
| - inspired by standard lab pulse generators (minus offset function) | |||
| - main purpose is to convert triggers to gates | |||
| - clock through sends 1ms triggers - clean your clock | |||
| - range selectable (1s / 10s) | |||
| - when clocked, duration/delay are quantized to "musically relevant" intervals | |||
| - Rakes: Stereo Resonator | |||
| - inspired by the Ableton Resonator effect | |||
| - 6 stereo comb filters | |||
| - V/OCT inputs quantized to SEMI tones or FREE | |||
| - FINE detuning works with opposite sign on L/R channels | |||
| - small values produce Haas effect (stereo widening) | |||
| - individual GAINs | |||
| - best used together with a chord generator patched into the V/OCT inputs | |||
| - looking forward to your dub techno tracks | |||
| - Snake | |||
| - implemented persistency for buss | |||
| - cleaned up logic | |||
| - Etagère | |||
| - selectable white panel (to better match cf modular mixer modules) | |||
| - SNS | |||
| - New generative modes: | |||
| - Fibonacci, Random, Linear | |||
| - change Fill to trigger generation of new pattern | |||
| - Turing Machine style output mode | |||
| - steps are interpreted as bits and converted to stepped voltage at the output. | |||
| -- 0.5.3 ---- | |||
| - Parasites skins + libary: | |||
| - access to Parasites firmwares by Matthias Puech https://mqtthiqs.github.io/parasites/ | |||
| - based on Aepelzens Parasites / (P)arable Instruments | |||
| - indicated by more Lovecraftian font and logo to differentiate from original firmwares | |||
| - Smoke (Clouds): Smoke, Espectro, Ritardo, Camilla, Oliverb, Resonestor | |||
| - Splash: Splash, Two Bumps, Two Drunks | |||
| - Mutable Instruments skins | |||
| - rename Humo back to Smoke | |||
| (don't want too many new names - should be ok to use original names for alternative modes / parasites) | |||
| - skins for all modes | |||
| - add back VU meter | |||
| - Annuli | |||
| - add skin for Disastrous Peace easter egg mode | |||
| - Riemann | |||
| - chord generator based on Neo-Riemannian Tonnetz analysis | |||
| - inspired by NE Tonnetz Sequent, Navichord app, o_C Automatonnetz | |||
| (and my incapability to compose / improvise diatonic music) | |||
| - Traversal via perfect fifth (P5/V) per volt and major triad per volt (M3/V) inputs | |||
| - Major/minor, Augmented/diminished chord groups | |||
| - 3 - 7 parts per chord (from standard triads to thirteenth chords) | |||
| - Parts mostly display for now, outputs after last part output root note | |||
| - Switch for suspensions (sus4) close to fifth-axis | |||
| - Transpose rotates within octave | |||
| - Outputs in V/oct | |||
| - Tonic output (T) for tonic drone | |||
| - Voicing inc/decreases octaves to the right/left sequentially by part | |||
| (small settings to the right give chord inversions) | |||
| - Etagère | |||
| - swap LP/HP position | |||
| - update cosmetics | |||
| - Deux Etagères | |||
| - convenience stereo version of Etagère | |||
| - Gnome | |||
| - improved internal gain staging and mixing behavior | |||
| - crossfading between oscillator and sub-oscillator | |||
| - improved range for PWM behavior | |||
| - VCF resonance gain-compensation | |||
| - updated skin cosmetics (closer to original color scheme...) | |||
| - SNS | |||
| - CLK/RST thru added for easier chaining of multiple SNS | |||
| - Snake | |||
| - introduce 16 internal busses 0-F with 10 lines per buss | |||
| - cosmetics, separate 2x5 lines | |||
| - fix muting on unplugging / buss change | |||
| - Falls | |||
| - Attenumixverter, inspired by Fonitronik Cascade | |||
| - empty inputs provide offset voltages | |||
| - empty outputs mix into output below | |||
| - Aux | |||
| - 2 stereo effect send/return loops | |||
| - with cross feedback (same or swapped stereo channels) | |||
| - mute button for input (to listen to those sweet reverb tails) | |||
| - bypass button for fx (in case you went wild with the feedback pots) | |||
| -- 0.5.2 ---- | |||
| - Gnome: complete synth voice based on Fundamental modules | |||
| - Snake: multicore (experimental!) introduces a small delay! | |||
| if in doubt check the difference signal of in and output. | |||
| a particular port is locked by the instance where the cable gets plugged first (green light). | |||
| this signal is then available at all other instances (red light). | |||
| - Humo (standard Clouds): new skins for the alternate modes: Espectro, Ritardo, Camilla | |||
| - Sssh: 4 copies of the noise/S+H section from Kinks, normalized | |||
| - Fuse: fixes to gate/trigger behavior | |||
| - Blank panels: 1HP, 2HP, 4HP, 8HP, 16HP, 42HP - nothing special for now but watch this space | |||
| -- 0.5.1.1 ---- | |||
| @@ -0,0 +1,20 @@ | |||
| Permission is hereby granted, free of charge, to any person obtaining | |||
| a copy of this software and associated documentation files (the | |||
| "Software"), to deal in the Software without restriction, including | |||
| without limitation the rights to use, copy, modify, merge, publish, | |||
| distribute, sublicense, and/or sell copies of the Software, and to | |||
| permit persons to whom the Software is furnished to do so, subject to | |||
| the following conditions: | |||
| The above copyright notice and this permission notice shall be | |||
| included in all copies or substantial portions of the Software. | |||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |||
| EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | |||
| MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | |||
| NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE | |||
| LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION | |||
| OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | |||
| WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |||
| See http://creativecommons.org/licenses/MIT/ for more information. | |||
| @@ -0,0 +1,74 @@ | |||
| SLUG = Southpole | |||
| VERSION = 0.6.0 | |||
| FLAGS += \ | |||
| -DTEST \ | |||
| -I./eurorack \ | |||
| -Wno-unused-local-typedefs | |||
| # SOURCES += $(wildcard src/*.cpp) | |||
| SOURCES += src/Southpole.cpp | |||
| SOURCES += src/DSPUtilities.cpp | |||
| SOURCES += src/VAStateVariableFilter.cpp | |||
| SOURCES += src/Abr.cpp | |||
| SOURCES += src/Balaclava.cpp | |||
| SOURCES += src/Bandana.cpp | |||
| SOURCES += src/Blanks.cpp | |||
| SOURCES += src/Falls.cpp | |||
| SOURCES += src/Ftagn.cpp | |||
| SOURCES += src/Aux_.cpp | |||
| SOURCES += src/But.cpp | |||
| #SOURCES += src/Bytes.cpp | |||
| SOURCES += src/DeuxEtageres.cpp | |||
| SOURCES += src/Etagere.cpp | |||
| SOURCES += src/Fuse.cpp | |||
| SOURCES += src/Gnome.cpp | |||
| SOURCES += src/Piste.cpp | |||
| SOURCES += src/Pulse.cpp | |||
| SOURCES += src/Rakes.cpp | |||
| SOURCES += src/Riemann.cpp | |||
| SOURCES += src/Snake.cpp | |||
| SOURCES += src/Sns.cpp | |||
| SOURCES += src/Sssh.cpp | |||
| SOURCES += src/Wriggle.cpp | |||
| SOURCES += src/Splash.cpp | |||
| SOURCES += eurorack/stmlib/utils/random.cc | |||
| SOURCES += eurorack/stmlib/dsp/atan.cc | |||
| SOURCES += eurorack/stmlib/dsp/units.cc | |||
| SOURCES += eurorack/tides/generator.cc | |||
| SOURCES += eurorack/tides/resources.cc | |||
| #SOURCES += src/Cornrows.cpp | |||
| SOURCES += src/CornrowsX.cpp | |||
| SOURCES += eurorack/braids/macro_oscillator.cc | |||
| SOURCES += eurorack/braids/analog_oscillator.cc | |||
| SOURCES += eurorack/braids/digital_oscillator.cc | |||
| SOURCES += eurorack/braids/resources.cc | |||
| SOURCES += eurorack/braids/quantizer.cc | |||
| SOURCES += src/Annuli.cpp | |||
| SOURCES += eurorack/rings/dsp/fm_voice.cc | |||
| SOURCES += eurorack/rings/dsp/string_synth_part.cc | |||
| SOURCES += eurorack/rings/dsp/string.cc | |||
| SOURCES += eurorack/rings/dsp/resonator.cc | |||
| SOURCES += eurorack/rings/resources.cc | |||
| SOURCES += eurorack/rings/dsp/part.cc | |||
| SOURCES += src/Smoke.cpp | |||
| SOURCES += eurorack/clouds/dsp/correlator.cc | |||
| SOURCES += eurorack/clouds/dsp/granular_processor.cc | |||
| SOURCES += eurorack/clouds/dsp/mu_law.cc | |||
| SOURCES += eurorack/clouds/dsp/pvoc/frame_transformation.cc | |||
| SOURCES += eurorack/clouds/dsp/pvoc/phase_vocoder.cc | |||
| SOURCES += eurorack/clouds/dsp/pvoc/stft.cc | |||
| SOURCES += eurorack/clouds/resources.cc | |||
| # Add files to the ZIP package when running `make dist` | |||
| # The compiled plugin is automatically added. | |||
| DISTRIBUTABLES += $(wildcard LICENSE*) res | |||
| RACK_DIR ?= ../.. | |||
| include $(RACK_DIR)/plugin.mk | |||
| @@ -0,0 +1,205 @@ | |||
| # Southpole VCV Rack Modules 0.6.0 | |||
|  | |||
| A personal collection of modules I've always wanted for my workflow. | |||
| - Some of the modules are simply reskins of the existing Audible Instruments VCV Rack versions of Mutable Instruments eurorack modules. | |||
| - The skins are inspired by hardware micro versions of various MI modules. | |||
| - Some skins are additonal modes of firmware with appropriate labels for knobs and ports to make usage easier. | |||
| - Some skins do not exist yet in hardware. | |||
| - Some modules did not yet exist in VCV Rack versions. | |||
| - Some modules are new. | |||
| - [Mutable Instruments](https://mutable-instruments.net/) | |||
| - [Audible Instruments](https://github.com/VCVRack/AudibleInstruments/) | |||
| - Extra "Southpole Parasites" for parasites firmware based modules are on a separate branch | |||
| ## Building | |||
| Compile Rack from source, following the instructions at https://github.com/VCVRack/Rack. | |||
| After checking out in the `plugins/` directory, get external dependencies with | |||
| git submodule update --init --recursive | |||
| There is a build script | |||
| ./scripts/make_all.sh | |||
| WARNING: Overwrites existing Southpole directories from eg. a regular download, inspect script before use | |||
| ## Modules copied from Audible Instruments | |||
| ### Cornrows X - Macro Oscillator | |||
| - Based on [Braids](https://mutable-instruments.net/modules/braids), [Manual](https://mutable-instruments.net/modules/braids/manual/) | |||
| - Extended as follows | |||
| - As complete implementation of Braids / macro oscillator as possible | |||
| - so far not available features in the Audible Instruments version have been activated and broken out as controls: AD-envelope, bit crusher, scale quantizer, tuning | |||
| - Implemented as menu options: AUTO, VCA, FLAT, Paques | |||
| ### Splash - Tidal Modulator / Lambs - Wavetable Oscillator | |||
| - Based on [Tides](https://mutable-instruments.net/modules/tides), [Manual](https://mutable-instruments.net/modules/tides/manual/) | |||
| - Based on [Sheep](https://mutable-instruments.net/modules/tides/firmware/) (Tides alternative firmware) | |||
| ### Smoke - Texture Synthesizer | |||
| Based on [Clouds](https://mutable-instruments.net/modules/clouds), [Manual](https://mutable-instruments.net/modules/clouds/manual/) | |||
| - Smoke, extra skins for additional modes: Espectro, Ritardo, Camilla | |||
| ### Annuli - Resonator | |||
| - Based on [Rings](https://mutable-instruments.net/modules/rings), [Manual](https://mutable-instruments.net/modules/rings/manual/) | |||
| - extra skin for Disastrous Peace mode | |||
| ### Bandana - Quad VC-polarizer | |||
| - Based on [Blinds](https://mutable-instruments.net/modules/blinds), [Manual](https://mutable-instruments.net/modules/blinds/manual/) | |||
| ### Balaclava - Quad VCA | |||
| - Based on [Veils](https://mutable-instruments.net/modules/veils), [Manual](https://mutable-instruments.net/modules/veils/manual/) | |||
| ## New modules | |||
| ### Aux - 2 stereo effect send/return loops | |||
| - with cross feedback (same or swapped stereo channels) | |||
| - mute button for input (to listen to those sweet reverb tails) | |||
| - bypass button for fx (in case you went wild with the feedback pots) | |||
| ### Abr - Manual A/B Switch | |||
| - Inverse of But, either input A or B goes to output | |||
| - Sums of inputs set to A or B provided | |||
| ### Blanks | |||
| - Nothing special right now, but watch this space | |||
| - 42HP useful if you want to recreate a 84HP row common in hardware | |||
| ### But - Manual A/B Buss | |||
| - Inspired by [DJ Steevio's modular method](https://www.youtube.com/watch?v=x6hJa2lRRgM) | |||
| - Either input A or B go to the output and the A/B busses | |||
| - Two summed identical outputs for A and B buss are provided. | |||
| ### Deux Etagères | |||
| - convenience stereo version of Etagère | |||
| ### Etagère - EQ Filter | |||
| - Inspired by [Shelves](https://mutable-instruments.net/modules/shelves), [Manual](https://mutable-instruments.net/modules/shelves/manual/) | |||
| - Does not fully reproduce all characteristics of Shelves! | |||
| - Biquad filters copied from RJModules Filters | |||
| ### Falls - Attenumixer | |||
| - Attenumixverter, inspired by Fonitronik Cascade | |||
| - empty inputs provide offset voltages | |||
| - empty outputs mix into output below | |||
| - Range switch +/-1 or +/-10 | |||
| ### Ftagn: No Filter | |||
| - transgressive module for your nihilistic no-input patches at the noise show | |||
| - stereo - neither left nor right channel do anything at all | |||
| ### Fuse - Synchronized one-shot triggers | |||
| - Intended to build a "queue next pattern" system like on groove boxes / drum machines | |||
| - Helps fire synchronized events in 4/4 based music if you can't count like me | |||
| - Can be used to launch triggers (or beat-long gates) ONCE at a given beat on a 16 step counter | |||
| - Arm triggers/gates manually or via inputs | |||
| - For example, clock with bars, trigger to mute the kick for exactly 4 bars, trigger 4 bar later to drop | |||
| ### Piste - Drum Processor | |||
| - One-stop module to turn oscillators into drums / percussion, or process existing drums to taste | |||
| - Inspired by [Bastl Skis](http://www.bastl-instruments.com/modular/skis/) | |||
| - Input gain + eq + overdrive because sometimes basic processing is all that's needed | |||
| - 2 independent decay envelopes (eg. body and accent) the sum of which is applied to input signal via internal VCA | |||
| - 2nd envelope is scaled to 1st | |||
| - Triggers are scalable | |||
| - Mute input / trigger veto intended for choke groups (eg. open hihat mutes closed hihat) | |||
| ### Pulse: Pulse Generator | |||
| - main purpose is to convert triggers to gates | |||
| - clock through sends 1ms triggers - clean your clock | |||
| - range selectable (1s / 10s) | |||
| - when clocked, duration/delay are quantized to "musically relevant" intervals | |||
| ### Rakes: Stereo Resonator | |||
| - inspired by the Ableton Resonator effect | |||
| - 6 stereo comb filters | |||
| - V/OCT inputs quantized to SEMI tones or FREE | |||
| - FINE detuning works with opposite sign on L/R channels | |||
| - small values produce Haas effect (stereo widening) | |||
| - individual GAINs | |||
| - best used together with a chord generator patched into the V/OCT inputs | |||
| ### Riemann | |||
| - chord generator based on Neo-Riemannian Tonnetz analysis | |||
| - inspired by NE Tonnetz Sequent, Navichord app, o_C Automatonnetz (and my incapability to compose / improvise diatonic music) | |||
| - Traversal via perfect fifth (P5/V) per volt and major triad per volt (M3/V) inputs | |||
| - Major/minor, Augmented/diminished chord groups | |||
| - 3 - 7 parts per chord (from standard triads to thirteenth chords) | |||
| - Parts mostly display for now, outputs after last part output root note | |||
| - Switch for suspensions (sus4) close to fifth-axis | |||
| - Transpose rotates within octave | |||
| - Outputs in V/oct | |||
| - Tonic output (T) for tonic drone | |||
| - Voicing inc/decreases octaves to the right/left sequentially by part (small settings to the right give chord inversions) | |||
| ### SNS - Euclidean Sequencer | |||
| - I know. but this one looks cool and has a few additional features: | |||
| - Up to 32 steps | |||
| - Accents: nested euclidean sequence on main sequence | |||
| - Rotate sequence and accents | |||
| - Up to 32 pads (silent steps) | |||
| - All inputs scaled to each other in what i think is a sensible way - great for LFO modulation of inputs | |||
| - CLK/RST thru for easy chaining | |||
| - Turing mode to translate pattern into CV a la Turing Machine | |||
| ### Snake | |||
| - 16 internal busses 0-F with 10 lines per buss to bridge large distances or generally tidy up the patch | |||
| - First connection to input locks input (green led - red on all other instances) | |||
| - Works best with slow signal. In case of parallel processin check difference between original and bussed signal by means of inverting summer and scope | |||
| ### Sssh - Noise / S+H | |||
| - 4x noise / S+H - inspired by the lowest section from [Kinks](https://mutable-instruments.net/modules/kinks/) | |||
| - Triggers are normalled from top to bottom | |||
| - Inputs are normalled to noise | |||
| - Noises are four calls to generator (not a copy) | |||
| ### Wriggle - Spring Model | |||
| - Follows input with a given stiffness and damping of the spring | |||
| - Mass normalized to one | |||
| - Output can be scaled/offset | |||
| - Designed to implement "Woggle CV" (works best at LFO rates) | |||
| ### Gnome - Synth Voice | |||
| - An all-in-one module inspired by [MFB Nanozwerg](http://mfberlin.de/en/modules/nanozwerg_pro_e/) | |||
| - Because sometimes you just need the basics and want to get started fast | |||
| - The submodules are mostly copied from the Fundamental modules with some omissions and additions: | |||
| - VCO: analog part of Fundamental VCO, morphing | |||
| - Sub-OSC 1/2 Oct / Noise | |||
| - LFO from Fundamental LFO, morphing + S+H | |||
| - ADSR from Fundamental ADSR | |||
| - Biquad VCF with resonance gain-compensation | |||
| @@ -0,0 +1,46 @@ | |||
| Mutable Instruments' Eurorack Modules. | |||
| * [Blinds](http://mutable-instruments.net/modules/blinds): Quad VC-polarizer. | |||
| * [Braids](http://mutable-instruments.net/modules/braids): Macro-oscillator. | |||
| * [Branches](http://mutable-instruments.net/modules/branches): Dual Bernoulli gate. | |||
| * [Clouds](http://mutable-instruments.net/modules/clouds): Texture synthesizer. | |||
| * [Ears](http://mutable-instruments.net/modules/ears): Contact microphone. | |||
| * [Edges](http://mutable-instruments.net/modules/edges): Quad chiptune digital oscillator. | |||
| * [Elements](http://mutable-instruments.net/modules/elements): Modal synthesizer. | |||
| * [Frames](http://mutable-instruments.net/modules/frames): Keyframer/mixer. | |||
| * [Grids](http://mutable-instruments.net/modules/grids): Topographic drum sequencer. | |||
| * [Kinks](http://mutable-instruments.net/modules/kinks): Utility module - rectifier, analog logic, S&H, noise. | |||
| * [Links](http://mutable-instruments.net/modules/links): Utility module - buffer, mixer. | |||
| * [Peaks](http://mutable-instruments.net/modules/peaks): Dual trigger converter. | |||
| * [Rings](http://mutable-instruments.net/modules/rings): Resonator. | |||
| * [Ripples](http://mutable-instruments.net/modules/ripples): Liquid 2-pole BP, 2-pole LP and 4-pole LP filter. | |||
| * [Shades](http://mutable-instruments.net/modules/shades): Triple attenuverter. | |||
| * [Shelves](http://mutable-instruments.net/modules/shelves): EQ filter. | |||
| * [Streams](http://mutable-instruments.net/modules/streams): Dual dynamics gate. | |||
| * [Tides](http://mutable-instruments.net/modules/tides): Tidal modulator. | |||
| * [Veils](http://mutable-instruments.net/modules/veils): Quad VCA. | |||
| * [Volts](http://mutable-instruments.net/modules/volts): +5V power module. | |||
| * [Warps](http://mutable-instruments.net/modules/warps): Meta-modulator. | |||
| * [Yarns](http://mutable-instruments.net/modules/yarns): MIDI interface. | |||
| License | |||
| ======= | |||
| Code (AVR projects): GPL3.0. | |||
| Code (STM32F projects): MIT license. | |||
| Hardware: cc-by-sa-3.0 | |||
| By: Olivier Gillet (olivier@mutable-instruments.net) | |||
| Guidelines for derivative works | |||
| =============================== | |||
| **Mutable Instruments is a registered trademark.** | |||
| The name "Mutable Instruments" should not be used on any of the derivative works you create from these files. | |||
| We do not recommend you to keep the original name of the Mutable Instruments module for your derivative works. | |||
| For example, your 5U adaptation of Mutable Instruments Clouds can be called "Foobar Modular - Particle Generator". | |||
| @@ -0,0 +1,22 @@ | |||
| Except when noted otherwise, all code is copyright Olivier Gillet and is | |||
| released under the MIT License with the following notice: | |||
| Copyright 2013 Olivier Gillet. | |||
| Permission is hereby granted, free of charge, to any person obtaining a copy | |||
| of this software and associated documentation files (the "Software"), to deal | |||
| in the Software without restriction, including without limitation the rights | |||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||
| copies of the Software, and to permit persons to whom the Software is | |||
| furnished to do so, subject to the following conditions: | |||
| The above copyright notice and this permission notice shall be included in | |||
| all copies or substantial portions of the Software. | |||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |||
| THE SOFTWARE. | |||
| @@ -0,0 +1,2 @@ | |||
| FSK Bootloaders for AVR. | |||
| See LICENSE for licensing information. | |||
| @@ -0,0 +1,120 @@ | |||
| #!/usr/bin/python2.5 | |||
| # | |||
| # Copyright 2013 Olivier Gillet. | |||
| # | |||
| # Author: Olivier Gillet (ol.gillet@gmail.com) | |||
| # | |||
| # This program is free software: you can redistribute it and/or modify | |||
| # it under the terms of the GNU General Public License as published by | |||
| # the Free Software Foundation, either version 3 of the License, or | |||
| # (at your option) any later version. | |||
| # This program is distributed in the hope that it will be useful, | |||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
| # GNU General Public License for more details. | |||
| # You should have received a copy of the GNU General Public License | |||
| # along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
| # | |||
| # ----------------------------------------------------------------------------- | |||
| # | |||
| # Streaming .wav file writer. | |||
| import copy | |||
| import numpy | |||
| import struct | |||
| _DATA_CHUNK_HEADER_SIZE = 8 | |||
| _FMT_CHUNK_DATA_SIZE = 16 | |||
| _FMT_CHUNK_HEADER_SIZE = 8 | |||
| _RIFF_FORMAT_DESCRIPTOR_SIZE = 4 | |||
| _UNSIGNED_CHAR_TO_FLOAT_SCALE = 128.0 | |||
| _FLOAT_TO_UNSIGNED_CHAR_SCALE = 127.0 | |||
| class AudioStreamWriter(object): | |||
| def __init__(self, file_name, sample_rate, bitdepth=16, num_channels=1): | |||
| self._sr = sample_rate | |||
| self._file_name = file_name | |||
| self._sample_rate = sample_rate | |||
| self._bitdepth = bitdepth | |||
| self._num_channels = num_channels | |||
| self._f = file(file_name, 'wb') | |||
| self._num_bytes = 0 | |||
| self._write_header(False) | |||
| @staticmethod | |||
| def quantize(signal, bitdepth): | |||
| """Convert an array of float to an array of integers. | |||
| Args: | |||
| signal: numpy array. source signal. | |||
| bitdepth: int. size of the integer in bits. | |||
| Returns: | |||
| array of integers. | |||
| """ | |||
| norm = numpy.abs(signal).max() | |||
| # Normalization or clipping. | |||
| scaled_signal = copy.copy(signal) | |||
| if norm > 1.0: | |||
| logging.warning('Some samples will be clipped.') | |||
| # Clip samples above 1 and below -1. | |||
| scaled_signal[scaled_signal < -1] = -1 | |||
| scaled_signal[scaled_signal > 1] = 1 | |||
| if bitdepth == 8: | |||
| scaled_signal = (scaled_signal + 1.0) * _FLOAT_TO_UNSIGNED_CHAR_SCALE | |||
| scaled_signal = numpy.array(scaled_signal, dtype=numpy.uint8) | |||
| else: | |||
| scale = (1 << (bitdepth - 1)) - 1 | |||
| # pylint: disable-msg=C6407 | |||
| scaled_signal = scaled_signal * scale | |||
| scaled_signal = numpy.array(scaled_signal, dtype='i%d' % (bitdepth / 8)) | |||
| return scaled_signal | |||
| def _write_header(self, restore_position): | |||
| f = self._f | |||
| total_size = _RIFF_FORMAT_DESCRIPTOR_SIZE | |||
| total_size += _FMT_CHUNK_HEADER_SIZE + _FMT_CHUNK_DATA_SIZE | |||
| total_size += _DATA_CHUNK_HEADER_SIZE + self._num_bytes | |||
| current_position = f.tell() | |||
| f.seek(0) | |||
| f.write('RIFF') | |||
| f.write(struct.pack('<L', total_size)) | |||
| f.write('WAVEfmt ') | |||
| bitrate = self._sample_rate * self._num_channels * (self._bitdepth / 8) | |||
| bits_per_sample = self._num_channels * (self._bitdepth / 8) | |||
| f.write(struct.pack( | |||
| '<LHHLLHH', | |||
| 16, | |||
| 1, | |||
| self._num_channels, | |||
| self._sample_rate, | |||
| bitrate, | |||
| bits_per_sample, | |||
| self._bitdepth)) | |||
| f.write('data') | |||
| f.write(struct.pack('<L', self._num_bytes)) | |||
| if restore_position: | |||
| f.seek(current_position) | |||
| def append(self, signal): | |||
| if signal.dtype == numpy.uint8 or signal.dtype == numpy.int16: | |||
| assert self._bitdepth == signal.dtype.itemsize * 8 | |||
| scaled_signal = signal | |||
| else: | |||
| scaled_signal = self.quantize(signal, self._bitdepth) | |||
| if scaled_signal.ndim == 1: | |||
| assert self._num_channels == 1 | |||
| else: | |||
| assert self._num_channels == scaled_signal.shape[1] | |||
| scaled_signal.tofile(self._f) | |||
| self._num_bytes += scaled_signal.nbytes | |||
| self._write_header(True) | |||
| @@ -0,0 +1,101 @@ | |||
| /*- | |||
| * COPYRIGHT (C) 1986 Gary S. Brown. You may use this program, or | |||
| * code or tables extracted from it, as desired without restriction. | |||
| * | |||
| * First, the polynomial itself and its table of feedback terms. The | |||
| * polynomial is | |||
| * X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+X^0 | |||
| * | |||
| * Note that we take it "backwards" and put the highest-order term in | |||
| * the lowest-order bit. The X^32 term is "implied"; the LSB is the | |||
| * X^31 term, etc. The X^0 term (usually shown as "+1") results in | |||
| * the MSB being 1 | |||
| * | |||
| * Note that the usual hardware shift register implementation, which | |||
| * is what we're using (we're merely optimizing it by doing eight-bit | |||
| * chunks at a time) shifts bits into the lowest-order term. In our | |||
| * implementation, that means shifting towards the right. Why do we | |||
| * do it this way? Because the calculated CRC must be transmitted in | |||
| * order from highest-order term to lowest-order term. UARTs transmit | |||
| * characters in order from LSB to MSB. By storing the CRC this way | |||
| * we hand it to the UART in the order low-byte to high-byte; the UART | |||
| * sends each low-bit to hight-bit; and the result is transmission bit | |||
| * by bit from highest- to lowest-order term without requiring any bit | |||
| * shuffling on our part. Reception works similarly | |||
| * | |||
| * The feedback terms table consists of 256, 32-bit entries. Notes | |||
| * | |||
| * The table can be generated at runtime if desired; code to do so | |||
| * is shown later. It might not be obvious, but the feedback | |||
| * terms simply represent the results of eight shift/xor opera | |||
| * tions for all combinations of data and CRC register values | |||
| * | |||
| * The values must be right-shifted by eight bits by the "updcrc | |||
| * logic; the shift must be unsigned (bring in zeroes). On some | |||
| * hardware you could probably optimize the shift in assembler by | |||
| * using byte-swap instructions | |||
| * polynomial $edb88320 | |||
| * | |||
| * | |||
| * CRC32 code derived from work by Gary S. Brown. | |||
| */ | |||
| #include <avr/pgmspace.h> | |||
| static prog_uint32_t crc32_tab[] PROGMEM = { | |||
| 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, | |||
| 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, | |||
| 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, | |||
| 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, | |||
| 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, | |||
| 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, | |||
| 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, | |||
| 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, | |||
| 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, | |||
| 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, | |||
| 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, | |||
| 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, | |||
| 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, | |||
| 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, | |||
| 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, | |||
| 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, | |||
| 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, | |||
| 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, | |||
| 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, | |||
| 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, | |||
| 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, | |||
| 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, | |||
| 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, | |||
| 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, | |||
| 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, | |||
| 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, | |||
| 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, | |||
| 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, | |||
| 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, | |||
| 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, | |||
| 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, | |||
| 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, | |||
| 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, | |||
| 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, | |||
| 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, | |||
| 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, | |||
| 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, | |||
| 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, | |||
| 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, | |||
| 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, | |||
| 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, | |||
| 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, | |||
| 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d | |||
| }; | |||
| uint32_t crc32(uint32_t crc, const void *buf, uint32_t size) { | |||
| const uint8_t *p; | |||
| p = static_cast<const uint8_t*>(buf); | |||
| crc = crc ^ ~0UL; | |||
| while (size--) | |||
| crc = pgm_read_dword(crc32_tab + ((crc ^ *p++) & 0xFF)) ^ (crc >> 8); | |||
| return crc ^ ~0UL; | |||
| } | |||
| @@ -0,0 +1,55 @@ | |||
| // Copyright 2013 Olivier Gillet. | |||
| // | |||
| // This program is free software: you can redistribute it and/or modify | |||
| // it under the terms of the GNU General Public License as published by | |||
| // the Free Software Foundation, either version 3 of the License, or | |||
| // (at your option) any later version. | |||
| // This program is distributed in the hope that it will be useful, | |||
| // but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
| // GNU General Public License for more details. | |||
| // You should have received a copy of the GNU General Public License | |||
| // along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
| // | |||
| // ----------------------------------------------------------------------------- | |||
| // | |||
| // Simpler/flatter version of the STM FSK bootloader. | |||
| #include "avr_audio_bootloader/fsk/decoder.h" | |||
| namespace avr_audio_bootloader { | |||
| /* static */ | |||
| bool Decoder::previous_sample_; | |||
| /* static */ | |||
| uint16_t Decoder::duration_; | |||
| /* static */ | |||
| uint8_t Decoder::swallow_; | |||
| /* static */ | |||
| DecoderState Decoder::state_; | |||
| /* static */ | |||
| uint8_t Decoder::expected_symbols_; | |||
| /* static */ | |||
| uint8_t Decoder::preamble_remaining_size_; | |||
| /* static */ | |||
| uint16_t Decoder::sync_blank_size_; | |||
| /* static */ | |||
| uint8_t Decoder::symbol_count_; | |||
| /* static */ | |||
| uint8_t* Decoder::packet_; | |||
| /* static */ | |||
| uint16_t Decoder::packet_size_; | |||
| /* static */ | |||
| uint16_t Decoder::packet_count_; | |||
| } // namespace avr_audio_bootloader | |||
| @@ -0,0 +1,180 @@ | |||
| // Copyright 2013 Olivier Gillet. | |||
| // | |||
| // This program is free software: you can redistribute it and/or modify | |||
| // it under the terms of the GNU General Public License as published by | |||
| // the Free Software Foundation, either version 3 of the License, or | |||
| // (at your option) any later version. | |||
| // This program is distributed in the hope that it will be useful, | |||
| // but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
| // GNU General Public License for more details. | |||
| // You should have received a copy of the GNU General Public License | |||
| // along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
| // | |||
| // ----------------------------------------------------------------------------- | |||
| // | |||
| // AVR FSK bootloader - inspired by its STM32F counterpart | |||
| #ifndef AVR_AUDIO_BOOTLOADER_FSK_DECODER_H_ | |||
| #define AVR_AUDIO_BOOTLOADER_FSK_DECODER_H_ | |||
| #include <avr/pgmspace.h> | |||
| namespace avr_audio_bootloader { | |||
| const uint16_t kPause = 16; | |||
| const uint16_t kOne = 8; | |||
| const uint16_t kZero = 4; | |||
| const uint16_t kOneZeroThreshold = (kOne + kZero) >> 1; | |||
| const uint16_t kPauseOneThreshold = (kPause + kOne) >> 1; | |||
| const uint16_t kMaxSyncDuration = 500; // Symbols | |||
| const uint8_t kPreambleSize = 32; | |||
| const uint16_t kPacketSize = SPM_PAGESIZE; | |||
| enum DecoderState { | |||
| DECODER_STATE_SYNCING, | |||
| DECODER_STATE_DECODING_PACKET, | |||
| DECODER_STATE_PACKET_RECEIVED, | |||
| DECODER_STATE_ERROR_SYNC, | |||
| DECODER_STATE_END_OF_TRANSMISSION | |||
| }; | |||
| class Decoder { | |||
| public: | |||
| Decoder() { } | |||
| ~Decoder() { } | |||
| static inline void Init() { | |||
| packet_count_ = 0; | |||
| } | |||
| static inline void Sync() { | |||
| previous_sample_ = false; | |||
| duration_ = 0; | |||
| swallow_ = 4; | |||
| state_ = DECODER_STATE_SYNCING; | |||
| sync_blank_size_ = 0; | |||
| expected_symbols_ = 0xff; | |||
| preamble_remaining_size_ = kPreambleSize; | |||
| } | |||
| static inline void set_packet_destination(uint8_t* p) { | |||
| packet_ = p; | |||
| } | |||
| static inline DecoderState PushSample(bool sample) { | |||
| if (previous_sample_ == sample) { | |||
| ++duration_; | |||
| } else { | |||
| previous_sample_ = sample; | |||
| uint8_t symbol = 0; | |||
| if (duration_ >= kPauseOneThreshold) { | |||
| symbol = 2; | |||
| } else if (duration_ >= kOneZeroThreshold) { | |||
| symbol = 1; | |||
| } else { | |||
| symbol = 0; | |||
| } | |||
| if (swallow_) { | |||
| symbol = 2; | |||
| --swallow_; | |||
| } | |||
| PushSymbol(symbol); | |||
| duration_ = 0; | |||
| } | |||
| return state_; | |||
| } | |||
| static inline void ParseSyncHeader(uint8_t symbol) { | |||
| if (!((1 << symbol) & expected_symbols_)) { | |||
| state_ = DECODER_STATE_ERROR_SYNC; | |||
| return; | |||
| } | |||
| switch (symbol) { | |||
| case 2: | |||
| ++sync_blank_size_; | |||
| if (sync_blank_size_ >= kMaxSyncDuration && packet_count_) { | |||
| state_ = DECODER_STATE_END_OF_TRANSMISSION; | |||
| return; | |||
| } | |||
| expected_symbols_ = (1 << 0) | (1 << 1) | (1 << 2); | |||
| preamble_remaining_size_ = kPreambleSize; | |||
| break; | |||
| case 1: | |||
| expected_symbols_ = (1 << 0); | |||
| --preamble_remaining_size_; | |||
| break; | |||
| case 0: | |||
| expected_symbols_ = (1 << 1); | |||
| --preamble_remaining_size_; | |||
| break; | |||
| } | |||
| if (preamble_remaining_size_ == 0) { | |||
| state_ = DECODER_STATE_DECODING_PACKET; | |||
| packet_size_ = 0; | |||
| packet_[packet_size_] = 0; | |||
| symbol_count_ = 0; | |||
| } | |||
| } | |||
| static void PushSymbol(uint8_t symbol) { | |||
| switch (state_) { | |||
| case DECODER_STATE_SYNCING: | |||
| ParseSyncHeader(symbol); | |||
| break; | |||
| case DECODER_STATE_DECODING_PACKET: | |||
| if (symbol == 2) { | |||
| state_ = DECODER_STATE_ERROR_SYNC; | |||
| } else { | |||
| packet_[packet_size_] |= symbol; | |||
| ++symbol_count_; | |||
| if (symbol_count_ == 8) { | |||
| symbol_count_ = 0; | |||
| ++packet_size_; | |||
| if (packet_size_ == kPacketSize + 4) { | |||
| ++packet_count_; | |||
| state_ = DECODER_STATE_PACKET_RECEIVED; | |||
| } else { | |||
| packet_[packet_size_] = 0; | |||
| } | |||
| } else { | |||
| packet_[packet_size_] <<= 1; | |||
| } | |||
| } | |||
| break; | |||
| case DECODER_STATE_PACKET_RECEIVED: | |||
| case DECODER_STATE_ERROR_SYNC: | |||
| case DECODER_STATE_END_OF_TRANSMISSION: | |||
| break; | |||
| } | |||
| } | |||
| private: | |||
| static bool previous_sample_; | |||
| static uint16_t duration_; | |||
| static uint8_t swallow_; | |||
| static DecoderState state_; | |||
| static uint8_t expected_symbols_; | |||
| static uint8_t preamble_remaining_size_; | |||
| static uint16_t sync_blank_size_; | |||
| static uint8_t symbol_count_; | |||
| static uint8_t* packet_; | |||
| static uint16_t packet_size_; | |||
| static uint16_t packet_count_; | |||
| }; | |||
| } // namespace avr_audio_bootloader | |||
| #endif // AVR_AUDIO_BOOTLOADER_FSK_DECODER_H_ | |||
| @@ -0,0 +1,199 @@ | |||
| #!/usr/bin/python2.5 | |||
| # | |||
| # Copyright 2013 Olivier Gillet. | |||
| # | |||
| # Author: Olivier Gillet (ol.gillet@gmail.com) | |||
| # | |||
| # This program is free software: you can redistribute it and/or modify | |||
| # it under the terms of the GNU General Public License as published by | |||
| # the Free Software Foundation, either version 3 of the License, or | |||
| # (at your option) any later version. | |||
| # This program is distributed in the hope that it will be useful, | |||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
| # GNU General Public License for more details. | |||
| # You should have received a copy of the GNU General Public License | |||
| # along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
| # | |||
| # ----------------------------------------------------------------------------- | |||
| # | |||
| # Fsk encoder for converting firmware .bin files into . | |||
| import numpy | |||
| import optparse | |||
| import zlib | |||
| from avr_audio_bootloader import audio_stream_writer | |||
| class FskEncoder(object): | |||
| def __init__( | |||
| self, | |||
| sample_rate=48000, | |||
| pause_period=32, | |||
| one_period=8, | |||
| zero_period=4, | |||
| packet_size=256): | |||
| self._sr = sample_rate | |||
| self._pause_period = pause_period | |||
| self._one_period = one_period | |||
| self._zero_period = zero_period | |||
| self._packet_size = packet_size | |||
| self._state = 1 | |||
| def _encode(self, symbol_stream): | |||
| symbol_stream = numpy.array(symbol_stream) | |||
| counts = [numpy.sum(symbol_stream == symbol) for symbol in range(3)] | |||
| durations = [self._zero_period, self._one_period, self._pause_period] | |||
| total_length = numpy.dot(durations, counts) | |||
| signal = numpy.zeros((total_length, 1)) | |||
| state = self._state | |||
| index = 0 | |||
| for symbol in symbol_stream: | |||
| d = durations[symbol] | |||
| signal[index:index + d] = state | |||
| state = -state | |||
| index += d | |||
| assert index == signal.shape[0] | |||
| self._state = state | |||
| return signal | |||
| def _code_blank(self, duration): | |||
| num_symbols = int(duration * self._sr / self._pause_period) + 1 | |||
| return self._encode([2] * num_symbols) | |||
| def _code_packet(self, data): | |||
| assert len(data) <= self._packet_size | |||
| if len(data) != self._packet_size: | |||
| data = data + '\x00' * (self._packet_size - len(data)) | |||
| crc = zlib.crc32(data) & 0xffffffff | |||
| data = map(ord, data) | |||
| crc_bytes = [crc >> 24, (crc >> 16) & 0xff, (crc >> 8) & 0xff, crc & 0xff] | |||
| bytes = [0x55] * 4 + data + crc_bytes | |||
| symbol_stream = [] | |||
| for byte in bytes: | |||
| mask = 0x80 | |||
| for _ in range(0, 8): | |||
| symbol_stream.append(1 if (byte & mask) else 0) | |||
| mask >>= 1 | |||
| return self._encode(symbol_stream) | |||
| def code(self, data, page_size=1024, blank_duration=0.06): | |||
| yield numpy.zeros((1.0 * self._sr, 1)).ravel() | |||
| yield self._code_blank(1.0) | |||
| if len(data) % page_size != 0: | |||
| tail = page_size - (len(data) % page_size) | |||
| data += '\xff' * tail | |||
| offset = 0 | |||
| remaining_bytes = len(data) | |||
| num_packets_written = 0 | |||
| while remaining_bytes: | |||
| size = min(remaining_bytes, self._packet_size) | |||
| yield self._code_packet(data[offset:offset+size]) | |||
| num_packets_written += 1 | |||
| if num_packets_written == page_size / self._packet_size: | |||
| yield self._code_blank(blank_duration) | |||
| num_packets_written = 0 | |||
| remaining_bytes -= size | |||
| offset += size | |||
| yield self._code_blank(1.0) | |||
| def main(): | |||
| parser = optparse.OptionParser() | |||
| parser.add_option( | |||
| '-s', | |||
| '--sample_rate', | |||
| dest='sample_rate', | |||
| type='int', | |||
| default=40000, | |||
| help='Sample rate in Hz') | |||
| parser.add_option( | |||
| '-b', | |||
| '--pause_period', | |||
| dest='pause_period', | |||
| type='int', | |||
| default=64, | |||
| help='Period (in samples) of a blank symbol') | |||
| parser.add_option( | |||
| '-n', | |||
| '--one_period', | |||
| dest='one_period', | |||
| type='int', | |||
| default=16, | |||
| help='Period (in samples) of a one symbol') | |||
| parser.add_option( | |||
| '-z', | |||
| '--zero_period', | |||
| dest='zero_period', | |||
| type='int', | |||
| default=8, | |||
| help='Period (in samples) of a zero symbol') | |||
| parser.add_option( | |||
| '-p', | |||
| '--packet_size', | |||
| dest='packet_size', | |||
| type='int', | |||
| default=256, | |||
| help='Packet size in bytes') | |||
| parser.add_option( | |||
| '-g', | |||
| '--page_size', | |||
| dest='page_size', | |||
| type='int', | |||
| default=64, | |||
| help='Flash page size') | |||
| parser.add_option( | |||
| '-k', | |||
| '--blank_duration', | |||
| dest='blank_duration', | |||
| type='int', | |||
| default=8, | |||
| help='Duration of the blank between pages, in ms') | |||
| parser.add_option( | |||
| '-o', | |||
| '--output_file', | |||
| dest='output_file', | |||
| default=None, | |||
| help='Write output file to FILE', | |||
| metavar='FILE') | |||
| options, args = parser.parse_args() | |||
| data = file(args[0], 'rb').read() | |||
| if len(args) != 1: | |||
| logging.fatal('Specify one, and only one firmware .bin file!') | |||
| sys.exit(1) | |||
| output_file = options.output_file | |||
| if not output_file: | |||
| if '.bin' in args[0]: | |||
| output_file = args[0].replace('.bin', '.wav') | |||
| else: | |||
| output_file = args[0] + '.wav' | |||
| encoder = FskEncoder( | |||
| options.sample_rate, | |||
| options.pause_period, | |||
| options.one_period, | |||
| options.zero_period, | |||
| options.packet_size) | |||
| writer = audio_stream_writer.AudioStreamWriter( | |||
| output_file, | |||
| options.sample_rate, | |||
| 16, | |||
| 1) | |||
| blank_duration = options.blank_duration * 0.001 | |||
| for block in encoder.code(data, options.page_size, blank_duration): | |||
| if len(block): | |||
| writer.append(block) | |||
| if __name__ == '__main__': | |||
| main() | |||
| @@ -0,0 +1,3 @@ | |||
| AVRil, a C++ template library for AVR microcontrollers. | |||
| This library is released under a GPL3.0 license. | |||
| @@ -0,0 +1,36 @@ | |||
| // Copyright 2009 Olivier Gillet. | |||
| // | |||
| // Author: Olivier Gillet (ol.gillet@gmail.com) | |||
| // | |||
| // This program is free software: you can redistribute it and/or modify | |||
| // it under the terms of the GNU General Public License as published by | |||
| // the Free Software Foundation, either version 3 of the License, or | |||
| // (at your option) any later version. | |||
| // This program is distributed in the hope that it will be useful, | |||
| // but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
| // GNU General Public License for more details. | |||
| // You should have received a copy of the GNU General Public License | |||
| // along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
| // | |||
| // ----------------------------------------------------------------------------- | |||
| // | |||
| // Interface to the onboard ADC converter, and analog multiplexer. | |||
| #include "avrlib/adc.h" | |||
| namespace avrlib { | |||
| /* static */ | |||
| uint8_t Adc::admux_value_ = ADC_DEFAULT << 6; | |||
| /* static */ | |||
| uint8_t AdcInputScanner::current_pin_; | |||
| /* static */ | |||
| uint8_t AdcInputScanner::num_inputs_; | |||
| /* static */ | |||
| int16_t AdcInputScanner::state_[8]; | |||
| } // namespace avrlib | |||
| @@ -0,0 +1,199 @@ | |||
| // Copyright 2009 Olivier Gillet. | |||
| // | |||
| // Author: Olivier Gillet (ol.gillet@gmail.com) | |||
| // | |||
| // This program is free software: you can redistribute it and/or modify | |||
| // it under the terms of the GNU General Public License as published by | |||
| // the Free Software Foundation, either version 3 of the License, or | |||
| // (at your option) any later version. | |||
| // This program is distributed in the hope that it will be useful, | |||
| // but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
| // GNU General Public License for more details. | |||
| // You should have received a copy of the GNU General Public License | |||
| // along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
| // | |||
| // ----------------------------------------------------------------------------- | |||
| // | |||
| // Interface to the onboard ADC converter, and analog multiplexer. | |||
| #ifndef AVRLIB_ADC_H_ | |||
| #define AVRLIB_ADC_H_ | |||
| #include <avr/io.h> | |||
| #include "avrlib/avrlib.h" | |||
| namespace avrlib { | |||
| enum AdcReference { | |||
| ADC_EXTERNAL = 0, | |||
| ADC_DEFAULT = 1, | |||
| ADC_INTERNAL = 3 | |||
| }; | |||
| enum AdcAlignment { | |||
| ADC_RIGHT_ALIGNED = 0, | |||
| ADC_LEFT_ALIGNED = 1 | |||
| }; | |||
| IORegister(ADCSRA); | |||
| typedef BitInRegister<ADCSRARegister, ADSC> AdcConvert; | |||
| typedef BitInRegister<ADCSRARegister, ADEN> AdcEnabled; | |||
| class Adc { | |||
| public: | |||
| Adc() { } | |||
| static inline void Init() { | |||
| set_prescaler(7); // 128 -> 156kHz ADC clock. | |||
| Enable(); | |||
| } | |||
| static inline void set_prescaler(uint8_t factor) { | |||
| ADCSRA = (ADCSRA & ~0x07) | (factor & 0x07); | |||
| } | |||
| static inline void set_reference(AdcReference reference) { | |||
| admux_value_ = (admux_value_ & 0x3f) | (reference << 6); | |||
| } | |||
| static inline void set_alignment(AdcAlignment alignment) { | |||
| admux_value_ &= 0xc0; | |||
| if (alignment == ADC_LEFT_ALIGNED) { | |||
| admux_value_ |= 0x20; | |||
| } | |||
| } | |||
| static inline void Enable() { | |||
| AdcEnabled::set(); | |||
| } | |||
| static inline void Disable() { | |||
| AdcEnabled::clear(); | |||
| } | |||
| static inline int16_t Read(uint8_t pin) { | |||
| StartConversion(pin); | |||
| Wait(); | |||
| return ReadOut(); | |||
| } | |||
| static inline void StartConversion(uint8_t pin) { | |||
| ADMUX = admux_value_ | (pin & 0x07); | |||
| AdcConvert::set(); | |||
| } | |||
| static inline void Wait() { | |||
| while (AdcConvert::value()); | |||
| } | |||
| static bool ready() { | |||
| return !AdcConvert::value(); | |||
| } | |||
| static inline int16_t ReadOut() { | |||
| uint8_t low = ADCL; | |||
| uint8_t high = ADCH; | |||
| return (high << 8) | low; | |||
| } | |||
| // Only works when the ADC is left aligned | |||
| static inline uint8_t ReadOut8() { | |||
| return ADCH; | |||
| } | |||
| private: | |||
| static uint8_t admux_value_; | |||
| DISALLOW_COPY_AND_ASSIGN(Adc); | |||
| }; | |||
| // Class that cycles through all the analog pins and read their value. Compared | |||
| // to Adc::Read(), this class is wait-free as it doesn't block on the | |||
| // ADSC bit value. | |||
| class AdcInputScanner { | |||
| public: | |||
| enum { | |||
| buffer_size = 0, | |||
| data_size = 16, | |||
| }; | |||
| AdcInputScanner() { } | |||
| static void Init() { | |||
| Adc::Init(); | |||
| current_pin_ = 0; | |||
| Adc::StartConversion(0); | |||
| } | |||
| static inline void set_num_inputs(uint8_t num_inputs) { | |||
| num_inputs_ = num_inputs; | |||
| } | |||
| static inline int16_t Read(uint8_t pin) { | |||
| return state_[pin]; | |||
| } | |||
| static inline uint8_t Read8(uint8_t pin) { | |||
| return static_cast<uint16_t>(state_[pin]) >> 8; | |||
| } | |||
| static uint8_t current_pin() { | |||
| return current_pin_; | |||
| } | |||
| static int16_t Sync(uint8_t pin) { | |||
| Adc::Wait(); | |||
| int16_t value = Adc::Read(pin); | |||
| Adc::StartConversion(current_pin_); | |||
| return value; | |||
| } | |||
| static void Scan() { | |||
| Adc::Wait(); | |||
| state_[current_pin_] = Adc::ReadOut(); | |||
| ++current_pin_; | |||
| if (current_pin_ >= num_inputs_) { | |||
| current_pin_ = 0; | |||
| } | |||
| Adc::StartConversion(current_pin_); | |||
| } | |||
| private: | |||
| static uint8_t current_pin_; | |||
| static uint8_t num_inputs_; | |||
| static int16_t state_[8]; | |||
| DISALLOW_COPY_AND_ASSIGN(AdcInputScanner); | |||
| }; | |||
| template<int pin> | |||
| struct AnalogInput { | |||
| enum { | |||
| buffer_size = 0, | |||
| data_size = 16, | |||
| }; | |||
| static void Init() { } | |||
| static int16_t Read() { | |||
| return Adc::Read(pin); | |||
| } | |||
| }; | |||
| template<int id> | |||
| class MuxedAnalogInput { | |||
| public: | |||
| enum { | |||
| buffer_size = 0, | |||
| data_size = 16, | |||
| }; | |||
| static void Init() { } | |||
| static int16_t Read() { | |||
| return Adc::Read(current_pin_); | |||
| } | |||
| static void set_pin(uint8_t current_pin) { | |||
| current_pin_ = current_pin; | |||
| } | |||
| private: | |||
| static uint8_t current_pin_; | |||
| }; | |||
| /* static */ | |||
| template<int id> | |||
| uint8_t MuxedAnalogInput<id>::current_pin_ = 0; | |||
| } // namespace avrlib | |||
| #endif // AVRLIB_ADC_H_ | |||