utkucoban commited on
Commit
461c4ca
·
verified ·
1 Parent(s): 9463d79

Upload 4 files

Browse files
Files changed (4) hide show
  1. app.js +6 -37
  2. index.html +6 -0
  3. styles.css +18 -0
  4. worker.js +141 -13
app.js CHANGED
@@ -122,10 +122,7 @@ const midiStartBarTimeEl = document.querySelector("#midiStartBarTime");
122
  const midiBpmModeGroup = document.querySelector("#midiBpmModeGroup");
123
  const midiBpmModeButtons = midiBpmModeGroup ? midiBpmModeGroup.querySelectorAll(".toggle-btn") : [];
124
 
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;
@@ -767,7 +764,7 @@ async function start() {
767
  queue = [];
768
  generatedEvents = 0;
769
  visualNotes = [];
770
- if (tempoEl) tempoEl.textContent = midiSeedActive ? String(Math.round(midiBpm)) : "120";
771
 
772
  setStatus("Warming AI model prompt...", "buffering");
773
 
@@ -779,13 +776,10 @@ async function start() {
779
  temperature: Math.max(0.05, Number(tempInput.value)),
780
  topK: Math.max(1, Number(topKInput.value)),
781
  bpm: Number(tempoEl.textContent || 120),
782
- midiSeedActive: midiSeedActive,
783
- midiTokens: midiSeedActive ? midiTokens : [],
784
  midiStartBar: midiStartBar,
785
- midiBpmMode: midiBpmMode,
786
- bachSeedActive: bachSeedActive,
787
- bachSymphonyActive: bachSymphonyActive,
788
- bachSymphony2HandActive: bachSymphony2HandActive
789
  });
790
  });
791
 
@@ -1488,36 +1482,11 @@ toggleButtons.forEach(btn => {
1488
  btn.classList.add("active");
1489
 
1490
  const value = btn.dataset.value;
 
1491
  if (value === "midi") {
1492
- midiSeedActive = true;
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
  });
 
122
  const midiBpmModeGroup = document.querySelector("#midiBpmModeGroup");
123
  const midiBpmModeButtons = midiBpmModeGroup ? midiBpmModeGroup.querySelectorAll(".toggle-btn") : [];
124
 
125
+ let activePlayingStyle = "bach_symphony";
 
 
 
126
  let midiBpmMode = "lock";
127
  let midiTokens = [];
128
  let midiStartBar = 0;
 
764
  queue = [];
765
  generatedEvents = 0;
766
  visualNotes = [];
767
+ if (tempoEl) tempoEl.textContent = (activePlayingStyle === "midi") ? String(Math.round(midiBpm)) : "120";
768
 
769
  setStatus("Warming AI model prompt...", "buffering");
770
 
 
776
  temperature: Math.max(0.05, Number(tempInput.value)),
777
  topK: Math.max(1, Number(topKInput.value)),
778
  bpm: Number(tempoEl.textContent || 120),
779
+ playingStyle: activePlayingStyle,
780
+ midiTokens: (activePlayingStyle === "midi") ? midiTokens : [],
781
  midiStartBar: midiStartBar,
782
+ midiBpmMode: midiBpmMode
 
 
 
783
  });
784
  });
785
 
 
1482
  btn.classList.add("active");
1483
 
1484
  const value = btn.dataset.value;
1485
+ activePlayingStyle = value;
1486
  if (value === "midi") {
 
1487
  midiSeedControls.style.display = "block";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1488
  } else {
 
1489
  midiSeedControls.style.display = "none";
 
 
 
1490
  }
1491
  });
1492
  });
index.html CHANGED
@@ -196,6 +196,12 @@
196
  <button type="button" class="toggle-btn" data-value="bach">Bach</button>
197
  <button type="button" class="toggle-btn active" data-value="bach_symphony">Grand Symphony</button>
198
  <button type="button" class="toggle-btn" data-value="bach_symphony_2hand">Grand Symphony (2-Hand)</button>
 
 
 
 
 
 
199
  </div>
200
 
201
  <!-- MIDI Seeding Controls (Expandable if active) -->
 
196
  <button type="button" class="toggle-btn" data-value="bach">Bach</button>
197
  <button type="button" class="toggle-btn active" data-value="bach_symphony">Grand Symphony</button>
198
  <button type="button" class="toggle-btn" data-value="bach_symphony_2hand">Grand Symphony (2-Hand)</button>
199
+ <button type="button" class="toggle-btn" data-value="mozart">Mozart</button>
200
+ <button type="button" class="toggle-btn" data-value="chopin">Chopin</button>
201
+ <button type="button" class="toggle-btn" data-value="debussy">Debussy</button>
202
+ <button type="button" class="toggle-btn" data-value="beethoven">Beethoven</button>
203
+ <button type="button" class="toggle-btn" data-value="satie">Satie</button>
204
+ <button type="button" class="toggle-btn" data-value="dark">Dark</button>
205
  </div>
206
 
207
  <!-- MIDI Seeding Controls (Expandable if active) -->
styles.css CHANGED
@@ -368,6 +368,24 @@ body {
368
  flex-direction: column;
369
  gap: 20px;
370
  min-width: 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
371
  }
372
 
373
  .info-sidebar {
 
368
  flex-direction: column;
369
  gap: 20px;
370
  min-width: 0;
371
+ overflow-y: auto;
372
+ max-height: 100%;
373
+ padding-right: 4px;
374
+ }
375
+
376
+ /* Custom Scrollbar for Sidebar Column */
377
+ .sidebar-column::-webkit-scrollbar {
378
+ width: 4px;
379
+ }
380
+ .sidebar-column::-webkit-scrollbar-track {
381
+ background: transparent;
382
+ }
383
+ .sidebar-column::-webkit-scrollbar-thumb {
384
+ background-color: rgba(255, 255, 255, 0.08);
385
+ border-radius: 4px;
386
+ }
387
+ .sidebar-column::-webkit-scrollbar-thumb:hover {
388
+ background-color: rgba(255, 255, 255, 0.15);
389
  }
390
 
391
  .info-sidebar {
worker.js CHANGED
@@ -27,13 +27,10 @@ let currentBpm = 120;
27
  let midiBpmMode = "lock";
28
 
29
  // Seeding settings
30
- let midiSeedActive = false;
31
- let bachSeedActive = false;
32
  let midiTokens = [];
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 = [];
@@ -180,7 +177,7 @@ function makeEventParser() {
180
  if (token.startsWith("BPM_")) {
181
  const bpm = Number(token.slice(4));
182
  if (Number.isFinite(bpm) && bpm >= 40 && bpm <= 220) {
183
- if (!midiSeedActive || isWarmingUp || midiBpmMode === "model") {
184
  currentBpm = bpm;
185
  self.postMessage({ action: "tempo", bpm: bpm });
186
  }
@@ -270,9 +267,9 @@ async function warmPrompt() {
270
  c = zeroState();
271
 
272
  let allTokensStr;
273
- if (midiSeedActive && midiTokens.length > 0) {
274
  allTokensStr = getTokensUpToBar(midiTokens, midiStartBar);
275
- } else if (bachSeedActive) {
276
  allTokensStr = [
277
  "BOS", "BPM_100", "GRID_64",
278
  "BAR",
@@ -285,7 +282,7 @@ async function warmPrompt() {
285
  "POS_24", "NOTE_74", "DUR_16", "VEL_6",
286
  "BAR"
287
  ];
288
- } else if (bachSymphonyActive) {
289
  allTokensStr = [
290
  "BOS", "BPM_120", "GRID_64",
291
  "BAR",
@@ -336,7 +333,7 @@ async function warmPrompt() {
336
  "NOTE_74", "DUR_32", "VEL_7",
337
  "BAR"
338
  ];
339
- } else if (bachSymphony2HandActive) {
340
  allTokensStr = [
341
  "BOS", "BPM_120", "GRID_64",
342
  "BAR",
@@ -413,6 +410,140 @@ async function warmPrompt() {
413
  "NOTE_74", "DUR_32", "VEL_7",
414
  "BAR"
415
  ];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
416
  } else {
417
  allTokensStr = ["BOS", "BPM_120", "GRID_64", "BAR", "POS_0"];
418
  }
@@ -483,13 +614,10 @@ self.onmessage = async function (e) {
483
  temperature = data.temperature;
484
  topK = data.topK;
485
  currentBpm = data.bpm;
486
- midiSeedActive = data.midiSeedActive;
487
  midiTokens = data.midiTokens;
488
  midiStartBar = data.midiStartBar;
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();
 
27
  let midiBpmMode = "lock";
28
 
29
  // Seeding settings
30
+ let playingStyle = "default";
 
31
  let midiTokens = [];
32
  let midiStartBar = 0;
33
  let isWarmingUp = false;
 
 
34
 
35
  // Temporal queues for gathering parsed events
36
  let tempQueue = [];
 
177
  if (token.startsWith("BPM_")) {
178
  const bpm = Number(token.slice(4));
179
  if (Number.isFinite(bpm) && bpm >= 40 && bpm <= 220) {
180
+ if (playingStyle !== "midi" || isWarmingUp || midiBpmMode === "model") {
181
  currentBpm = bpm;
182
  self.postMessage({ action: "tempo", bpm: bpm });
183
  }
 
267
  c = zeroState();
268
 
269
  let allTokensStr;
270
+ if (playingStyle === "midi" && midiTokens.length > 0) {
271
  allTokensStr = getTokensUpToBar(midiTokens, midiStartBar);
272
+ } else if (playingStyle === "bach") {
273
  allTokensStr = [
274
  "BOS", "BPM_100", "GRID_64",
275
  "BAR",
 
282
  "POS_24", "NOTE_74", "DUR_16", "VEL_6",
283
  "BAR"
284
  ];
285
+ } else if (playingStyle === "bach_symphony") {
286
  allTokensStr = [
287
  "BOS", "BPM_120", "GRID_64",
288
  "BAR",
 
333
  "NOTE_74", "DUR_32", "VEL_7",
334
  "BAR"
335
  ];
336
+ } else if (playingStyle === "bach_symphony_2hand") {
337
  allTokensStr = [
338
  "BOS", "BPM_120", "GRID_64",
339
  "BAR",
 
410
  "NOTE_74", "DUR_32", "VEL_7",
411
  "BAR"
412
  ];
413
+ } else if (playingStyle === "mozart") {
414
+ allTokensStr = [
415
+ "BOS", "BPM_132", "GRID_64",
416
+ "BAR",
417
+ // Bright G-major chamber-style opening inspired by Mozart's serenades.
418
+ "POS_0", "NOTE_55", "DUR_8", "VEL_6",
419
+ "NOTE_67", "DUR_8", "VEL_6",
420
+ "POS_8", "NOTE_74", "DUR_4", "VEL_7",
421
+ "POS_12", "NOTE_71", "DUR_4", "VEL_6",
422
+ "POS_16", "NOTE_79", "DUR_8", "VEL_7",
423
+ "POS_24", "NOTE_78", "DUR_4", "VEL_6",
424
+ "POS_28", "NOTE_76", "DUR_4", "VEL_6",
425
+ "POS_32", "NOTE_74", "DUR_8", "VEL_7",
426
+ "POS_40", "NOTE_72", "DUR_4", "VEL_6",
427
+ "POS_44", "NOTE_71", "DUR_4", "VEL_6",
428
+ "POS_48", "NOTE_69", "DUR_8", "VEL_6",
429
+ "POS_56", "NOTE_67", "DUR_8", "VEL_7",
430
+ "BAR",
431
+ "POS_0", "NOTE_60", "DUR_16", "VEL_5",
432
+ "NOTE_64", "DUR_16", "VEL_5",
433
+ "NOTE_69", "DUR_16", "VEL_5",
434
+ "POS_16", "NOTE_72", "DUR_4", "VEL_6",
435
+ "POS_20", "NOTE_76", "DUR_4", "VEL_6",
436
+ "POS_24", "NOTE_81", "DUR_8", "VEL_7",
437
+ "POS_32", "NOTE_79", "DUR_4", "VEL_6",
438
+ "POS_36", "NOTE_78", "DUR_4", "VEL_6",
439
+ "POS_40", "NOTE_76", "DUR_4", "VEL_6",
440
+ "POS_44", "NOTE_74", "DUR_4", "VEL_6",
441
+ "POS_48", "NOTE_71", "DUR_8", "VEL_6",
442
+ "POS_56", "NOTE_67", "DUR_8", "VEL_7",
443
+ "BAR"
444
+ ];
445
+ } else if (playingStyle === "chopin") {
446
+ allTokensStr = [
447
+ "BOS", "BPM_68", "GRID_64",
448
+ "BAR",
449
+ // Original C-minor nocturne texture: rolling bass beneath a lyrical upper line.
450
+ "POS_0", "NOTE_36", "DUR_16", "VEL_4", "NOTE_72", "DUR_12", "VEL_6",
451
+ "POS_8", "NOTE_43", "DUR_8", "VEL_4",
452
+ "POS_12", "NOTE_75", "DUR_8", "VEL_6",
453
+ "POS_16", "NOTE_48", "DUR_8", "VEL_4",
454
+ "POS_24", "NOTE_51", "DUR_8", "VEL_4", "NOTE_77", "DUR_12", "VEL_6",
455
+ "POS_32", "NOTE_39", "DUR_16", "VEL_4", "NOTE_79", "DUR_16", "VEL_7",
456
+ "POS_40", "NOTE_46", "DUR_8", "VEL_4",
457
+ "POS_48", "NOTE_51", "DUR_8", "VEL_4", "NOTE_77", "DUR_8", "VEL_6",
458
+ "POS_56", "NOTE_55", "DUR_8", "VEL_4", "NOTE_75", "DUR_8", "VEL_5",
459
+ "BAR",
460
+ "POS_0", "NOTE_41", "DUR_16", "VEL_4", "NOTE_72", "DUR_16", "VEL_6",
461
+ "POS_8", "NOTE_48", "DUR_8", "VEL_4",
462
+ "POS_16", "NOTE_53", "DUR_8", "VEL_4", "NOTE_74", "DUR_8", "VEL_6",
463
+ "POS_24", "NOTE_56", "DUR_8", "VEL_4", "NOTE_75", "DUR_8", "VEL_6",
464
+ "POS_32", "NOTE_43", "DUR_16", "VEL_4", "NOTE_79", "DUR_12", "VEL_7",
465
+ "POS_40", "NOTE_50", "DUR_8", "VEL_4",
466
+ "POS_44", "NOTE_77", "DUR_8", "VEL_6",
467
+ "POS_48", "NOTE_55", "DUR_8", "VEL_4",
468
+ "POS_56", "NOTE_60", "DUR_8", "VEL_4", "NOTE_75", "DUR_8", "VEL_5",
469
+ "BAR"
470
+ ];
471
+ } else if (playingStyle === "debussy") {
472
+ allTokensStr = [
473
+ "BOS", "BPM_74", "GRID_64",
474
+ "BAR",
475
+ // Original impressionist sketch: open fifths and slowly shifting parallel colors.
476
+ "POS_0", "NOTE_38", "DUR_32", "VEL_3", "NOTE_57", "DUR_16", "VEL_4", "NOTE_62", "DUR_16", "VEL_4", "NOTE_69", "DUR_16", "VEL_5",
477
+ "POS_16", "NOTE_59", "DUR_16", "VEL_4", "NOTE_64", "DUR_16", "VEL_4", "NOTE_71", "DUR_16", "VEL_5",
478
+ "POS_32", "NOTE_45", "DUR_32", "VEL_3", "NOTE_61", "DUR_16", "VEL_4", "NOTE_66", "DUR_16", "VEL_4", "NOTE_73", "DUR_16", "VEL_5",
479
+ "POS_48", "NOTE_64", "DUR_16", "VEL_4", "NOTE_69", "DUR_16", "VEL_4", "NOTE_76", "DUR_16", "VEL_5",
480
+ "BAR",
481
+ "POS_0", "NOTE_40", "DUR_32", "VEL_3", "NOTE_59", "DUR_16", "VEL_4", "NOTE_64", "DUR_16", "VEL_4", "NOTE_71", "DUR_16", "VEL_5",
482
+ "POS_16", "NOTE_61", "DUR_16", "VEL_4", "NOTE_66", "DUR_16", "VEL_4", "NOTE_73", "DUR_16", "VEL_5",
483
+ "POS_32", "NOTE_43", "DUR_32", "VEL_3", "NOTE_62", "DUR_16", "VEL_4", "NOTE_67", "DUR_16", "VEL_4", "NOTE_74", "DUR_16", "VEL_5",
484
+ "POS_48", "NOTE_66", "DUR_16", "VEL_4", "NOTE_71", "DUR_16", "VEL_4", "NOTE_78", "DUR_16", "VEL_5",
485
+ "BAR"
486
+ ];
487
+ } else if (playingStyle === "beethoven") {
488
+ allTokensStr = [
489
+ "BOS", "BPM_126", "GRID_64",
490
+ "BAR",
491
+ // Original dramatic sonata gesture: compact motif, octave bass, accented response.
492
+ "POS_0", "NOTE_36", "DUR_8", "VEL_7", "NOTE_48", "DUR_8", "VEL_7", "NOTE_67", "DUR_4", "VEL_7",
493
+ "POS_4", "NOTE_70", "DUR_4", "VEL_7",
494
+ "POS_8", "NOTE_68", "DUR_8", "VEL_8",
495
+ "POS_16", "NOTE_43", "DUR_8", "VEL_6", "NOTE_55", "DUR_8", "VEL_6", "NOTE_65", "DUR_4", "VEL_7",
496
+ "POS_20", "NOTE_68", "DUR_4", "VEL_7",
497
+ "POS_24", "NOTE_67", "DUR_8", "VEL_8",
498
+ "POS_32", "NOTE_39", "DUR_8", "VEL_7", "NOTE_51", "DUR_8", "VEL_7", "NOTE_63", "DUR_4", "VEL_7",
499
+ "POS_36", "NOTE_67", "DUR_4", "VEL_7",
500
+ "POS_40", "NOTE_72", "DUR_8", "VEL_8",
501
+ "POS_48", "NOTE_44", "DUR_8", "VEL_6", "NOTE_56", "DUR_8", "VEL_6", "NOTE_70", "DUR_4", "VEL_7",
502
+ "POS_52", "NOTE_68", "DUR_4", "VEL_7",
503
+ "POS_56", "NOTE_67", "DUR_8", "VEL_8",
504
+ "BAR",
505
+ "POS_0", "NOTE_41", "DUR_16", "VEL_7", "NOTE_53", "DUR_16", "VEL_7", "NOTE_65", "DUR_8", "VEL_7",
506
+ "POS_8", "NOTE_68", "DUR_4", "VEL_7",
507
+ "POS_12", "NOTE_72", "DUR_4", "VEL_8",
508
+ "POS_16", "NOTE_77", "DUR_8", "VEL_8",
509
+ "POS_24", "NOTE_75", "DUR_8", "VEL_7",
510
+ "POS_32", "NOTE_43", "DUR_16", "VEL_7", "NOTE_55", "DUR_16", "VEL_7", "NOTE_74", "DUR_8", "VEL_7",
511
+ "POS_40", "NOTE_72", "DUR_8", "VEL_7",
512
+ "POS_48", "NOTE_67", "DUR_16", "VEL_8", "NOTE_72", "DUR_16", "VEL_8", "NOTE_75", "DUR_16", "VEL_8",
513
+ "BAR"
514
+ ];
515
+ } else if (playingStyle === "satie") {
516
+ allTokensStr = [
517
+ "BOS", "BPM_62", "GRID_64",
518
+ "BAR",
519
+ // Original sparse meditation: low bass, suspended chords, unhurried melody.
520
+ "POS_0", "NOTE_38", "DUR_32", "VEL_3", "NOTE_69", "DUR_20", "VEL_5",
521
+ "POS_16", "NOTE_57", "DUR_24", "VEL_3", "NOTE_62", "DUR_24", "VEL_3", "NOTE_65", "DUR_24", "VEL_3",
522
+ "POS_32", "NOTE_45", "DUR_32", "VEL_3", "NOTE_72", "DUR_16", "VEL_5",
523
+ "POS_48", "NOTE_55", "DUR_24", "VEL_3", "NOTE_60", "DUR_24", "VEL_3", "NOTE_64", "DUR_24", "VEL_3",
524
+ "BAR",
525
+ "POS_0", "NOTE_40", "DUR_32", "VEL_3", "NOTE_71", "DUR_20", "VEL_5",
526
+ "POS_16", "NOTE_59", "DUR_24", "VEL_3", "NOTE_64", "DUR_24", "VEL_3", "NOTE_67", "DUR_24", "VEL_3",
527
+ "POS_32", "NOTE_43", "DUR_32", "VEL_3", "NOTE_74", "DUR_16", "VEL_5",
528
+ "POS_48", "NOTE_57", "DUR_24", "VEL_3", "NOTE_62", "DUR_24", "VEL_3", "NOTE_66", "DUR_24", "VEL_3",
529
+ "BAR"
530
+ ];
531
+ } else if (playingStyle === "dark") {
532
+ allTokensStr = [
533
+ "BOS", "BPM_76", "GRID_64",
534
+ "BAR",
535
+ // Original dark prelude: chromatic bass motion and tense minor voicings.
536
+ "POS_0", "NOTE_33", "DUR_16", "VEL_6", "NOTE_45", "DUR_16", "VEL_6", "NOTE_60", "DUR_12", "VEL_5", "NOTE_64", "DUR_12", "VEL_5",
537
+ "POS_16", "NOTE_32", "DUR_16", "VEL_6", "NOTE_44", "DUR_16", "VEL_6", "NOTE_59", "DUR_12", "VEL_5", "NOTE_63", "DUR_12", "VEL_5",
538
+ "POS_32", "NOTE_31", "DUR_16", "VEL_7", "NOTE_43", "DUR_16", "VEL_7", "NOTE_58", "DUR_12", "VEL_5", "NOTE_62", "DUR_12", "VEL_5",
539
+ "POS_48", "NOTE_30", "DUR_16", "VEL_7", "NOTE_42", "DUR_16", "VEL_7", "NOTE_57", "DUR_12", "VEL_6", "NOTE_61", "DUR_12", "VEL_6",
540
+ "BAR",
541
+ "POS_0", "NOTE_29", "DUR_16", "VEL_7", "NOTE_41", "DUR_16", "VEL_7", "NOTE_56", "DUR_12", "VEL_5", "NOTE_60", "DUR_12", "VEL_5",
542
+ "POS_16", "NOTE_34", "DUR_16", "VEL_6", "NOTE_46", "DUR_16", "VEL_6", "NOTE_61", "DUR_12", "VEL_5", "NOTE_65", "DUR_12", "VEL_5",
543
+ "POS_32", "NOTE_35", "DUR_16", "VEL_6", "NOTE_47", "DUR_16", "VEL_6", "NOTE_62", "DUR_12", "VEL_5", "NOTE_66", "DUR_12", "VEL_5",
544
+ "POS_48", "NOTE_36", "DUR_16", "VEL_7", "NOTE_48", "DUR_16", "VEL_7", "NOTE_60", "DUR_16", "VEL_6", "NOTE_63", "DUR_16", "VEL_6",
545
+ "BAR"
546
+ ];
547
  } else {
548
  allTokensStr = ["BOS", "BPM_120", "GRID_64", "BAR", "POS_0"];
549
  }
 
614
  temperature = data.temperature;
615
  topK = data.topK;
616
  currentBpm = data.bpm;
617
+ playingStyle = data.playingStyle || "default";
618
  midiTokens = data.midiTokens;
619
  midiStartBar = data.midiStartBar;
620
  midiBpmMode = data.midiBpmMode || "lock";
 
 
 
621
 
622
  parser = makeParser();
623
  parser.reset();