Upload 4 files
Browse files- app.js +13 -1
- index.html +1 -0
- worker.js +79 -0
app.js
CHANGED
|
@@ -125,6 +125,7 @@ const midiBpmModeButtons = midiBpmModeGroup ? midiBpmModeGroup.querySelectorAll(
|
|
| 125 |
let midiSeedActive = false;
|
| 126 |
let bachSeedActive = false;
|
| 127 |
let bachSymphonyActive = true;
|
|
|
|
| 128 |
let midiBpmMode = "lock";
|
| 129 |
let midiTokens = [];
|
| 130 |
let midiStartBar = 0;
|
|
@@ -783,7 +784,8 @@ async function start() {
|
|
| 783 |
midiStartBar: midiStartBar,
|
| 784 |
midiBpmMode: midiBpmMode,
|
| 785 |
bachSeedActive: bachSeedActive,
|
| 786 |
-
bachSymphonyActive: bachSymphonyActive
|
|
|
|
| 787 |
});
|
| 788 |
});
|
| 789 |
|
|
@@ -1491,21 +1493,31 @@ toggleButtons.forEach(btn => {
|
|
| 1491 |
midiSeedControls.style.display = "block";
|
| 1492 |
bachSeedActive = false;
|
| 1493 |
bachSymphonyActive = false;
|
|
|
|
| 1494 |
} else if (value === "bach") {
|
| 1495 |
midiSeedActive = false;
|
| 1496 |
midiSeedControls.style.display = "none";
|
| 1497 |
bachSeedActive = true;
|
| 1498 |
bachSymphonyActive = false;
|
|
|
|
| 1499 |
} else if (value === "bach_symphony") {
|
| 1500 |
midiSeedActive = false;
|
| 1501 |
midiSeedControls.style.display = "none";
|
| 1502 |
bachSeedActive = false;
|
| 1503 |
bachSymphonyActive = true;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1504 |
} else {
|
| 1505 |
midiSeedActive = false;
|
| 1506 |
midiSeedControls.style.display = "none";
|
| 1507 |
bachSeedActive = false;
|
| 1508 |
bachSymphonyActive = false;
|
|
|
|
| 1509 |
}
|
| 1510 |
});
|
| 1511 |
});
|
|
|
|
| 125 |
let midiSeedActive = false;
|
| 126 |
let bachSeedActive = false;
|
| 127 |
let bachSymphonyActive = true;
|
| 128 |
+
let bachSymphony2HandActive = false;
|
| 129 |
let midiBpmMode = "lock";
|
| 130 |
let midiTokens = [];
|
| 131 |
let midiStartBar = 0;
|
|
|
|
| 784 |
midiStartBar: midiStartBar,
|
| 785 |
midiBpmMode: midiBpmMode,
|
| 786 |
bachSeedActive: bachSeedActive,
|
| 787 |
+
bachSymphonyActive: bachSymphonyActive,
|
| 788 |
+
bachSymphony2HandActive: bachSymphony2HandActive
|
| 789 |
});
|
| 790 |
});
|
| 791 |
|
|
|
|
| 1493 |
midiSeedControls.style.display = "block";
|
| 1494 |
bachSeedActive = false;
|
| 1495 |
bachSymphonyActive = false;
|
| 1496 |
+
bachSymphony2HandActive = false;
|
| 1497 |
} else if (value === "bach") {
|
| 1498 |
midiSeedActive = false;
|
| 1499 |
midiSeedControls.style.display = "none";
|
| 1500 |
bachSeedActive = true;
|
| 1501 |
bachSymphonyActive = false;
|
| 1502 |
+
bachSymphony2HandActive = false;
|
| 1503 |
} else if (value === "bach_symphony") {
|
| 1504 |
midiSeedActive = false;
|
| 1505 |
midiSeedControls.style.display = "none";
|
| 1506 |
bachSeedActive = false;
|
| 1507 |
bachSymphonyActive = true;
|
| 1508 |
+
bachSymphony2HandActive = false;
|
| 1509 |
+
} else if (value === "bach_symphony_2hand") {
|
| 1510 |
+
midiSeedActive = false;
|
| 1511 |
+
midiSeedControls.style.display = "none";
|
| 1512 |
+
bachSeedActive = false;
|
| 1513 |
+
bachSymphonyActive = false;
|
| 1514 |
+
bachSymphony2HandActive = true;
|
| 1515 |
} else {
|
| 1516 |
midiSeedActive = false;
|
| 1517 |
midiSeedControls.style.display = "none";
|
| 1518 |
bachSeedActive = false;
|
| 1519 |
bachSymphonyActive = false;
|
| 1520 |
+
bachSymphony2HandActive = false;
|
| 1521 |
}
|
| 1522 |
});
|
| 1523 |
});
|
index.html
CHANGED
|
@@ -191,6 +191,7 @@
|
|
| 191 |
<button type="button" class="toggle-btn" data-value="midi">Start from MIDI</button>
|
| 192 |
<button type="button" class="toggle-btn" data-value="bach">Bach</button>
|
| 193 |
<button type="button" class="toggle-btn active" data-value="bach_symphony">Grand Symphony</button>
|
|
|
|
| 194 |
</div>
|
| 195 |
|
| 196 |
<!-- MIDI Seeding Controls (Expandable if active) -->
|
|
|
|
| 191 |
<button type="button" class="toggle-btn" data-value="midi">Start from MIDI</button>
|
| 192 |
<button type="button" class="toggle-btn" data-value="bach">Bach</button>
|
| 193 |
<button type="button" class="toggle-btn active" data-value="bach_symphony">Grand Symphony</button>
|
| 194 |
+
<button type="button" class="toggle-btn" data-value="bach_symphony_2hand">Grand Symphony (2-Hand)</button>
|
| 195 |
</div>
|
| 196 |
|
| 197 |
<!-- MIDI Seeding Controls (Expandable if active) -->
|
worker.js
CHANGED
|
@@ -33,6 +33,7 @@ let midiTokens = [];
|
|
| 33 |
let midiStartBar = 0;
|
| 34 |
let isWarmingUp = false;
|
| 35 |
let bachSymphonyActive = false;
|
|
|
|
| 36 |
|
| 37 |
// Temporal queues for gathering parsed events
|
| 38 |
let tempQueue = [];
|
|
@@ -335,6 +336,83 @@ async function warmPrompt() {
|
|
| 335 |
"NOTE_74", "DUR_32", "VEL_7",
|
| 336 |
"BAR"
|
| 337 |
];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 338 |
} else {
|
| 339 |
allTokensStr = ["BOS", "BPM_120", "GRID_64", "BAR", "POS_0"];
|
| 340 |
}
|
|
@@ -411,6 +489,7 @@ self.onmessage = async function (e) {
|
|
| 411 |
midiBpmMode = data.midiBpmMode || "lock";
|
| 412 |
bachSeedActive = data.bachSeedActive || false;
|
| 413 |
bachSymphonyActive = data.bachSymphonyActive || false;
|
|
|
|
| 414 |
|
| 415 |
parser = makeParser();
|
| 416 |
parser.reset();
|
|
|
|
| 33 |
let midiStartBar = 0;
|
| 34 |
let isWarmingUp = false;
|
| 35 |
let bachSymphonyActive = false;
|
| 36 |
+
let bachSymphony2HandActive = false;
|
| 37 |
|
| 38 |
// Temporal queues for gathering parsed events
|
| 39 |
let tempQueue = [];
|
|
|
|
| 336 |
"NOTE_74", "DUR_32", "VEL_7",
|
| 337 |
"BAR"
|
| 338 |
];
|
| 339 |
+
} else if (bachSymphony2HandActive) {
|
| 340 |
+
allTokensStr = [
|
| 341 |
+
"BOS", "BPM_120", "GRID_64",
|
| 342 |
+
"BAR",
|
| 343 |
+
// Bar 1: J.S. Bach Cantata 29 Sinfonia theme (Preludio transposed to D Major) with Left-Hand Bass
|
| 344 |
+
"POS_0",
|
| 345 |
+
"NOTE_38", "DUR_16", "VEL_6", // LH octaves
|
| 346 |
+
"NOTE_50", "DUR_16", "VEL_6",
|
| 347 |
+
"NOTE_74", "DUR_4", "VEL_6", // RH arpeggio
|
| 348 |
+
"POS_4", "NOTE_69", "DUR_4", "VEL_6",
|
| 349 |
+
"POS_8", "NOTE_66", "DUR_4", "VEL_6",
|
| 350 |
+
"POS_12", "NOTE_69", "DUR_4", "VEL_6",
|
| 351 |
+
"POS_16",
|
| 352 |
+
"NOTE_42", "DUR_16", "VEL_6", // LH octaves
|
| 353 |
+
"NOTE_54", "DUR_16", "VEL_6",
|
| 354 |
+
"NOTE_74", "DUR_4", "VEL_6", // RH arpeggio
|
| 355 |
+
"POS_20", "NOTE_69", "DUR_4", "VEL_6",
|
| 356 |
+
"POS_24", "NOTE_66", "DUR_4", "VEL_6",
|
| 357 |
+
"POS_28", "NOTE_69", "DUR_4", "VEL_6",
|
| 358 |
+
"POS_32",
|
| 359 |
+
"NOTE_45", "DUR_16", "VEL_6", // LH octaves
|
| 360 |
+
"NOTE_57", "DUR_16", "VEL_6",
|
| 361 |
+
"NOTE_74", "DUR_4", "VEL_6", // RH arpeggio
|
| 362 |
+
"POS_36", "NOTE_76", "DUR_4", "VEL_6",
|
| 363 |
+
"POS_40", "NOTE_78", "DUR_4", "VEL_6",
|
| 364 |
+
"POS_44", "NOTE_79", "DUR_4", "VEL_6",
|
| 365 |
+
"POS_48",
|
| 366 |
+
"NOTE_38", "DUR_16", "VEL_6", // LH octaves
|
| 367 |
+
"NOTE_50", "DUR_16", "VEL_6",
|
| 368 |
+
"NOTE_81", "DUR_4", "VEL_6", // RH arpeggio
|
| 369 |
+
"POS_52", "NOTE_83", "DUR_4", "VEL_6",
|
| 370 |
+
"POS_56", "NOTE_85", "DUR_4", "VEL_6",
|
| 371 |
+
"POS_60", "NOTE_86", "DUR_4", "VEL_6",
|
| 372 |
+
"BAR",
|
| 373 |
+
// Bar 2: Harmonic response (A Major context) with Left-Hand Bass
|
| 374 |
+
"POS_0",
|
| 375 |
+
"NOTE_45", "DUR_16", "VEL_6", // LH octaves
|
| 376 |
+
"NOTE_57", "DUR_16", "VEL_6",
|
| 377 |
+
"NOTE_73", "DUR_4", "VEL_6", // RH arpeggio
|
| 378 |
+
"POS_4", "NOTE_69", "DUR_4", "VEL_6",
|
| 379 |
+
"POS_8", "NOTE_64", "DUR_4", "VEL_6",
|
| 380 |
+
"POS_12", "NOTE_69", "DUR_4", "VEL_6",
|
| 381 |
+
"POS_16",
|
| 382 |
+
"NOTE_49", "DUR_16", "VEL_6", // LH octaves
|
| 383 |
+
"NOTE_61", "DUR_16", "VEL_6",
|
| 384 |
+
"NOTE_73", "DUR_4", "VEL_6", // RH arpeggio
|
| 385 |
+
"POS_20", "NOTE_69", "DUR_4", "VEL_6",
|
| 386 |
+
"POS_24", "NOTE_64", "DUR_4", "VEL_6",
|
| 387 |
+
"POS_28", "NOTE_69", "DUR_4", "VEL_6",
|
| 388 |
+
"POS_32",
|
| 389 |
+
"NOTE_40", "DUR_16", "VEL_6", // LH octaves
|
| 390 |
+
"NOTE_52", "DUR_16", "VEL_6",
|
| 391 |
+
"NOTE_73", "DUR_4", "VEL_6", // RH arpeggio
|
| 392 |
+
"POS_36", "NOTE_74", "DUR_4", "VEL_6",
|
| 393 |
+
"POS_40", "NOTE_76", "DUR_4", "VEL_6",
|
| 394 |
+
"POS_44", "NOTE_78", "DUR_4", "VEL_6",
|
| 395 |
+
"POS_48",
|
| 396 |
+
"NOTE_45", "DUR_16", "VEL_6", // LH octaves
|
| 397 |
+
"NOTE_57", "DUR_16", "VEL_6",
|
| 398 |
+
"NOTE_79", "DUR_4", "VEL_6", // RH arpeggio
|
| 399 |
+
"POS_52", "NOTE_81", "DUR_4", "VEL_6",
|
| 400 |
+
"POS_56", "NOTE_83", "DUR_4", "VEL_6",
|
| 401 |
+
"POS_60", "NOTE_85", "DUR_4", "VEL_6",
|
| 402 |
+
"BAR",
|
| 403 |
+
// Bar 3: Grand D Major Symphonic Chord resolution (2-hand massive layout)
|
| 404 |
+
"POS_0",
|
| 405 |
+
"NOTE_26", "DUR_32", "VEL_7", // Low D1 & D2
|
| 406 |
+
"NOTE_38", "DUR_32", "VEL_7",
|
| 407 |
+
"NOTE_50", "DUR_32", "VEL_7", // Right hand layout
|
| 408 |
+
"NOTE_54", "DUR_32", "VEL_7",
|
| 409 |
+
"NOTE_57", "DUR_32", "VEL_7",
|
| 410 |
+
"NOTE_62", "DUR_32", "VEL_7",
|
| 411 |
+
"NOTE_66", "DUR_32", "VEL_7",
|
| 412 |
+
"NOTE_69", "DUR_32", "VEL_7",
|
| 413 |
+
"NOTE_74", "DUR_32", "VEL_7",
|
| 414 |
+
"BAR"
|
| 415 |
+
];
|
| 416 |
} else {
|
| 417 |
allTokensStr = ["BOS", "BPM_120", "GRID_64", "BAR", "POS_0"];
|
| 418 |
}
|
|
|
|
| 489 |
midiBpmMode = data.midiBpmMode || "lock";
|
| 490 |
bachSeedActive = data.bachSeedActive || false;
|
| 491 |
bachSymphonyActive = data.bachSymphonyActive || false;
|
| 492 |
+
bachSymphony2HandActive = data.bachSymphony2HandActive || false;
|
| 493 |
|
| 494 |
parser = makeParser();
|
| 495 |
parser.reset();
|