aboutsummaryrefslogtreecommitdiff
path: root/patches
diff options
context:
space:
mode:
authorDavide Morelli <morellid@users.sourceforge.net>2005-10-18 23:10:53 +0000
committerDavide Morelli <morellid@users.sourceforge.net>2005-10-18 23:10:53 +0000
commiteb9ef05774af20edb43118182834c18a4ac70707 (patch)
treec7ae7be5449dc270e37f3f62ada9840d4efdf0cd /patches
initial checkinsvn2git-root
svn path=/trunk/externals/frankenstein/; revision=3734
Diffstat (limited to 'patches')
-rwxr-xr-xpatches/SHOWME.pd28
-rwxr-xr-xpatches/bay.orc418
-rwxr-xr-xpatches/test-harmonizer2.pd185
-rwxr-xr-xpatches/test.graphbin0 -> 57604 bytes
4 files changed, 631 insertions, 0 deletions
diff --git a/patches/SHOWME.pd b/patches/SHOWME.pd
new file mode 100755
index 0000000..539fabb
--- /dev/null
+++ b/patches/SHOWME.pd
@@ -0,0 +1,28 @@
+#N canvas 203 60 777 510 12;
+#X obj 572 56 chord_melo_test2;
+#X obj 531 85 tabwrite src;
+#X obj 644 87 tabwrite dest;
+#N canvas 0 0 450 300 graph25 0;
+#X array src 16 float 1;
+#A 0 55 59 62 60 52 50 48 47 48 55 57 59 60 55 52 48;
+#X array dest 16 float 1;
+#A 0 41 67 72 57 55 53 46 44 55 64 40 72 76 62 42 60;
+#X coords 0 127 15 0 400 250 1;
+#X restore 75 32 graph;
+#X obj 572 38 tgl 15 0 empty empty START 0 -6 0 8 -258699 -1 -1 1 1
+;
+#X floatatom 550 138 5 0 0 0 - - -;
+#X floatatom 596 138 5 0 0 0 - - -;
+#X floatatom 648 137 5 0 0 0 - - -;
+#X obj 591 279 tgl 15 0 toggleSRC empty src 0 -6 0 8 -262144 -1 -1
+1 1;
+#X obj 627 279 tgl 15 0 toggleOUT empty out 0 -6 0 8 -262144 -1 -1
+0 1;
+#X connect 0 0 1 0;
+#X connect 0 0 5 0;
+#X connect 0 1 2 0;
+#X connect 0 1 6 0;
+#X connect 0 2 1 1;
+#X connect 0 2 2 1;
+#X connect 0 2 7 0;
+#X connect 4 0 0 0;
diff --git a/patches/bay.orc b/patches/bay.orc
new file mode 100755
index 0000000..e754d31
--- /dev/null
+++ b/patches/bay.orc
@@ -0,0 +1,418 @@
+; ================================================================
+; Header
+; ================================================================
+sr=44100
+kr=882
+ksmps=50
+nchnls=2
+
+; ================================================================
+; Globals
+; ================================================================
+zakinit 10,10
+
+; Global variable for the reverb unit
+ga1 init 0
+
+; ================================================================
+; Tables
+; ================================================================
+; Waveform for the string-pad
+iwave ftgen 1, 0, 4096, 10, 1, .5, .33, .25, .0, .1, .1, .1
+
+; Senoid required by chorus
+isine ftgen 2, 0, 4096, 10, 1
+
+
+; ================================================================
+; Instruments
+; ================================================================
+
+
+instr 1 ;String pad
+; String-pad borrwoed from the piece "Dorian Gray",
+; http://akozar.spymac.net/music/ Modified to fit my needs
+
+; ihz = p4
+; idb = p5/127 * 70 ; rescale MIDI velocity to 70db
+; ipos = p6
+; iamp = ampdb(idb)
+
+; modified by dmorelli
+khz invalue "hz1"
+kpos invalue "pos1"
+kamp invalue "amp1"
+kctrl = kamp*70
+kctrl = ampdb(kctrl)
+ ; Slow attack and release
+; kctrl linseg 0, p3/4, iamp, p3/2, 0
+ ; Slight chorus effect
+ afund oscil kctrl, khz, 1 ; audio oscillator
+ acel1 oscil kctrl, khz - .1, 1 ; audio oscillator - flat
+ acel2 oscil kctrl, khz + .1, 1 ; audio oscillator - sharp
+ asig = afund + acel1 + acel2
+
+ ; Cut-off high frequencies depending on midi-velocity
+ ; (larger velocity implies more brighter sound)
+ asig butterlp asig, (p5-60)*40+900
+
+ ; Panning
+ kppan = kpos*1.570796325 ; half of PI (radians of 90o angle)
+ kpleft = cos(kppan) ; half sign "down"
+ kpright = sin(kppan) ; half sign "up"
+ asig1 = asig*kpleft;
+ asig2 = asig*kpright;
+ ; To the chorus effect, through zak channels 1 and 2
+ zawm asig1, 1
+ zawm asig2, 2
+endin
+
+
+instr 2 ;String pad
+; String-pad borrwoed from the piece "Dorian Gray",
+; http://akozar.spymac.net/music/ Modified to fit my needs
+
+; ihz = p4
+; idb = p5/127 * 70 ; rescale MIDI velocity to 70db
+; ipos = p6
+; iamp = ampdb(idb)
+
+; modified by dmorelli
+khz invalue "hz2"
+kpos invalue "pos2"
+kamp invalue "amp2"
+kctrl = kamp*70
+kctrl = ampdb(kctrl)
+ ; Slow attack and release
+; kctrl linseg 0, p3/4, iamp, p3/2, 0
+ ; Slight chorus effect
+ afund oscil kctrl, khz, 1 ; audio oscillator
+ acel1 oscil kctrl, khz - .1, 1 ; audio oscillator - flat
+ acel2 oscil kctrl, khz + .1, 1 ; audio oscillator - sharp
+ asig = afund + acel1 + acel2
+
+ ; Cut-off high frequencies depending on midi-velocity
+ ; (larger velocity implies more brighter sound)
+ asig butterlp asig, (p5-60)*40+900
+
+ ; Panning
+ kppan = kpos*1.570796325 ; half of PI (radians of 90o angle)
+ kpleft = cos(kppan) ; half sign "down"
+ kpright = sin(kppan) ; half sign "up"
+ asig1 = asig*kpleft;
+ asig2 = asig*kpright;
+ ; To the chorus effect, through zak channels 1 and 2
+ zawm asig1, 1
+ zawm asig2, 2
+endin
+
+instr 3 ;String pad
+; String-pad borrwoed from the piece "Dorian Gray",
+; http://akozar.spymac.net/music/ Modified to fit my needs
+
+ ; ihz = p4
+; idb = p5/127 * 70 ; rescale MIDI velocity to 70db
+; ipos = p6
+; iamp = ampdb(idb)
+
+; modified by dmorelli
+khz invalue "hz3"
+kpos invalue "pos3"
+kamp invalue "amp3"
+kctrl = kamp*70
+kctrl = ampdb(kctrl)
+ ; Slow attack and release
+; kctrl linseg 0, p3/4, iamp, p3/2, 0
+ ; Slight chorus effect
+ afund oscil kctrl, khz, 1 ; audio oscillator
+ acel1 oscil kctrl, khz - .1, 1 ; audio oscillator - flat
+ acel2 oscil kctrl, khz + .1, 1 ; audio oscillator - sharp
+ asig = afund + acel1 + acel2
+
+ ; Cut-off high frequencies depending on midi-velocity
+ ; (larger velocity implies more brighter sound)
+ asig butterlp asig, (p5-60)*40+900
+
+ ; Panning
+ kppan = kpos*1.570796325 ; half of PI (radians of 90o angle)
+ kpleft = cos(kppan) ; half sign "down"
+ kpright = sin(kppan) ; half sign "up"
+ asig1 = asig*kpleft;
+ asig2 = asig*kpright;
+ ; To the chorus effect, through zak channels 1 and 2
+ zawm asig1, 1
+ zawm asig2, 2
+endin
+instr 4 ;String pad
+; String-pad borrwoed from the piece "Dorian Gray",
+; http://akozar.spymac.net/music/ Modified to fit my needs
+
+; ihz = p4
+; idb = p5/127 * 70 ; rescale MIDI velocity to 70db
+; ipos = p6
+; iamp = ampdb(idb)
+
+; modified by dmorelli
+khz invalue "hz4"
+kpos invalue "pos4"
+kamp invalue "amp4"
+kctrl = kamp*70
+kctrl = ampdb(kctrl)
+ ; Slow attack and release
+; kctrl linseg 0, p3/4, iamp, p3/2, 0
+ ; Slight chorus effect
+ afund oscil kctrl, khz, 1 ; audio oscillator
+ acel1 oscil kctrl, khz - .1, 1 ; audio oscillator - flat
+ acel2 oscil kctrl, khz + .1, 1 ; audio oscillator - sharp
+ asig = afund + acel1 + acel2
+
+ ; Cut-off high frequencies depending on midi-velocity
+ ; (larger velocity implies more brighter sound)
+ asig butterlp asig, (p5-60)*40+900
+
+ ; Panning
+ kppan = kpos*1.570796325 ; half of PI (radians of 90o angle)
+ kpleft = cos(kppan) ; half sign "down"
+ kpright = sin(kppan) ; half sign "up"
+ asig1 = asig*kpleft;
+ asig2 = asig*kpright;
+ ; To the chorus effect, through zak channels 1 and 2
+ zawm asig1, 1
+ zawm asig2, 2
+endin
+
+
+
+
+
+; strumento senza invalue
+
+instr 9 ;String pad
+; String-pad borrwoed from the piece "Dorian Gray",
+; http://akozar.spymac.net/music/ Modified to fit my needs
+
+ ihz = p4
+ idb = p5/127 * 70 ; rescale MIDI velocity to 70db
+ ipos = p6
+ iamp = ampdb(idb)
+
+; modified by dmorelli
+
+;kpos invalue "pos1"
+;kamp invalue "amp1"
+;kctrl = kamp*70
+;kctrl = ampdb(kctrl)
+ ; Slow attack and release
+ kctrl linseg 0, p3/4, iamp, p3/2, 0
+ ; Slight chorus effect
+ afund oscil kctrl, ihz, 1 ; audio oscillator
+ acel1 oscil kctrl, ihz - .1, 1 ; audio oscillator - flat
+ acel2 oscil kctrl, ihz + .1, 1 ; audio oscillator - sharp
+ asig = afund + acel1 + acel2
+
+ ; Cut-off high frequencies depending on midi-velocity
+ ; (larger velocity implies more brighter sound)
+ asig butterlp asig, (p5-60)*40+900
+
+ ; Panning
+ ippan = ipos*1.570796325 ; half of PI (radians of 90o angle)
+ ipleft = cos(ippan) ; half sign "down"
+ ipright = sin(ippan) ; half sign "up"
+ asig1 = asig*ipleft;
+ asig2 = asig*ipright;
+ ; To the chorus effect, through zak channels 1 and 2
+ zawm asig1, 1
+ zawm asig2, 2
+endin
+
+; ================================================================
+; EFFECTS
+; ================================================================
+
+
+; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+; Chorus effect, borrowed from http://www.jlpublishing.com/Csound.htm
+; I made some of its parameters accesible trhough score
+instr 10 ;Chorus
+ ; Read input from zak
+ a1 zar 1
+ a2 zar 2
+ idlyml=p4 ;delay in milliseconds
+ k1 oscili idlyml/p5, 1, 2
+ ar1l vdelay3 a1, idlyml/5+k1, 900 ;delayed sound 1
+ ar1r vdelay3 a2, idlyml/5+k1, 900 ;delayed sound 1
+ k2 oscili idlyml/p5, .995, 2
+ ar2l vdelay3 a1, idlyml/5+k2, 700 ;delayed sound 2
+ ar2r vdelay3 a2, idlyml/5+k2, 700 ;delayed sound 2
+ k3 oscili idlyml/p5, 1.05, 2
+ ar3l vdelay3 a1, idlyml/5+k3, 700 ;delayed sound 3
+ ar3r vdelay3 a2, idlyml/5+k3, 700 ;delayed sound 3
+ k4 oscili idlyml/p5, 1, 2
+ ar4l vdelay3 a1, idlyml/5+k4, 900 ;delayed sound 4
+ ar4r vdelay3 a2, idlyml/5+k4, 900 ;delayed sound 4
+ aoutl = (a1+ar1l+ar2l+ar3l+ar4l)*.5
+ aoutr = (a2+ar1r+ar2r+ar3r+ar4r)*.5
+
+ ; To the output mixer
+ zawm aoutl, 5
+ zawm aoutr, 6
+ ; and also to the reverb unit
+ ga1 = ga1 + (aoutl+aoutr)*.5
+endin
+
+; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+; Reverb
+; 8 delay line FDN reverb, with feedback matrix based upon
+; physical modeling scattering junction of 8 lossless waveguides
+; of equal characteristic impedance. Based on Julius O. Smith III,
+; "A New Approach to Digital Reverberation using Closed Waveguide
+; Networks," Proceedings of the International Computer Music
+; Conference 1985, p. 47-53 (also available as a seperate
+; publication from CCRMA), as well as some more recent papers by
+; Smith and others.
+;
+; Coded by Sean Costello, October 1999
+instr 25 ;Reverb
+ ; Note: ga1 is the global input to the reverb.
+ afilt1 init 0
+ afilt2 init 0
+ afilt3 init 0
+ afilt4 init 0
+ afilt5 init 0
+ afilt6 init 0
+ afilt7 init 0
+ afilt8 init 0
+ idel1 = (2473.000/sr)
+ idel2 = (2767.000/sr)
+ idel3 = (3217.000/sr)
+ idel4 = (3557.000/sr)
+ idel5 = (3907.000/sr)
+ idel6 = (4127.000/sr)
+ idel7 = (2143.000/sr)
+ idel8 = (1933.000/sr)
+
+
+ igain = p4 ; gain of reverb. Adjust empirically
+ ; for desired reverb time. .6 gives
+ ; a good small "live" room sound, .8
+ ; a small hall, .9 a large hall,
+ ; .99 an enormous stone cavern.
+
+ ipitchmod = p5 ; amount of random pitch modulation
+ ; for the delay lines. 1 is the "normal"
+ ; amount, but this may be too high for
+ ; held pitches such as piano tones.
+ ; Adjust to taste.
+
+ itone = p6 ; Cutoff frequency of lowpass filters
+ ; in feedback loops of delay lines,
+ ; in Hz. Lower cutoff frequencies results
+ ; in a sound with more high-frequency
+ ; damping.
+
+ ; k1-k8 are used to add random pitch modulation to the
+ ; delay lines. Helps eliminate metallic overtones
+ ; in the reverb sound.
+ k1 randi .001, 3.1, .06
+ k2 randi .0011, 3.5, .9
+ k3 randi .0017, 1.11, .7
+ k4 randi .0006, 3.973, .3
+ k5 randi .001, 2.341, .63
+ k6 randi .0011, 1.897, .7
+ k7 randi .0017, 0.891, .9
+ k8 randi .0006, 3.221, .44
+ ; apj is used to calculate "resultant junction pressure" for
+ ; the scattering junction of 8 lossless waveguides
+ ; of equal characteristic impedance. If you wish to
+ ; add more delay lines, simply add them to the following
+ ; equation, and replace the .25 by 2/N, where N is the
+ ; number of delay lines.
+ apj = .25 * (afilt1 + afilt2 + afilt3 + afilt4 + afilt5 + afilt6 + afilt7 + afilt8)
+
+
+ adum1 delayr 1
+ adel1 deltapi idel1 + k1 * ipitchmod
+ delayw ga1 + apj - afilt1
+
+ adum2 delayr 1
+ adel2 deltapi idel2 + k2 * ipitchmod
+ delayw ga1 + apj - afilt2
+
+ adum3 delayr 1
+ adel3 deltapi idel3 + k3 * ipitchmod
+ delayw ga1 + apj - afilt3
+
+ adum4 delayr 1
+ adel4 deltapi idel4 + k4 * ipitchmod
+ delayw ga1 + apj - afilt4
+
+ adum5 delayr 1
+ adel5 deltapi idel5 + k5 * ipitchmod
+ delayw ga1 + apj - afilt5
+
+ adum6 delayr 1
+ adel6 deltapi idel6 + k6 * ipitchmod
+ delayw ga1 + apj - afilt6
+
+ adum7 delayr 1
+ adel7 deltapi idel7 + k7 * ipitchmod
+ delayw ga1 + apj - afilt7
+
+ adum8 delayr 1
+ adel8 deltapi idel8 + k8 * ipitchmod
+ delayw ga1 + apj - afilt8
+
+ ; 1st order lowpass filters in feedback
+ ; loops of delay lines.
+ afilt1 tone adel1 * igain, itone
+ afilt2 tone adel2 * igain, itone
+ afilt3 tone adel3 * igain, itone
+ afilt4 tone adel4 * igain, itone
+ afilt5 tone adel5 * igain, itone
+ afilt6 tone adel6 * igain, itone
+ afilt7 tone adel7 * igain, itone
+ afilt8 tone adel8 * igain, itone
+
+ ; The outputs of the delay lines are summed
+ ; and sent to the stereo outputs. This could
+ ; easily be modified for a 4 or 8-channel
+ ; sound system.
+ aout1 = (afilt1 + afilt3 + afilt5 + afilt7)
+ aout2 = (afilt2 + afilt4 + afilt6 + afilt8)
+ ;outs aout1, aout2
+ ; To the output mixer
+ zawm aout1, 5
+ zawm aout2, 6
+ ga1 = 0
+endin
+
+
+; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+; Output mixer
+; It applies a bass enhancement, compression and fadeout
+; to the whole piece,
+instr 30 ;Mixer
+ ; Read input from zak
+ a1 zar 5
+ a2 zar 6
+ ; Bass enhancement
+ al1 butterlp a1, 100
+ al2 butterlp a2, 100
+ a1 = al1*1.5 +a1
+ a2 = al2*1.5 +a2
+
+ ; Global amplitude shape
+ ; It applies a gain of p4 to the whole piece, and creates a
+ ; fadeout the last p5 seconds
+ kenv linseg p4, p3-p5, p4, p5, 0
+ a1=a1*kenv
+ a2=a2*kenv
+
+ ; Compression
+ a1 dam a1, 5000, 0.5, 1, 0.2, 0.1
+ a2 dam a2, 5000, 0.5, 1, 0.2, 0.1
+
+ outs a1, a2
+ zacl 0, 10
+endin
+
diff --git a/patches/test-harmonizer2.pd b/patches/test-harmonizer2.pd
new file mode 100755
index 0000000..ed41e1e
--- /dev/null
+++ b/patches/test-harmonizer2.pd
@@ -0,0 +1,185 @@
+#N canvas 74 28 903 675 12;
+#X symbolatom 157 205 18 0 0 2 next_chord - -;
+#N canvas 39 349 531 328 readme 0;
+#X text 59 31 howto populate the graph: play the chord \, when the
+output of [chord] is ok bang the "add" message. bang it each time you
+change chord \, it will store the transitions;
+#X text 56 120 howto ask for the next chord: play the chord \, bang
+the "set" message \, this will set the current chord without adding
+it to the graph's memory \, now bang the next 1 message. this chord_graph
+will respond with the chord you played most of the times after the
+current chord. you can send "next x" where x is from 0 to 1 \, 0 =
+max novelty \, 1= min novelty;
+#X text 56 259 you can save graph state sending the write message;
+#X restore 607 47 pd readme;
+#X obj 121 329 harmonizer;
+#X msg 52 286 current \$1;
+#X msg 158 283 target \$1;
+#X obj 52 262 symbol;
+#X obj 52 242 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 157 261 symbol;
+#X obj 289 261 int 36;
+#X obj 355 262 int 60;
+#X obj 426 260 int 67;
+#X obj 494 259 int 76;
+#X obj 566 262 int 84;
+#X obj 335 289 pack f f f f f;
+#X obj 358 233 t b b b b b;
+#X obj 246 369 unpack f f f f f;
+#X obj 153 97 symbol;
+#X obj 98 43 bng 15 250 50 0 empty empty change_chord 0 -6 0 8 -262144
+-1 -1;
+#X msg 153 121 set \$1;
+#N canvas 0 0 706 416 midi 0;
+#X obj 141 253 outlet;
+#X obj 271 31 notein;
+#X obj 271 66 chord 59;
+#X msg 175 149 add \$1;
+#X obj 175 121 symbol;
+#X obj 176 94 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 248 163 symbol;
+#X obj 249 136 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 248 191 set \$1;
+#X symbolatom 311 101 25 0 0 0 - - -;
+#X connect 1 0 2 0;
+#X connect 1 1 2 1;
+#X connect 2 2 4 1;
+#X connect 2 2 6 1;
+#X connect 2 2 9 0;
+#X connect 3 0 0 0;
+#X connect 4 0 3 0;
+#X connect 5 0 4 0;
+#X connect 6 0 8 0;
+#X connect 7 0 6 0;
+#X connect 8 0 0 0;
+#X restore 423 135 pd midi;
+#N canvas 0 0 454 304 fileIO 0;
+#X obj 143 225 outlet;
+#X msg 115 77 write test.graph;
+#X msg 145 105 read test.graph;
+#X msg 175 135 init 1;
+#X connect 1 0 0 0;
+#X connect 2 0 0 0;
+#X connect 3 0 0 0;
+#X restore 340 134 pd fileIO;
+#X obj 100 73 t b b;
+#X obj 157 228 t b a;
+#X obj 28 404 bang;
+#X obj 203 420 mtof;
+#X obj 252 419 mtof;
+#X obj 337 423 mtof;
+#X obj 180 601 dac~;
+#X obj 109 431 print;
+#X obj 74 111 f 1;
+#X msg 59 135 next \$1;
+#X obj 63 70 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144 -1
+-1 2900 1;
+#X floatatom 32 112 5 0 0 0 - - -;
+#X obj 178 571 csoundapi~ bay.orc;
+#X msg 488 520 event i 10 0 17000 10 30;
+#X msg 488 543 event i 30 0 17000 2 30;
+#X msg 489 496 event i 25 0 17000 0.98 0.8 20000;
+#X obj 482 458 loadbang;
+#X msg 196 492 event i 9 0 10 \$1 80 0.5;
+#X obj 295 422 mtof;
+#X obj 381 424 mtof;
+#X obj 462 22 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 462 41 metro 7000;
+#X obj 13 32 r novelty;
+#X obj 599 121 int 0;
+#X obj 646 120 + 1;
+#X obj 600 171 tabread tab-novelty;
+#X obj 600 194 s novelty;
+#X obj 685 119 table tab-novelty;
+#X obj 600 147 % 10;
+#X obj 462 63 t b b;
+#X msg 467 377 \; tab-novelty 0 1 1 0.8 0.7 0.3 0.5 0.9 0.1 0 0.2;
+#X obj 220 96 symbol;
+#X msg 220 124 tonality \$1;
+#X obj 220 72 bng 15 250 50 0 empty empty change 0 -6 0 8 -262144 -1
+-1;
+#X obj 19 160 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X symbolatom 305 204 15 0 0 2 tonality - -;
+#X obj 83 169 chords_memory test.graph;
+#X connect 2 0 15 0;
+#X connect 2 0 28 0;
+#X connect 3 0 2 0;
+#X connect 4 0 2 0;
+#X connect 5 0 3 0;
+#X connect 6 0 5 0;
+#X connect 7 0 4 0;
+#X connect 8 0 13 0;
+#X connect 9 0 13 1;
+#X connect 10 0 13 2;
+#X connect 11 0 13 3;
+#X connect 12 0 13 4;
+#X connect 13 0 2 0;
+#X connect 14 0 8 0;
+#X connect 14 1 9 0;
+#X connect 14 2 10 0;
+#X connect 14 3 11 0;
+#X connect 14 4 12 0;
+#X connect 15 0 8 1;
+#X connect 15 0 23 0;
+#X connect 15 0 24 0;
+#X connect 15 1 9 1;
+#X connect 15 1 25 0;
+#X connect 15 2 10 1;
+#X connect 15 2 39 0;
+#X connect 15 3 11 1;
+#X connect 15 3 26 0;
+#X connect 15 4 12 1;
+#X connect 15 4 40 0;
+#X connect 16 0 18 0;
+#X connect 17 0 21 0;
+#X connect 18 0 57 0;
+#X connect 19 0 57 0;
+#X connect 20 0 57 0;
+#X connect 21 0 29 0;
+#X connect 22 0 14 0;
+#X connect 22 1 7 0;
+#X connect 23 0 5 0;
+#X connect 24 0 38 0;
+#X connect 25 0 38 0;
+#X connect 26 0 38 0;
+#X connect 29 0 30 0;
+#X connect 30 0 57 0;
+#X connect 31 0 29 1;
+#X connect 31 0 32 0;
+#X connect 33 0 27 0;
+#X connect 33 1 27 1;
+#X connect 34 0 33 0;
+#X connect 35 0 33 0;
+#X connect 36 0 33 0;
+#X connect 37 0 36 0;
+#X connect 37 0 34 0;
+#X connect 37 0 35 0;
+#X connect 37 0 51 0;
+#X connect 38 0 33 0;
+#X connect 39 0 38 0;
+#X connect 40 0 38 0;
+#X connect 41 0 42 0;
+#X connect 42 0 50 0;
+#X connect 43 0 31 0;
+#X connect 44 0 45 0;
+#X connect 44 0 49 0;
+#X connect 45 0 44 1;
+#X connect 46 0 47 0;
+#X connect 49 0 46 0;
+#X connect 50 0 21 0;
+#X connect 50 1 44 0;
+#X connect 52 0 53 0;
+#X connect 53 0 57 0;
+#X connect 54 0 52 0;
+#X connect 55 0 57 0;
+#X connect 57 0 0 0;
+#X connect 57 0 5 1;
+#X connect 57 0 22 0;
+#X connect 57 0 52 1;
+#X connect 57 0 16 0;
+#X connect 57 1 56 0;
diff --git a/patches/test.graph b/patches/test.graph
new file mode 100755
index 0000000..0c18d7e
--- /dev/null
+++ b/patches/test.graph
Binary files differ