Add a continuous ~4:00 demo song set list
New "🎵 Song" seed list (SEED_VERSION 3): 8 bar-length segments that
auto-advance through tempo ramps (92→120 build, 132→83 outro), a 2/4
samba, a half-time shuffle, a 909 four-on-the-floor and a 16th peak —
totalling ~4:00. Also gate bar-count auto-advance on the Continue toggle
(matches its "countdown / bars" label; only bar-length items are
affected, which previously didn't exist outside this song).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
1b16a61930
commit
1e19cd4626
1 changed files with 14 additions and 2 deletions
16
index.html
16
index.html
|
|
@ -555,7 +555,7 @@ function advanceMaster(ahead) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
segBarCount = barIndex; // whole bars elapsed in this segment
|
segBarCount = barIndex; // whole bars elapsed in this segment
|
||||||
if (segBars > 0 && barIndex >= segBars && !pendingSwitch && state.running) { // bar-count auto-advance
|
if (segBars > 0 && barIndex >= segBars && !pendingSwitch && state.running && continueMode) { // bar-count auto-advance (Continue)
|
||||||
const nx = nextLoadedTarget();
|
const nx = nextLoadedTarget();
|
||||||
if (nx) { pendingSwitch = { sl: nx.sl, item: nx.item, atTime: masterBeatTime, reason: "auto" }; break; } // cut at this downbeat
|
if (nx) { pendingSwitch = { sl: nx.sl, item: nx.item, atTime: masterBeatTime, reason: "auto" }; break; } // cut at this downbeat
|
||||||
}
|
}
|
||||||
|
|
@ -1258,6 +1258,18 @@ const SEED_SETLISTS = [
|
||||||
["Tempo builder 80↑", "t80;woodblock:4;rmp80/4/4"],
|
["Tempo builder 80↑", "t80;woodblock:4;rmp80/4/4"],
|
||||||
["Gap trainer (play 2 / rest 2)", "t100;kick:4;hatClosed:4/2;tr2/2"],
|
["Gap trainer (play 2 / rest 2)", "t100;kick:4;hatClosed:4/2;tr2/2"],
|
||||||
] },
|
] },
|
||||||
|
// A continuous ~4:00 song: each item has a bar length (b<n>) so it auto-advances (with
|
||||||
|
// Continue on) through tempo ramps and shifting styles. Durations ≈ bars × beats × 60/bpm.
|
||||||
|
{ title: "🎵 Song — continuous (~4:00)", description: "A full song: turn on Continue, press ▶ on “Intro”, and it plays straight through (~4 min) — segments auto-advance on their bar counts, through tempo ramps and shifting styles.", items: [
|
||||||
|
["Intro — hats & kick", "t88;b8;kick:4=X.x.;hatClosed:4/2=gggggggg"],
|
||||||
|
["Groove in — backbeat", "t88;b16;kick:4=X.x.;snare:4=.X.X;hatClosed:4/2"],
|
||||||
|
["Half-time shuffle", "t92;b12;kick:4/3=X....x...x..;snare:4/3=..gg.gX.gg.g;hatClosed:4/3=X.xX.xX.xX.x"],
|
||||||
|
["Build — ramp 92→120", "t92;b16;rmp92/4/2;kick:4;snare:4=.X.X;hatClosed:4/2"],
|
||||||
|
["Four-on-the-floor (909)", "t124;b18;kick909:4;clap909:4=.X.X;hat909:4/2=.X.X.X.X"],
|
||||||
|
["Samba break (2/4)", "t116;b24;tomLow:2/4=x...X...;hatClosed:2/4;woodblock:2/4=X.xx.xX."],
|
||||||
|
["Peak — 16ths", "t132;b16;kick:4=X..x;snare:4=.X.X;hatClosed:4/4"],
|
||||||
|
["Outro — ramp down", "t132;b8;rmp132/-7/1;kick:4=X..x;hatClosed:4/2=gggggggg"],
|
||||||
|
] },
|
||||||
];
|
];
|
||||||
|
|
||||||
/* =========================================================================
|
/* =========================================================================
|
||||||
|
|
@ -1487,7 +1499,7 @@ window.addEventListener("keydown", (e) => {
|
||||||
// Seed the demo set lists. Versioned + additive: a newer SEED_VERSION adds any
|
// Seed the demo set lists. Versioned + additive: a newer SEED_VERSION adds any
|
||||||
// seed list whose title isn't already present, without clobbering the user's lists
|
// seed list whose title isn't already present, without clobbering the user's lists
|
||||||
// (and won't re-add one they've deleted at the same version).
|
// (and won't re-add one they've deleted at the same version).
|
||||||
const SEED_VERSION = 2;
|
const SEED_VERSION = 3;
|
||||||
if ((lsGet(LS.seeded, 0) | 0) < SEED_VERSION) {
|
if ((lsGet(LS.seeded, 0) | 0) < SEED_VERSION) {
|
||||||
for (const s of SEED_SETLISTS) {
|
for (const s of SEED_SETLISTS) {
|
||||||
if (!setlists.some((x) => x.title === s.title)) {
|
if (!setlists.some((x) => x.title === s.title)) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue