#N canvas 600 60 639 452 12;
#N canvas 25 82 621 482 rules 0;
#X msg 34 61 rule 1 0 1 0 0 0 1 0 0 1 2 1 0 2 0 2 0 0 1 0 2 0 2 1 2
1 1;
#X msg 56 88 rule 0 2 1 0 0 1 0 0 0 1 1 2 0 1 2 1 1 1 1 0 0 0 1 1 0
1 1;
#X msg 78 116 rule 2 2 0 1 0 2 1 1 0 2 1 2 0 1 1 2 0 2 2 1 2 1 1 2
0 0 0;
#X obj 34 186 outlet;
#X msg 118 148 rule 2 1 0 1 0 2 1 1 0 1 0 1 0 1 1 2 0 0 0 0 0 0 1 2
0 0 1;
#X text 31 28 Here are a few rules to start. Try making up your own!
;
#X text 29 216 a rule is the initial state for the automaton \, with
27 elements \, each of which can be either 0 \, 1 \, or 2 Each time
the automaton is triggered (either internally or externally) \, each
value of the rule receives a new value \, determined by the values
of each cell (of which there are 27) \, and those of its neighboring
cells. As in the Game of Life \, on each iteration \, the value of
each cell may change \, and large-scale patterns emerge. The resulting
new rule is copied as necessary to generate gain values for each FFT
bin (either 0 \, 1 \, or 2).;
#X connect 0 0 3 0;
#X connect 1 0 3 0;
#X connect 2 0 3 0;
#X connect 4 0 3 0;
#X restore 168 253 pd rules;
#N canvas 730 31 527 400 triggering 0;
#X msg 87 140 trigger;
#X msg 119 206 manual \$1;
#X obj 87 84 metro 250;
#X obj 87 52 tgl 17 0 \$0-dummy \$0-metro-tog empty 17 7 0 10 -228856
-1 -1 1 1;
#X floatatom 147 53 5 0 0 0 - - -;
#X obj 119 174 tgl 17 0 \$0-dummy \$0-triggertog empty 17 7 0 10 -228856
-1 -1 0 1;
#X obj 87 247 outlet;
#X obj 87 111 bng 18 250 50 0 empty empty empty 17 7 0 10 -228856 -1
-1;
#X text 86 27 turn on to repeatedly send external triggers;
#X text 143 179 turn off internal clock to receive external triggers
;
#X connect 0 0 6 0;
#X connect 1 0 6 0;
#X connect 2 0 7 0;
#X connect 3 0 2 0;
#X connect 4 0 2 1;
#X connect 5 0 1 0;
#X connect 7 0 0 0;
#X restore 157 225 pd triggering;
#N canvas 467 193 247 190 init 0;
#X obj 62 69 f \$0;
#X obj 62 41 loadbang;
#X msg 62 94 \; \$1-metro-tog 1 \; \$1-infreq 133 \; \$1-holdtime 250
;
#X connect 0 0 2 0;
#X connect 1 0 0 0;
#X restore 217 331 pd init;
#N canvas 264 104 957 558 more-msgs 0;
#X msg 34 140 density \$1;
#X floatatom 34 106 5 0 0 0 - - -;
#X msg 154 162 oscbank \$1;
#X obj 258 162 tgl 17 0 empty empty empty 17 7 0 10 -228856 -1 -1 0
1;
#X msg 258 199 interpolate \$1;
#X msg 587 352 transpose \$1;
#X floatatom 587 323 5 0 0 0 - - -;
#X obj 590 298 hsl 128 15 0.5 2 0 0 empty empty empty -2 -8 0 10 -228856
-1 -1 0 1;
#X msg 353 364 retune 0.5 2;
#X msg 528 447 freeze \$1;
#X msg 281 300 hold_time \$1;
#X floatatom 281 273 5 0 0 0 - #0-holdtime -;
#X obj 79 516 outlet;
#X obj 154 133 tgl 17 0 empty empty empty 17 7 0 10 -228856 -1 -1 0
1;
#X obj 528 419 tgl 17 0 empty empty empty 17 7 0 10 -228856 -1 -1 0
1;
#X text 286 165 ramp interpolation from one spectrum to the next;
#X text 553 416 freeze current spectrum;
#X text 585 254 transposition (most effective with oscbank turned on)
;
#X text 280 251 time interval for internal clock;
#X text 347 343 reset phases or frequencies;
#X text 178 135 use oscillator bank resynthesis;
#X text 31 33 randomly repopulate current amplitude spectrum \; the
argument is odds of either a 1 or 2 amplitude value \, otherwise zero
\; lower values create sparser spectra;
#X connect 0 0 12 0;
#X connect 1 0 0 0;
#X connect 2 0 12 0;
#X connect 3 0 4 0;
#X connect 4 0 12 0;
#X connect 5 0 12 0;
#X connect 6 0 5 0;
#X connect 7 0 6 0;
#X connect 8 0 12 0;
#X connect 9 0 12 0;
#X connect 10 0 12 0;
#X connect 11 0 10 0;
#X connect 13 0 2 0;
#X connect 14 0 9 0;
#X restore 180 284 pd more-msgs;
#X msg 146 195 capture_spectrum \$1;
#X obj 146 167 tgl 17 0 empty empty empty 17 7 0 10 -228856 -1 -1 0
1;
#N canvas 722 391 582 329 input 0;
#X obj 42 104 phasor~;
#X obj 42 137 -~ 0.5;
#X obj 95 104 phasor~;
#X obj 95 137 -~ 0.5;
#X obj 150 104 phasor~;
#X obj 150 137 -~ 0.5;
#X obj 95 231 outlet~;
#X obj 95 71 * 1.25;
#X obj 150 71 * 1.5;
#X obj 95 26 inlet;
#X obj 95 190 *~ 0.333;
#X text 147 21 external spectral source \, when capture_spectrum is
turned on;
#X text 218 118 a bank of three non-bandlimited sawtooths \, tuned
to a just major triad;
#X connect 0 0 1 0;
#X connect 1 0 10 0;
#X connect 2 0 3 0;
#X connect 3 0 10 0;
#X connect 4 0 5 0;
#X connect 5 0 10 0;
#X connect 7 0 2 0;
#X connect 8 0 4 0;
#X connect 9 0 0 0;
#X connect 9 0 7 0;
#X connect 9 0 8 0;
#X connect 10 0 6 0;
#X restore 68 195 pd input;
#X text 43 166 hz;
#X obj 68 343 fftease/cavoc27~;
#X obj 68 378 ./gain.dsp~;
#X obj 44 23 ./icon;
#X text 315 56 - Cellular Automata-generated spectra;
#X text 42 107 [cavoc27~] generates spectra with a 27 rule cellular
automaton. Start with very low gain.;
#X obj 68 166 nbx 5 14 -1e+037 1e+037 0 0 \$0-dummy \$0-infreq empty
0 -8 0 10 -228856 -1 -1 133 256;
#X text 168 160 turn on to capture input spectra as tuning source;
#X obj 317 25 cnv 15 100 30 empty empty fftease/cavoc27~ 20 12 0 24
-262144 -1 0;
#X text 388 256 see also:;
#X obj 368 273 cnv 15 100 20 empty empty fftease/cavoc~ 20 12 0 14
-262144 -1 0;
#X connect 0 0 8 0;
#X connect 1 0 8 0;
#X connect 3 0 8 0;
#X connect 4 0 8 0;
#X connect 5 0 4 0;
#X connect 6 0 8 0;
#X connect 8 0 9 0;
#X connect 13 0 6 0;
