pd-experiments/looper.pd

624 lines
15 KiB
Plaintext

#N canvas 74 87 1353 864 12;
#X floatatom 270 70 5 33 240 1 bpm - -;
#X obj 81 701 dac~;
#X obj 123 455 line~;
#X obj 123 486 tabread4~ loop;
#X obj 14 135 t b b;
#X obj 14 240 del, f 5;
#X obj 46 190 * 16;
#X text 25 89 play in a loop;
#X obj 53 249 r playback;
#X obj 14 80 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X obj 14 277 spigot;
#X obj 14 27 r playback;
#X obj 14 52 sel 1;
#X obj 1262 76 r playback;
#X obj 1262 126 s grid;
#X obj 123 514 *~;
#X obj 237 443 r unmute;
#X obj 195 27 loadbang;
#X msg 195 53 1;
#X obj 195 77 s unmute;
#N canvas 2 570 633 444 setbpm 0;
#X text 4 30 1 beat in ms;
#X obj 93 29 expr (1/($f1/60))*1000;
#X obj 93 111 * 16;
#X text 127 112 4 bars \, in milliseconds;
#X text 147 137 in seconds;
#X obj 93 136 / 1000;
#X obj 93 231 *;
#X obj 125 211 samplerate~;
#X obj 93 161 t f b;
#X msg 125 290 resize \$1;
#X obj 125 315 s loop;
#X text 120 232 samples for 4 bars;
#X text 204 290 set buffer length;
#X obj 93 62 t f f;
#X obj 93 256 t f f;
#X obj 93 2 inlet;
#X obj 93 336 v buffer_length;
#X obj 125 87 v beat_length;
#X connect 1 0 13 0;
#X connect 2 0 5 0;
#X connect 5 0 8 0;
#X connect 6 0 14 0;
#X connect 7 0 6 1;
#X connect 8 0 6 0;
#X connect 8 1 7 0;
#X connect 9 0 10 0;
#X connect 13 0 2 0;
#X connect 13 1 17 0;
#X connect 14 0 16 0;
#X connect 14 1 9 0;
#X connect 15 0 1 0;
#X restore 270 96 pd setbpm;
#X obj 837 113 r rec;
#X text 190 7 init;
#X text 9 4 playback;
#N canvas 2 828 450 250 (subpatch) 0;
#X array loop 352800 float 2;
#X coords 0 1 352800 -1 200 140 1 0 0;
#X restore 619 29 graph;
#X text 674 182 grid keys:;
#X text 674 198 0 \, 0: record;
#X text 673 214 0 \, 1: playback on/off;
#X text 673 228 0 \, 2: trigger mute;
#X obj 997 70 grid;
#X msg 997 31 connect;
#X msg 270 47 120;
#X obj 950 31 r grid;
#X msg 1262 102 set 1 0 \$1;
#X obj 319 266 samplerate~;
#X obj 301 293 /;
#X obj 301 318 * 1000;
#X text 674 243 1 \, 8-11: stutter;
#X msg 508 30 \; loop const 0;
#N canvas 823 231 885 659 record 0;
#X obj 65 371 dac~;
#N canvas 1248 59 533 529 clicktrack 0;
#X obj 146 98 inlet;
#X obj 159 123 inlet;
#X obj 240 453 outlet~;
#X obj 240 362 osc~ 440;
#X obj 240 418 *~;
#X obj 99 398 line~;
#X obj 99 217 metro 500;
#X obj 201 237 f;
#X obj 201 262 + 1;
#X obj 201 287 mod 4;
#X msg 186 341 440;
#X msg 247 331 220;
#X msg 99 271 1 \, 0 200;
#X obj 201 312 sel 0;
#X msg 178 198 3;
#X obj 146 151 t f b;
#X connect 0 0 15 0;
#X connect 1 0 6 1;
#X connect 3 0 4 0;
#X connect 4 0 2 0;
#X connect 5 0 4 1;
#X connect 6 0 12 0;
#X connect 6 0 7 0;
#X connect 7 0 8 0;
#X connect 8 0 9 0;
#X connect 9 0 7 1;
#X connect 9 0 13 0;
#X connect 10 0 3 0;
#X connect 11 0 3 0;
#X connect 12 0 5 0;
#X connect 13 0 10 0;
#X connect 13 1 11 0;
#X connect 14 0 7 1;
#X connect 15 0 6 0;
#X connect 15 1 14 0;
#X restore 66 293 pd clicktrack;
#X f 15;
#X obj 217 466 tabwrite~ loop;
#X obj 218 349 adc~;
#X msg 261 321 start;
#X msg 66 161 1;
#X obj 98 239 del, f 6;
#X msg 98 264 0;
#X obj 66 186 t f b;
#X obj 134 215 * 20;
#X obj 261 346 t a b, f 8;
#X obj 261 205 del;
#X obj 300 185 * 4;
#X obj 261 133 t b b;
#X obj 409 353 * 4;
#X obj 314 382 del, f 14;
#X msg 314 442 stop;
#X text 417 383 wait 4 bars;
#X obj 293 288 s grid;
#X msg 293 260 lset 0 0 15;
#X msg 352 531 lset 0 0 2;
#X obj 352 565 s grid;
#X obj 300 209 t f f, f 16;
#X text 301 135 record for 4 bars after a bar's wait;
#X obj 261 230 t b b;
#X msg 391 488 \; loop normalize;
#X obj 421 180 s playback;
#X msg 421 156 0;
#X obj 102 108 t b b b, f 46;
#X obj 496 180 s unmute;
#X text 453 156 disable playback when rec starts;
#X obj 314 407 t b b b b, f 17;
#X obj 430 459 s unmute;
#X msg 430 432 1;
#X text 437 406 on recording end;
#X obj 102 82 inlet;
#X text 29 55 run click track for 5 bars;
#X text 143 85 recording;
#X obj 134 159 v beat_length;
#X obj 300 160 v beat_length;
#X obj 102 133 t b b;
#X obj 134 184 t f f;
#X connect 1 0 0 0;
#X connect 1 0 0 1;
#X connect 3 0 2 0;
#X connect 4 0 10 0;
#X connect 5 0 8 0;
#X connect 6 0 7 0;
#X connect 7 0 1 0;
#X connect 8 0 1 0;
#X connect 8 1 6 0;
#X connect 9 0 6 1;
#X connect 10 0 2 0;
#X connect 10 1 15 0;
#X connect 11 0 24 0;
#X connect 12 0 22 0;
#X connect 13 0 11 0;
#X connect 13 1 39 0;
#X connect 14 0 15 1;
#X connect 15 0 31 0;
#X connect 16 0 2 0;
#X connect 19 0 18 0;
#X connect 20 0 21 0;
#X connect 22 0 11 1;
#X connect 22 1 14 0;
#X connect 24 0 4 0;
#X connect 24 1 19 0;
#X connect 27 0 26 0;
#X connect 27 0 29 0;
#X connect 28 0 40 0;
#X connect 28 1 13 0;
#X connect 28 2 27 0;
#X connect 31 0 16 0;
#X connect 31 1 20 0;
#X connect 31 2 25 0;
#X connect 31 3 33 0;
#X connect 33 0 32 0;
#X connect 35 0 28 0;
#X connect 38 0 41 0;
#X connect 39 0 12 0;
#X connect 40 0 5 0;
#X connect 40 1 38 0;
#X connect 41 0 9 0;
#X connect 41 1 1 1;
#X restore 837 146 pd record;
#X msg 1055 31 disconnect;
#X text 352 320 time;
#X obj 55 135 v cut_length;
#X obj 14 111 t b b b, f 19;
#X obj 46 165 v beat_length;
#X obj 149 201 v buffer_length;
#X obj 123 376 pack f f f;
#X obj 154 226 t f f f b, f 24;
#X msg 123 423 \$1 \, \$2 \$3;
#X text 184 283 sample count;
#X obj 156 303 expr $f1*(cut_length/16)+(cut_start*($f1/16)), f 19
;
#X obj 21 319 expr cut_start*($f1/16), f 18;
#X text 54 302 start sample;
#N canvas 2 55 1920 1023 cutter 0;
#X obj 37 37 inlet;
#X text 97 31 grid ui for sample cutting;
#X obj 320 35 loadbang;
#X obj 320 85 v pressed\$0;
#X msg 320 60 -1;
#X obj 90 235 t f b, f 6;
#X obj 90 319 spigot;
#X obj 129 259 v pressed\$0;
#X obj 129 285 == -1;
#X msg 237 322 -1;
#X obj 123 423 v pressed\$0;
#X floatatom 123 448 5 0 0 0 - - -;
#X obj 237 347 v pressed\$0;
#X obj 237 298 spigot;
#X obj 237 235 t b f, f 6;
#X obj 58 210 t f f;
#X obj 58 180 route 1, f 26;
#X msg 237 207 \$2;
#X obj 58 613 spigot;
#X obj 90 478 v cut_start;
#X obj 223 712 v cut_length;
#X obj 58 638 t f f, f 24;
#X obj 58 502 t f f, f 11;
#X obj 132 593 expr pressed\$0!=-1 && $f1>(cut_start-1);
#X msg 157 376 1;
#X obj 157 401 v cut_length;
#X obj 37 37;
#X obj 90 350 t f f f, f 10;
#X text 416 127 on the first button press \, sets the cut start \,
and sets the pressed\$0 variable so this state is saved. On the second
button press \, sets the loop end. the pressed\$0 variable is reset
\, allowing another gesture. The;
#X obj 223 672 expr ($f1+1)-cut_start;
#X obj 90 794 s grid;
#X obj 58 669 t f b;
#X obj 88 692 v cut_start;
#X obj 58 719 pack f f;
#X msg 90 770 row 0 7 0 \, row 8 7 0;
#X obj 106 904 until;
#X obj 106 929 f;
#X obj 106 954 + 1;
#X obj 106 979 - 1;
#X msg 106 1004 lset \$1 7 8;
#X obj 106 1029 s grid;
#X obj 58 744 t b b;
#X obj 58 824 t b b, f 14;
#X obj 153 909 v cut_start;
#X obj 58 855 v cut_length;
#X obj 276 271 expr pressed\$0==$f1;
#X obj 37 62 t a a;
#X text 77 75 cut;
#X obj 69 96 unpack f f f;
#X obj 58 156 spigot;
#X obj 120 136 == 7;
#X msg 37 125 \$1 \$2;
#X connect 0 0 46 0;
#X connect 2 0 4 0;
#X connect 4 0 3 0;
#X connect 5 0 6 0;
#X connect 5 1 7 0;
#X connect 6 0 27 0;
#X connect 7 0 8 0;
#X connect 8 0 6 1;
#X connect 9 0 12 0;
#X connect 10 0 11 0;
#X connect 13 0 9 0;
#X connect 14 0 13 0;
#X connect 14 1 45 0;
#X connect 15 0 22 0;
#X connect 15 1 5 0;
#X connect 16 0 15 0;
#X connect 16 1 17 0;
#X connect 17 0 14 0;
#X connect 18 0 21 0;
#X connect 21 0 31 0;
#X connect 21 1 29 0;
#X connect 22 0 18 0;
#X connect 22 1 23 0;
#X connect 23 0 18 1;
#X connect 24 0 25 0;
#X connect 27 0 19 0;
#X connect 27 1 10 0;
#X connect 27 2 24 0;
#X connect 29 0 20 0;
#X connect 31 0 33 0;
#X connect 31 1 32 0;
#X connect 32 0 33 1;
#X connect 33 0 41 0;
#X connect 34 0 30 0;
#X connect 35 0 36 0;
#X connect 36 0 37 0;
#X connect 37 0 38 0;
#X connect 37 0 36 1;
#X connect 38 0 39 0;
#X connect 39 0 40 0;
#X connect 41 0 42 0;
#X connect 41 1 34 0;
#X connect 42 0 44 0;
#X connect 42 1 43 0;
#X connect 43 0 36 1;
#X connect 44 0 35 0;
#X connect 45 0 13 1;
#X connect 46 0 51 0;
#X connect 46 1 48 0;
#X connect 48 2 50 0;
#X connect 49 0 16 0;
#X connect 50 0 49 1;
#X connect 51 0 49 0;
#X restore 1035 197 pd cutter;
#X text 284 467 mute has a little slew \, to stop unmuting being totally
clicky;
#X obj 237 495 line~;
#X msg 237 468 \$1 5;
#X obj 301 356 expr $f1*(cut_length/16)*speed;
#X obj 46 215 expr $f1*speed;
#X msg 277 134 connect \, all 0 \, set 10 2 1, f 27;
#X obj 277 159 s grid;
#X text 351 26 init variables;
#X obj 139 78 v speed;
#X obj 122 563 rev2~ 100, f 11;
#X obj 259 584 loadbang;
#X msg 259 609 0;
#X obj 997 99 t a a a a a a, f 14;
#X obj 159 528 r reverb_length;
#X obj 162 594 r reverb_mix;
#N canvas 572 59 1026 1039 stutter 0;
#X obj 49 36 inlet;
#X obj 81 284 metro;
#X obj 81 312 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
1;
#X obj 81 332 s unmute;
#X obj 49 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
1;
#X obj 15 272 sel 0;
#X obj 15 322 s unmute;
#X msg 15 298 1;
#X obj 130 264 / 2;
#X obj 49 236 t f f;
#X obj 144 193 unpack f f f;
#X obj 184 219 - 7;
#X obj 184 244 << 2;
#X obj 88 216 v beat_length;
#X obj 49 58 t a a;
#X obj 81 86 unpack f f f;
#X obj 49 138 spigot;
#N canvas 671 369 830 679 is-stutter 0;
#X obj 12 35 inlet;
#X obj 261 41 inlet;
#X obj 12 93 outlet;
#X obj 12 68 expr $f1 > 7 && $f1 < 12 && $f2 == 1;
#X connect 0 0 3 0;
#X connect 1 0 3 1;
#X connect 3 0 2 0;
#X restore 74 109 pd is-stutter;
#X text 251 167 stutter;
#X msg 239 190 set \$2 \$3 \$1;
#X obj 239 215 s grid;
#X obj 48 168 t f b a a, f 20;
#X connect 0 0 14 0;
#X connect 1 0 2 0;
#X connect 2 0 3 0;
#X connect 4 0 9 0;
#X connect 5 0 7 0;
#X connect 7 0 6 0;
#X connect 8 0 1 1;
#X connect 9 0 5 0;
#X connect 9 1 1 0;
#X connect 10 1 11 0;
#X connect 11 0 12 0;
#X connect 12 0 8 1;
#X connect 13 0 8 0;
#X connect 14 0 16 0;
#X connect 14 1 15 0;
#X connect 15 1 17 0;
#X connect 15 2 17 1;
#X connect 16 0 21 0;
#X connect 17 0 16 1;
#X connect 19 0 20 0;
#X connect 21 0 4 0;
#X connect 21 1 13 0;
#X connect 21 2 10 0;
#X connect 21 3 19 0;
#X restore 997 244 pd stutter;
#N canvas 526 59 1363 969 toggles 0;
#X obj 75 142 t a a;
#X obj 107 169 unpack f f f;
#X obj 75 235 spigot;
#X msg 75 260 \$2;
#X text 115 257 x value;
#X obj 107 195 == 1;
#X obj 188 195 == 0;
#X obj 150 215 &&;
#X text 126 145 top row \, toggles;
#X obj 75 426 s rec;
#X obj 99 403 s playback;
#X obj 124 363 s unmute;
#X obj 99 381 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
1;
#X obj 75 290 route 0 1 2;
#X obj 124 320 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
1;
#X obj 191 427 s grid;
#X msg 191 402 set 2 0 \$1;
#X obj 124 340 t f f, f 10;
#X obj 191 375 == 0;
#X obj 75 116 inlet;
#X connect 0 0 2 0;
#X connect 0 1 1 0;
#X connect 1 0 5 0;
#X connect 1 2 6 0;
#X connect 2 0 3 0;
#X connect 3 0 13 0;
#X connect 5 0 7 0;
#X connect 6 0 7 1;
#X connect 7 0 2 1;
#X connect 12 0 10 0;
#X connect 13 0 9 0;
#X connect 13 1 12 0;
#X connect 13 2 14 0;
#X connect 14 0 17 0;
#X connect 16 0 15 0;
#X connect 17 0 11 0;
#X connect 17 1 18 0;
#X connect 18 0 16 0;
#X connect 19 0 0 0;
#X restore 1016 220 pd toggles;
#N canvas 603 185 1227 870 speedcontrol 0;
#X obj 115 57 t a a;
#X obj 147 87 unpack f f f;
#X msg 56 128 \$2;
#X obj 56 177 spigot;
#X obj 56 208 t f f;
#X obj 88 269 s grid;
#X obj 140 127 expr $f2 > 7 && $f1 == 1 && $f3 == 2, f 14;
#X msg 88 240 row 7 2 0 0 \, set \$1 2 1;
#X obj 56 342 + 1;
#X floatatom 56 367 5 0 0 0 - - -;
#X obj 56 291 - 10;
#X obj 56 317 * 0.25;
#X obj 56 391 v speed;
#X obj 115 32 inlet;
#X connect 0 0 2 0;
#X connect 0 1 1 0;
#X connect 1 0 6 0;
#X connect 1 1 6 1;
#X connect 1 2 6 2;
#X connect 2 0 3 0;
#X connect 3 0 4 0;
#X connect 4 0 10 0;
#X connect 4 1 7 0;
#X connect 6 0 3 1;
#X connect 7 0 5 0;
#X connect 8 0 9 0;
#X connect 9 0 12 0;
#X connect 10 0 11 0;
#X connect 11 0 8 0;
#X connect 13 0 0 0;
#X restore 1054 173 pd speedcontrol;
#N canvas 281 59 1237 980 reverbmixcontrol 0;
#X obj 75 51 t a a;
#X obj 107 81 unpack f f f;
#X msg 16 122 \$2;
#X obj 16 171 spigot;
#X obj 16 204 t f f;
#X obj 48 263 s grid;
#X text 135 17 reverb mix;
#X obj 100 121 expr $f2 > 7 && $f1 == 1 && $f3 == 3, f 14;
#X msg 48 234 row 7 3 0 0 \, set \$1 3 1;
#X floatatom 16 319 5 0 0 0 - - -;
#X obj 16 294 expr (($f1-8)/8)+0.125;
#X obj 16 357 s reverb_mix;
#X obj 75 13 inlet;
#X connect 0 0 2 0;
#X connect 0 1 1 0;
#X connect 1 0 7 0;
#X connect 1 1 7 1;
#X connect 1 2 7 2;
#X connect 2 0 3 0;
#X connect 3 0 4 0;
#X connect 4 0 10 0;
#X connect 4 1 8 0;
#X connect 7 0 3 1;
#X connect 8 0 5 0;
#X connect 9 0 11 0;
#X connect 10 0 9 0;
#X connect 12 0 0 0;
#X restore 1073 148 pd reverbmixcontrol;
#N canvas 576 59 1238 645 reverblengthcontrol 0;
#X obj 80 45 t a a;
#X obj 112 75 unpack f f f;
#X msg 21 116 \$2;
#X obj 21 165 spigot;
#X obj 21 199 t f f;
#X obj 53 258 s grid;
#X floatatom 21 315 5 0 0 0 - - -;
#X text 134 43 reverb length;
#X msg 53 229 row 7 4 0 0 \, set \$1 4 1;
#X obj 105 115 expr $f2 > 7 && $f1 == 1 && $f3 == 4, f 14;
#X obj 21 341 s reverb_length;
#X obj 21 290 expr (($f1-8)*7)+50;
#X obj 80 8 inlet;
#X connect 0 0 2 0;
#X connect 0 1 1 0;
#X connect 1 0 9 0;
#X connect 1 1 9 1;
#X connect 1 2 9 2;
#X connect 2 0 3 0;
#X connect 3 0 4 0;
#X connect 4 0 11 0;
#X connect 4 1 8 0;
#X connect 6 0 10 0;
#X connect 8 0 5 0;
#X connect 9 0 3 1;
#X connect 11 0 6 0;
#X connect 12 0 0 0;
#X restore 1092 125 pd reverblengthcontrol;
#X text 444 268 TODO tidy up playback \, add more things!;
#X text 147 174 [expr] for length?;
#X text 991 7 grid I/O;
#N canvas 1180 206 450 300 crossfade 0;
#X obj 30 73 inlet~;
#X obj 83 74 inlet~;
#X obj 136 74 inlet;
#X obj 31 152 *~;
#X obj 82 127 *~;
#X obj 136 107 t f f;
#X text 13 22 crossfade between signal 1 and 2 \, by the amount in
the third inlet (0-1);
#X obj 168 133 expr 1-$f1;
#X obj 31 193 +~;
#X obj 31 218 outlet~;
#X floatatom 170 185 5 0 0 0 - - -;
#X connect 0 0 3 0;
#X connect 1 0 4 0;
#X connect 2 0 5 0;
#X connect 3 0 8 0;
#X connect 4 0 8 1;
#X connect 5 0 4 1;
#X connect 5 1 7 0;
#X connect 7 0 10 0;
#X connect 7 0 3 1;
#X connect 8 0 9 0;
#X restore 81 629 pd crossfade;
#X msg 350 48 \; cut_length 16 \; cut_start 0 \; loop const 0 \; pd
dsp 1;
#X connect 0 0 20 0;
#X connect 2 0 3 0;
#X connect 3 0 15 0;
#X connect 4 0 5 0;
#X connect 4 1 44 0;
#X connect 5 0 10 0;
#X connect 6 0 58 0;
#X connect 8 0 10 1;
#X connect 9 0 43 0;
#X connect 10 0 9 0;
#X connect 11 0 12 0;
#X connect 12 0 9 0;
#X connect 13 0 33 0;
#X connect 15 0 63 0;
#X connect 15 0 77 0;
#X connect 16 0 56 0;
#X connect 17 0 18 0;
#X connect 17 0 31 0;
#X connect 17 0 78 0;
#X connect 17 0 59 0;
#X connect 18 0 19 0;
#X connect 18 0 62 0;
#X connect 21 0 39 0;
#X connect 29 0 66 0;
#X connect 30 0 29 0;
#X connect 31 0 0 0;
#X connect 32 0 29 0;
#X connect 33 0 14 0;
#X connect 34 0 35 1;
#X connect 35 0 36 0;
#X connect 36 0 57 0;
#X connect 40 0 29 0;
#X connect 42 0 6 1;
#X connect 43 0 4 0;
#X connect 43 1 42 0;
#X connect 43 2 45 0;
#X connect 44 0 6 0;
#X connect 45 0 47 0;
#X connect 46 0 48 0;
#X connect 47 0 51 0;
#X connect 47 1 50 0;
#X connect 47 2 35 0;
#X connect 47 3 34 0;
#X connect 48 0 2 0;
#X connect 50 0 46 1;
#X connect 51 0 46 0;
#X connect 55 0 15 1;
#X connect 56 0 55 0;
#X connect 57 0 46 2;
#X connect 58 0 5 1;
#X connect 59 0 60 0;
#X connect 63 0 77 1;
#X connect 64 0 65 0;
#X connect 65 0 77 2;
#X connect 66 0 69 0;
#X connect 66 1 70 0;
#X connect 66 2 53 0;
#X connect 66 3 71 0;
#X connect 66 4 72 0;
#X connect 66 5 73 0;
#X connect 67 0 63 2;
#X connect 68 0 77 2;
#X connect 77 0 1 0;
#X connect 77 0 1 1;