#N canvas 17 365 720 517 10; #N canvas 132 212 480 321 reanimator-block 0; #X obj 15 170 block~ 256; #X obj 19 30 inlet~; #X obj 154 33 inlet~; #X obj 217 34 inlet; #X obj 19 105 outlet~; #X obj 86 105 outlet~; #X obj 154 106 outlet~; #X text 17 128 args: size of texture analysis(ms.) \, overlap factor \, window factor; #X obj 19 78 reanimator~ 5000 4 1; #X connect 1 0 8 0; #X connect 2 0 8 1; #X connect 3 0 8 0; #X connect 8 0 4 0; #X connect 8 1 5 0; #X connect 8 2 6 0; #X restore 96 87 pd reanimator-block; #N canvas 536 186 752 534 driver-sound 0; #X text 13 300 try a vocal sound or other sound with strong formant structure; #X obj 31 194 soundfiler; #X obj 31 160 openpanel; #N canvas 0 22 450 300 graph1 0; #X array reanimator-sound1 4e+06 float 2; #X coords 0 1 4e+06 -1 200 140 1; #X restore 237 13 graph; #X msg 31 131 bang; #X obj 227 284 outlet~; #X msg 227 244 bang; #X obj 348 228 spigot; #X obj 385 205 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1; #X text 133 244 then play it; #X text 304 190 loop if you like; #X msg 31 177 read -resize \$1 reanimator-sound1; #X obj 227 268 tabplay~ reanimator-sound1; #X text 63 132 open the driver sound; #X connect 2 0 11 0; #X connect 4 0 2 0; #X connect 6 0 12 0; #X connect 7 0 6 0; #X connect 8 0 7 1; #X connect 11 0 1 0; #X connect 12 0 5 0; #X connect 12 1 7 0; #X restore 96 30 pd driver-sound; #N canvas 349 43 518 368 texture-sound 0; #X text 13 300 try a vocal sound or other sound with strong formant structure; #X obj 31 194 soundfiler; #X obj 31 160 openpanel; #N canvas 0 22 450 300 graph1 0; #X array reanimator-sound2 1.25363e+06 float 2; #X coords 0 1 1.25363e+06 -1 200 140 1; #X restore 237 13 graph; #X msg 31 131 bang; #X obj 227 284 outlet~; #X msg 227 244 bang; #X obj 348 228 spigot; #X obj 385 205 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1; #X text 133 244 then play it; #X text 304 190 loop if you like; #X msg 31 177 read -resize \$1 reanimator-sound2; #X obj 227 268 tabplay~ reanimator-sound2; #X text 63 132 open the texture sound; #X connect 2 0 11 0; #X connect 4 0 2 0; #X connect 6 0 12 0; #X connect 7 0 6 0; #X connect 8 0 7 1; #X connect 11 0 1 0; #X connect 12 0 5 0; #X connect 12 1 7 0; #X restore 160 49 pd texture-sound; #X msg 499 356 \; pd dsp \$1; #X obj 499 337 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1; #X obj 96 269 dac~; #X obj 160 150 snapshot~; #X floatatom 160 172 5 0 0 0 - - -; #X obj 324 167 snapshot~; #X floatatom 324 189 5 0 0 0 - - -; #X obj 324 134 metro 50; #X obj 324 113 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1; #X text 324 201 analysis sync; #X text 158 184 matched frame; #N canvas 913 441 569 496 messages 0; #X obj 128 229 outlet; #X msg 24 181 analyze; #X msg 128 117 topbin \$1; #X floatatom 128 81 5 0 0 0 - - -; #X msg 206 117 inverse \$1; #X obj 206 84 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 ; #X text 189 163 texture sound must be playing during analysis; #X text 194 183 otherwise: crash!!!; #X text 223 84 matches with *least* good frame; #X text 128 39 top bin to match: lower means less CPU; #X text 128 54 different (perhaps worse) matching; #X obj 36 39 loadbang; #X msg 36 65 20; #X obj 231 213 fftease-system; #N canvas 0 22 454 304 more-info 0; #X text 18 60 How does this work? First load up a texture sound and play it into the right inlet of reanimator~. While the texture sound is playing \, send an "analyze" message and the texture sound will be captured (5 seconds worth in this example patch). Once you see the message "data acquisition completed" in the Pd window \, play any sound into the left inlet and reanimator~ will output the best match from the texture sound. If the input and output are the same sound \, the match should be identical. Otherwise the result is "texture mapping" the texture sound onto the driver sound. The key to effective use of reanimator~ is in smart selections of driver and texture sounds.; #X restore 382 225 pd more-info; #X text 5 163 get texture sample; #X connect 1 0 0 0; #X connect 2 0 0 0; #X connect 3 0 2 0; #X connect 4 0 0 0; #X connect 5 0 4 0; #X connect 11 0 12 0; #X connect 12 0 3 0; #X connect 13 0 0 0; #X restore 255 71 pd messages; #X text 51 287 reanimator performs spectral reanimation \, AKA audio texture mapping. An online paper descripts this process in greater detail. Essentially reanimator~ captures input from its rightmost inlet and uses this as material to reconstitute sound coming in on the left. Since this is done by searching all stored spectra \, there are limits to how much sound may be recorded before overloading your computer's CPU. Start with a small amount of sound \, say 5 seconds \, and gradually increase until you find your practical limit. Once the texture sound has been recorded \, it may be driven by unlimited amounts of material in the leftmost inlet. Your driver should have a clear rhythmic profile. A drum loop would be a good place to start.; #X text 80 470 http://tinyurl.com/9324v; #X text 57 450 more info below or google "spectral reanimation"; #X text 261 31 <- load sounds into both buffers; #X obj 122 202 hsl 128 15 0 4 0 0 empty empty empty -2 -6 0 8 -176298 -1 -1 11100 1; #X floatatom 119 225 5 0 0 0 - - -; #X obj 96 246 *~ 1; #X text 165 223 gain; #X connect 0 0 21 0; #X connect 0 1 6 0; #X connect 0 2 8 0; #X connect 1 0 0 0; #X connect 2 0 0 1; #X connect 4 0 3 0; #X connect 6 0 7 0; #X connect 8 0 9 0; #X connect 10 0 8 0; #X connect 10 0 6 0; #X connect 11 0 10 0; #X connect 14 0 0 2; #X connect 19 0 20 0; #X connect 20 0 21 1; #X connect 21 0 5 0; #X connect 21 0 5 1;