From eb9ef05774af20edb43118182834c18a4ac70707 Mon Sep 17 00:00:00 2001 From: Davide Morelli Date: Tue, 18 Oct 2005 23:10:53 +0000 Subject: initial checkin svn path=/trunk/externals/frankenstein/; revision=3734 --- patches/SHOWME.pd | 28 +++ patches/bay.orc | 418 ++++++++++++++++++++++++++++++++++++++++++++ patches/test-harmonizer2.pd | 185 ++++++++++++++++++++ patches/test.graph | Bin 0 -> 57604 bytes 4 files changed, 631 insertions(+) create mode 100755 patches/SHOWME.pd create mode 100755 patches/bay.orc create mode 100755 patches/test-harmonizer2.pd create mode 100755 patches/test.graph (limited to 'patches') 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 Binary files /dev/null and b/patches/test.graph differ -- cgit v1.2.1