-
-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathlive-seamlesslooper.pd
executable file
·387 lines (387 loc) · 10.3 KB
/
live-seamlesslooper.pd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
#N canvas 0 0 1017 679 10;
#X obj 110 73 tgl 25 0 empty empty empty 17 7 0 25 -262144 -1 -1 0
1;
#X obj 458 283 *;
#X obj 506 279 samplerate~;
#X obj 458 259 t f b;
#N canvas 163 142 813 514 set 0;
#X obj 314 83 inlet;
#X obj 314 205 realtime;
#X obj 314 109 t b b;
#X obj 153 201 +;
#X obj 126 200 f;
#X msg 153 159 1;
#X obj 359 178 spigot;
#X obj 126 285 > 1;
#X obj 618 330 sel 1;
#X msg 126 159 0;
#X obj 642 195 metro 1;
#X obj 642 251 +;
#X obj 618 251 f;
#X msg 642 215 1;
#X msg 614 215 0;
#X obj 172 255 sel 1;
#X obj 642 170 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
1;
#X obj 314 350 +;
#X obj 288 350 f;
#X obj 618 282 spigot;
#X obj 288 402 /;
#X obj 199 361 - 1;
#X obj 315 485 outlet;
#X obj 275 86 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X floatatom 341 463 12 0 0 0 - - -;
#X obj 126 306 s TAP_not_first;
#X obj 392 156 r TAP_not_first;
#X obj 671 253 r TAP_not_first;
#X obj 172 277 s TAP_start;
#X obj 642 148 r TAP_start;
#X obj 288 439 sel 0;
#X obj 618 311 > 3000;
#X obj 618 351 s TAP_finish;
#X obj 614 125 r TAP_finish;
#X obj 126 136 r TAP_finish;
#X msg 288 329 0;
#X obj 288 306 r TAP_finish;
#X text 500 24 A timer gets triggered and reset every time;
#X text 499 38 the inlet receives a bang. If nothing happens;
#X text 498 53 afterwards for 3000 ms \, the "tempo" is considered
;
#X text 498 68 definitive \, and everything gets reset.;
#X text 498 90 comment;
#X text 12 189 Count the number;
#X text 12 201 of bangs received.;
#X text 385 199 Measure the time between;
#X text 385 212 two bangs (making sure that;
#X text 386 223 we only start measuring at;
#X text 386 235 the second bang).;
#X text 358 342 Sum the measured durations...;
#X text 336 403 ... and divide it by the number of bangs-1;
#X text 336 417 to get the average time between 2 bangs.;
#X text 558 490 Pierre Massat \, Guitar Extended \, 2013;
#X text 6 2 "Tap tempo" : we don't measure the tempo;
#X text 5 16 here \, but the duration between 2 beats (bangs).;
#X text 5 30 This is used later to set the length of the loop.;
#X connect 0 0 2 0;
#X connect 1 0 17 0;
#X connect 2 0 1 0;
#X connect 2 1 5 0;
#X connect 2 1 6 0;
#X connect 2 1 14 0;
#X connect 3 0 4 0;
#X connect 4 0 3 1;
#X connect 4 0 7 0;
#X connect 4 0 21 0;
#X connect 4 0 15 0;
#X connect 5 0 3 0;
#X connect 6 0 1 1;
#X connect 7 0 25 0;
#X connect 8 0 32 0;
#X connect 9 0 4 0;
#X connect 10 0 13 0;
#X connect 11 0 12 0;
#X connect 12 0 11 1;
#X connect 12 0 19 0;
#X connect 13 0 11 0;
#X connect 14 0 12 0;
#X connect 15 0 28 0;
#X connect 16 0 10 0;
#X connect 17 0 18 0;
#X connect 18 0 17 1;
#X connect 18 0 20 0;
#X connect 19 0 31 0;
#X connect 20 0 30 0;
#X connect 21 0 20 1;
#X connect 23 0 2 0;
#X connect 26 0 6 1;
#X connect 27 0 19 1;
#X connect 29 0 16 0;
#X connect 30 1 22 0;
#X connect 30 1 24 0;
#X connect 31 0 8 0;
#X connect 33 0 16 0;
#X connect 34 0 9 0;
#X connect 35 0 18 0;
#X connect 36 0 35 0;
#X restore 458 131 pd set tempo;
#X obj 458 193 * 4;
#X obj 458 99 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X obj 458 237 / 1000;
#X obj 58 296 r~ main_out;
#X obj 58 327 +~;
#X obj 74 196 *~;
#X obj 110 178 line~;
#X obj 110 159 pack 0 5;
#X obj 480 393 r loop_on_off;
#X text 103 45 Record;
#N canvas 330 257 450 300 into_blocks 0;
#X obj 173 101 % 64;
#X obj 146 81 t f f;
#X obj 146 121 -;
#X obj 146 59 int;
#X obj 146 17 inlet;
#X obj 146 167 outlet;
#X text 238 67 to be a multiple of the block size.;
#X text 238 49 Force the length of the tables;
#X text 134 261 Pierre Massat \, Guitar extended \, 2013;
#X connect 0 0 2 1;
#X connect 1 0 2 0;
#X connect 1 1 0 0;
#X connect 2 0 5 0;
#X connect 3 0 1 0;
#X connect 4 0 3 0;
#X restore 458 305 pd into_blocks;
#X obj 458 330 s new_length;
#X obj 847 262 r new_length;
#X obj 559 549 spigot;
#X obj 480 453 sel 1 0;
#X msg 480 486 bang;
#X msg 514 485 stop;
#X obj 478 565 s~ main_out;
#X obj 847 332 r empty_table;
#X obj 775 122 t f f;
#X obj 775 166 s loop_on_off;
#X obj 480 433 t f f;
#X obj 579 528 s stop_looping;
#X obj 126 346 r stop_looping;
#X obj 559 578 s new_cycle;
#X obj 145 367 r new_cycle;
#X obj 58 388 tabwrite~ bande;
#X obj 478 527 tabplay~ bande;
#X obj 847 404 table bande;
#N canvas 185 178 252 185 limiter 0;
#X obj 24 22 inlet~;
#X msg 121 85 limit 100;
#X obj 121 21 loadbang;
#X obj 24 60 z~ 64;
#X obj 24 169 *~;
#X obj 24 200 outlet~;
#X obj 121 113 limiter~ 10;
#X connect 0 0 3 0;
#X connect 0 0 6 0;
#X connect 1 0 6 0;
#X connect 2 0 1 0;
#X connect 3 0 4 0;
#X connect 4 0 5 0;
#X connect 6 0 4 1;
#X restore 74 246 pd limiter;
#X obj 605 100 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
#X obj 605 176 s empty_table;
#X text 446 56 Tempo;
#X obj 480 413 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
1;
#X text 698 654 Pierre Massat \, Guitar Extended \, 2013;
#X text 562 473 Here we play the table (loop) continuously.;
#X text 42 422 This is where the recording happens.;
#X text 309 121 Get the duration between;
#X text 309 133 two beats...;
#X text 310 165 ... divide it by 4 (we;
#X text 310 178 assume that there are 4;
#X text 310 190 beats in a bar)...;
#X text 288 250 ...and compute the length;
#X text 288 264 of the table in samples \, as;
#X text 289 291 block size.;
#X text 289 279 a multiple of the;
#X obj 775 102 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
1;
#X obj 74 126 adc~;
#X obj 366 592 dac~;
#X msg 449 393 1;
#X obj 605 120 t b b;
#X obj 605 143 del 2;
#X text 746 53 Audio On/Off;
#X text 595 56 Clear;
#X obj 449 369 r new_length;
#X obj 61 598 soundfiler;
#X obj 61 558 savepanel;
#X obj 61 540 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X msg 61 578 write -wave \$1.wav bande;
#X text 27 502 And if you really happy with your loop \,;
#X text 27 516 save it as a .wav file !;
#N canvas 185 178 252 185 limiter 0;
#X obj 24 22 inlet~;
#X msg 121 85 limit 100;
#X obj 121 21 loadbang;
#X obj 24 60 z~ 64;
#X obj 24 169 *~;
#X obj 24 200 outlet~;
#X obj 121 113 limiter~ 10;
#X connect 0 0 3 0;
#X connect 0 0 6 0;
#X connect 1 0 6 0;
#X connect 2 0 1 0;
#X connect 3 0 4 0;
#X connect 4 0 5 0;
#X connect 6 0 4 1;
#X restore 365 568 pd limiter;
#X obj 802 147 switch~;
#N canvas 175 136 691 422 reverse 0;
#X obj 120 109 bng 15 250 50 0 empty empty Reverse_me 18 7 0 8 -262144
-1 -1;
#X obj 120 200 until;
#X obj 186 228 + 1;
#X obj 154 228 f;
#X obj 145 176 s \$1-length;
#X obj 323 335 table tempArray;
#X obj 120 152 t f f f;
#X obj 244 196 s tempArray;
#X msg 244 172 resize \$1;
#X obj 75 308 tabwrite tempArray;
#X obj 520 51 sel;
#X obj 596 41 - 1;
#X obj 596 17 r \$1-length;
#X obj 154 254 t f f f;
#X obj 67 278 s \$1-eof;
#X obj 520 18 r \$1-eof;
#X obj 520 123 until;
#X obj 520 98 f;
#X obj 520 156 f;
#X obj 552 156 - 1;
#X obj 571 103 r \$1-length;
#X obj 539 74 r \$1-length;
#X obj 520 208 tabread tempArray;
#X obj 584 255 f;
#X obj 603 231 r \$1-length;
#X obj 584 304 mod;
#X obj 603 279 r \$1-length;
#X obj 614 255 + 1;
#X obj 520 181 t f b;
#X obj 571 126 - 1;
#X text 53 335 Copies array to a temporary location.;
#X msg 337 124 0;
#X obj 337 148 s clr2;
#X obj 463 110 r clr2;
#X obj 173 200 r clr2;
#X obj 120 128 arraysize bande;
#X obj 179 281 tabread bande;
#X obj 520 335 tabwrite bande;
#X obj 120 42 inlet;
#X obj 471 368 sel 0;
#X text 515 377 Bang when done copying;
#X obj 471 390 outlet;
#X text 206 396 (Taken and adapted from Pd's help);
#X connect 0 0 31 0;
#X connect 0 0 35 0;
#X connect 1 0 3 0;
#X connect 2 0 3 1;
#X connect 3 0 2 0;
#X connect 3 0 13 0;
#X connect 6 0 1 0;
#X connect 6 1 4 0;
#X connect 6 2 8 0;
#X connect 8 0 7 0;
#X connect 10 0 17 0;
#X connect 11 0 10 1;
#X connect 12 0 11 0;
#X connect 13 0 14 0;
#X connect 13 1 36 0;
#X connect 13 2 9 1;
#X connect 15 0 10 0;
#X connect 16 0 18 0;
#X connect 17 0 16 0;
#X connect 18 0 19 0;
#X connect 18 0 28 0;
#X connect 19 0 18 1;
#X connect 20 0 29 0;
#X connect 21 0 17 1;
#X connect 22 0 37 0;
#X connect 23 0 25 0;
#X connect 23 0 27 0;
#X connect 24 0 23 1;
#X connect 25 0 37 1;
#X connect 26 0 25 1;
#X connect 27 0 23 1;
#X connect 28 0 22 0;
#X connect 28 0 39 0;
#X connect 28 1 23 0;
#X connect 29 0 18 1;
#X connect 31 0 32 0;
#X connect 33 0 18 1;
#X connect 34 0 3 1;
#X connect 35 0 6 0;
#X connect 36 0 9 0;
#X connect 38 0 0 0;
#X connect 39 0 41 0;
#X restore 893 560 pd reverse;
#X obj 893 497 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
#X msg 847 354 \; bande const 0 \;;
#X msg 847 282 \; bande resize \$1 \;;
#X obj 893 518 t b b;
#X obj 366 548 *~;
#X obj 381 527 line~;
#X obj 381 507 pack 0 5;
#X msg 923 584 0;
#X obj 893 538 del 5;
#X msg 893 584 1;
#X obj 365 458 r~ main_out;
#X obj 893 612 s vol-output;
#X obj 381 486 r vol-output;
#X text 876 474 Reverse it !!!;
#X obj 751 188 s vol-output;
#X connect 0 0 12 0;
#X connect 1 0 15 0;
#X connect 2 0 1 1;
#X connect 3 0 1 0;
#X connect 3 1 2 0;
#X connect 4 0 5 0;
#X connect 5 0 7 0;
#X connect 6 0 4 0;
#X connect 7 0 3 0;
#X connect 8 0 9 0;
#X connect 9 0 31 0;
#X connect 10 0 34 0;
#X connect 11 0 10 1;
#X connect 12 0 11 0;
#X connect 13 0 38 0;
#X connect 15 0 16 0;
#X connect 17 0 71 0;
#X connect 18 0 29 0;
#X connect 18 0 32 0;
#X connect 19 0 20 0;
#X connect 19 1 21 0;
#X connect 20 0 29 0;
#X connect 20 0 32 0;
#X connect 21 0 27 0;
#X connect 21 0 32 0;
#X connect 23 0 70 0;
#X connect 24 0 25 0;
#X connect 24 0 83 0;
#X connect 24 1 67 0;
#X connect 26 0 19 0;
#X connect 26 1 18 1;
#X connect 28 0 31 0;
#X connect 30 0 31 0;
#X connect 32 0 22 0;
#X connect 32 1 18 0;
#X connect 34 0 9 1;
#X connect 35 0 55 0;
#X connect 38 0 26 0;
#X connect 51 0 24 0;
#X connect 52 0 10 0;
#X connect 54 0 38 0;
#X connect 55 0 56 0;
#X connect 55 1 36 0;
#X connect 56 0 36 0;
#X connect 59 0 54 0;
#X connect 61 0 63 0;
#X connect 62 0 61 0;
#X connect 63 0 60 0;
#X connect 66 0 53 0;
#X connect 66 0 53 1;
#X connect 68 0 78 0;
#X connect 69 0 72 0;
#X connect 72 0 77 0;
#X connect 72 1 76 0;
#X connect 73 0 66 0;
#X connect 74 0 73 1;
#X connect 75 0 74 0;
#X connect 76 0 80 0;
#X connect 77 0 68 0;
#X connect 78 0 80 0;
#X connect 79 0 73 0;
#X connect 81 0 75 0;