added some generators, bug update of README.md

master
Nova deViator 2015-04-09 14:48:04 +02:00
parent 5a81059546
commit ea14f713d1
3 changed files with 435 additions and 21 deletions

View File

@ -31,7 +31,8 @@
/* *************************************************************************************
MIDI CONTROLS
*************
midi */
GAINS: midi */
MIDIdef.cc(\midilfTri, { | val | ~lfTri.set(\gain, val/127); }, 0 );
MIDIdef.cc(\midikindaBass, { | val | ~kindaBass.set(\gain, val/127); }, 1 );
MIDIdef.cc(\midiwierdBleep, { | val | ~wierdBleep.set(\gain, val/127); }, 2 );
@ -72,7 +73,6 @@ MIDIdef.cc(\midifXgain, { | val | ~fX.set(\gain, val/127); }, 63 ); // MASTE
SCHEDULE SYNTHS USING EVENTS
**************************** */
// schedule this!
v = Main.elapsedTime.ceil;
t = TempoClock(1, 0, v);
t.schedAbs(0, {
@ -97,17 +97,16 @@ t.schedAbs(0, {
~white3 = (instrument: \white3).play;
~white4 = (instrument: \white4).play;
~lfTri = (instrument: \lfTri).play;
postln(v);
});
// HERE BE SOME FUNKY VARIABLES ///////////////////////////////////////
// SCALES! //
~aSc = Scale.saba; // define scale type
~aSc = Scale.minorPentatonic; // define scale type
~freqTrig = { Impulse.kr(rrand(0.01,0.05)); }; // how fast the note changes
~freqOff = {rrand(0.98, 1.02);}; // detune a bit
@ -119,7 +118,6 @@ t.schedAbs(0, {
~freqVar7 = { (Demand.kr(~freqTrig, 0, (Dxrand(~aSc.semitones, inf))) + (12 * 7) ).midicps * ~freqOff };
~freqVar8 = { (Demand.kr(~freqTrig, 0, (Dxrand(~aSc.semitones, inf))) + (12 * 8) ).midicps * ~freqOff };
~chanExpan = [1,1]; // multi channel expansion (just stereo here)
~bpm = 1; // bpm, for now constant, it could drift...
@ -135,7 +133,7 @@ SynthDef(\kindaBass, { | out=0, gain=0 |
OffsetOut.ar(0, out); }).add;
SynthDef(\wierdBleep, { | out=0, gain=0 |
out = LFPulse.ar(~freqVar3, 0, 0.5, LFPulse.kr((1/2) * ~bpm, 0.5, 0.03, 0.3))
out = LFPulse.ar(~freqVar3, 0, 0.5, LFPulse.kr((1/2) * ~bpm, 0.5, 0.03, 0.05))
* ~chanExpan * gain;
OffsetOut.ar(0, out); }).add;

View File

@ -6,22 +6,66 @@
In constrast to the Sonoretum version, which was created as an autonomously-running algorhythmic composition, SCLOrk version needs laptop performers and appropriate setup.
### instruments setup:
### Instruments setup:
It is assumed that performers are using the following software/hardware setup:
- a laptop
- OS: Ubuntu Linux 14.04
- SuperCollider using scide version 3.6.6 or above
- Precision Time Protocol daemon installed (package:ptpd)
- various midi controllers (QuNeo, Wiimote, Korg NanoKontrol)
- Audio interface with first left output connected to a speaker
- network connection to a local LAN
- outputs 3 and 4 go to headphones
- all laptops and its audio interfaces have the same audio latency
laptop
audio interface
mono out 1 -> a speaker
3+4 out: headphones
midi interfaces (quneo, wiimote, korg...)
network connection on local LAN
SuperCollider
PTP
### Performer's preparation
- there are generators and fx (comb filter, lp filter, reverb, master out), all assigned to midi
- listen to different generators
- choose a generator in consent with others. each should take one
- choose a
This SuperCollider patch introduces number of sound generators, 3 effects (comb filter, low-pass filter and reverb) and a master gain. Each generator, or more precisely its gain, is mapped to a midi control (CC) number. The three effects and master gain are also assigned to a midi control (CC) number. This is visible and changable under section "MIDI CONTROLS" in the patch. The patch can be started by simply loading it into SuperCollider IDE and evaluating it. Once running (see bottom-right of the IDE for something like "321u" meaning 321 UGens are running) a performer can control volume of every single generator, the effects and the master out using an external midi controller device.
In the phase of the preparation and getting familiar with all the generators a performer should adjust midi control numbers so that it suits her controller device. She should prelisten all generators and check if effects and master gain are being properly controlled by her device. Creative play is advised and encouraged.
At the next stage each performer should arrive at the three controlling generators which she will control in the piece. This can be done in different ways. It is suggested that all of generators are covered, if necessary multiple times. In other words, equal distribution of all generators should be achived. The most simple method is such that each performer is assigned one generator consecutively and cycle through number of performers and number of generators until each performer has three generators assigned. But, as said, there are different creative ways how to assign generators to performers (dice? random generator? discussion?).
Once this is done it is recommended that all but assigned three generators (and perhaps ~white2 for sync, see below) are commented out in the MIDI CONTROLS section in order not to trigger other generators accidentally. Performer is free to choose her own midi-controller devices with which to control 7 parameters: three (3) generators' gains, three effects and the master gain. These parameters should be properly assigned to midi devices.
### Creating a score for each perfomer
Print out a score template. There are PDF, PNG and SVG (Inkscape) versions avaible. It is also possible to edit an image/svg on the screen and work with that (that's more ecological, but perhaps too twiddly for some). The score has to be written by each performer for herself.
The piece is 8 minutes long. For each generator there is a timeline to be filled out with an envelope. Draw an envelope using straight lines and the following rules: for each four minutes of the piece there should be at least one (1) and maximum four (4) peaks. Starting at bottom of the timeline each "attack" *can* be followed by a "sustain" and *must* be followed by a "release". Sustain/peak must be over 50% and a release must end below 50% before starting a new "attack" or sustaining there.
Preparing the score for three effects follows a different methodology: "self-instruction". Control of the effects is less structured and is left to be in more improvisational vein. However a performer must find an instruction which she will follow during the performance. This can take a very technical and simple form ("Keep it off", "On in 2nd and 6th minute", "All the time at low level") or more suggestive and more open to intuitive interpretation ("Rarely close it for short time", "Fast waves many times", "Listen and respond to others"). The instruction must represent an action to performer herself, it must not be just an empty sentence. A word of caution about the low-pass filter: if used too broadly it can easily function as a volume control - it will cut out all the sound. It is quite dependent on the sound it affects. The performer must make sure to use it in order to manipulate sound colour.
Performers should test things out, practice on their own (headphones can be handy), rehearse together and adjust/rewrite their scores.
### Sync
The sync between laptops is achieved using Precision Time Protocol. One of the machines must be assigned as a master to which all others will sync. Before the SC patch is evaluated, prepare clock sync in the following way.
Check if master machine is running ntp daemon:
ps waux | grep ntpd
If master is running ntp daemon (regardless if connection to internet is present), run PTPd in master mode:
sudo ptpd -C -G
If master has not ntp daemon, run
sudo ptpd -C -W
All other computers should run PTPd in slave mode:
sudo ptpd -C -g
Now all clocks of all laptops should be in tight sync and the SC patch can be evaluated. It is recommended that it is evaluated just before the performance.
To test the sync, all laptops should play "~white2", which is a short click at frequency 1Hz.
### Composition in time

372
score_template.svg Normal file
View File

@ -0,0 +1,372 @@
<?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="990"
height="765"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="score_template.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.7"
inkscape:cx="423.01039"
inkscape:cy="324.01986"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
showguides="false"
inkscape:guide-bbox="true"
inkscape:window-width="1364"
inkscape:window-height="753"
inkscape:window-x="0"
inkscape:window-y="13"
inkscape:window-maximized="1">
<sodipodi:guide
orientation="-0.70710678,0.70710678"
position="857.14286,616.42857"
id="guide2991" />
<sodipodi:guide
orientation="0.70710678,0.70710678"
position="790,655"
id="guide2995" />
<sodipodi:guide
orientation="1,0"
position="495.71429,204.28571"
id="guide2997" />
<sodipodi:guide
orientation="1,0"
position="265.71429,292.85714"
id="guide2999" />
<sodipodi:guide
orientation="1,0"
position="727.14286,1.4285714"
id="guide3001" />
<sodipodi:guide
orientation="0,1"
position="495.71429,384.28571"
id="guide3009" />
<sodipodi:guide
orientation="0,1"
position="265.71429,550"
id="guide3011" />
<sodipodi:guide
orientation="0,1"
position="357.14286,217.14286"
id="guide3013" />
<sodipodi:guide
orientation="1,0"
position="151.07143,602.5"
id="guide3875" />
<sodipodi:guide
orientation="1,0"
position="380.71429,749.28572"
id="guide3877" />
<sodipodi:guide
orientation="1,0"
position="611.42857,633.57143"
id="guide3879" />
<sodipodi:guide
orientation="1,0"
position="842.85714,566.42857"
id="guide3881" />
<sodipodi:guide
orientation="0,1"
position="178.797,734.3809"
id="guide3895" />
</sodipodi:namedview>
<metadata
id="metadata7">
<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(0,-287.36218)">
<rect
style="opacity:0.51530612;fill:#ffaaaa;fill-opacity:1;stroke:#ffaaaa;stroke-width:10.19519329;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect3905"
width="911.92725"
height="15.164313"
x="41.283974"
y="311.28302" />
<path
inkscape:connector-curvature="0"
id="path3816"
d="m 53.080499,533.40951 c 296.599781,0 593.199511,0 889.799261,0 0,45.24033 0,90.48064 0,135.72099 -296.59975,0 -593.19948,0 -889.799261,0 0,-45.24035 0,-90.48066 0,-135.72099 z"
style="fill:#dbe3de;stroke:#dbe3de;stroke-width:26.29519653;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<path
style="fill:#e5d5ff;stroke:#e5d5ff;stroke-width:26.29519653;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
d="m 53.080499,698.96539 c 296.599781,0 593.199511,0 889.799261,0 0,45.24033 0,90.48064 0,135.72099 -296.59975,0 -593.19948,0 -889.799261,0 0,-45.24035 0,-90.48066 0,-135.72099 z"
id="path3818"
inkscape:connector-curvature="0" />
<path
style="fill:#ffe6d5;stroke:#ffe6d5;stroke-width:26.29519653;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
d="m 53.080499,367.15697 c 296.599781,0 593.199511,0 889.799261,0 0,45.24033 0,90.48064 0,135.72099 -296.59975,0 -593.19948,0 -889.799261,0 0,-45.24035 0,-90.48066 0,-135.72099 z"
id="rect3809"
inkscape:connector-curvature="0" />
<rect
style="fill:none;stroke:#000000;stroke-width:2"
id="rect2989"
width="921.42859"
height="667.14288"
x="37.142857"
y="351.21933" />
<path
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:0.5, 1.5;stroke-dashoffset:0"
d="m 265.71429,351.08109 0,500.27646 0,0"
id="path3003"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path3005"
d="m 495.71429,351.08006 0,498.84996 0,0"
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:4, 2;stroke-dashoffset:0" />
<path
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:0.5, 1;stroke-dashoffset:0"
d="m 728.574,351.07903 0,497.42345 0,0"
id="path3007"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 37.142857,518.36218 920.000003,0 4.28571,0"
id="path3015"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 37.142857,684.07647 920.000003,0"
id="path3017"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 37.142857,851.21932 920.000003,0"
id="path3019"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="36.42857"
y="348.21933"
id="text3789"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3791"
x="36.42857"
y="348.21933"
style="font-size:12px">0 min</tspan></text>
<text
sodipodi:linespacing="125%"
id="text3793"
y="348.21933"
x="250.42859"
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:12px"
y="348.21933"
x="250.42859"
id="tspan3795"
sodipodi:role="line">2 min</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="480.42859"
y="348.21933"
id="text3797"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3799"
x="480.42859"
y="348.21933"
style="font-size:12px">4 min</tspan></text>
<text
sodipodi:linespacing="125%"
id="text3801"
y="348.21933"
x="710.42859"
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:12px"
y="348.21933"
x="710.42859"
id="tspan3803"
sodipodi:role="line">6 min</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="934.42859"
y="348.21933"
id="text3805"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3807"
x="934.42859"
y="348.21933"
style="font-size:12px">8 min</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.3;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="46.62492"
y="368.25363"
id="text3820"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3822"
x="46.62492"
y="368.25363"
style="font-size:12px;fill:#000000">GENERATOR#1 GAIN</tspan></text>
<text
sodipodi:linespacing="125%"
id="text3824"
y="534.50336"
x="46.44635"
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.3;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:12px;fill:#000000"
y="534.50336"
x="46.44635"
id="tspan3826"
sodipodi:role="line">GENERATOR#2 GAIN</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.3;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="46.62492"
y="700.14618"
id="text3828"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3830"
x="46.62492"
y="700.14618"
style="font-size:12px;fill:#000000">GENERATOR#3 GAIN</tspan></text>
<path
inkscape:connector-curvature="0"
id="path3832"
d="m 355.52873,876.70317 c 94.96772,0 189.93542,0 284.90313,0 0,42.08181 0,84.1636 0,126.24543 -94.96771,0 -189.93541,0 -284.90313,0 0,-42.08183 0,-84.16362 0,-126.24543 z"
style="fill:#e6e6e6;stroke:#e6e6e6;stroke-width:14.35037708;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<path
style="fill:#e6e6e6;stroke:#e6e6e6;stroke-width:14.35037708;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
d="m 51.350034,876.70317 c 94.967726,0 189.935426,0 284.903136,0 0,42.08181 0,84.1636 0,126.24543 -94.96771,0 -189.93541,0 -284.903136,0 0,-42.08183 0,-84.16362 0,-126.24543 z"
id="path3836"
inkscape:connector-curvature="0" />
<path
style="fill:#e6e6e6;stroke:#e6e6e6;stroke-width:14.35037708;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
d="m 659.13567,876.70317 c 94.96772,0 189.93542,0 284.90314,0 0,42.08181 0,84.1636 0,126.24543 -94.96772,0 -189.93542,0 -284.90314,0 0,-42.08183 0,-84.16362 0,-126.24543 z"
id="path3838"
inkscape:connector-curvature="0" />
<text
sodipodi:linespacing="125%"
id="text3840"
y="865.46765"
x="47.51778"
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.6;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:12px;fill:#000000"
y="865.46765"
x="47.51778"
id="tspan3842"
sodipodi:role="line">self-instruction/notes</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.3;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="47.51778"
y="881.46765"
id="text3844"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3846"
x="47.51778"
y="881.46765"
style="font-size:12px;fill:#000000">COMB FILTER</tspan></text>
<text
sodipodi:linespacing="125%"
id="text3848"
y="881.46765"
x="353.51776"
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.3;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:12px;fill:#000000"
y="881.46765"
x="353.51776"
id="tspan3850"
sodipodi:role="line">LOW-PASS FILTER</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.3;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="655.51776"
y="881.46765"
id="text3852"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3854"
x="655.51776"
y="881.46765"
style="font-size:12px;fill:#000000">REVERB</tspan></text>
<path
inkscape:connector-curvature="0"
id="path3883"
d="m 151.00001,351.08109 0,500.27646 0,0"
style="opacity:0.51530612;fill:none;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2.4, 2.4;stroke-dashoffset:0" />
<path
style="opacity:0.51530612;fill:none;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2.4, 2.4;stroke-dashoffset:0"
d="m 380.82136,351.08109 0,500.27646 0,0"
id="path3885"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path3887"
d="m 611.35707,351.08109 0,500.27646 0,0"
style="opacity:0.51530612;fill:none;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2.4, 2.4;stroke-dashoffset:0" />
<path
style="opacity:0.51530612;fill:none;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2.4, 2.4;stroke-dashoffset:0"
d="m 842.96428,351.08109 0,500.27646 0,0"
id="path3889"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="40.365494"
y="325.85944"
id="text3891"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3893"
x="40.365494"
y="325.85944"
style="font-size:20px;font-weight:bold;-inkscape-font-specification:Sans Bold">4K/BPM SCLOrk </tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="234.35539"
y="277.41275"
id="text3901"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3903"
x="234.35539"
y="277.41275" /></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 16 KiB