-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathmidilooper.pd
More file actions
395 lines (395 loc) · 10 KB
/
midilooper.pd
File metadata and controls
395 lines (395 loc) · 10 KB
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
388
389
390
391
392
393
394
395
#N canvas 459 23 801 751 10;
#X obj 84 13 inlet command;
#X obj 139 662 outlet notes;
#X obj 225 662 outlet pb;
#X obj 293 662 outlet cc;
#X obj 10 13 inlet tick;
#X obj 17 662 outlet status;
#N canvas 58 155 750 458 statemachine 0;
#X obj 182 14 inlet current-state;
#X obj 23 207 outlet next-state;
#X msg 23 155 1;
#X msg 64 155 2;
#X msg 105 155 3;
#X obj 23 125 route 0 1 2 3, f 28;
#X obj 23 14 inlet bang_or_clear;
#X text 25 235 0 - initial state / clear \, 1 - recording \, 2 - playing
\, 3 - stopped;
#X floatatom 23 187 5 0 0 0 - - -, f 5;
#X obj 23 41 sel 1 -1, f 13;
#X msg 60 68 0;
#X obj 23 68 i 0;
#X connect 0 0 11 1;
#X connect 2 0 8 0;
#X connect 3 0 8 0;
#X connect 4 0 8 0;
#X connect 5 0 2 0;
#X connect 5 1 3 0;
#X connect 5 2 4 0;
#X connect 5 3 3 0;
#X connect 6 0 9 0;
#X connect 8 0 1 0;
#X connect 9 0 11 0;
#X connect 9 1 10 0;
#X connect 10 0 8 0;
#X connect 11 0 5 0;
#X restore 141 80 pd statemachine;
#X obj 228 59 r \$0-current-state;
#X obj 10 134 f 0;
#X obj 10 215 s \$0-current-state;
#X obj 10 188 t f f;
#X obj 37 242 route 0 1 2 3, f 48;
#X obj 10 513 qlist;
#X obj 10 472 r \$0-seqlist;
#N canvas 0 22 807 309 makeids 0;
#X obj 13 104 makefilename %s-note;
#X obj 347 104 makefilename %s-bend;
#X obj 180 104 makefilename %s-ctl;
#X obj 519 104 makefilename %s-dummy;
#X obj 519 131 s \$0-dummy-id;
#X obj 347 131 s \$0-bend-id;
#X obj 180 131 s \$0-ctl-id;
#X obj 13 131 s \$0-note-id;
#X obj 309 36 loadbang;
#X obj 309 60 pack \$0;
#X connect 0 0 7 0;
#X connect 1 0 5 0;
#X connect 2 0 6 0;
#X connect 3 0 4 0;
#X connect 8 0 9 0;
#X connect 9 0 0 0;
#X connect 9 0 2 0;
#X connect 9 0 1 0;
#X connect 9 0 3 0;
#X restore 650 18 pd makeids;
#N canvas 590 111 281 250 msfrombang 0;
#X obj 51 164 + 1;
#X obj 13 164 f;
#X floatatom 13 194 10 0 0 0 - - -, f 10;
#X msg 83 134 0;
#X obj 13 134 metro 1;
#X obj 13 104 t b b;
#X msg 66 74 0;
#X obj 13 218 s \$0-timedelta;
#X msg 13 50 1;
#X obj 13 27 r \$0-startcounter;
#X obj 66 50 r \$0-stopcounter;
#X text 12 7 counter for measuring delay between bangs;
#X connect 0 0 1 1;
#X connect 1 0 0 0;
#X connect 1 0 2 0;
#X connect 2 0 7 0;
#X connect 3 0 1 0;
#X connect 4 0 1 0;
#X connect 5 0 4 0;
#X connect 5 1 3 0;
#X connect 6 0 4 0;
#X connect 8 0 5 0;
#X connect 9 0 8 0;
#X connect 10 0 6 0;
#X restore 650 38 pd msfrombang;
#X floatatom 706 101 5 0 0 0 timedelta_ms #0-timedelta -, f 5;
#X obj 17 641 r \$0-current-state;
#X obj 10 383 spigot;
#X obj 16 406 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X obj 10 298 r \$0-eventspigot;
#X obj 16 426 s \$0-startcounter;
#X obj 10 450 s \$0-seqlist;
#X msg 16 492 print;
#X floatatom 706 125 5 0 0 0 current_state #0-current-state -, f 5
;
#N canvas 17 268 450 300 record 0;
#X obj 12 17 inlet bang;
#X obj 39 67 s \$0-startcounter;
#X text 152 65 1 start interval counter;
#X obj 12 108 s \$0-loop-length;
#X msg 12 87 0;
#X obj 12 44 t b b;
#X text 117 107 2 reset loop length;
#X connect 0 0 5 0;
#X connect 4 0 3 0;
#X connect 5 0 4 0;
#X connect 5 1 1 0;
#X restore 108 269 pd record;
#N canvas 0 22 450 300 play 0;
#X obj 69 70 i;
#X msg 69 117 add \$1 \$2 pause;
#X obj 69 94 pack f s;
#X obj 84 47 r \$0-timedelta;
#X obj 114 70 r \$0-dummy-id;
#X obj 69 140 s \$0-eventspigot;
#X obj 52 163 s \$0-stopcounter;
#X obj 18 223 s \$0-seqlist;
#X text 124 95 1 add dummy pause to loop end;
#X text 155 164 2 stop interval counter;
#X text 97 224 4 start the loop;
#X obj 18 23 inlet bang;
#X obj 18 47 t b b b b;
#X msg 35 183 0;
#X obj 35 203 s \$0-init-current-beat;
#X connect 0 0 2 0;
#X connect 1 0 5 0;
#X connect 2 0 1 0;
#X connect 3 0 0 1;
#X connect 4 0 2 1;
#X connect 11 0 12 0;
#X connect 12 0 7 0;
#X connect 12 1 13 0;
#X connect 12 2 6 0;
#X connect 13 0 14 0;
#X restore 179 269 pd play;
#N canvas 0 22 450 300 stop 0;
#X obj 22 21 inlet bang;
#X msg 61 87 rewind;
#X obj 24 64 t b b;
#X obj 61 110 s \$0-seqlist;
#X connect 0 0 2 0;
#X connect 1 0 3 0;
#X connect 2 1 1 0;
#X restore 250 269 pd stop;
#N canvas 0 22 450 300 clear 0;
#X obj 16 15 inlet bang;
#X msg 16 99 clear;
#X obj 16 126 s \$0-seqlist;
#X msg 95 98 0;
#X obj 95 126 s \$0-loop-length;
#X obj 175 96 s \$0-stopcounter;
#X obj 95 146 s \$0-init-current-beat;
#X obj 16 42 t b b b, f 27;
#X connect 0 0 7 0;
#X connect 1 0 2 0;
#X connect 3 0 4 0;
#X connect 3 0 6 0;
#X connect 7 0 1 0;
#X connect 7 1 3 0;
#X connect 7 2 5 0;
#X restore 37 269 pd clear;
#X floatatom 706 149 5 0 0 0 loop_length_beats #0-loop-length -, f
5;
#X floatatom 706 173 5 0 0 0 current_beat #0-current-beat -, f 5;
#N canvas 0 22 723 468 beatcounter 0;
#X obj 10 193 f 0;
#X obj 42 193 + 1;
#X obj 10 139 spigot;
#X obj 42 220 s \$0-loop-length;
#X obj 25 166 r \$0-loop-length;
#X obj 10 10 r \$0-tick;
#X obj 192 119 i 0;
#X obj 224 119 + 1;
#X obj 224 161 %;
#X obj 239 140 r \$0-loop-length;
#X obj 224 201 s \$0-current-beat;
#X obj 224 181 + 1;
#X obj 192 77 spigot 0;
#X obj 237 35 r \$0-current-state;
#X obj 237 56 == 2;
#X obj 207 98 r \$0-init-current-beat;
#X obj 43 96 r \$0-current-state;
#X obj 43 118 == 1;
#X connect 0 0 1 0;
#X connect 1 0 0 1;
#X connect 1 0 3 0;
#X connect 2 0 0 0;
#X connect 4 0 0 1;
#X connect 5 0 2 0;
#X connect 5 0 12 0;
#X connect 6 0 7 0;
#X connect 7 0 6 1;
#X connect 7 0 8 0;
#X connect 8 0 11 0;
#X connect 9 0 8 1;
#X connect 11 0 10 0;
#X connect 12 0 6 0;
#X connect 13 0 14 0;
#X connect 14 0 12 1;
#X connect 15 0 6 1;
#X connect 16 0 17 0;
#X connect 17 0 2 1;
#X restore 650 58 pd beatcounter;
#X obj 43 363 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
1;
#X obj 706 197 bng 15 250 50 0 empty \$0-tick tick -30 7 0 10 -262144
-1 -1;
#X obj 20 40 s \$0-tick;
#X obj 130 403 r \$0-current-beat;
#X obj 130 426 sel 1;
#X obj 130 449 s \$0-seqlist;
#X obj 139 618 r \$0-note;
#X obj 225 618 r \$0-bend;
#X obj 293 618 r \$0-ctl;
#N canvas 0 22 824 292 midiinprocessor 0;
#X obj 64 114 i 0;
#X obj 64 138 pack f s;
#X msg 64 162 add2 \$1 \$2;
#X obj 79 90 r \$0-timedelta;
#X obj 109 114 r \$0-note-id;
#X obj 37 90 t l b;
#X obj 37 64 pack f f;
#X msg 37 186 add \$1 \$2;
#X obj 37 23 notein \$1;
#X floatatom 37 45 5 0 0 0 - - -, f 5;
#X floatatom 88 45 5 0 0 0 - - -, f 5;
#X obj 37 210 s \$0-eventspigot;
#X obj 226 90 t l b;
#X obj 263 114 i 0;
#X obj 263 138 pack f s;
#X msg 263 162 add2 \$1 \$2;
#X obj 278 90 r \$0-timedelta;
#X obj 324 114 r \$0-ctl-id;
#X obj 226 210 s \$0-eventspigot;
#X msg 226 186 add \$1 \$2;
#X obj 226 29 ctlin \$1;
#X obj 226 69 pack f f;
#X floatatom 226 51 5 0 0 0 - - -, f 5;
#X floatatom 271 51 5 0 0 0 - - -, f 5;
#X obj 425 30 bendin \$1;
#X obj 463 96 i 0;
#X obj 463 120 pack f s;
#X msg 463 144 add2 \$1 \$2;
#X obj 426 192 s \$0-eventspigot;
#X obj 484 72 r \$0-timedelta;
#X obj 524 96 r \$0-bend-id;
#X msg 426 168 add \$1;
#X obj 426 72 t f b;
#X floatatom 425 51 5 0 0 0 - - -, f 5;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 2 0 11 0;
#X connect 3 0 0 1;
#X connect 4 0 1 1;
#X connect 5 0 7 0;
#X connect 5 1 0 0;
#X connect 6 0 5 0;
#X connect 7 0 11 0;
#X connect 8 0 9 0;
#X connect 8 1 10 0;
#X connect 9 0 6 0;
#X connect 10 0 6 1;
#X connect 12 0 19 0;
#X connect 12 1 13 0;
#X connect 13 0 14 0;
#X connect 14 0 15 0;
#X connect 15 0 18 0;
#X connect 16 0 13 1;
#X connect 17 0 14 1;
#X connect 19 0 18 0;
#X connect 20 0 22 0;
#X connect 20 1 23 0;
#X connect 21 0 12 0;
#X connect 22 0 21 0;
#X connect 23 0 21 1;
#X connect 24 0 33 0;
#X connect 25 0 26 0;
#X connect 26 0 27 0;
#X connect 27 0 28 0;
#X connect 29 0 25 1;
#X connect 30 0 26 1;
#X connect 31 0 28 0;
#X connect 32 0 31 0;
#X connect 32 1 25 0;
#X connect 33 0 32 0;
#X restore 650 78 pd midiinprocessor;
#X obj 43 319 r \$0-current-state;
#X obj 43 341 == 1;
#X text 80 342 only allow events through in record state;
#X text 133 384 retrigger loop every 1st beat;
#X obj 228 13 inlet bpm;
#X floatatom 706 222 5 0 0 0 global_bpm #0-global-bpm -, f 5;
#X floatatom 706 246 5 0 0 0 loop_bpm #0-loop-bpm -, f 5;
#X floatatom 706 270 5 0 0 0 tempo #0-tempo -, f 5;
#N canvas 0 22 387 346 bpmtotempo 0;
#X obj 12 12 inlet bpm;
#X obj 51 57 s \$0-global-bpm;
#X obj 64 123 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
1;
#X obj 64 79 r \$0-current-state;
#X text 95 102 only allow loop bpm change when clear state;
#X obj 64 101 == 0;
#X obj 31 143 spigot;
#X obj 12 35 t b f f;
#X obj 31 165 s \$0-loop-bpm;
#X obj 12 267 f;
#X obj 27 245 r \$0-global-bpm;
#X obj 12 289 /;
#X obj 54 201 r \$0-loop-bpm;
#X obj 39 223 f;
#X obj 12 201 t b b;
#X obj 12 311 s \$0-tempo;
#X connect 0 0 7 0;
#X connect 2 0 6 1;
#X connect 3 0 5 0;
#X connect 5 0 2 0;
#X connect 6 0 8 0;
#X connect 7 0 14 0;
#X connect 7 1 6 0;
#X connect 7 2 1 0;
#X connect 9 0 11 0;
#X connect 10 0 9 1;
#X connect 11 0 15 0;
#X connect 12 0 13 1;
#X connect 13 0 11 1;
#X connect 14 0 9 0;
#X connect 14 1 13 0;
#X restore 266 213 pd bpmtotempo;
#X obj 139 135 loadbang;
#X obj 10 161 change -1;
#X obj 266 132 f \$2;
#X obj 266 186 f 120;
#X obj 266 159 sel 0;
#X text 302 159 if no second argument \, set 120 as default bpm;
#X obj 139 158 t b b;
#X obj 139 640 spigot 1;
#X obj 225 640 spigot 1;
#X obj 293 640 spigot 1;
#X obj 706 294 tgl 15 0 empty \$0-mute mute -27 7 0 10 -262144 -1 -1
0 1;
#X obj 270 572 == 0;
#X obj 84 40 route mute;
#X obj 84 62 s \$0-mute;
#X obj 270 551 r \$0-mute;
#X connect 0 0 63 0;
#X connect 4 0 34 0;
#X connect 4 0 8 0;
#X connect 6 0 8 1;
#X connect 7 0 6 1;
#X connect 8 0 52 0;
#X connect 10 0 9 0;
#X connect 10 1 11 0;
#X connect 11 0 28 0;
#X connect 11 1 25 0;
#X connect 11 2 26 0;
#X connect 11 3 27 0;
#X connect 13 0 12 0;
#X connect 17 0 5 0;
#X connect 18 0 19 0;
#X connect 18 0 22 0;
#X connect 19 0 21 0;
#X connect 20 0 18 0;
#X connect 23 0 12 0;
#X connect 32 0 18 1;
#X connect 35 0 36 0;
#X connect 36 0 37 0;
#X connect 38 0 58 0;
#X connect 39 0 59 0;
#X connect 40 0 60 0;
#X connect 42 0 43 0;
#X connect 43 0 32 0;
#X connect 46 0 54 0;
#X connect 51 0 57 0;
#X connect 52 0 10 0;
#X connect 53 0 55 0;
#X connect 54 0 50 0;
#X connect 55 0 54 0;
#X connect 55 1 54 0;
#X connect 57 0 53 0;
#X connect 57 1 8 0;
#X connect 58 0 1 0;
#X connect 59 0 2 0;
#X connect 60 0 3 0;
#X connect 62 0 58 1;
#X connect 62 0 59 1;
#X connect 62 0 60 1;
#X connect 63 0 64 0;
#X connect 63 1 6 0;
#X connect 65 0 62 0;