diff options
author | neauoire <[email protected]> | 2020-02-05 10:32:58 -0500 |
---|---|---|
committer | neauoire <[email protected]> | 2020-02-05 10:32:58 -0500 |
commit | bce64c0cfa827c054300181085de74d9594ece97 (patch) | |
tree | c0c3a1c27c8ee7047916b7c5a02846b52a70556b /resources | |
parent | e7e401dbb7cdd36d11400339b722cb037dab2c5d (diff) | |
download | Orca-bce64c0cfa827c054300181085de74d9594ece97.tar.gz Orca-bce64c0cfa827c054300181085de74d9594ece97.zip |
Added MANUAL.txt
Diffstat (limited to 'resources')
-rw-r--r-- | resources/MANUAL.txt | 90 | ||||
-rw-r--r-- | resources/TUTORIAL.md | 148 | ||||
-rw-r--r-- | resources/WORKSHOP.md | 208 | ||||
-rw-r--r-- | resources/glyph.grid | 174 | ||||
-rw-r--r-- | resources/glyph.png | bin | 153675 -> 0 bytes | |||
-rw-r--r-- | resources/glyph.svg | 1 | ||||
-rw-r--r-- | resources/listener.js | 39 | ||||
-rw-r--r-- | resources/logo.grid | 271 | ||||
-rw-r--r-- | resources/logo.png | bin | 94322 -> 0 bytes | |||
-rw-r--r-- | resources/logo.svg | 2 |
10 files changed, 486 insertions, 447 deletions
diff --git a/resources/MANUAL.txt b/resources/MANUAL.txt new file mode 100644 index 0000000..fae4393 --- /dev/null +++ b/resources/MANUAL.txt @@ -0,0 +1,90 @@ +File + +New...................... CmdOrCtrl+N +Open..................... CmdOrCtrl+O +Import Modules........... CmdOrCtrl+L +Import Images............ CmdOrCtrl+Shift+L +Export................... CmdOrCtrl+S +Export Selection......... CmdOrCtrl+Shift+S + +Edit + +Select All............... CmdOrCtrl+A +Erase Selection.......... Backspace +Undo..................... CmdOrCtrl+Z +Redo..................... CmdOrCtrl+Shift+Z + +Project + +Find..................... CmdOrCtrl+J +Inject................... CmdOrCtrl+B +Toggle Commander......... CmdOrCtrl+K +Run Commander............ Enter + +Cursor + +Toggle Insert Mode....... CmdOrCtrl+I +Toggle Block Comment..... CmdOrCtrl+/ +Trigger Operator......... CmdOrCtrl+P +Reset.................... Escape + +Move + +Move North............... ArrowUp +Move East................ ArrowRight +Move South............... ArrowDown +Move West................ ArrowLeft +Scale North.............. Shift+ArrowUp +Scale East............... Shift+ArrowRight +Scale South.............. Shift+ArrowDown +Scale West............... Shift+ArrowLeft +Drag North............... Alt+ArrowUp +Drag East................ Alt+ArrowRight +Drag South............... Alt+ArrowDown +Drag West................ Alt+ArrowLeft +Move North(Leap)......... CmdOrCtrl+ArrowUp +Move East(Leap).......... CmdOrCtrl+ArrowRight +Move South(Leap)......... CmdOrCtrl+ArrowDown +Move West(Leap).......... CmdOrCtrl+ArrowLeft +Scale North(Leap)........ CmdOrCtrl+Shift+ArrowUp +Scale East(Leap)......... CmdOrCtrl+Shift+ArrowRight +Scale South(Leap)........ CmdOrCtrl+Shift+ArrowDown +Scale West(Leap)......... CmdOrCtrl+Shift+ArrowLeft +Drag North(Leap)......... CmdOrCtrl+Alt+ArrowUp +Drag East(Leap).......... CmdOrCtrl+Alt+ArrowRight +Drag South(Leap)......... CmdOrCtrl+Alt+ArrowDown +Drag West(Leap).......... CmdOrCtrl+Alt+ArrowLeft + +Clock + +Play/Pause............... Space +Frame By Frame........... CmdOrCtrl+F +Reset Frame.............. CmdOrCtrl+Shift+R +Incr. Speed.............. > +Decr. Speed.............. < +Incr. Speed(10x)......... CmdOrCtrl+> +Decr. Speed(10x)......... CmdOrCtrl+< + +View + +Toggle Retina............ Tab +Toggle Guide............. CmdOrCtrl+G +Incr. Col................ ] +Decr. Col................ [ +Incr. Row................ } +Decr. Row................ { +Zoom In.................. CmdOrCtrl+= +Zoom Out................. CmdOrCtrl+- +Zoom Reset............... CmdOrCtrl+0 + +Midi + +Play/Pause Midi.......... CmdOrCtrl+Space +Next Input Device........ CmdOrCtrl+, +Next Output Device....... CmdOrCtrl+. +Refresh Devices.......... CmdOrCtrl+Shift+M + +Communication + +Choose OSC Port.......... alt+O +Choose UDP Port.......... alt+U
\ No newline at end of file diff --git a/resources/TUTORIAL.md b/resources/TUTORIAL.md new file mode 100644 index 0000000..e4d60d5 --- /dev/null +++ b/resources/TUTORIAL.md @@ -0,0 +1,148 @@ +# Tutorial + +If this is your first time trying out **Orca**, watch this [introduction video](https://www.youtube.com/watch?v=RaI_TuISSJE). If you want to learn how to use a handful of basic operators, have a look at the [workshop](WORKSHOP.md). + +## General + +- On **OSX**, setup [IAC virtual MIDI buses](https://help.ableton.com/hc/en-us/articles/209774225-Using-virtual-MIDI-buses). +- On **Windows**, setup [loopMidi](http://www.tobias-erichsen.de/software/loopmidi.html). +- On **Linux**, setup [qjacktl](https://qjackctl.sourceforge.io/). + +## Pilot + +[Pilot](https://github.com/hundredrabbits/Pilot) is a minimalist synth software designed to work via UDP, and to quickly get started with Orca. This **requires no setup**, as long as both applications are open, they should be able to communicate with each other. + +- Launch Orca & Pilot. +- In Orca, make sure that UDP is pointing to port `49161`. +- Bang something like `;03Cff` to [play a note](https://github.com/hundredrabbits/pilot#play). +- Bang something like `;revff` to [add reverb](https://github.com/hundredrabbits/pilot#effects). + +## Ableton Live + +To send [Midi notes](https://github.com/hundredrabbits/Orca#midi) to [Ableton Live](https://www.ableton.com/en/) instruments, bang the Midi operator `:`, like `:03C` to send to _Channel 1, Octave 3, Note C_. Have a look at [midi.orca](https://github.com/hundredrabbits/Orca/blob/master/examples/_midi.orca) to see it in action. + +- Launch Ableton Live. +- Create a new **midi instrument** track. +- Select `IAC Driver(Bus 1)`(OSX), or `LoopMidi`(Windows), in the instrument's inputs dropdown. +- Activate the **In** toggle, on the instrument track. + +## SonicPi + +To send [OSC messages](https://github.com/hundredrabbits/Orca#osc) to [SonicPi](http://sonic-pi.net), select [port 4559](https://github.com/hundredrabbits/Orca#osc). SonicPi listens to the address defined in `sync`, to send to the `live_loop`, bang the OSC node `=`, like `=a`. Have a look at [sonicpi.orca](https://github.com/hundredrabbits/Orca/blob/master/examples/software/sonicpi.orca) to see it in action. If you need help, visit the [SonicPi x Orca forum](https://in-thread.sonic-pi.net/t/using-orca-to-control-sonic-pi-with-osc/2381/). + +``` +live_loop :drum do + use_real_time + sync "/osc/a" + sample :bd_haus, rate: 1 +end +``` + +## Bitwig [Linux and JACK] + +The following is taken from this page: https://answers.bitwig.com/questions/1218/how-do-i-get-midi-inout-of-bws-on-linux + +- Quit Bitwig if running. +- Start `qjacktl`. +- Go to _Setup > Settings > Parameters_ and set MIDI Driver to "none" (this turns off jack-midi) +- Go to Setup > Misc and check "Enable ALSA Sequencer Support" (if not enabled) +- Stop Jack if running and quit gjackctl +- Run sudo modprobe snd_virmidi midi_devs=1 (to enable virtual midi with one device which is easier to understand for now) +- Start qjacktl +- Start jack +- Open Connections: Connect device on left "0: QuNexus MIDI 1" (as an example) to "0:VirMIDI 5-0" +- Open Bitwig +- Under Options > Preferences > Controllers click "Add controller manually" +- Choose "Generic MIDI Keyboard" +- Once it appears as an input choose "Virtual Raw MIDI/1" + +## VCV Rack + +- Start VCV Rack +- Add a "VCV MIDI-CV" module to your rack +- Set the first parameter, MIDI Driver, to your local loopback driver + - Windows: Start loopMIDI, be sure to create at least one device, then select "loopMIDI" as the parameter + - Linux: Use "ALSA" (the widely supported Linux sound architecture) +- Set the second parameter to the MIDI interface + - Windows: Use the loopMIDI device you created + - Linux: Select the default "MIDI Through" device (available by default on most ALSA configurations) +- Start Orca +- Use the Hotkey Ctrl+Period to cycle through MIDI output devices until you see your device in the lower-right corner +- Bang a MIDI command to VCV: `:03c88` to get a note and gate trigger from MIDI-CV + +## Dotgrid + +To send [UDP messages](https://github.com/hundredrabbits/Orca#udp) to [Dotgrid](http://github.com/hundredrabbits/Dotgrid), select [port 49160](https://github.com/hundredrabbits/Orca#udp). To draw lines on Dotgrid, you need to bang the UDP node `;` with different [commands](https://github.com/hundredrabbits/Dotgrid/blob/master/desktop/sources/scripts/listener.js). Have a look at [dotgrid.orca](https://github.com/hundredrabbits/Orca/blob/master/examples/software/dotgrid.orca) to see it in action. + +- `;0`, clear layer **#1**. +- `;0l1234`, add a line from `1,2` to `3,4`. +- `;`, redraw. + +Here's a list of supported operations. + +``` +;0 // Clear Layer 1 +;0l1234 // Add Line from 1,2 to 3,4 +;0c1234 // Add Clockwise Arc from 1,2 to 3,4 +;0r1234 // Add Reverse Arc from 1,2 to 3,4 +; // Redraw +``` + +## FAQS + +### Why does placement of `V` matter? + +Orca operates linearly from the top-left, to the bottom-right, operators are executed in that sequence, and so the variables stored at the top, can be overwritten by the variables declared at the bottom. + +### Why is orca not making any sound? + +Orca is not a synthetizer, it is meant to control audio & visual software, or hardware. Orca will never include domain specific operators to generate music or to create pictures. It is designed to be as generic as possible. + +## Golf + +### Modulo + +Will output the modulo of `6 % 4`. + +``` +1X. +6I4 +``` + +### Uppercase + +Will output uppercase `C`. + +``` +cA1. +.dAZ +``` + +### Lowercase + +Will output lowercase `C`. + +``` +H.. +CM1 +``` + +### Substract + +Will substract `8 - 3`. + +``` +.3Mz +8Ax. +``` + +### Not Null + +Will bang if not null. + +``` +cYc +J.J +cFc +``` + diff --git a/resources/WORKSHOP.md b/resources/WORKSHOP.md new file mode 100644 index 0000000..4dd8f8f --- /dev/null +++ b/resources/WORKSHOP.md @@ -0,0 +1,208 @@ +# Workshop + +This workshop is designed to go over the **most commonly used patterns in composition** with [Orca](https://github.com/hundredrabbits/Orca). If you are using [Pilot](http://github.com/hundredrabbits/Pilot) as a sound source, remember to use the UDP operator `;` instead of the MIDI operator `:`. + +We recommend to distribute a printed copy of the [list of operators](https://github.com/hundredrabbits/Orca#operators), so students can do their own experiments. + +- **Part 1**: [Basics](#Basics) `D`, `R`, `T`, `C` +- **Part 2**: [Logic](#Logic) `I`, `A`, `F`, `B` +- **Part 3**: [Projectors](#Projectors) `E`, `H`, `X`, `O`, +- **Part 4**: [Variables](#Variables) `V`, `K`, `J`, `Y` + +## Basics + +This section will teach the basics of playing a note and a sequence of notes. + +### Send a midi note + +- `D8`, will send a bang, every **8th frame**. +- `:03C`, will send the `C` note, on the **3rd octave**, to send `C#`, use the lowercase `c3`. + +``` +D8... +.:03C +``` + +### Play a random note + +- `aRG`, will output a random value between `A` & `G`, the rightside uppercase letter indicates an **uppercase output**. + +``` +D8.aRG. +.:03D.. +``` + +### Make a melody + +- `04TCAFE`, will create a track of **4 notes**, and output its first value. + +``` +D814TCAFE +.:03A.... +``` + +### Play the melody + +- `8C4`, will count from `0` to `3`, at **1/8th speed**. + +``` +.8C4..... +D804TCAFE +.:03C.... +``` + +## Logic + +This section will teach the basics of automating logic decisions and changing the values of operators dynamically. + +### Play every second note + +- `2I6`, will increment to `6` at a rate of `2`. + +``` +.2I6....... +D846TCAFEDG +.:03D...... +``` + +### Play a note with an offset + +- `1AC`, will add `1` to `C`, to output `D`. To get `D#`, use the lowercase `d`, like `1Ac`. + +``` +D8.1AC. +.:03D.. +``` + +### Play a sequence back and forth + +- `2B8`, will count from `0` to `7`, and back down to `0`, at **half speed**. +- `5AC`, will increment the value so the sequence starts at the note `C`. + +``` +..2B8.. +D2.5AC. +.:03H.. +``` + +### Play a note at a specific interval + +- `.I4`, will increment to `4`, at a rate of `1`. +- `.F2`, will bang only if leftside input is equal to `2`. + +``` +I4..... +3F2.1AC +..:03D. +``` + +## Projectors + +This section will teach the basics of creating new operators procedurally. + +### Send a bang + +- `E`, will travel further **eastward**, every frame. + +### Halt a moving operator + +- `H`, will stop a `E` from moving. + +``` +..H +E.. +``` + +### Read an operator at position + +- `22O`, will get the operator `E` at the offset `2,2`. + +``` +22O... +..E..H +.....E +``` + +### Write an operator at position + +- `22X`, will output the operator `E` at the offset `2,2`. + +``` +22XE. +..... +..... +....E +``` + +### Animate a projector + +- `B8`, will bounce between `0` and `8`. + +``` +B4.......... +1XE......... +........:03C +........:03D +........:03E +........:03F +``` + +## Variables + +This section will teach the basics of storing accessing and combining that stored data. + +### Write a variable + +- `aV5`, will store `5` in the variable `a`. + +``` +aV5 +``` + +### Read a variable + +- `Va`, will output the value of the variable `a`. Notice how variables always **have to be written above where they are read**. + +``` +.....Va +....... +aV5..Va +.....5. +....... +aV6..Va +.....6. +``` + +### Read 3 variables + +- `3Kion`, will output the values of `i`, `o` & `n`, side-by-side. + +``` +iV0.oV3.nVC +........... +3Kion...... +.:03C...... +``` + +### Carry a value horizontally and vertically + +- `Y`, will output the west input, eastward. +- `J`, will output the north input, southward. + +``` +3.. +J.. +3Y3 +``` + +### Carry a bang + +- This method will allow you to bring bangs into tight spots. + +``` +D43Ka... +.Y.:03C... +``` + +I hope this workshop has been enlightening, if you have questions or suggestions, please visit the [forum](https://llllllll.co/t/orca-live-coding-tool/17689), or the [chatroom](https://talk.lurk.org/channel/orca). Enjoy! + diff --git a/resources/glyph.grid b/resources/glyph.grid deleted file mode 100644 index b8ec2a2..0000000 --- a/resources/glyph.grid +++ /dev/null @@ -1,174 +0,0 @@ -{ - "settings": { - "size": { - "width": 840, - "height": 300 - } - }, - "layers": [ - [], - [ - { - "type": "arc_c", - "vertices": [ - { - "x": 165, - "y": 90 - }, - { - "x": 240, - "y": 165 - }, - { - "x": 165, - "y": 240 - }, - { - "x": 90, - "y": 165 - }, - { - "x": 165, - "y": 90 - } - ] - }, - { - "type": "close", - "vertices": [] - }, - { - "type": "arc_c_full", - "vertices": [ - { - "x": 600, - "y": 165 - }, - { - "x": 525, - "y": 90 - } - ] - }, - { - "type": "arc_c_full", - "vertices": [ - { - "x": 630, - "y": 165 - }, - { - "x": 705, - "y": 240 - } - ] - }, - { - "type": "arc_c_full", - "vertices": [ - { - "x": 345, - "y": 240 - }, - { - "x": 420, - "y": 165 - } - ] - } - ], - [ - { - "type": "line", - "vertices": [ - { - "x": 255, - "y": 75 - }, - { - "x": 255, - "y": 255 - } - ] - }, - { - "type": "line", - "vertices": [ - { - "x": 435, - "y": 75 - }, - { - "x": 435, - "y": 255 - } - ] - }, - { - "type": "line", - "vertices": [ - { - "x": 615, - "y": 75 - }, - { - "x": 615, - "y": 255 - } - ] - }, - { - "type": "line", - "vertices": [ - { - "x": 795, - "y": 75 - }, - { - "x": 795, - "y": 255 - } - ] - }, - { - "type": "line", - "vertices": [ - { - "x": 75, - "y": 75 - }, - { - "x": 75, - "y": 255 - } - ] - } - ] - ], - "styles": [ - { - "thickness": 31, - "strokeLinecap": "round", - "strokeLinejoin": "round", - "color": "#000", - "fill": "none", - "mirror_style": 0 - }, - { - "thickness": 30, - "strokeLinecap": "butt", - "strokeLinejoin": "bevel", - "color": "#000", - "fill": "none", - "mirror_style": 0 - }, - { - "thickness": 1, - "strokeLinecap": "round", - "strokeLinejoin": "round", - "color": "#ddd", - "fill": "none", - "mirror_style": 0 - } - ] -}
\ No newline at end of file diff --git a/resources/glyph.png b/resources/glyph.png Binary files differdeleted file mode 100644 index 8ea6c88..0000000 --- a/resources/glyph.png +++ /dev/null diff --git a/resources/glyph.svg b/resources/glyph.svg deleted file mode 100644 index 89fc9fb..0000000 --- a/resources/glyph.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" baseProfile="full" version="1.1" width="880px" height="310px" style="fill: none; width: 880px; height: 310px; stroke-width: 31;"><path d="M245,65 L245,65 L245,245 M425,65 L425,65 L425,245 M605,65 L605,65 L605,245 M785,65 L785,65 L785,245 M65,65 L65,65 L65,245 " style="stroke-width: 1; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(221, 221, 221); fill: none;"/><path d="M155,80 A75,75 0 0,1 230,155 A75,75 0 0,1 155,230 A75,75 0 0,1 80,155 A75,75 0 0,1 155,80 Z M590,155 A75,75 0 1,1 515,80 M620,155 A75,75 0 1,1 695,230 M335,230 A75,75 0 1,1 410,155 " style="stroke-width: 30; stroke-linecap: butt; stroke-linejoin: bevel; stroke: rgb(0, 0, 0); fill: none;"/><path d="" style="stroke-width: 31; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(0, 0, 0); fill: none;"/></svg>
\ No newline at end of file diff --git a/resources/listener.js b/resources/listener.js new file mode 100644 index 0000000..582955a --- /dev/null +++ b/resources/listener.js @@ -0,0 +1,39 @@ +const IP_ADDR = '127.0.0.1' +const UDP_PORT = 49161 +const OSC_PORT = 49162 + +const dgram = require('dgram') +const udpserver = dgram.createSocket('udp4') + +const osc = require('./desktop/node_modules/node-osc') +const oscserver = new osc.Server(OSC_PORT, IP_ADDR) + +console.log(`Started Listener\n\nUDP:${UDP_PORT}\nOSC:${OSC_PORT}\n`) + +// Error + +udpserver.on('error', (err) => { + console.log(`UDP server:\n${err.stack}`) + udpserver.close() +}) + +oscserver.on('error', (err) => { + console.log(`OSC server:\n${err.stack}`) + oscserver.close() +}) + +// Message + +udpserver.on('message', (msg, rinfo) => { + console.log(`UDP server: ${msg} from ${rinfo.address}:${rinfo.port}`) +}) + +oscserver.on('message', (msg, rinfo) => { + console.log(`OSC server: ${msg} from ${rinfo.address}:${rinfo.port} at ${msg[0]}`) +}) + +udpserver.bind(UDP_PORT) + +// Send a run message to orca + +udpserver.send('run', 0, 3, 49160, IP_ADDR)
\ No newline at end of file diff --git a/resources/logo.grid b/resources/logo.grid deleted file mode 100644 index 07fc340..0000000 --- a/resources/logo.grid +++ /dev/null @@ -1,271 +0,0 @@ -{ - "settings": { - "size": { - "width": 855, - "height": 300 - }, - "crest": false - }, - "layers": [ - [ - { - "type": "arc_r", - "vertices": [ - { - "x": 585, - "y": 120 - }, - { - "x": 570, - "y": 105 - }, - { - "x": 480, - "y": 105 - }, - { - "x": 465, - "y": 120 - }, - { - "x": 465, - "y": 180 - }, - { - "x": 480, - "y": 195 - }, - { - "x": 570, - "y": 195 - }, - { - "x": 585, - "y": 180 - } - ] - }, - { - "type": "arc_c", - "vertices": [ - { - "x": 645, - "y": 105 - }, - { - "x": 750, - "y": 105 - }, - { - "x": 765, - "y": 120 - }, - { - "x": 765, - "y": 195 - } - ] - }, - { - "type": "arc_c", - "vertices": [ - { - "x": 765, - "y": 135 - }, - { - "x": 750, - "y": 150 - } - ] - }, - { - "type": "arc_r", - "vertices": [ - { - "x": 750, - "y": 150 - }, - { - "x": 660, - "y": 150 - }, - { - "x": 645, - "y": 165 - }, - { - "x": 645, - "y": 165 - }, - { - "x": 645, - "y": 195 - }, - { - "x": 645, - "y": 195 - } - ] - }, - { - "type": "arc_c", - "vertices": [ - { - "x": 225, - "y": 180 - }, - { - "x": 210, - "y": 195 - }, - { - "x": 120, - "y": 195 - }, - { - "x": 105, - "y": 180 - }, - { - "x": 105, - "y": 120 - }, - { - "x": 120, - "y": 105 - }, - { - "x": 210, - "y": 105 - }, - { - "x": 225, - "y": 120 - } - ] - }, - { - "type": "close", - "vertices": [] - }, - { - "type": "arc_c", - "vertices": [ - { - "x": 285, - "y": 195 - }, - { - "x": 285, - "y": 105 - }, - { - "x": 390, - "y": 105 - }, - { - "x": 405, - "y": 120 - }, - { - "x": 405, - "y": 135 - }, - { - "x": 390, - "y": 150 - }, - { - "x": 285, - "y": 150 - }, - { - "x": 285, - "y": 150 - }, - { - "x": 390, - "y": 150 - }, - { - "x": 405, - "y": 165 - }, - { - "x": 405, - "y": 195 - } - ] - } - ], - [], - [ - { - "type": "line", - "vertices": [ - { - "x": 255, - "y": 75 - }, - { - "x": 255, - "y": 225 - } - ] - }, - { - "type": "line", - "vertices": [ - { - "x": 435, - "y": 75 - }, - { - "x": 435, - "y": 225 - } - ] - }, - { - "type": "line", - "vertices": [ - { - "x": 615, - "y": 75 - }, - { - "x": 615, - "y": 225 - } - ] - } - ] - ], - "styles": [ - { - "thickness": 5, - "strokeLinecap": "square", - "strokeLinejoin": "miter", - "color": "#000", - "fill": "none", - "mirror_style": 0 - }, - { - "thickness": 25, - "strokeLinecap": "round", - "strokeLinejoin": "round", - "color": "#f00", - "fill": "none", - "mirror_style": 0 - }, - { - "thickness": 2, - "strokeLinecap": "round", - "strokeLinejoin": "round", - "color": "#ddd", - "fill": "none", - "mirror_style": 0 - } - ] -}
\ No newline at end of file diff --git a/resources/logo.png b/resources/logo.png Binary files differdeleted file mode 100644 index bb2c6a8..0000000 --- a/resources/logo.png +++ /dev/null diff --git a/resources/logo.svg b/resources/logo.svg index 26350e3..fe3e997 100644 --- a/resources/logo.svg +++ b/resources/logo.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" baseProfile="full" version="1.1" width="850px" height="310px" style="fill: none; width: 850px; height: 310px; stroke-width: 2;"><path d="M245,65 L245,65 L245,215 M425,65 L425,65 L425,215 M605,65 L605,65 L605,215 " style="stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(221, 221, 221); fill: none;"/><path d="" style="stroke-width: 5; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(255, 0, 0); fill: none;"/><path d="M575,110 A15,15 0 0,0 560,95 A90,0 0 0,0 470,95 A15,15 0 0,0 455,110 A0,60 0 0,0 455,170 A15,15 0 0,0 470,185 A90,0 0 0,0 560,185 A15,15 0 0,0 575,170 M275,95 A105,0 0 0,1 380,95 A15,15 0 0,1 395,110 A0,15 0 0,1 395,125 A15,15 0 0,1 380,140 A105,0 0 0,1 275,140 M380,140 A15,15 0 0,1 395,155 A0,30 0 0,1 395,185 M635,95 A105,0 0 0,1 740,95 A15,15 0 0,1 755,110 A0,75 0 0,1 755,185 M755,125 A15,15 0 0,1 740,140 A90,0 0 0,0 650,140 A15,15 0 0,0 635,155 A0,0 0 0,0 635,155 A0,15 0 0,0 635,170 A15,15 0 0,0 650,185 A90,0 0 0,0 740,185 A15,15 0 0,0 755,170 M275,95 L275,95 L275,185 M215,170 A15,15 0 0,1 200,185 A90,0 0 0,1 110,185 A15,15 0 0,1 95,170 A0,60 0 0,1 95,110 A15,15 0 0,1 110,95 A90,0 0 0,1 200,95 A15,15 0 0,1 215,110 Z " style="stroke-width: 12; stroke-linecap: square; stroke-linejoin: round; stroke: rgb(0, 0, 0); fill: none;"/></svg>
\ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" baseProfile="full" version="1.1" style="fill: none;" width="900px" height="300px"><path style="stroke-width: 2px; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(221, 221, 221); fill: none;" d=""/><path style="stroke-width: 25px; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(255, 0, 0); fill: none;" d=""/><path style="stroke-width: 5px; stroke-linecap: square; stroke-linejoin: miter; stroke: rgb(0, 0, 0); fill: none;" d="M585,120 A15,15 0 0,0 570,105 L480,105 A15,15 0 0,0 465,120 L465,180 A15,15 0 0,0 480,195 L570,195 A15,15 0 0,0 585,180 M645,105 L750,105 A15,15 0 0,1 765,120 L765,195 M765,135 A15,15 0 0,1 750,150 L660,150 A15,15 0 0,0 645,165 L645,165 L645,195 L645,195 M225,180 A15,15 0 0,1 210,195 L120,195 A15,15 0 0,1 105,180 L105,120 A15,15 0 0,1 120,105 L210,105 A15,15 0 0,1 225,120 Z M285,195 L285,105 L390,105 A15,15 0 0,1 405,120 L405,135 A15,15 0 0,1 390,150 L285,150 L285,150 L390,150 A15,15 0 0,1 405,165 L405,195 "/></svg>
\ No newline at end of file |