unpunch.pd 81.4 KB
Newer Older
1001
1002
1003
1004
1005
1006
1007
#X obj 24 206 outlet;
#X obj 110 93 r \$0.canvasleftmargin;
#X obj 24 159 list prepend \$0;
#X obj 24 91 +;
#X obj 24 69 unpack f f s;
#X obj 24 112 pack f f s;
#X msg 24 182 scalar \$1.mode.button \$2 \$3 \$4 \$5 \$6;
1008
#X msg 24 138 \$1 11 \$2 666 \$3;
Roman Haefeli's avatar
Roman Haefeli committed
1009
#X msg 24 46 85 72 velocity \, 168 72 duration \, 251 95 gid;
Roman Haefeli's avatar
Roman Haefeli committed
1010
#X connect 0 0 9 0;
1011
#X connect 2 0 4 1;
1012
#X connect 3 0 7 0;
1013
1014
1015
1016
#X connect 4 0 6 0;
#X connect 5 0 4 0;
#X connect 5 1 6 1;
#X connect 5 2 6 2;
Roman Haefeli's avatar
Roman Haefeli committed
1017
#X connect 6 0 8 0;
1018
#X connect 7 0 1 0;
Roman Haefeli's avatar
Roman Haefeli committed
1019
1020
#X connect 8 0 3 0;
#X connect 9 0 5 0;
Roman Haefeli's avatar
Roman Haefeli committed
1021
1022
1023
1024
#X restore 411 192 pd create.mode.button;
#N canvas 83 122 579 400 create.pager 0;
#X obj 34 267 list prepend \$0;
#X obj 34 318 outlet;
Roman Haefeli's avatar
Roman Haefeli committed
1025
#X obj 34 17 inlet;
Roman Haefeli's avatar
Roman Haefeli committed
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
#X msg 34 295 scalar \$1.pager \$2 \$3 \$4 \$5 \$6 \$7;
#X text 47 238 x y c dir num nvis;
#X obj 34 140 t a a;
#X msg 110 116 \$1;
#X obj 110 139 + 40;
#X obj 34 175 list append;
#X msg 34 205 \$1 \$2 666 0 1 1 \, \$3 \$2 444 24 0 0;
#X obj 34 47 f;
#X obj 68 49 r \$0.canvasleftmargin;
#X obj 34 70 + 10;
#X msg 34 117 \$1 20;
Roman Haefeli's avatar
Roman Haefeli committed
1037
#X connect 0 0 3 0;
Roman Haefeli's avatar
Roman Haefeli committed
1038
#X connect 2 0 10 0;
Roman Haefeli's avatar
Roman Haefeli committed
1039
#X connect 3 0 1 0;
Roman Haefeli's avatar
Roman Haefeli committed
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
#X connect 5 0 8 0;
#X connect 5 1 6 0;
#X connect 6 0 7 0;
#X connect 7 0 8 1;
#X connect 8 0 9 0;
#X connect 9 0 0 0;
#X connect 10 0 12 0;
#X connect 11 0 10 1;
#X connect 12 0 13 0;
#X connect 13 0 5 0;
#X restore 369 270 pd create.pager;
#X obj 355 61 t b b b b b b b b b;
#N canvas 301 211 450 300 create.guibar 0;
#X obj 8 14 inlet;
#X obj 8 235 outlet;
#X obj 241 109 r \$0.stepviswidth;
#X obj 287 134 r \$0.stepsperpage;
#X obj 287 157 t b a;
#X obj 241 189 *;
#X obj 48 58 r \$0.canvasleftmargin;
#X obj 8 58 f;
#X obj 8 139 pack f 11 f;
#X obj 8 162 list prepend \$0;
#X msg 8 185 scalar \$1.guibar \$2 \$3 \$4;
#X connect 0 0 7 0;
#X connect 2 0 5 0;
#X connect 3 0 4 0;
#X connect 4 0 5 0;
#X connect 4 1 5 1;
#X connect 5 0 8 2;
#X connect 6 0 7 1;
Roman Haefeli's avatar
Roman Haefeli committed
1071
#X connect 7 0 8 0;
Roman Haefeli's avatar
Roman Haefeli committed
1072
#X connect 8 0 9 0;
Roman Haefeli's avatar
Roman Haefeli committed
1073
#X connect 9 0 10 0;
Roman Haefeli's avatar
Roman Haefeli committed
1074
1075
#X connect 10 0 1 0;
#X restore 473 88 pd create.guibar;
Roman Haefeli's avatar
Roman Haefeli committed
1076
#X connect 0 0 17 0;
1077
1078
1079
1080
1081
1082
1083
1084
#X connect 2 0 4 0;
#X connect 3 0 2 0;
#X connect 5 0 3 0;
#X connect 6 0 2 1;
#X connect 7 0 1 0;
#X connect 8 0 1 0;
#X connect 9 0 1 0;
#X connect 10 0 1 0;
Roman Haefeli's avatar
Roman Haefeli committed
1085
#X connect 13 0 1 0;
1086
#X connect 15 0 1 0;
Roman Haefeli's avatar
Roman Haefeli committed
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
#X connect 16 0 1 0;
#X connect 17 0 11 0;
#X connect 17 0 12 0;
#X connect 17 0 14 0;
#X connect 17 1 16 0;
#X connect 17 2 13 0;
#X connect 17 3 10 0;
#X connect 17 4 15 0;
#X connect 17 5 9 0;
#X connect 17 6 8 0;
#X connect 17 7 7 0;
Roman Haefeli's avatar
Roman Haefeli committed
1098
1099
#X connect 17 8 18 0;
#X connect 18 0 1 0;
Roman Haefeli's avatar
Roman Haefeli committed
1100
#X restore 461 215 pd create_guis;
Roman Haefeli's avatar
Roman Haefeli committed
1101
#N canvas 0 99 804 259 gui-templates 0;
Roman Haefeli's avatar
Roman Haefeli committed
1102
1103
1104
1105
#N canvas 0 99 408 150 gid.button-template 0;
#X obj 16 99 s \$0.gid.button.send;
#X obj 16 60 struct \$0.gid.button float x float y float clr float
hl float gid;
Roman Haefeli's avatar
Roman Haefeli committed
1106
#X obj 17 26 filledpolygon clr hl 1 0 0 0 15 15 15 15 0;
Roman Haefeli's avatar
Roman Haefeli committed
1107
#X connect 1 0 0 0;
1108
#X restore 8 78 pd gid.button-template;
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
#N canvas 195 247 417 284 vel-template 0;
#X obj 14 260 s \$0.vel.send;
#X obj 99 168 max 0;
#X obj 99 191 min 127;
#X obj 14 65 struct \$0.vel float x float y float value;
#X obj 14 88 t a a;
#X obj 99 144 get \$0.vel value;
#X obj 99 99 route change;
#X obj 99 122 t p p;
#X obj 99 216 set \$0.vel value;
#X obj 13 39 filledpolygon 886 886 1 0 0 0 15 72 15 72 0;
Roman Haefeli's avatar
Roman Haefeli committed
1120
1121
1122
1123
1124
1125
#X obj 14 11 drawnumber value 0 2 0 velocity=;
#X connect 1 0 2 0;
#X connect 2 0 8 0;
#X connect 3 0 4 0;
#X connect 4 0 0 0;
#X connect 4 1 6 0;
Roman Haefeli's avatar
Roman Haefeli committed
1126
#X connect 5 0 1 0;
Roman Haefeli's avatar
Roman Haefeli committed
1127
1128
1129
#X connect 6 0 7 0;
#X connect 7 0 5 0;
#X connect 7 1 8 1;
Roman Haefeli's avatar
Roman Haefeli committed
1130
#X restore 8 48 pd vel-template;
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
#N canvas 0 99 414 335 dur-template 0;
#X obj 14 75 struct \$0.dur float x float y float value;
#X obj 99 201 min 127;
#X obj 14 98 t a a;
#X obj 99 109 route change;
#X obj 99 132 t p p;
#X obj 99 154 get \$0.dur value;
#X obj 99 226 set \$0.dur value;
#X obj 14 270 s \$0.dur.send;
#X obj 99 178 max 1;
#X obj 13 39 filledpolygon 886 886 1 0 0 0 15 72 15 72 0;
Roman Haefeli's avatar
Roman Haefeli committed
1142
#X obj 14 11 drawnumber value 0 2 0 duration=;
1143
#X obj 155 199 r \$0.stepsperpage;
Roman Haefeli's avatar
Roman Haefeli committed
1144
1145
#X connect 0 0 2 0;
#X connect 1 0 6 0;
1146
#X connect 2 0 7 0;
Roman Haefeli's avatar
Roman Haefeli committed
1147
1148
#X connect 2 1 3 0;
#X connect 3 0 4 0;
1149
#X connect 4 0 5 0;
Roman Haefeli's avatar
Roman Haefeli committed
1150
#X connect 4 1 6 1;
1151
1152
1153
#X connect 5 0 8 0;
#X connect 8 0 1 0;
#X connect 11 0 1 1;
1154
1155
#X restore 8 18 pd dur-template;
#N canvas 469 142 450 300 show.selector-template 0;
1156
#X obj 22 149 s \$0.show.selector.send;
Roman Haefeli's avatar
Roman Haefeli committed
1157
1158
#X obj 22 108 struct \$0.show.selector float x float y float w float
hilite float id symbol label;
Roman Haefeli's avatar
Roman Haefeli committed
1159
#X obj 21 25 filledpolygon 666 666 1 0 0 0 15 w 15 w 0;
1160
#X obj 22 53 drawsymbol label 2 1 hilite;
Roman Haefeli's avatar
Roman Haefeli committed
1161
#X connect 1 0 0 0;
1162
#X restore 8 138 pd show.selector-template;
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
#X obj 464 59 route click;
#X obj 464 107 s \$0.default.gid;
#X obj 333 35 r \$0.vel.send;
#X obj 333 81 get \$0.vel value;
#X obj 333 106 s \$0.default.vel;
#X obj 333 58 route change;
#X obj 209 55 route change;
#X obj 209 32 r \$0.dur.send;
#X obj 209 78 get \$0.dur value;
#X obj 209 103 s \$0.default.dur;
#X obj 464 36 r \$0.gid.button.send;
#X obj 464 82 get \$0.gid.button gid;
#X obj 612 60 route click;
#X obj 612 37 r \$0.show.selector.send;
#X obj 612 83 get \$0.show.selector id;
#X obj 612 108 s \$0.default.show;
Roman Haefeli's avatar
Roman Haefeli committed
1179
1180
1181
1182
1183
#N canvas 489 158 450 300 cursor-template 0;
#X obj 22 149 s \$0.cursor.send;
#X obj 22 108 struct \$0.cursor float x float y float h float vis;
#X obj 18 20 drawpolygon -v vis 900 1 0 0 0 h;
#X connect 1 0 0 0;
1184
1185
1186
1187
1188
1189
1190
1191
#X restore 8 168 pd cursor-template;
#N canvas 0 99 392 164 mode.button-template 0;
#X obj 16 99 s \$0.mode.button.send;
#X obj 17 26 filledpolygon c c 1 0 0 0 8 w 8 w 0;
#X obj 16 60 struct \$0.mode.button float x float y float w float c
symbol param;
#X connect 2 0 0 0;
#X restore 8 108 pd mode.button-template;
Roman Haefeli's avatar
Roman Haefeli committed
1192
#N canvas 199 504 810 268 mode.button.logic 0;
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
#X obj 23 17 r \$0.mode.button.send;
#X msg 99 186 900;
#X msg 130 187 666;
#X obj 99 159 sel 666 900;
#X obj 23 63 t p p, f 26;
#X obj 23 88 get \$0.mode.button w c;
#X obj 23 217 set \$0.mode.button w c, f 26;
#X obj 23 148 f;
#X obj 75 121 b;
#X obj 23 40 route click change;
#X obj 243 17 r \$0.mode.button.send;
#X obj 243 40 route click;
#X obj 243 63 get \$0.mode.button c param;
#X obj 243 86 sel 666 900;
#X msg 243 109 1;
#X msg 274 109 0;
#X obj 243 152 list prepend;
1210
1211
#X obj 243 198 s \$0.edit.modes;
#X obj 243 175 list trim;
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
#X connect 0 0 9 0;
#X connect 1 0 6 1;
#X connect 2 0 6 1;
#X connect 3 0 1 0;
#X connect 3 1 2 0;
#X connect 4 0 5 0;
#X connect 4 1 6 2;
#X connect 5 0 7 0;
#X connect 5 1 3 0;
#X connect 7 0 6 0;
#X connect 8 0 7 0;
#X connect 9 0 4 0;
#X connect 9 1 8 0;
#X connect 10 0 11 0;
#X connect 11 0 12 0;
#X connect 12 0 13 0;
#X connect 12 1 16 1;
#X connect 13 0 14 0;
#X connect 13 1 15 0;
#X connect 14 0 16 0;
#X connect 15 0 16 0;
1233
1234
#X connect 16 0 18 0;
#X connect 18 0 17 0;
1235
#X restore 212 143 pd mode.button.logic;
Roman Haefeli's avatar
Roman Haefeli committed
1236
1237
1238
1239
1240
1241
1242
1243
#N canvas 399 371 450 300 pager-template 0;
#X obj 15 41 filledpolygon c c 1 dir 7 12 14 12 0;
#X obj 21 179 s \$0.pager.send;
#X obj 21 117 struct \$0.pager float x float y float c float dir float
num float nvis;
#X obj 19 66 drawnumber -v nvis num 30 2 0;
#X connect 2 0 1 0;
#X restore 8 198 pd pager-template;
Roman Haefeli's avatar
Roman Haefeli committed
1244
1245
1246
1247
1248
1249
#N canvas 305 215 450 300 guibar-template 0;
#X obj 21 180 s \$0.guibar.send;
#X obj 21 117 struct \$0.guibar float x float y float w;
#X obj 17 39 filledpolygon 777 777 1 0 0 w 0 w 24 0 24;
#X connect 1 0 0 0;
#X restore 8 228 pd guibar-template;
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
#X connect 4 0 15 0;
#X connect 6 0 9 0;
#X connect 7 0 8 0;
#X connect 9 0 7 0;
#X connect 10 0 12 0;
#X connect 11 0 10 0;
#X connect 12 0 13 0;
#X connect 14 0 4 0;
#X connect 15 0 5 0;
#X connect 16 0 18 0;
#X connect 17 0 16 0;
#X connect 18 0 19 0;
Roman Haefeli's avatar
Roman Haefeli committed
1262
#X restore 624 215 pd gui-templates;
1263
1264
#X obj 20 468 r \$0.global.send;
#X obj 47 412 s \$0.global.receive;
1265
1266
1267
1268
1269
#X text 20 63 generate events;
#X text 20 218 process events;
#N canvas 0 99 406 517 note.change.duration 0;
#X obj 14 19 r \$0.note.send;
#X obj 14 246 change -1;
1270
1271
1272
#X obj 167 164 t a a;
#X obj 194 190 tabread \$0.duration;
#X msg 194 215 set \$1;
1273
1274
1275
1276
#X obj 14 376 list prepend;
#X obj 14 404 list prepend note change duration;
#X obj 14 427 list trim;
#X obj 14 455 s \$0.global.send;
1277
#X obj 167 138 change -1;
1278
1279
#X obj 14 42 route change click;
#N canvas 83 99 398 214 id->step|pitch 0;
1280
1281
1282
1283
#X obj 13 14 inlet;
#X obj 13 37 t b a;
#X obj 13 114 list append;
#X obj 13 137 outlet;
1284
1285
#X obj 40 63 s \$0.convert.id->step|pitch.get;
#X obj 40 86 r \$0.convert.id->step|pitch;
1286
1287
1288
1289
1290
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 1 1 4 0;
#X connect 2 0 3 0;
#X connect 5 0 2 1;
1291
#X restore 167 272 pd id->step|pitch;
1292
#N canvas 83 99 398 214 pointer->id 0;
1293
1294
1295
1296
#X obj 13 14 inlet;
#X obj 13 37 t b a;
#X obj 13 114 list append;
#X obj 13 137 outlet;
1297
1298
#X obj 40 63 s \$0.convert.pointer->id.get;
#X obj 40 86 r \$0.convert.pointer->id;
1299
#X connect 0 0 1 0;
1300
#X connect 1 0 2 0;
1301
1302
1303
#X connect 1 1 4 0;
#X connect 2 0 3 0;
#X connect 5 0 2 1;
1304
#X restore 167 76 pd pointer->id;
1305
#N canvas 0 99 405 189 w->duration 0;
1306
1307
1308
1309
#X obj 13 14 inlet;
#X obj 13 37 t b a;
#X obj 13 114 list append;
#X obj 13 137 outlet;
1310
1311
#X obj 40 85 r \$0.convert.w->duration;
#X obj 40 63 s \$0.convert.w->duration.get;
1312
1313
#X connect 0 0 1 0;
#X connect 1 0 2 0;
1314
#X connect 1 1 5 0;
1315
1316
1317
#X connect 2 0 3 0;
#X connect 4 0 2 1;
#X restore 14 114 pd w->duration;
1318
1319
#X obj 14 85 get \$0.note w dur;
#X connect 0 0 10 0;
1320
#X connect 1 0 5 0;
1321
#X connect 2 0 11 0;
1322
1323
1324
#X connect 2 1 3 0;
#X connect 3 0 4 0;
#X connect 4 0 1 0;
1325
#X connect 5 0 6 0;
1326
#X connect 6 0 7 0;
1327
#X connect 7 0 8 0;
1328
1329
#X connect 9 0 2 0;
#X connect 10 0 14 0;
1330
1331
1332
1333
1334
1335
#X connect 10 1 12 0;
#X connect 11 0 5 1;
#X connect 12 0 9 0;
#X connect 13 0 1 0;
#X connect 14 0 13 0;
#X connect 14 1 1 0;
1336
#X restore 19 110 pd note.change.duration;
Roman Haefeli's avatar
Roman Haefeli committed
1337
#N canvas 104 99 631 633 note.create/delete 0;
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
#X obj 29 235 del 0;
#X obj 29 262 f;
#X msg 72 238 1;
#X msg 254 191 0;
#X obj 29 288 sel 1;
#N canvas 0 99 483 432 detect_double_click 0;
#X obj 91 101 -;
#X obj 90 76 t a a;
#X obj 19 23 inlet;
#X text 109 21 this detects two clicks on the same scalar within a
certain period.;
#X obj 19 75 t b b;
#X obj 19 99 del 300;
#X msg 19 122 0;
#X msg 52 123 1;
#X obj 19 48 t b a;
#X obj 91 166 spigot 0;
#X obj 91 203 outlet;
#X obj 91 126 sel 0;
#X connect 0 0 11 0;
#X connect 1 0 0 1;
#X connect 1 1 0 0;
#X connect 2 0 8 0;
#X connect 4 0 5 0;
#X connect 4 1 7 0;
#X connect 5 0 6 0;
#X connect 6 0 9 1;
#X connect 7 0 9 1;
#X connect 8 0 4 0;
#X connect 8 1 1 0;
#X connect 9 0 10 0;
#X connect 11 0 9 0;
Roman Haefeli's avatar
Roman Haefeli committed
1370
#X restore 281 255 pd detect_double_click;
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
#X obj 254 109 unpack s p f;
#X obj 254 132 sel click;
#X obj 254 154 t b b;
#X obj 281 178 pointer;
#X obj 29 14 r \$0.horizgrid.send;
#X obj 29 37 route click;
#X obj 29 60 get \$0.horizgrid y;
#X obj 74 105 route click;
#X obj 74 82 r \$0.vertgrid.send;
#X obj 29 153 pack f f;
#X obj 74 128 get \$0.vertgrid x;
#X obj 29 202 t b b a;
#X obj 29 315 list append;
#X msg 29 176 \$2 \$1;
#X obj 254 79 r \$0.note.send;
#X text 103 318 x y;
Roman Haefeli's avatar
Roman Haefeli committed
1387
#X obj 281 301 f;
1388
1389
#X text 72 427 step pitch;
#N canvas 0 190 318 251 append.vel.dur.gid 0;
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
#X obj 12 18 inlet;
#X obj 12 199 outlet;
#X obj 95 55 r \$0.default.vel;
#X obj 95 85 r \$0.default.dur;
#X obj 95 115 r \$0.default.gid;
#X obj 12 73 list append;
#X obj 12 103 list append;
#X obj 12 133 list append;
#X connect 0 0 5 0;
#X connect 2 0 5 1;
#X connect 3 0 6 1;
#X connect 4 0 7 1;
#X connect 5 0 6 0;
#X connect 6 0 7 0;
#X connect 7 0 1 0;
1405
1406
1407
1408
1409
#X restore 29 444 pd append.vel.dur.gid;
#X text 33 463 step pitch vel dur gid;
#X obj 29 479 list prepend note create;
#X obj 29 502 list trim;
#X obj 29 525 s \$0.global.send;
Roman Haefeli's avatar
Roman Haefeli committed
1410
1411
#X obj 281 278 b;
#X obj 281 232 t a a;
Roman Haefeli's avatar
Roman Haefeli committed
1412
1413
1414
#X obj 326 458 list trim;
#X obj 326 481 s \$0.global.send;
#X obj 326 435 list prepend note delete;
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
#N canvas 0 99 405 189 x->step 0;
#X obj 40 63 s \$0.convert.x->step.get;
#X obj 40 85 r \$0.convert.x->step;
#X obj 13 14 inlet;
#X obj 13 37 t b a;
#X obj 13 114 list append;
#X obj 13 137 outlet;
#X connect 1 0 4 1;
#X connect 2 0 3 0;
#X connect 3 0 4 0;
#X connect 3 1 0 0;
#X connect 4 0 5 0;
#X restore 29 362 pd x->step;
#N canvas 0 99 405 189 y->pitch 0;
#X obj 13 14 inlet;
#X obj 13 37 t b a;
#X obj 13 114 list append;
#X obj 13 137 outlet;
#X obj 40 63 s \$0.convert.y->pitch.get;
#X obj 40 85 r \$0.convert.y->pitch;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 1 1 4 0;
#X connect 2 0 3 0;
#X connect 5 0 2 1;
#X restore 104 362 pd y->pitch;
#X obj 29 338 unpack f f, f 13;
#X obj 29 392 pack f f, f 13;
#N canvas 83 99 398 214 pointer->id 0;
#X obj 13 14 inlet;
#X obj 13 37 t b a;
#X obj 13 114 list append;
#X obj 13 137 outlet;
#X obj 40 63 s \$0.convert.pointer->id.get;
#X obj 40 86 r \$0.convert.pointer->id;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 1 1 4 0;
#X connect 2 0 3 0;
#X connect 5 0 2 1;
#X restore 281 203 pd pointer->id;
1456
#N canvas 73 91 398 214 id->step|pitch 0;
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
#X obj 13 14 inlet;
#X obj 13 37 t b a;
#X obj 13 114 list append;
#X obj 13 137 outlet;
#X obj 40 63 s \$0.convert.id->step|pitch.get;
#X obj 40 86 r \$0.convert.id->step|pitch;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 1 1 4 0;
#X connect 2 0 3 0;
#X connect 5 0 2 1;
#X restore 281 332 pd id->step|pitch;
Roman Haefeli's avatar
Roman Haefeli committed
1469
1470
1471
#X obj 281 355 route -1;
#X msg 281 380 note delete: inconsistency in note cache detected;
#X obj 281 405 s error;
1472
1473
1474
1475
#X connect 0 0 1 0;
#X connect 1 0 4 0;
#X connect 2 0 1 1;
#X connect 3 0 1 1;
Roman Haefeli's avatar
Roman Haefeli committed
1476
#X connect 4 0 18 0;
1477
#X connect 5 0 29 0;
1478
#X connect 6 0 7 0;
Roman Haefeli's avatar
Roman Haefeli committed
1479
1480
1481
1482
#X connect 6 1 9 1;
#X connect 7 0 8 0;
#X connect 8 0 3 0;
#X connect 8 1 9 0;
1483
#X connect 9 0 38 0;
Roman Haefeli's avatar
Roman Haefeli committed
1484
#X connect 10 0 11 0;
1485
#X connect 11 0 12 0;
Roman Haefeli's avatar
Roman Haefeli committed
1486
#X connect 12 0 15 0;
1487
#X connect 13 0 16 0;
Roman Haefeli's avatar
Roman Haefeli committed
1488
1489
1490
1491
1492
1493
#X connect 14 0 13 0;
#X connect 15 0 19 0;
#X connect 16 0 15 1;
#X connect 17 0 0 0;
#X connect 17 1 2 0;
#X connect 17 2 18 1;
1494
#X connect 18 0 36 0;
Roman Haefeli's avatar
Roman Haefeli committed
1495
1496
#X connect 19 0 17 0;
#X connect 20 0 6 0;
1497
1498
1499
#X connect 22 0 39 0;
#X connect 24 0 26 0;
#X connect 26 0 27 0;
1500
#X connect 27 0 28 0;
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
#X connect 29 0 22 0;
#X connect 30 0 5 0;
#X connect 30 1 22 1;
#X connect 31 0 32 0;
#X connect 33 0 31 0;
#X connect 34 0 37 0;
#X connect 35 0 37 1;
#X connect 36 0 34 0;
#X connect 36 1 35 0;
#X connect 37 0 24 0;
#X connect 38 0 30 0;
Roman Haefeli's avatar
Roman Haefeli committed
1512
1513
1514
1515
#X connect 39 0 40 0;
#X connect 40 0 41 0;
#X connect 40 1 33 0;
#X connect 41 0 42 0;
1516
#X restore 19 85 pd note.create/delete;
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
#N canvas 0 99 406 517 note.change.velocity 0;
#X obj 14 19 r \$0.note.send;
#X obj 14 42 route change;
#X obj 14 226 change -1;
#X obj 120 144 t a a;
#X msg 147 195 set \$1;
#X obj 14 356 list prepend;
#X obj 14 407 list trim;
#X obj 14 435 s \$0.global.send;
#X obj 120 118 change -1;
#X obj 14 65 get \$0.note vel id;
#X obj 147 170 tabread \$0.velocity;
#X obj 14 384 list prepend note change velocity;
1530
1531
1532
1533
1534
1535
1536
#N canvas 83 99 398 214 id->step|pitch 0;
#X obj 13 14 inlet;
#X obj 13 37 t b a;
#X obj 13 114 list append;
#X obj 13 137 outlet;
#X obj 40 63 s \$0.convert.id->step|pitch.get;
#X obj 40 86 r \$0.convert.id->step|pitch;
1537
#X connect 0 0 1 0;
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
#X connect 1 0 2 0;
#X connect 1 1 4 0;
#X connect 2 0 3 0;
#X connect 5 0 2 1;
#X restore 120 242 pd id->step|pitch;
#X connect 0 0 1 0;
#X connect 1 0 9 0;
#X connect 2 0 5 0;
#X connect 3 0 12 0;
#X connect 3 1 10 0;
1548
#X connect 4 0 2 0;
1549
1550
1551
1552
1553
1554
1555
1556
#X connect 5 0 11 0;
#X connect 6 0 7 0;
#X connect 8 0 3 0;
#X connect 9 0 2 0;
#X connect 9 1 8 0;
#X connect 10 0 4 0;
#X connect 11 0 6 0;
#X connect 12 0 5 1;
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
#X restore 19 135 pd note.change.velocity;
#N canvas 0 99 406 517 note.change.gid 0;
#X obj 14 19 r \$0.note.send;
#X obj 14 42 route change;
#X obj 14 226 change -1;
#X obj 119 144 t a a;
#X msg 146 195 set \$1;
#X obj 14 356 list prepend;
#X obj 14 407 list trim;
#X obj 14 435 s \$0.global.send;
#X obj 119 118 change -1;
#X obj 146 170 tabread \$0.gid;
#X obj 14 384 list prepend note change gid;
#X obj 14 65 get \$0.note gid id;
#N canvas 83 99 398 214 id->step|pitch 0;
1572
1573
1574
1575
#X obj 13 14 inlet;
#X obj 13 37 t b a;
#X obj 13 114 list append;
#X obj 13 137 outlet;
1576
1577
#X obj 40 63 s \$0.convert.id->step|pitch.get;
#X obj 40 86 r \$0.convert.id->step|pitch;
Roman Haefeli's avatar
Roman Haefeli committed
1578
#X connect 0 0 1 0;
1579
1580
1581
1582
#X connect 1 0 2 0;
#X connect 1 1 4 0;
#X connect 2 0 3 0;
#X connect 5 0 2 1;
1583
#X restore 119 247 pd id->step|pitch;
1584
#X connect 0 0 1 0;
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
#X connect 1 0 11 0;
#X connect 2 0 5 0;
#X connect 3 0 12 0;
#X connect 3 1 9 0;
#X connect 4 0 2 0;
#X connect 5 0 10 0;
#X connect 6 0 7 0;
#X connect 8 0 3 0;
#X connect 9 0 4 0;
#X connect 10 0 6 0;
#X connect 11 0 2 0;
#X connect 11 1 8 0;
1597
#X connect 12 0 5 1;
1598
1599
#X restore 19 159 pd note.change.gid;
#X obj 285 430 text define \$0.sequence;
1600
#N canvas 392 150 545 360 sequencer 0;
1601
1602
1603
1604
1605
1606
1607
1608
#N canvas 0 281 404 347 note.create 0;
#X obj 24 39 route note;
#X obj 24 62 route create;
#X msg 165 178 \$1 \$2 \$3;
#X msg 24 123 \$1 \$4;
#X obj 24 146 +;
#X msg 68 125 \$2;
#X obj 24 285 s \$0.sequencer.event.add.pre;
1609
#X obj 165 240 s \$0.sequencer.event.add.post;
1610
1611
#X obj 24 169 mod;
#X obj 50 169 r \$0.stepsperpage;
1612
#X obj 24 16 r \$0.global.receive.seq;
1613
1614
1615
1616
1617
#X obj 24 223 pack f f 0 f;
#X obj 165 201 list append;
#X text 245 202 append id;
#X obj 135 82 r \$0.sequencer.id;
#X obj 24 85 t a a a;
1618
#X connect 0 0 1 0;
1619
1620
#X connect 1 0 15 0;
#X connect 2 0 12 0;
1621
#X connect 3 0 4 0;
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
#X connect 4 0 8 0;
#X connect 5 0 11 1;
#X connect 8 0 11 0;
#X connect 9 0 8 1;
#X connect 10 0 0 0;
#X connect 11 0 6 0;
#X connect 12 0 7 0;
#X connect 14 0 11 3;
#X connect 14 0 12 1;
#X connect 15 0 3 0;
#X connect 15 1 5 0;
#X connect 15 2 2 0;
1634
#X restore 13 19 pd note.create;
1635
#N canvas 140 99 478 389 note.delete 0;
1636
1637
#X obj 24 39 route note;
#X obj 24 62 route delete;
1638
1639
#X obj 69 313 s \$0.sequencer.event.remove;
#X obj 24 143 route -1;
1640
#X obj 24 16 r \$0.global.receive.seq;
1641
1642
1643
1644
1645
1646
1647
1648
1649
#X obj 56 110 r \$0.sequencer.id;
#X obj 24 85 b;
#X obj 24 108 f;
#X obj 69 170 t a a a;
#X obj 88 213 tabread \$0.velocity;
#X obj 88 236 pack f f;
#X msg 69 275 0 \$1, f 5;
#X text 151 235 note-on (vel \, id);
#X text 111 276 note-off (vel \, id);
1650
#X connect 0 0 1 0;
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
#X connect 1 0 6 0;
#X connect 3 1 8 0;
#X connect 4 0 0 0;
#X connect 5 0 7 1;
#X connect 6 0 7 0;
#X connect 7 0 3 0;
#X connect 8 0 11 0;
#X connect 8 1 9 0;
#X connect 8 2 10 1;
#X connect 9 0 10 0;
#X connect 10 0 2 0;
#X connect 11 0 2 0;
1663
#X restore 13 42 pd note.delete;
1664
#N canvas 0 99 784 430 note.change.duration 0;
1665
1666
1667
1668
#X obj 24 39 route note;
#X obj 24 109 t a a;
#X obj 24 62 route change;
#X obj 24 85 route duration;
1669
#X msg 186 110 \$1 \$2;
1670
1671
1672
#X obj 24 173 t a a;
#X msg 24 196 \$1 \$3;
#X obj 24 219 +;
1673
#X msg 52 225 \$2;
1674
#X obj 258 331 s \$0.sequencer.event.remove;
1675
1676
1677
#X obj 24 298 s \$0.sequencer.event.add.pre;
#X obj 24 246 mod;
#X obj 50 246 r \$0.stepsperpage;
1678
1679
1680
1681
1682
1683
1684
1685
#N canvas 83 99 410 208 step|pitch->id 0;
#X obj 40 63 s \$0.convert.step|pitch->id.get;
#X obj 40 86 r \$0.convert.step|pitch->id;
#X obj 13 14 inlet;
#X obj 13 37 t b a;
#X obj 13 114 list append;
#X obj 13 137 outlet;
#X connect 1 0 4 1;
1686
1687
#X connect 2 0 3 0;
#X connect 3 0 4 0;
1688
1689
#X connect 3 1 0 0;
#X connect 4 0 5 0;
1690
1691
#X restore 186 173 pd step|pitch->id;
#X obj 186 196 route -1;
1692
1693
1694
1695
#X obj 483 343 list append;
#X obj 483 319 b;
#X msg 483 367 sequencer: note delete: note not found (\$1 \$2);
#X obj 483 390 s error;
1696
#X obj 24 16 r \$0.global.receive.seq;
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
#X obj 24 270 pack f f 0 f;
#X obj 186 142 t a a;
#X msg 258 269 0 \$1;
#X obj 231 233 t a a;
#X connect 0 0 2 0;
#X connect 1 0 5 0;
#X connect 1 1 4 0;
#X connect 2 0 3 0;
#X connect 3 0 1 0;
#X connect 4 0 21 0;
#X connect 5 0 6 0;
#X connect 5 1 8 0;
#X connect 6 0 7 0;
#X connect 7 0 11 0;
#X connect 8 0 20 1;
#X connect 11 0 20 0;
#X connect 12 0 11 1;
#X connect 13 0 14 0;
#X connect 14 0 16 0;
#X connect 14 1 23 0;
#X connect 15 0 17 0;
#X connect 16 0 15 0;
#X connect 17 0 18 0;
#X connect 19 0 0 0;
#X connect 20 0 10 0;
#X connect 21 0 13 0;
#X connect 21 1 15 1;
#X connect 22 0 9 0;
#X connect 23 0 20 3;
#X connect 23 1 22 0;
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
#X restore 13 66 pd note.change.duration;
#N canvas 604 608 577 279 event.add 0;
#X obj 16 37 t a a;
#X msg 71 59 \$1;
#X obj 71 107 sel -1;
#X msg 71 132 1e+09;
#X obj 16 158 text insert \$0.sequence;
#X obj 71 84 text search \$0.sequence > 0;
#X obj 16 11 r \$0.sequencer.event.add.post;
#X obj 256 37 t a a;
#X msg 311 59 \$1;
#X obj 311 127 sel -1;
#X msg 311 152 1e+09;
#X obj 256 184 text insert \$0.sequence;
#X obj 256 11 r \$0.sequencer.event.add.pre;
#X obj 311 104 text search \$0.sequence > 0;
#X obj 311 82 - 1;
#X connect 0 0 4 0;
#X connect 0 1 1 0;
#X connect 1 0 5 0;
1747
#X connect 2 0 3 0;
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
#X connect 2 1 4 1;
#X connect 3 0 4 1;
#X connect 5 0 2 0;
#X connect 6 0 0 0;
#X connect 7 0 11 0;
#X connect 7 1 8 0;
#X connect 8 0 14 0;
#X connect 9 0 10 0;
#X connect 9 1 11 1;
#X connect 10 0 11 1;
#X connect 12 0 7 0;
#X connect 13 0 9 0;
#X connect 14 0 13 0;
#X restore 15 132 pd event.add;
1762
#N canvas 594 798 359 230 event.remove 0;
1763
1764
1765
1766
1767
1768
#X obj 47 110 text delete \$0.sequence;
#X obj 14 11 r \$0.sequencer.event.remove;
#X obj 14 80 sel -1;
#X obj 14 143 list append;
#X obj 14 34 t a a;
#X obj 14 189 s error;
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
#X msg 14 166 sequencer: note (id=\$2) not found for deletion;
#X obj 14 57 text search \$0.sequence 2 3;
#X text 186 55 remove by velocity and id;
#X connect 1 0 4 0;
#X connect 2 0 3 0;
#X connect 2 1 0 0;
#X connect 3 0 6 0;
#X connect 4 0 7 0;
#X connect 4 1 3 1;
#X connect 6 0 5 0;
#X connect 7 0 2 0;
1780
1781
1782
1783
#X restore 15 155 pd event.remove;
#X obj 17 207 r \$0.init;
#X msg 17 230 -1;
#X obj 17 253 text delete \$0.sequence;
1784
#N canvas 0 99 572 389 note.change.velocity 0;
1785
1786
#X obj 24 39 route note;
#X obj 24 62 route change;
1787
#X msg 24 135 \$1 \$2;
1788
#X obj 24 85 route velocity;
1789
#X obj 24 186 text search \$0.sequence 0 1;
1790
#X obj 24 108 t a a;
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
#X msg 84 152 \$3;
#X obj 69 316 text set \$0.sequence;
#X msg 147 284 2;
#X obj 24 209 route -1;
#X obj 212 247 b;
#X obj 24 158 t a a;
#X obj 212 272 list append;
#X msg 212 296 sequence: note change velocity: note not found (\$1
\$2);
#X obj 212 319 s error;
#X obj 69 282 f;
#X obj 69 252 t b a b, f 13;
1803
#X obj 24 16 r \$0.global.receive.seq;
1804
#X connect 0 0 1 0;
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
#X connect 1 0 3 0;
#X connect 2 0 11 0;
#X connect 3 0 5 0;
#X connect 4 0 9 0;
#X connect 5 0 2 0;
#X connect 5 1 6 0;
#X connect 6 0 15 1;
#X connect 8 0 7 2;
#X connect 9 0 10 0;
#X connect 9 1 16 0;
#X connect 10 0 12 0;
#X connect 11 0 4 0;
#X connect 11 1 12 1;
#X connect 12 0 13 0;
1819
#X connect 13 0 14 0;
1820
1821
1822
1823
1824
#X connect 15 0 7 0;
#X connect 16 0 15 0;
#X connect 16 1 7 1;
#X connect 16 2 8 0;
#X connect 17 0 0 0;
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
#X restore 13 88 pd note.change.velocity;
#N canvas 0 99 415 481 play.notes.by.index 0;
#X obj 18 77 text search \$0.sequence 0;
#X obj 96 100 text search \$0.sequence > 0;
#X obj 18 52 t a a;
#X obj 18 98 sel -1;
#X obj 51 174 pack f f;
#X obj 51 200 t a a;
#X obj 51 248 -;
#X obj 51 271 until;
#X obj 51 297 f;
#X obj 51 320 t a a;
#X obj 112 302 + 1;
#X obj 90 344 loadbang;
#X msg 90 370 1;
#X msg 129 368 2;
#X obj 51 397 text get \$0.sequence;
#X obj 96 123 sel -1;
#X msg 51 225 \$2 \$1;
#X msg 120 240 \$1;
#X obj 96 147 text size \$0.sequence;
#X obj 18 17 inlet;
#X obj 51 420 outlet;
#X connect 0 0 3 0;
#X connect 1 0 15 0;
#X connect 2 0 0 0;
#X connect 2 1 1 0;
#X connect 3 1 4 0;
1853
#X connect 4 0 5 0;
1854
1855
1856
#X connect 5 0 16 0;
#X connect 5 1 17 0;
#X connect 6 0 7 0;
1857
#X connect 7 0 8 0;
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
#X connect 8 0 9 0;
#X connect 9 0 14 0;
#X connect 9 1 10 0;
#X connect 10 0 8 1;
#X connect 11 0 12 0;
#X connect 11 0 13 0;
#X connect 12 0 14 1;
#X connect 13 0 14 2;
#X connect 14 0 20 0;
#X connect 15 0 18 0;
#X connect 15 1 4 1;
#X connect 16 0 6 0;
#X connect 17 0 8 1;
#X connect 18 0 4 1;
#X connect 19 0 2 0;
#X restore 248 159 pd play.notes.by.index;
#X obj 248 36 inlet;
#X obj 248 309 outlet;
#X obj 248 59 t a a;
#N canvas 0 157 370 260 cursor 0;
#X obj 23 15 inlet;
#X obj 23 54 moses 0;
#X obj 62 86 moses 0;
#X obj 62 109 t b a;
#X msg 62 153 1;
#X msg 23 153 0;
#X obj 23 191 change -1;
#X obj 23 214 s \$0.cursor.show;
#X obj 129 214 s \$0.cursor.pos;
#X obj 101 60 r \$0.stepsperpage;
#X connect 0 0 1 0;
#X connect 1 0 5 0;
#X connect 1 1 2 0;
#X connect 2 0 3 0;
#X connect 2 1 5 0;
#X connect 3 0 4 0;
#X connect 3 1 8 0;
#X connect 4 0 6 0;
#X connect 5 0 6 0;
#X connect 6 0 7 0;
#X connect 9 0 2 1;
#X restore 275 84 pd cursor;
#X connect 5 0 6 0;
#X connect 6 0 7 0;
#X connect 9 0 11 0;
#X connect 10 0 12 0;
#X connect 12 0 9 0;
#X connect 12 1 13 0;
#X restore 199 430 pd sequencer;
1907
1908
#X obj 20 491 outlet;
#X obj 20 364 inlet;
1909
1910
#X obj 199 461 outlet;
#X obj 199 367 inlet;
1911
#X text 659 519 2018 \, Roman Haefeli;
1912
1913
#X obj 461 254 s \$1;
#N canvas 0 99 570 525 note.edit.modes 0;
1914
1915
#X obj 14 19 r \$0.note.send;
#X obj 14 435 s \$0.global.send;
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
#X obj 14 42 route click;
#X obj 14 65 get \$0.note id;
#N canvas 36 115 405 333 gid 0;
#X obj 40 173 tabread \$0.gid;
#X obj 29 120 r \$0.default.gid;
#X obj 14 143 f;
#X obj 14 203 sel;
#X obj 14 96 spigot 0;
#X obj 14 52 t b a;
#X obj 14 22 inlet;
#X obj 14 262 outlet;
#X obj 59 71 route gid;
#X msg 14 231 gid \$1;
#X obj 59 48 r \$0.edit.modes;
#X connect 0 0 3 1;
#X connect 1 0 2 1;
1932
1933
#X connect 2 0 3 0;
#X connect 3 1 9 0;
1934
#X connect 4 0 2 0;
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
#X connect 5 0 4 0;
#X connect 5 1 0 0;
#X connect 6 0 5 0;
#X connect 8 0 4 1;
#X connect 9 0 7 0;
#X connect 10 0 8 0;
#X restore 14 179 pd gid;
#N canvas 36 115 406 316 dur 0;
#X obj 14 143 f;
#X obj 14 203 sel;
#X obj 59 48 r \$0.edit.modes;
#X obj 14 96 spigot 0;
#X obj 14 52 t b a;
#X obj 14 22 inlet;
#X obj 59 71 route duration;
#X obj 29 120 r \$0.default.dur;
#X obj 40 173 tabread \$0.duration;
#X obj 14 262 outlet;
#X msg 14 231 duration \$1;
1954
#X connect 0 0 1 0;
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
#X connect 1 1 10 0;
#X connect 2 0 6 0;
#X connect 3 0 0 0;
#X connect 4 0 3 0;
#X connect 4 1 8 0;
#X connect 5 0 4 0;
#X connect 6 0 3 1;
#X connect 7 0 0 1;
#X connect 8 0 1 1;
#X connect 10 0 9 0;
#X restore 64 179 pd dur;
#N canvas 36 115 407 294 vel 0;
#X obj 14 143 f;
#X obj 14 203 sel;
#X obj 59 48 r \$0.edit.modes;
#X obj 14 96 spigot 0;
#X obj 14 52 t b a;
#X obj 14 22 inlet;
#X obj 59 71 route velocity;
#X obj 40 172 tabread \$0.velocity;
#X obj 14 262 outlet;
#X msg 14 231 velocity \$1;
#X obj 29 120 r \$0.default.vel;
#X connect 0 0 1 0;
#X connect 1 1 9 0;
#X connect 2 0 6 0;
#X connect 3 0 0 0;
#X connect 4 0 3 0;
#X connect 4 1 7 0;
#X connect 5 0 4 0;
#X connect 6 0 3 1;
#X connect 7 0 1 1;
#X connect 9 0 8 0;
#X connect 10 0 0 1;
#X restore 114 179 pd vel;
#X obj 164 183 tabread \$0.step;
#X obj 215 160 tabread \$0.pitch;
#X obj 14 114 t a a a a a, f 34;
#X obj 164 206 pack f f;
#X obj 14 228 list split 1;
#X obj 14 280 list prepend note change;
#X obj 14 303 list append;
#X obj 14 326 list append;
#X obj 14 349 list trim;
#X connect 0 0 2 0;
2000
#X connect 2 0 3 0;
For faster browsing, not all history is shown. View entire blame