@@ -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_ |