From cdf8ded57019d5c905f16422d40be7b1a18ab3bc Mon Sep 17 00:00:00 2001 From: Tom Schouten Date: Tue, 21 Jan 2003 10:18:19 +0000 Subject: This commit was generated by cvs2svn to compensate for changes in r350, which included commits to RCS files with non-trunk default branches. svn path=/trunk/externals/creb/; revision=351 --- doc/bdiag~.pd | 97 +++++++++++++++++++++++++++++++++++++++++++ doc/bfft~.pd | 18 ++++++++ doc/biquadseries~.pd | 22 ++++++++++ doc/cheby~.pd | 43 +++++++++++++++++++ doc/dist~.pd | 17 ++++++++ doc/dwt~.pd | 72 ++++++++++++++++++++++++++++++++ doc/dynwav~.pd | 25 +++++++++++ doc/eadsr~.pd | 41 ++++++++++++++++++ doc/ead~.pd | 29 +++++++++++++ doc/ear~.pd | 35 ++++++++++++++++ doc/examples/xfmdelay.pd | 106 +++++++++++++++++++++++++++++++++++++++++++++++ doc/ffpoly.pd | 35 ++++++++++++++++ doc/filterortho~.pd | 58 ++++++++++++++++++++++++++ doc/fwarp.pd | 37 +++++++++++++++++ doc/lattice~.pd | 63 ++++++++++++++++++++++++++++ doc/matrix~.pd | 10 +++++ doc/permut~.pd | 19 +++++++++ doc/qmult~.pd | 63 ++++++++++++++++++++++++++++ doc/qnorm~.pd | 35 ++++++++++++++++ doc/ratio.pd | 18 ++++++++ doc/reference.txt | 49 ++++++++++++++++++++++ doc/tabreadmix~.pd | 45 ++++++++++++++++++++ doc/xfm~.pd | 106 +++++++++++++++++++++++++++++++++++++++++++++++ 23 files changed, 1043 insertions(+) create mode 100644 doc/bdiag~.pd create mode 100644 doc/bfft~.pd create mode 100644 doc/biquadseries~.pd create mode 100644 doc/cheby~.pd create mode 100644 doc/dist~.pd create mode 100644 doc/dwt~.pd create mode 100644 doc/dynwav~.pd create mode 100644 doc/eadsr~.pd create mode 100644 doc/ead~.pd create mode 100644 doc/ear~.pd create mode 100644 doc/examples/xfmdelay.pd create mode 100644 doc/ffpoly.pd create mode 100644 doc/filterortho~.pd create mode 100644 doc/fwarp.pd create mode 100644 doc/lattice~.pd create mode 100644 doc/matrix~.pd create mode 100644 doc/permut~.pd create mode 100644 doc/qmult~.pd create mode 100644 doc/qnorm~.pd create mode 100644 doc/ratio.pd create mode 100644 doc/reference.txt create mode 100644 doc/tabreadmix~.pd create mode 100644 doc/xfm~.pd (limited to 'doc') diff --git a/doc/bdiag~.pd b/doc/bdiag~.pd new file mode 100644 index 0000000..f5e835f --- /dev/null +++ b/doc/bdiag~.pd @@ -0,0 +1,97 @@ +#N canvas 34 203 724 407 10; +#X obj 34 45 metro; +#X msg 34 20 bang; +#X floatatom 76 20 5 0 0; +#X obj 34 327 dist~ 1; +#X obj 24 359 dac~; +#N canvas 731 115 262 403 systemparams 1; +#X floatatom 81 47 5 0 0; +#X floatatom 125 47 5 0 0; +#X floatatom 81 74 5 0 0; +#X floatatom 125 74 5 0 0; +#X floatatom 81 102 5 0 0; +#X floatatom 125 102 5 0 0; +#X floatatom 81 129 5 0 0; +#X floatatom 125 129 5 0 0; +#X floatatom 81 157 5 0 0; +#X floatatom 125 157 5 0 0; +#X floatatom 81 184 5 0 0; +#X floatatom 125 184 5 0 0; +#X floatatom 81 212 5 0 0; +#X floatatom 125 212 5 0 0; +#X floatatom 81 239 5 0 0; +#X floatatom 125 239 5 0 0; +#X obj 28 65 bdft 1; +#X obj 27 93 bdft 2; +#X obj 28 120 bdft 3; +#X obj 28 175 bdft 7; +#X obj 28 202 bdft 11; +#X obj 28 230 bdft 17; +#X obj 28 257 bdft 30; +#X obj 28 319 outlet; +#X text 20 23 frequency detune and damping; +#X text 49 283 bdft argument = harmonic; +#X obj 28 147 bdft 5; +#X connect 0 0 16 0; +#X connect 1 0 16 1; +#X connect 2 0 17 0; +#X connect 3 0 17 1; +#X connect 4 0 18 0; +#X connect 5 0 18 1; +#X connect 6 0 26 0; +#X connect 7 0 26 1; +#X connect 8 0 19 0; +#X connect 9 0 19 1; +#X connect 10 0 20 0; +#X connect 11 0 20 1; +#X connect 12 0 21 0; +#X connect 13 0 21 1; +#X connect 14 0 22 0; +#X connect 15 0 22 1; +#X connect 16 0 23 0; +#X connect 17 0 23 0; +#X connect 18 0 23 0; +#X connect 19 0 23 0; +#X connect 20 0 23 0; +#X connect 21 0 23 0; +#X connect 22 0 23 0; +#X connect 26 0 23 0; +#X restore 89 76 pd systemparams; +#X obj 34 93 bdiag~; +#X obj 34 129 ibfft~; +#X obj 34 232 dynwav~; +#X obj 34 283 vol~; +#X floatatom 57 257 5 0 0; +#X floatatom 78 168 5 0 0; +#X obj 78 196 phasor~; +#X text 258 168 the [eig ] message sets the eigenvalue +for the corresponding block. there are n/2 blocks \, with n the dsp +blocksize.; +#X text 259 223 you can use [timefreq <60dB time> ] +for a more appropriate initialization of the eigenvalues using decay +time in milliseconds and oscillation frequency in Hz.; +#X text 256 18 bdiag~: parallel block diagonal state space model (parallel +2d rotations) see bdiag.c for more info. the state equations for one +block are:; +#X text 300 70 state1 = real * state1 - imag * state2 + input1; +#X text 300 85 state2 = real * state2 + imag * state1 + input2; +#X text 258 121 this module is intended to "filter" spectral data produced +by bfft or other short time spectral transforms like dwt.; +#X text 256 279 [bang] or [random] set the state vector to a random +value. [reset] sets it to 0; +#X text 256 327 this patch uses of bdiag~ \, ibfft~ and dynwav~ to +build a 32 voice harmonic modal synth \, with the state excited with +white noise on bang.; +#X connect 0 0 6 0; +#X connect 1 0 0 0; +#X connect 2 0 0 1; +#X connect 3 0 4 0; +#X connect 3 0 4 1; +#X connect 5 0 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 9 0 3 0; +#X connect 10 0 9 1; +#X connect 11 0 12 0; +#X connect 12 0 8 1; diff --git a/doc/bfft~.pd b/doc/bfft~.pd new file mode 100644 index 0000000..62507f9 --- /dev/null +++ b/doc/bfft~.pd @@ -0,0 +1,18 @@ +#N canvas 488 64 480 309 10; +#X obj 17 62 osc~ 500; +#X floatatom 17 -11 5 0 0; +#X obj 17 23 * 187.5; +#X obj 17 180 tabsend~ scope; +#N canvas 0 0 450 300 graph2 0; +#X array scope 64 float 0; +#X coords 0 1 63 -1 200 140 1; +#X restore 233 16 graph; +#X obj 18 113 bfft~; +#X obj 71 112 ibfft~; +#X text 12 -60 spectrum: (DC \, NY) \, (R1 \, I1) \, ...(RN-1 \, IN-1) +; +#X text 13 -74 like fft~ but normalized and; +#X connect 0 0 5 0; +#X connect 1 0 2 0; +#X connect 2 0 0 0; +#X connect 5 0 3 0; diff --git a/doc/biquadseries~.pd b/doc/biquadseries~.pd new file mode 100644 index 0000000..89d7ce0 --- /dev/null +++ b/doc/biquadseries~.pd @@ -0,0 +1,22 @@ +#N canvas 389 207 533 299 10; +#X obj 37 246 dac~; +#X msg 81 132 butterLP \$1; +#X msg 173 131 butterHP \$1; +#X floatatom 81 105 5 0 0; +#X floatatom 173 104 5 0 0; +#X obj 48 78 *~; +#X floatatom 82 55 5 0 0; +#X obj 48 35 noise~; +#X text 269 132 butterworth lowpass and highpass; +#X text 181 178 creation argument: number of 2nd order sections; +#X obj 48 178 biquadseries~ 4; +#X text 173 22 biquadseries~ second order iir series section; +#X connect 1 0 10 0; +#X connect 2 0 10 0; +#X connect 3 0 1 0; +#X connect 4 0 2 0; +#X connect 5 0 10 0; +#X connect 6 0 5 1; +#X connect 7 0 5 0; +#X connect 10 0 0 0; +#X connect 10 0 0 1; diff --git a/doc/cheby~.pd b/doc/cheby~.pd new file mode 100644 index 0000000..30bb77e --- /dev/null +++ b/doc/cheby~.pd @@ -0,0 +1,43 @@ +#N canvas 262 87 566 348 10; +#X obj 130 230 cheby~ 4; +#X msg 147 149 coef 1 \$1; +#X floatatom 147 93 5 0 0; +#X obj 147 117 dbtorms; +#X obj 124 313 dac~; +#X obj 130 281 vol~; +#X floatatom 156 261 5 0 0; +#X obj 40 113 osc~; +#X floatatom 40 88 5 0 0; +#X floatatom 226 94 5 0 0; +#X obj 226 118 dbtorms; +#X floatatom 305 94 5 0 0; +#X obj 305 118 dbtorms; +#X floatatom 384 93 5 0 0; +#X obj 384 117 dbtorms; +#X msg 226 150 coef 2 \$1; +#X msg 305 150 coef 3 \$1; +#X msg 384 150 coef 4 \$1; +#X text 96 3 chebychev waveshaper; +#X text 207 229 creation argument: order of polynomial; +#X text 135 47 coef n x sets coefficient of nth order cheby poly to +x; +#X text 135 60 if the input is a sine wave \, these are the amplitudes +for the harmonics.; +#X connect 0 0 5 0; +#X connect 1 0 0 0; +#X connect 2 0 3 0; +#X connect 3 0 1 0; +#X connect 5 0 4 1; +#X connect 5 0 4 0; +#X connect 6 0 5 1; +#X connect 7 0 0 0; +#X connect 8 0 7 0; +#X connect 9 0 10 0; +#X connect 10 0 15 0; +#X connect 11 0 12 0; +#X connect 12 0 16 0; +#X connect 13 0 14 0; +#X connect 14 0 17 0; +#X connect 15 0 0 0; +#X connect 16 0 0 0; +#X connect 17 0 0 0; diff --git a/doc/dist~.pd b/doc/dist~.pd new file mode 100644 index 0000000..3533471 --- /dev/null +++ b/doc/dist~.pd @@ -0,0 +1,17 @@ +#N canvas 497 336 450 300 10; +#X text 156 35 dist~ waveshaper; +#X text 154 53 creation argument: type (see dist.c); +#X floatatom 136 120 5 0 0; +#X obj 64 121 osc~; +#X obj 66 206 dac~; +#X floatatom 63 84 5 0 0; +#X text 189 119 right inlet: pre gain; +#X obj 148 95 hsl 128 15 0.5 20 0 0 empty empty empty -2 -6 32 8 -262144 +-1 -1 7000 1; +#X obj 64 157 dist~ 1; +#X connect 2 0 8 1; +#X connect 3 0 8 0; +#X connect 5 0 3 0; +#X connect 7 0 2 0; +#X connect 8 0 4 0; +#X connect 8 0 4 1; diff --git a/doc/dwt~.pd b/doc/dwt~.pd new file mode 100644 index 0000000..52986e1 --- /dev/null +++ b/doc/dwt~.pd @@ -0,0 +1,72 @@ +#N canvas 47 99 994 611 10; +#X obj 17 62 osc~ 500; +#X msg 83 -115 predict 0.5 0.5 \, update 0.25 0.25; +#X msg 83 -76 predict -0.0625 0.5625 0.5625 -0.0625 \, update -0.03125 +0.28125 0.28125 -0.03125; +#X floatatom 24 10 5 0 0; +#X msg 201 144 mask -1 9 9 -1; +#X obj 67 279 r coef; +#X obj 82 -30 s coef; +#X obj 195 337 s coef; +#X msg 201 167 mask 3 -25 150 150 -25 3; +#X msg 216 189 mask -5 49 -245 1225 1225 -245 49 -5; +#X obj 196 39 pack; +#X floatatom 222 8 5 0 0; +#X floatatom 166 -4 5 0 0; +#X msg 171 64 coef \$1 \$2; +#X msg 191 120 mask 1 1; +#X msg 228 212 mask 35 -405 2268 -8820 39690 39690 -8820 2268 -405 +35; +#X msg 244 246 mask -63 847 -5445 22869 -76230 320166 320166 -76230 +22869 -5445 847 -63; +#X msg 245 306 predict 1 0 \, update 0 0.5; +#X obj 36 31 * 187.5; +#X obj 26 341 dwt~ 1; +#X obj 80 343 idwt~ 1; +#X msg 469 376 mask 0 0 0 35 140 -70 28 -5; +#X msg 469 352 mask 7 -45 126 -210 315 63 0 0 0 0; +#X msg 469 328 mask -21 154 -495 924 -1155 1386 231 0 0 0 0 0; +#X obj 26 443 tabsend~ scope; +#N canvas 0 0 450 300 graph2 0; +#X array scope 256 float 0; +#X coords 0 1 255 -1 200 140 1; +#X restore 718 -98 graph; +#X text 61 165 print out coefs; +#X msg 100 184 print; +#X text 315 -24 dwt~ performs a discrete wavelet transform; +#X text 315 -10 idwt~ performs the inverse transform; +#X text 309 105 mask sets the predict mask \, and uses the corresponding +update mask; +#X text 266 63 coef sets half of a symmetric predict mask; +#X text 243 286 predict and update masks can be specified explicitly +; +#X text 433 307 haar wavelet; +#X msg 672 189 even \$1; +#X floatatom 672 167 5 0 0; +#X text 570 134 even is the order symmetric interpolating biorthogonal +wavelet with n vanishing moments.; +#X connect 0 0 19 0; +#X connect 1 0 6 0; +#X connect 2 0 6 0; +#X connect 3 0 18 0; +#X connect 4 0 7 0; +#X connect 5 0 20 0; +#X connect 5 0 19 0; +#X connect 8 0 7 0; +#X connect 9 0 7 0; +#X connect 10 0 13 0; +#X connect 11 0 10 1; +#X connect 12 0 10 0; +#X connect 13 0 7 0; +#X connect 14 0 7 0; +#X connect 15 0 7 0; +#X connect 16 0 7 0; +#X connect 17 0 7 0; +#X connect 18 0 0 0; +#X connect 19 0 24 0; +#X connect 21 0 7 0; +#X connect 22 0 7 0; +#X connect 23 0 7 0; +#X connect 27 0 7 0; +#X connect 34 0 7 0; +#X connect 35 0 34 0; diff --git a/doc/dynwav~.pd b/doc/dynwav~.pd new file mode 100644 index 0000000..59f86bd --- /dev/null +++ b/doc/dynwav~.pd @@ -0,0 +1,25 @@ +#N canvas 193 151 450 300 10; +#X text 96 6 dynwav~: dynamic wavetable oscillator; +#X obj 61 98 osc~; +#X floatatom 60 56 5 0 0; +#X obj 60 151 dynwav~; +#X obj 60 214 vol~; +#X floatatom 85 190 5 0 0; +#X obj 50 256 dac~; +#X obj 172 105 phasor~; +#X floatatom 172 80 5 0 0; +#X obj 107 54 bang~; +#X text 171 22 (scanned synthesis); +#X text 165 143 left inlet's dsp block = wavetable; +#X msg 107 78 0.25; +#X text 242 157 right inlet = phase (0-1); +#X connect 1 0 3 0; +#X connect 2 0 1 0; +#X connect 3 0 4 0; +#X connect 4 0 6 1; +#X connect 4 0 6 0; +#X connect 5 0 4 1; +#X connect 7 0 3 1; +#X connect 8 0 7 0; +#X connect 9 0 12 0; +#X connect 12 0 1 1; diff --git a/doc/eadsr~.pd b/doc/eadsr~.pd new file mode 100644 index 0000000..220ea54 --- /dev/null +++ b/doc/eadsr~.pd @@ -0,0 +1,41 @@ +#N canvas 478 386 580 306 10; +#X obj 89 227 *~; +#X obj 105 40 metro; +#X obj 105 12 bng 15 250 50 0 empty empty empty 0 -6 32 8 -262144 -1 +-1; +#X obj 26 203 osc~; +#X floatatom 26 171 5 0 0; +#X floatatom 135 12 5 0 0; +#X floatatom 209 117 5 0 0; +#X floatatom 208 139 5 0 0; +#X obj 77 265 dac~; +#X msg 58 12 stop; +#X msg 26 124 start; +#X msg 71 123 stop; +#X obj 105 77 del; +#X floatatom 159 50 5 0 0; +#X obj 105 197 eadsr~ 0 0; +#X text 191 81 exponential attack/decay/sustain/release envelope; +#X text 265 125 60db attack and decay time; +#X text 265 182 60db attack and decay time; +#X floatatom 209 160 5 0 0; +#X floatatom 209 180 5 0 0; +#X text 264 159 sustain level; +#X connect 0 0 8 0; +#X connect 0 0 8 1; +#X connect 1 0 10 0; +#X connect 1 0 12 0; +#X connect 2 0 1 0; +#X connect 3 0 0 0; +#X connect 4 0 3 0; +#X connect 5 0 1 1; +#X connect 6 0 14 1; +#X connect 7 0 14 2; +#X connect 9 0 1 0; +#X connect 10 0 14 0; +#X connect 11 0 14 0; +#X connect 12 0 11 0; +#X connect 13 0 12 1; +#X connect 14 0 0 1; +#X connect 18 0 14 3; +#X connect 19 0 14 4; diff --git a/doc/ead~.pd b/doc/ead~.pd new file mode 100644 index 0000000..9d9bc5f --- /dev/null +++ b/doc/ead~.pd @@ -0,0 +1,29 @@ +#N canvas 478 386 459 306 10; +#X obj 105 111 ead~ 0 0; +#X obj 89 179 *~; +#X obj 105 40 metro; +#X obj 105 12 bng 15 250 50 0 empty empty empty 0 -6 32 8 -262144 -1 +-1; +#X obj 41 144 osc~; +#X floatatom 41 112 5 0 0; +#X floatatom 135 12 5 0 0; +#X floatatom 130 64 5 0 0; +#X floatatom 156 86 5 0 0; +#X obj 77 217 dac~; +#X text 202 71 60db attack and decay time; +#X obj 70 76 bng 15 250 50 0 empty empty empty 0 -6 32 8 -262144 -1 +-1; +#X msg 58 12 stop; +#X text 201 51 exponential attack/decay envelope; +#X connect 0 0 1 1; +#X connect 1 0 9 0; +#X connect 1 0 9 1; +#X connect 2 0 0 0; +#X connect 3 0 2 0; +#X connect 4 0 1 0; +#X connect 5 0 4 0; +#X connect 6 0 2 1; +#X connect 7 0 0 1; +#X connect 8 0 0 2; +#X connect 11 0 0 0; +#X connect 12 0 2 0; diff --git a/doc/ear~.pd b/doc/ear~.pd new file mode 100644 index 0000000..8527a12 --- /dev/null +++ b/doc/ear~.pd @@ -0,0 +1,35 @@ +#N canvas 478 386 459 306 10; +#X obj 89 227 *~; +#X obj 105 40 metro; +#X obj 105 12 bng 15 250 50 0 empty empty empty 0 -6 32 8 -262144 -1 +-1; +#X obj 41 192 osc~; +#X floatatom 41 160 5 0 0; +#X floatatom 135 12 5 0 0; +#X floatatom 130 112 5 0 0; +#X floatatom 157 134 5 0 0; +#X obj 77 265 dac~; +#X msg 58 12 stop; +#X msg 26 124 start; +#X msg 71 123 stop; +#X obj 105 159 ear~ 0 0; +#X obj 105 77 del; +#X floatatom 159 50 5 0 0; +#X text 201 99 exponential attack/release envelope; +#X text 202 119 60db attack and release time; +#X connect 0 0 8 0; +#X connect 0 0 8 1; +#X connect 1 0 10 0; +#X connect 1 0 13 0; +#X connect 2 0 1 0; +#X connect 3 0 0 0; +#X connect 4 0 3 0; +#X connect 5 0 1 1; +#X connect 6 0 12 1; +#X connect 7 0 12 2; +#X connect 9 0 1 0; +#X connect 10 0 12 0; +#X connect 11 0 12 0; +#X connect 12 0 0 1; +#X connect 13 0 11 0; +#X connect 14 0 13 1; diff --git a/doc/examples/xfmdelay.pd b/doc/examples/xfmdelay.pd new file mode 100644 index 0000000..078733a --- /dev/null +++ b/doc/examples/xfmdelay.pd @@ -0,0 +1,106 @@ +#N canvas 25 206 921 653 10; +#X obj 289 329 xfm~ 0 0 0 0; +#X obj 279 280 *~; +#X obj 398 233 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -6 0 10 +-262144 -1 -1 862.744 256; +#X obj 306 279 *~; +#X obj 398 250 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -6 0 10 +-262144 -1 -1 795.103 256; +#X obj 332 279 *~; +#X obj 399 266 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -6 0 10 +-262144 -1 -1 23.7527 256; +#X obj 359 278 *~; +#X obj 398 284 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -6 0 10 +-262144 -1 -1 224.294 256; +#X obj 251 170 xfm~ 0 0 0 0; +#X obj 392 111 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -6 0 10 +-262144 -1 -1 703.454 256; +#X obj 392 132 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -6 0 10 +-262144 -1 -1 675.315 256; +#X obj 304 138 *~; +#X obj 393 148 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -6 0 10 +-262144 -1 -1 51.5902 256; +#X obj 331 137 *~; +#X obj 392 166 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -6 0 10 +-262144 -1 -1 49.5265 256; +#X obj 191 403 vols~; +#X floatatom 233 374 5 0 0; +#X obj 195 525 dac~; +#X obj 274 51 vd~ del1; +#X obj 274 24 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -6 0 10 +-262144 -1 -1 73 256; +#X obj 339 23 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -6 0 10 +-262144 -1 -1 339 256; +#X obj 339 50 vd~ del2; +#X obj 296 393 delwrite~ del1 1000; +#X obj 448 393 delwrite~ del2 1000; +#X msg 136 125 type 0; +#X msg 137 146 type 1; +#X obj 464 110 hsl 300 15 0.1 20000 1 1 empty empty empty -2 -6 0 8 +-262144 -1 -1 21700 1; +#X obj 464 130 hsl 300 15 0.1 20000 1 1 empty empty empty -2 -6 0 8 +-262144 -1 -1 21600 1; +#X obj 463 150 hsl 300 15 0.1 20000 1 1 empty empty empty -2 -6 0 8 +-262144 -1 -1 15300 1; +#X obj 464 168 hsl 300 15 0.1 20000 1 1 empty empty empty -2 -6 0 8 +-262144 -1 -1 15200 1; +#X obj 465 232 hsl 300 15 0.1 20000 1 1 empty empty empty -2 -6 0 8 +-262144 -1 -1 22200 1; +#X obj 465 252 hsl 300 15 0.1 20000 1 1 empty empty empty -2 -6 0 8 +-262144 -1 -1 22000 1; +#X obj 464 271 hsl 300 15 0.1 20000 1 1 empty empty empty -2 -6 0 8 +-262144 -1 -1 13400 1; +#X obj 465 289 hsl 300 15 0.1 20000 1 1 empty empty empty -2 -6 0 8 +-262144 -1 -1 18900 1; +#X text 479 29 2 xfm oscillators coupled by 2 delay lines; +#X obj 188 475 *~; +#X obj 217 474 *~; +#X obj 270 458 osc~; +#X obj 269 433 hsl 300 15 0.1 20000 1 1 empty empty empty -2 -6 0 8 +-262144 -1 -1 18900 1; +#X connect 0 0 23 0; +#X connect 0 1 24 0; +#X connect 1 0 0 0; +#X connect 2 0 1 1; +#X connect 3 0 0 1; +#X connect 4 0 3 1; +#X connect 5 0 0 2; +#X connect 6 0 5 1; +#X connect 7 0 0 3; +#X connect 8 0 7 1; +#X connect 9 0 3 0; +#X connect 9 0 5 0; +#X connect 9 0 16 0; +#X connect 9 1 1 0; +#X connect 9 1 7 0; +#X connect 9 1 16 1; +#X connect 10 0 9 0; +#X connect 11 0 9 1; +#X connect 12 0 9 2; +#X connect 13 0 12 1; +#X connect 14 0 9 3; +#X connect 15 0 14 1; +#X connect 16 0 36 0; +#X connect 16 1 37 0; +#X connect 17 0 16 2; +#X connect 19 0 12 0; +#X connect 20 0 19 0; +#X connect 21 0 22 0; +#X connect 22 0 14 0; +#X connect 25 0 9 0; +#X connect 25 0 0 0; +#X connect 26 0 9 0; +#X connect 26 0 0 0; +#X connect 27 0 10 0; +#X connect 28 0 11 0; +#X connect 29 0 13 0; +#X connect 30 0 15 0; +#X connect 31 0 2 0; +#X connect 32 0 4 0; +#X connect 33 0 6 0; +#X connect 34 0 8 0; +#X connect 36 0 18 0; +#X connect 37 0 18 1; +#X connect 38 0 37 1; +#X connect 38 0 36 1; +#X connect 39 0 38 0; diff --git a/doc/ffpoly.pd b/doc/ffpoly.pd new file mode 100644 index 0000000..7ec8886 --- /dev/null +++ b/doc/ffpoly.pd @@ -0,0 +1,35 @@ +#N canvas 372 77 515 425 10; +#X text 85 14 ffpoly - compute a finite field polynomial; +#X msg 103 89 coef 0 \$1; +#X floatatom 103 65 5 0 0; +#X floatatom 181 65 5 0 0; +#X floatatom 257 65 5 0 0; +#X floatatom 334 64 5 0 0; +#X msg 181 89 coef 1 \$1; +#X msg 257 89 coef 2 \$1; +#X msg 334 89 coef 3 \$1; +#X floatatom 38 106 5 0 0; +#X obj 38 350 ffpoly 3 5; +#X text 125 350 creation args: ; +#X floatatom 38 384 5 0 0; +#X msg 334 150 order \$1; +#X floatatom 334 125 5 0 0; +#X text 332 174 finite field order; +#X floatatom 335 217 5 0 0; +#X msg 335 242 coefficients \$1; +#X text 271 279 set coefs in packed form; +#X text 203 292 digit representation in base = field order; +#X connect 1 0 10 0; +#X connect 2 0 1 0; +#X connect 3 0 6 0; +#X connect 4 0 7 0; +#X connect 5 0 8 0; +#X connect 6 0 10 0; +#X connect 7 0 10 0; +#X connect 8 0 10 0; +#X connect 9 0 10 0; +#X connect 10 0 12 0; +#X connect 13 0 10 0; +#X connect 14 0 13 0; +#X connect 16 0 17 0; +#X connect 17 0 10 0; diff --git a/doc/filterortho~.pd b/doc/filterortho~.pd new file mode 100644 index 0000000..e120101 --- /dev/null +++ b/doc/filterortho~.pd @@ -0,0 +1,58 @@ +#N canvas 634 361 578 534 10; +#X obj 146 452 dac~; +#X floatatom 255 83 7 0 0; +#X floatatom 194 83 7 0 0; +#X obj 158 405 filterortho~; +#X obj 194 123 t b f; +#X floatatom 29 31 5 0 0; +#X obj 13 9 noise~; +#X floatatom 133 83 7 0 0; +#X obj 150 123 t b f; +#X obj 13 52 *~; +#X text 333 9 orthogonal biquad object; +#X obj 157 330 pack s 0 0 0; +#X obj 237 122 t b f; +#X text 137 61 freq; +#X text 213 61 Q; +#X msg 335 126 setEQ; +#X msg 335 150 setLP; +#X msg 158 363 \$1 \$2 \$3 \$4; +#X msg 336 175 setHP; +#X msg 336 201 setBP; +#X msg 336 225 setBR; +#X msg 336 251 setHS; +#X msg 337 275 setLS; +#X msg 338 299 setAP; +#X text 391 127 parametric equalizer; +#X text 390 150 lowpass; +#X text 391 175 highpass; +#X text 391 201 bandpass; +#X text 391 224 bandreject; +#X text 390 252 highshelf; +#X text 390 277 lowshelf; +#X text 391 300 allpass; +#X text 265 62 gain (only for EQ \, LS \, HS); +#X connect 1 0 12 0; +#X connect 2 0 4 0; +#X connect 3 0 0 0; +#X connect 3 0 0 1; +#X connect 4 0 11 0; +#X connect 4 1 11 2; +#X connect 5 0 9 1; +#X connect 6 0 9 0; +#X connect 7 0 8 0; +#X connect 8 0 11 0; +#X connect 8 1 11 1; +#X connect 9 0 3 0; +#X connect 11 0 17 0; +#X connect 12 0 11 0; +#X connect 12 1 11 3; +#X connect 15 0 11 0; +#X connect 16 0 11 0; +#X connect 17 0 3 0; +#X connect 18 0 11 0; +#X connect 19 0 11 0; +#X connect 20 0 11 0; +#X connect 21 0 11 0; +#X connect 22 0 11 0; +#X connect 23 0 11 0; diff --git a/doc/fwarp.pd b/doc/fwarp.pd new file mode 100644 index 0000000..d43a5a3 --- /dev/null +++ b/doc/fwarp.pd @@ -0,0 +1,37 @@ +#N canvas 403 309 522 388 10; +#X obj 18 85 fwarp; +#X floatatom 18 53 5 0 0; +#X floatatom 18 121 7 0 0; +#X text 112 49 fwarp - warps a frequency using the formula; +#X obj 173 261 xfm~ 0 0 0 0; +#X obj 173 218 fwarp; +#X floatatom 173 186 5 0 0; +#X obj 117 260 osc~; +#X obj 152 324 vol~; +#X obj 152 350 dac~; +#X floatatom 212 298 5 0 0; +#X obj 351 263 xfm~ 0 0 0 0; +#X floatatom 351 188 5 0 0; +#X obj 295 262 osc~; +#X obj 330 326 vol~; +#X obj 330 352 dac~; +#X floatatom 390 300 5 0 0; +#X text 132 126 example: xfm~ uses warped frequencies; +#X text 112 67 out = tan(2pi*in/sr) * (sr/2pi); +#X connect 0 0 2 0; +#X connect 1 0 0 0; +#X connect 4 0 8 0; +#X connect 5 0 4 0; +#X connect 6 0 5 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 8 0 9 1; +#X connect 10 0 8 1; +#X connect 11 0 14 0; +#X connect 12 0 13 0; +#X connect 12 0 11 0; +#X connect 13 0 14 0; +#X connect 14 0 15 0; +#X connect 14 0 15 1; +#X connect 16 0 14 1; diff --git a/doc/lattice~.pd b/doc/lattice~.pd new file mode 100644 index 0000000..4545470 --- /dev/null +++ b/doc/lattice~.pd @@ -0,0 +1,63 @@ +#N canvas 338 162 527 557 10; +#X obj 57 -77 vsl 15 250 -1 1 0 1 empty empty empty 20 8 32 8 -262144 +-1 -1 12100 1; +#X msg 57 223 rc 0 \$1; +#X obj 88 -78 vsl 15 250 -1 1 0 1 empty empty empty 20 8 32 8 -262144 +-1 -1 7150 1; +#X obj 119 -77 vsl 15 250 -1 1 0 1 empty empty empty 20 8 32 8 -262144 +-1 -1 5150 1; +#X obj 149 -77 vsl 15 250 -1 1 0 1 empty empty empty 20 8 32 8 -262144 +-1 -1 8100 1; +#X obj 179 -77 vsl 15 250 -1 1 0 1 empty empty empty 20 8 32 8 -262144 +-1 -1 11850 1; +#X obj 210 -78 vsl 15 250 -1 1 0 1 empty empty empty 20 8 32 8 -262144 +-1 -1 15850 1; +#X obj 241 -78 vsl 15 250 -1 1 0 1 empty empty empty 20 8 32 8 -262144 +-1 -1 17550 1; +#X obj 271 -77 vsl 15 250 -1 1 0 1 empty empty empty 20 8 32 8 -262144 +-1 -1 15050 1; +#X msg 86 199 rc 1 \$1; +#X msg 118 224 rc 2 \$1; +#X msg 147 200 rc 3 \$1; +#X msg 179 223 rc 4 \$1; +#X msg 208 199 rc 5 \$1; +#X msg 240 224 rc 6 \$1; +#X msg 269 200 rc 7 \$1; +#X floatatom 154 -125 5 -1 1; +#X obj 64 302 lattice~ 8; +#X obj 6 254 noise~; +#X obj 63 363 vol~; +#X obj 63 397 dac~; +#X floatatom 85 333 5 0 0; +#X text 159 298 lattice~ a lattice filter; +#X text 139 333 [rc ] sets reflection coefficient; +#X text 159 311 creation argument sets order; +#X connect 0 0 1 0; +#X connect 1 0 17 0; +#X connect 2 0 9 0; +#X connect 3 0 10 0; +#X connect 4 0 11 0; +#X connect 5 0 12 0; +#X connect 6 0 13 0; +#X connect 7 0 14 0; +#X connect 8 0 15 0; +#X connect 9 0 17 0; +#X connect 10 0 17 0; +#X connect 11 0 17 0; +#X connect 12 0 17 0; +#X connect 13 0 17 0; +#X connect 14 0 17 0; +#X connect 15 0 17 0; +#X connect 16 0 0 0; +#X connect 16 0 2 0; +#X connect 16 0 3 0; +#X connect 16 0 4 0; +#X connect 16 0 5 0; +#X connect 16 0 6 0; +#X connect 16 0 7 0; +#X connect 16 0 8 0; +#X connect 17 0 19 0; +#X connect 18 0 17 0; +#X connect 19 0 20 1; +#X connect 19 0 20 0; +#X connect 21 0 19 1; diff --git a/doc/matrix~.pd b/doc/matrix~.pd new file mode 100644 index 0000000..5a6e9d5 --- /dev/null +++ b/doc/matrix~.pd @@ -0,0 +1,10 @@ +#N canvas 523 376 560 300 10; +#X obj 30 165 matrix~; +#X text 29 23 matrix multiplies a signal block with an arbitrary matrix +; +#X msg 69 127 load matrix.bin; +#X text 27 39 added for completeness. mainly intended for spectral +transfos; +#X text 26 73 the file format is binary floating point \, column encoded. +; +#X connect 2 0 0 0; diff --git a/doc/permut~.pd b/doc/permut~.pd new file mode 100644 index 0000000..c8aa822 --- /dev/null +++ b/doc/permut~.pd @@ -0,0 +1,19 @@ +#N canvas 523 376 560 300 10; +#X text 29 10 permut~ performs a random permutation on a signal block +; +#X text 30 27 mainly intended for shuffling spectral data (dynwav) +; +#X obj 73 127 bng 15 250 50 0 empty empty empty 0 -6 32 8 -262144 -1 +-1; +#X msg 96 126 random; +#X text 154 124 bang or random create a new random permutation; +#X obj 30 91 osc~; +#X obj 30 166 permut~; +#X obj 29 210 dac~; +#X floatatom 30 61 5 0 0; +#X connect 2 0 6 0; +#X connect 3 0 6 0; +#X connect 5 0 6 0; +#X connect 6 0 7 0; +#X connect 6 0 7 1; +#X connect 8 0 5 0; diff --git a/doc/qmult~.pd b/doc/qmult~.pd new file mode 100644 index 0000000..674df3e --- /dev/null +++ b/doc/qmult~.pd @@ -0,0 +1,63 @@ +#N canvas 195 283 786 398 10; +#X obj 111 145 qnorm~; +#X obj 38 71 osc~ 30; +#X obj 101 71 osc~ 40; +#X obj 163 70 osc~ 50; +#X obj 229 71 osc~ 60; +#X obj 143 319 dac~; +#X obj 123 244 vol~; +#X obj 163 244 vol~; +#X floatatom 230 230 5 0 0; +#X floatatom 58 36 5 0 0; +#X floatatom 107 36 5 0 0; +#X floatatom 159 36 5 0 0; +#X floatatom 208 36 5 0 0; +#X obj 167 282 hip~ 10; +#X obj 103 281 hip~ 10; +#X text 402 190 qmult multiplies 2 quaternion signals; +#X floatatom 347 35 5 0 0; +#X floatatom 396 35 5 0 0; +#X floatatom 448 35 5 0 0; +#X floatatom 497 35 5 0 0; +#X obj 327 70 osc~ 70; +#X obj 390 70 osc~ 80; +#X obj 452 69 osc~ 90; +#X obj 518 70 osc~ 100; +#X obj 410 136 qnorm~; +#X obj 106 195 qmult~ 0 0 0 0 0; +#X text 410 208 "quaternion ring modulation"; +#X text 403 245 the inlets are in 1 x real 3 x imag form; +#X connect 0 0 25 0; +#X connect 0 1 25 1; +#X connect 0 2 25 2; +#X connect 0 3 25 3; +#X connect 1 0 0 0; +#X connect 2 0 0 1; +#X connect 3 0 0 2; +#X connect 4 0 0 3; +#X connect 6 0 14 0; +#X connect 7 0 13 0; +#X connect 8 0 7 1; +#X connect 8 0 6 1; +#X connect 9 0 1 0; +#X connect 10 0 2 0; +#X connect 11 0 3 0; +#X connect 12 0 4 0; +#X connect 13 0 5 1; +#X connect 14 0 5 0; +#X connect 16 0 20 0; +#X connect 17 0 21 0; +#X connect 18 0 22 0; +#X connect 19 0 23 0; +#X connect 20 0 24 0; +#X connect 21 0 24 1; +#X connect 22 0 24 2; +#X connect 23 0 24 3; +#X connect 24 0 25 4; +#X connect 24 1 25 5; +#X connect 24 2 25 6; +#X connect 24 3 25 7; +#X connect 25 0 6 0; +#X connect 25 1 6 0; +#X connect 25 2 7 0; +#X connect 25 3 7 0; diff --git a/doc/qnorm~.pd b/doc/qnorm~.pd new file mode 100644 index 0000000..3f6a8d0 --- /dev/null +++ b/doc/qnorm~.pd @@ -0,0 +1,35 @@ +#N canvas 334 368 513 350 10; +#X obj 119 137 qnorm~; +#X obj 96 68 osc~ 30; +#X obj 159 68 osc~ 40; +#X obj 221 67 osc~ 50; +#X obj 287 68 osc~ 60; +#X obj 131 265 dac~; +#X obj 111 190 vol~; +#X obj 151 190 vol~; +#X floatatom 185 154 5 0 0; +#X floatatom 116 33 5 0 0; +#X floatatom 165 33 5 0 0; +#X floatatom 217 33 5 0 0; +#X floatatom 266 33 5 0 0; +#X obj 155 228 hip~ 10; +#X obj 91 227 hip~ 10; +#X text 45 -2 qnorm normalizes a quaternion signal to unit norm; +#X connect 0 0 6 0; +#X connect 0 1 6 0; +#X connect 0 2 7 0; +#X connect 0 3 7 0; +#X connect 1 0 0 0; +#X connect 2 0 0 1; +#X connect 3 0 0 2; +#X connect 4 0 0 3; +#X connect 6 0 14 0; +#X connect 7 0 13 0; +#X connect 8 0 7 1; +#X connect 8 0 6 1; +#X connect 9 0 1 0; +#X connect 10 0 2 0; +#X connect 11 0 3 0; +#X connect 12 0 4 0; +#X connect 13 0 5 1; +#X connect 14 0 5 0; diff --git a/doc/ratio.pd b/doc/ratio.pd new file mode 100644 index 0000000..9750058 --- /dev/null +++ b/doc/ratio.pd @@ -0,0 +1,18 @@ +#N canvas 328 388 450 300 10; +#X obj 75 99 ratio; +#X obj 103 192 osc~; +#X floatatom 131 122 5 0 0; +#X obj 103 150 *; +#X obj 103 223 dac~; +#X floatatom 75 51 5 0 0; +#X floatatom 35 135 5 0 0; +#X text 189 32 ratio is an octave shifter.; +#X text 188 46 output is between 1 and 2; +#X text 189 62 it computes 2^(log2(x)-int(log2(x))); +#X connect 0 0 3 0; +#X connect 0 0 6 0; +#X connect 1 0 4 0; +#X connect 1 0 4 1; +#X connect 2 0 3 1; +#X connect 3 0 1 0; +#X connect 5 0 0 0; diff --git a/doc/reference.txt b/doc/reference.txt new file mode 100644 index 0000000..6485266 --- /dev/null +++ b/doc/reference.txt @@ -0,0 +1,49 @@ +abstractions + +64k a beat shuffler using raw 64k/break sample banks +bdft,bdfts set decay time (ms/sec) and osc frequency (for bdiag~) +bhip~ butterworth high pass filter +blop~ butterworth low pass filter +bpm convert bpm to metro time and phasor freq +count modulo counter +eadh~ exponential attack decay (with hold == duration) +eadsrh~ exponential attack decay sustain release (..) +fblock block relative frequency conversion +inv inverse +pdynwav~ phasor~ + dynwav~ +scale7 arbitrary 7 tone scale +vols~ volume for a stereo signal +vol~ volume for a mono signal + +externs + +ffpoly finite field polynomial +fwarp tangent warp frequency +ratio multiply by 2^k so result is 1<=r<2 (transposer) + + +tilde externs + +abs~ absolute value +bdiag~ block diagonal state space system (spectral processor) +bfft~ reordered fft +cheby~ chebychev polynomial waveshaper +diag~ diagonal state space system (spectral processor) +dist~ several distortions & waveshaping functions +dwt~ discrete wavelet transform +idwt~ inverse +dynwav~ dynamic wavetable: use a signal block as wavetable +ead~ exp. attack decay +eadsr~ exp. attack decay sustain release +ear~ exp. attack release +lattice~ lattice filter +matrix~ multiply a signal block with an arbitrary matrix +permut~ random permute a signal block +qmult~ multiply 2 quaternion signals +qnorm~ normalize a quaternion signal (or any 4 channel sig) +ramp~ generates an integer ramp +statwav~ a tabread4~ clone with 8 point interpolation +tabreadmix~ a tabread~ clone with overlap add (for smooth time stretch) +xfm~ coupled frequency modulation +biquadseries~ biquad second order sections (i.e. butterworth) +filterortho~ several biquad filters, orthogonal implementation diff --git a/doc/tabreadmix~.pd b/doc/tabreadmix~.pd new file mode 100644 index 0000000..aad25ab --- /dev/null +++ b/doc/tabreadmix~.pd @@ -0,0 +1,45 @@ +#N canvas 466 143 551 422 10; +#X floatatom 199 254 5 0 0; +#X obj 48 315 dac~; +#X floatatom 38 40 5 0 0; +#X text 135 7 tabreadmix~ an overlap add tabread clone; +#X obj 288 362 soundfiler; +#X text 203 236 right inlet: window hop size; +#X text 249 247 (window size = 2x hop size); +#X obj 38 77 phasor~; +#X obj 38 124 *~; +#X text 136 40 usage analogous to tabread~; +#X text 136 58 only sample adressing is modulo length; +#X obj 288 311 openpanel; +#X obj 288 291 bng 15 250 50 0 empty empty empty 0 -6 32 8 -262144 +-1 -1; +#X msg 171 97 bang; +#X text 219 97 reset windowing; +#X msg 171 150 pitch \$1; +#X floatatom 171 132 5 0 0; +#X text 245 151 set window hop size corresponding to pitch; +#X floatatom 172 178 5 0 0; +#X msg 172 196 chunks \$1; +#X text 246 196 set hop size to 1/xth of length; +#X obj 374 304 table sample123; +#X msg 288 338 read -resize \$1 sample123; +#X obj 288 386 s length; +#X obj 54 100 r length; +#X obj 57 275 tabreadmix~ sample123; +#X text 136 24 simple (sample rate synchronous) playback; +#X connect 0 0 25 1; +#X connect 2 0 7 0; +#X connect 4 0 23 0; +#X connect 7 0 8 0; +#X connect 8 0 25 0; +#X connect 11 0 22 0; +#X connect 12 0 11 0; +#X connect 13 0 25 0; +#X connect 15 0 25 0; +#X connect 16 0 15 0; +#X connect 18 0 19 0; +#X connect 19 0 25 0; +#X connect 22 0 4 0; +#X connect 24 0 8 1; +#X connect 25 0 1 0; +#X connect 25 0 1 1; diff --git a/doc/xfm~.pd b/doc/xfm~.pd new file mode 100644 index 0000000..6b59329 --- /dev/null +++ b/doc/xfm~.pd @@ -0,0 +1,106 @@ +#N canvas 182 174 656 604 10; +#X text 298 24 xfm~ cross frequency modulation; +#X msg 180 308 reset; +#X floatatom 231 255 5 0 0; +#X floatatom 282 255 5 0 0; +#X floatatom 332 255 5 0 0; +#X floatatom 382 255 5 0 0; +#X obj 287 514 dac~; +#X obj 231 282 lop~ 1; +#X obj 282 282 lop~ 1; +#X obj 332 282 lop~ 1; +#X obj 382 282 lop~ 1; +#X floatatom 444 268 5 0 0; +#X text 228 232 freq1; +#X text 279 232 freq2; +#X text 337 233 fb1; +#X text 381 234 fb2; +#X text 297 43 freq_osc1 = freq1 + wave_out2*fb1; +#X text 297 58 freq_osc2 = freq2 + wave_out1*fb2; +#X obj 275 99 hsl 300 15 1 20000 1 1 empty empty empty -2 -6 0 8 -262144 +-1 -1 15200 1; +#X obj 275 121 hsl 300 15 1 20000 1 1 empty empty empty -2 -6 0 8 -262144 +-1 -1 14400 1; +#X obj 276 146 hsl 300 15 1 20000 1 1 empty empty empty -2 -6 0 8 -262144 +-1 -1 18938 1; +#X obj 276 171 hsl 300 15 1 20000 1 1 empty empty empty -2 -6 0 8 -262144 +-1 -1 21000 1; +#X floatatom 487 377 5 0 0; +#X floatatom 534 375 5 0 0; +#X obj 462 348 metro; +#X floatatom 534 335 5 0 0; +#X obj 463 324 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X msg 534 306 500; +#X msg 565 305 125; +#X msg 444 241 0.1; +#X msg 495 306 1000; +#X msg 150 223 type 0; +#X msg 151 263 type 1; +#X text 42 213 square phasor; +#X text 45 158 algo type; +#X text 37 257 circular phasor; +#X text 7 371 remark: all frequencies are warped; +#X text 8 388 (f_real = arctan(2pi*f_in)/2pi); +#X obj 288 485 vols~; +#X floatatom 352 453 5 0 0; +#X text 7 416 for frequencies under 1000Hz; +#X text 8 430 this effect is minimal; +#X text 9 465 use the fwarp to convert from; +#X text 9 478 real to warped; +#X text 9 505 the square phasor type is warped too; +#X text 9 520 but not in such a nice way as the; +#X text 9 534 circular phasor; +#X text 36 229 (chaotic 4DOF); +#X text 5 272 (quasiperiodic 2DOF); +#X obj 277 325 xfm~; +#X obj 462 411 ead~ 0 0; +#X obj 442 517 dac~; +#X obj 435 451 *~; +#X obj 472 451 *~; +#X obj 443 488 vols~; +#X floatatom 507 456 5 0 0; +#X text 2 173 (can be set by creation argument); +#X connect 1 0 49 0; +#X connect 2 0 7 0; +#X connect 3 0 8 0; +#X connect 4 0 9 0; +#X connect 5 0 10 0; +#X connect 7 0 49 0; +#X connect 8 0 49 1; +#X connect 9 0 49 2; +#X connect 10 0 49 3; +#X connect 11 0 10 1; +#X connect 11 0 9 1; +#X connect 11 0 7 1; +#X connect 11 0 8 1; +#X connect 18 0 2 0; +#X connect 19 0 3 0; +#X connect 20 0 4 0; +#X connect 21 0 5 0; +#X connect 22 0 50 1; +#X connect 23 0 50 2; +#X connect 24 0 50 0; +#X connect 25 0 24 1; +#X connect 25 0 23 0; +#X connect 26 0 24 0; +#X connect 27 0 25 0; +#X connect 28 0 25 0; +#X connect 29 0 11 0; +#X connect 30 0 25 0; +#X connect 31 0 49 0; +#X connect 32 0 49 0; +#X connect 38 0 6 0; +#X connect 38 1 6 1; +#X connect 39 0 38 2; +#X connect 49 0 52 0; +#X connect 49 0 38 0; +#X connect 49 1 53 0; +#X connect 49 1 38 1; +#X connect 50 0 52 1; +#X connect 50 0 53 1; +#X connect 52 0 54 0; +#X connect 53 0 54 1; +#X connect 54 0 51 0; +#X connect 54 1 51 1; +#X connect 55 0 54 2; -- cgit v1.2.1