#N canvas 600 60 572 436 12;
#X obj 44 295 *~;
#X floatatom 62 262 5 0 0 0 - mix-in-orig -;
#N canvas 0 22 450 278 (subpatch) 0;
#X array pvgrain-pf 46379 float 2;
#X coords 0 1 46379 -1 200 140 1;
#X restore 289 211 graph;
#X obj 135 219 r pvgrain-msgs;
#N canvas 345 28 684 740 control 0;
#X obj 36 677 s pvgrain-msgs;
#X msg 36 139 probability \$1;
#X floatatom 36 106 7 0 0 0 - - -;
#X obj 39 64 hsl 128 15 0.0001 0.1 0 0 empty pvgrain-prob empty -2
-8 0 10 -262144 -1 -1 2530 1;
#X msg 71 249 framegrains \$1;
#X floatatom 71 217 5 1 60 0 - pvgrain-fgr -;
#X msg 148 523 topfreq \$1;
#X floatatom 148 488 7 50 20000 0 - pvgrain-topf -;
#X floatatom 246 350 5 0 0 0 - base-freq -;
#X obj 246 375 s base-frequency;
#X obj 487 444 hsl 128 15 0 1 0 0 mix-in-orig empty mix-in-original-signal
-2 -8 0 10 -262144 -1 -1 0 1;
#X text 239 328 fundamental frequency of grain sample;
#X msg 294 590 bottomfreq \$1;
#X floatatom 294 559 5 0 0 0 - - -;
#X text 206 489 highest grain frequency data to generate;
#X text 338 560 lowest grain frequency to generate;
#X text 120 193 maximum number of grains to synthesize per FFT-frame
\; at SR = 48000 and FFT size = 1024 \, grain duration is about 0.02
seconds;
#X text 34 25 probability that each grain in a given FFT frame is actually
synthesized;
#X connect 1 0 0 0;
#X connect 2 0 1 0;
#X connect 3 0 2 0;
#X connect 4 0 0 0;
#X connect 5 0 4 0;
#X connect 6 0 0 0;
#X connect 7 0 6 0;
#X connect 8 0 9 0;
#X connect 12 0 0 0;
#X connect 13 0 12 0;
#X restore 138 176 pd control;
#N canvas 650 70 404 268 init 0;
#X obj 86 34 loadbang;
#X msg 113 67 \; base-freq 261 \; pvgrain-topf 4000 \; pvgrain-fgr
20 \; pvgrain-prob 0.02;
#X obj 86 197 soundfiler;
#X msg 86 167 read -resize sound/Piano.aif pvgrain-pf;
#X connect 0 0 1 0;
#X connect 0 0 3 0;
#X connect 3 0 2 0;
#X restore 153 323 pd init;
#N canvas 523 84 689 382 playback 0;
#X obj 51 29 inlet;
#X obj 92 104 + 1;
#X obj 92 139 % 8;
#N canvas 650 70 610 733 gate8 0;
#X obj 33 22 inlet;
#X obj 525 101 inlet;
#X obj 33 75 sel 0 1 2 3 4 5 6 7;
#X obj 14 508 spigot;
#X obj 14 530 outlet;
#X obj 64 508 spigot;
#X obj 64 530 outlet;
#X obj 115 510 spigot;
#X obj 115 532 outlet;
#X obj 165 510 spigot;
#X obj 165 532 outlet;
#X obj 216 508 spigot;
#X obj 216 530 outlet;
#X obj 266 508 spigot;
#X obj 266 530 outlet;
#X obj 317 510 spigot;
#X obj 317 532 outlet;
#X obj 367 510 spigot;
#X obj 367 532 outlet;
#X obj 11 461 unpack f f f f f f f f, f 59;
#X msg 34 115 1 0 0 0 0 0 0 0;
#X msg 43 139 0 1 0 0 0 0 0 0;
#X msg 57 161 0 0 1 0 0 0 0 0;
#X msg 70 187 0 0 0 1 0 0 0 0;
#X msg 90 221 0 0 0 0 1 0 0 0 0;
#X msg 100 250 0 0 0 0 0 1 0 0 0;
#X msg 117 279 0 0 0 0 0 0 1 0 0;
#X msg 129 309 0 0 0 0 0 0 0 1 0;
#X msg 142 337 0 0 0 0 0 0 0 0 1, f 79;
#X connect 0 0 2 0;
#X connect 1 0 3 0;
#X connect 1 0 5 0;
#X connect 1 0 7 0;
#X connect 1 0 9 0;
#X connect 1 0 11 0;
#X connect 1 0 13 0;
#X connect 1 0 15 0;
#X connect 1 0 17 0;
#X connect 2 0 20 0;
#X connect 2 1 21 0;
#X connect 2 2 22 0;
#X connect 2 3 23 0;
#X connect 2 4 24 0;
#X connect 2 5 25 0;
#X connect 2 6 26 0;
#X connect 2 7 27 0;
#X connect 2 8 28 0;
#X connect 3 0 4 0;
#X connect 5 0 6 0;
#X connect 7 0 8 0;
#X connect 9 0 10 0;
#X connect 11 0 12 0;
#X connect 13 0 14 0;
#X connect 15 0 16 0;
#X connect 17 0 18 0;
#X connect 19 0 3 1;
#X connect 19 1 5 1;
#X connect 19 2 7 1;
#X connect 19 3 9 1;
#X connect 19 4 11 1;
#X connect 19 5 13 1;
#X connect 19 6 15 1;
#X connect 19 7 17 1;
#X connect 20 0 19 0;
#X connect 21 0 19 0;
#X connect 22 0 19 0;
#X connect 23 0 19 0;
#X connect 24 0 19 0;
#X connect 25 0 19 0;
#X connect 26 0 19 0;
#X connect 27 0 19 0;
#X connect 28 0 19 0;
#X restore 92 165 pd gate8;
#X obj 51 60 t l b;
#N canvas 650 70 588 642 playlet 0;
#X obj 200 43 inlet;
#X obj 200 95 unpack f f;
#X obj 267 130 / 261;
#X obj 65 407 line~;
#X obj 65 444 tabread4~ pvgrain-pf;
#X obj 65 499 *~ 0.1;
#X floatatom 267 164 5 0 0 0 - - -;
#X msg 20 375 1;
#X msg 65 279 1051;
#X obj 65 317 /;
#X obj 267 200 t b f;
#X obj 65 342 t f b;
#X obj 65 545 outlet~;
#X msg 65 374 46376 \$1;
#X obj 299 75 r base-frequency;
#X text 143 361 hard-coded for provided Piano sample \; change sample
length here if using a different sample;
#X text 100 279 <- duration of the grain sample in milliseconds;
#X text 301 47 base frequency of grain sample;
#X connect 0 0 1 0;
#X connect 1 0 5 1;
#X connect 1 1 2 0;
#X connect 2 0 6 0;
#X connect 3 0 4 0;
#X connect 4 0 5 0;
#X connect 5 0 12 0;
#X connect 6 0 10 0;
#X connect 7 0 3 0;
#X connect 8 0 9 0;
#X connect 9 0 11 0;
#X connect 10 0 8 0;
#X connect 10 1 9 1;
#X connect 11 0 13 0;
#X connect 11 1 7 0;
#X connect 13 0 3 0;
#X connect 14 0 2 1;
#X restore 92 211 pd playlet;
#X obj 92 263 outlet~;
#X obj 51 105 f 0;
#N canvas 775 197 588 642 playlet 0;
#X obj 200 43 inlet;
#X obj 200 95 unpack f f;
#X obj 257 130 / 261;
#X obj 65 407 line~;
#X obj 65 444 tabread4~ pvgrain-pf;
#X obj 65 499 *~ 0.1;
#X floatatom 257 164 5 0 0 0 - - -;
#X msg 20 375 1;
#X msg 65 279 1051;
#X obj 65 317 /;
#X obj 257 200 t b f;
#X obj 65 342 t f b;
#X text 15 29 assumes 44100 SR;
#X obj 65 545 outlet~;
#X msg 65 374 46376 \$1;
#X obj 299 75 r base-frequency;
#X connect 0 0 1 0;
#X connect 1 0 5 1;
#X connect 1 1 2 0;
#X connect 2 0 6 0;
#X connect 3 0 4 0;
#X connect 4 0 5 0;
#X connect 5 0 13 0;
#X connect 6 0 10 0;
#X connect 7 0 3 0;
#X connect 8 0 9 0;
#X connect 9 0 11 0;
#X connect 10 0 8 0;
#X connect 10 1 9 1;
#X connect 11 0 14 0;
#X connect 11 1 7 0;
#X connect 14 0 3 0;
#X connect 15 0 2 1;
#X restore 163 211 pd playlet;
#N canvas 775 197 588 642 playlet 0;
#X obj 200 43 inlet;
#X obj 200 95 unpack f f;
#X obj 257 130 / 261;
#X obj 65 407 line~;
#X obj 65 444 tabread4~ pvgrain-pf;
#X obj 65 499 *~ 0.1;
#X floatatom 257 164 5 0 0 0 - - -;
#X msg 20 375 1;
#X msg 65 279 1051;
#X obj 65 317 /;
#X obj 257 200 t b f;
#X obj 65 342 t f b;
#X text 15 29 assumes 44100 SR;
#X obj 65 545 outlet~;
#X msg 65 374 46376 \$1;
#X obj 299 75 r base-frequency;
#X connect 0 0 1 0;
#X connect 1 0 5 1;
#X connect 1 1 2 0;
#X connect 2 0 6 0;
#X connect 3 0 4 0;
#X connect 4 0 5 0;
#X connect 5 0 13 0;
#X connect 6 0 10 0;
#X connect 7 0 3 0;
#X connect 8 0 9 0;
#X connect 9 0 11 0;
#X connect 10 0 8 0;
#X connect 10 1 9 1;
#X connect 11 0 14 0;
#X connect 11 1 7 0;
#X connect 14 0 3 0;
#X connect 15 0 2 1;
#X restore 238 210 pd playlet;
#N canvas 775 197 588 642 playlet 0;
#X obj 200 43 inlet;
#X obj 200 95 unpack f f;
#X obj 257 130 / 261;
#X obj 65 407 line~;
#X obj 65 444 tabread4~ pvgrain-pf;
#X obj 65 499 *~ 0.1;
#X floatatom 257 164 5 0 0 0 - - -;
#X msg 20 375 1;
#X msg 65 279 1051;
#X obj 65 317 /;
#X obj 257 200 t b f;
#X obj 65 342 t f b;
#X text 15 29 assumes 44100 SR;
#X obj 65 545 outlet~;
#X msg 65 374 46376 \$1;
#X obj 299 75 r base-frequency;
#X connect 0 0 1 0;
#X connect 1 0 5 1;
#X connect 1 1 2 0;
#X connect 2 0 6 0;
#X connect 3 0 4 0;
#X connect 4 0 5 0;
#X connect 5 0 13 0;
#X connect 6 0 10 0;
#X connect 7 0 3 0;
#X connect 8 0 9 0;
#X connect 9 0 11 0;
#X connect 10 0 8 0;
#X connect 10 1 9 1;
#X connect 11 0 14 0;
#X connect 11 1 7 0;
#X connect 14 0 3 0;
#X connect 15 0 2 1;
#X restore 309 210 pd playlet;
#N canvas 775 197 588 642 playlet 0;
#X obj 200 43 inlet;
#X obj 200 95 unpack f f;
#X obj 257 130 / 261;
#X obj 65 407 line~;
#X obj 65 444 tabread4~ pvgrain-pf;
#X obj 65 499 *~ 0.1;
#X floatatom 257 164 5 0 0 0 - - -;
#X msg 20 375 1;
#X msg 65 279 1051;
#X obj 65 317 /;
#X obj 257 200 t b f;
#X obj 65 342 t f b;
#X text 15 29 assumes 44100 SR;
#X obj 65 545 outlet~;
#X msg 65 374 46376 \$1;
#X obj 299 75 r base-frequency;
#X connect 0 0 1 0;
#X connect 1 0 5 1;
#X connect 1 1 2 0;
#X connect 2 0 6 0;
#X connect 3 0 4 0;
#X connect 4 0 5 0;
#X connect 5 0 13 0;
#X connect 6 0 10 0;
#X connect 7 0 3 0;
#X connect 8 0 9 0;
#X connect 9 0 11 0;
#X connect 10 0 8 0;
#X connect 10 1 9 1;
#X connect 11 0 14 0;
#X connect 11 1 7 0;
#X connect 14 0 3 0;
#X connect 15 0 2 1;
#X restore 383 209 pd playlet;
#N canvas 775 197 588 642 playlet 0;
#X obj 200 43 inlet;
#X obj 200 95 unpack f f;
#X obj 257 130 / 261;
#X obj 65 407 line~;
#X obj 65 444 tabread4~ pvgrain-pf;
#X obj 65 499 *~ 0.1;
#X floatatom 257 164 5 0 0 0 - - -;
#X msg 20 375 1;
#X msg 65 279 1051;
#X obj 65 317 /;
#X obj 257 200 t b f;
#X obj 65 342 t f b;
#X text 15 29 assumes 44100 SR;
#X obj 65 545 outlet~;
#X msg 65 374 46376 \$1;
#X obj 299 75 r base-frequency;
#X connect 0 0 1 0;
#X connect 1 0 5 1;
#X connect 1 1 2 0;
#X connect 2 0 6 0;
#X connect 3 0 4 0;
#X connect 4 0 5 0;
#X connect 5 0 13 0;
#X connect 6 0 10 0;
#X connect 7 0 3 0;
#X connect 8 0 9 0;
#X connect 9 0 11 0;
#X connect 10 0 8 0;
#X connect 10 1 9 1;
#X connect 11 0 14 0;
#X connect 11 1 7 0;
#X connect 14 0 3 0;
#X connect 15 0 2 1;
#X restore 454 209 pd playlet;
#N canvas 775 197 588 642 playlet 0;
#X obj 200 43 inlet;
#X obj 200 95 unpack f f;
#X obj 257 130 / 261;
#X obj 65 407 line~;
#X obj 65 444 tabread4~ pvgrain-pf;
#X obj 65 499 *~ 0.1;
#X floatatom 257 164 5 0 0 0 - - -;
#X msg 20 375 1;
#X msg 65 279 1051;
#X obj 65 317 /;
#X obj 257 200 t b f;
#X obj 65 342 t f b;
#X text 15 29 assumes 44100 SR;
#X obj 65 545 outlet~;
#X msg 65 374 46376 \$1;
#X obj 299 75 r base-frequency;
#X connect 0 0 1 0;
#X connect 1 0 5 1;
#X connect 1 1 2 0;
#X connect 2 0 6 0;
#X connect 3 0 4 0;
#X connect 4 0 5 0;
#X connect 5 0 13 0;
#X connect 6 0 10 0;
#X connect 7 0 3 0;
#X connect 8 0 9 0;
#X connect 9 0 11 0;
#X connect 10 0 8 0;
#X connect 10 1 9 1;
#X connect 11 0 14 0;
#X connect 11 1 7 0;
#X connect 14 0 3 0;
#X connect 15 0 2 1;
#X restore 529 208 pd playlet;
#N canvas 775 197 588 642 playlet 0;
#X obj 200 43 inlet;
#X obj 200 95 unpack f f;
#X obj 257 130 / 261;
#X obj 65 407 line~;
#X obj 65 444 tabread4~ pvgrain-pf;
#X obj 65 499 *~ 0.1;
#X floatatom 257 164 5 0 0 0 - - -;
#X msg 20 375 1;
#X msg 65 279 1051;
#X obj 65 317 /;
#X obj 257 200 t b f;
#X obj 65 342 t f b;
#X text 15 29 assumes 44100 SR;
#X obj 65 545 outlet~;
#X msg 65 374 46376 \$1;
#X obj 299 75 r base-frequency;
#X connect 0 0 1 0;
#X connect 1 0 5 1;
#X connect 1 1 2 0;
#X connect 2 0 6 0;
#X connect 3 0 4 0;
#X connect 4 0 5 0;
#X connect 5 0 13 0;
#X connect 6 0 10 0;
#X connect 7 0 3 0;
#X connect 8 0 9 0;
#X connect 9 0 11 0;
#X connect 10 0 8 0;
#X connect 10 1 9 1;
#X connect 11 0 14 0;
#X connect 11 1 7 0;
#X connect 14 0 3 0;
#X connect 15 0 2 1;
#X restore 600 208 pd playlet;
#X connect 0 0 4 0;
#X connect 1 0 2 0;
#X connect 1 0 7 1;
#X connect 2 0 3 0;
#X connect 3 0 5 0;
#X connect 3 1 8 0;
#X connect 3 2 9 0;
#X connect 3 3 10 0;
#X connect 3 4 11 0;
#X connect 3 5 12 0;
#X connect 3 6 13 0;
#X connect 3 7 14 0;
#X connect 4 0 3 1;
#X connect 4 1 7 0;
#X connect 5 0 6 0;
#X connect 7 0 1 0;
#X connect 8 0 6 0;
#X connect 9 0 6 0;
#X connect 10 0 6 0;
#X connect 11 0 6 0;
#X connect 12 0 6 0;
#X connect 13 0 6 0;
#X connect 14 0 6 0;
#X restore 135 292 pd playback;
#X obj 44 172 ./sfplay~;
#X obj 135 255 fftease/pvgrain~;
#X obj 44 367 ./gain.dsp~;
#X obj 39 31 ./icon;
#X text 276 54 - Spectral granulator;
#X obj 258 28 cnv 15 100 30 empty empty fftease/pvgrain~ 20 12 0 24
-262144 -1 0;
#X text 38 105 [pvgrain~] tracks an input sound and outputs control
data in the form of [amplitude \, frequency] pairs that can be used
to play notes on a synthesizer or sampler.;
#X connect 0 0 9 0;
#X connect 1 0 0 1;
#X connect 3 0 8 0;
#X connect 6 0 9 0;
#X connect 7 0 0 0;
#X connect 7 0 8 0;
#X connect 8 0 6 0;
