- Pads now group into per-beat cells (one flex cell per beat), so beats line up
in columns across lanes regardless of each lane's subdivision; the downbeat
pad in each cell is full-height and the sub-beat pads are shorter/smaller.
- Each lane label shows a small engraved rhythm figure for its subdivision,
drawn as SVG (notehead + stem + beams + tuplet number): quarter, beamed
eighths, triplet (3), sixteenths (double beam), sextuplet (6), etc.
Engine untouched; conformance passes.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
setlists.js (shared by all pages):
- Removed the "Song (continuous)" and "Notation showcase" seed lists.
- "Styles" is now a rich, genre-true collection (16): rock, pop 16ths, funk,
disco, Motown, blues shuffle, jazz swing, bossa, samba, reggae one-drop,
afrobeat, hip-hop, metal, 6/8 ballad, 7/8, 5/4 — full grooves to jam over.
- "Practice" is 15 drummer drills to learn those styles: hat subdivisions,
ghost-note backbeats, 16th hand control, shuffle/jazz ride, bossa & 3-over-4
independence, dynamics, double bass, hemiola/5-over-4, tempo & gap trainers.
- Dropped the cartoon emoji from the titles. All patches validated: every lane
parses and pattern lengths match their meters.
Mobile icons — less cartoonish, subtly musical:
- Volume rail now reads p … f (piano/forte dynamics) instead of speaker emoji.
- Save 💾 -> ↧; library +/✕ instead of ➕/🗑.
- Practice-sessions empty state uses a treble clef instead of 🎼.
Engine untouched; conformance passes.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Repeat (bar count) + End, Ramp, Gap and the track share-string now show
directly on the main screen in a compact panel above the lanes (with live
Copy/Apply of the string) — replaces the ⚙ Track dialog, which is removed.
- Landscape was overlapping (top row + pulse + lanes collided at short
heights). Reworked: the work area is a 2-column grid — pulse + transport on
the left, track panel + lanes (scrollable) on the right — with a single-row
top bar (dropdowns + volume + icons). Portrait keeps the centered block with
the transport below. Verified clean in both orientations down to ~300px tall.
Engine untouched; conformance unaffected.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Per-lane gain: a volume slider (-18..+6 dB) in the lane dialog → m.gainDb,
encoded in the lane token (e.g. kick:4@-6) and saved with the track.
- Save & Library sheet (💾): writes to the SAME store/format as the editor
(metronome.setlists), so tracks made on the phone show up in the editor too.
* Save current track: name + target set list (or "+ New set list"),
"Save as new track" (always) and "Update <name>" for your own tracks —
Update confirms the overwrite (the iterate-and-resave path is one tap, but
a named confirm prevents accidentally clobbering the original when you
meant to save a new track).
* Manage library: reorder (up/down), rename and delete your set lists and
their tracks; built-ins stay read-only (Save-as copies edits out of them).
- Built-in/transient set lists can't be overwritten — saving promotes the live
working copy into one of your own set lists.
Engine untouched; conformance suite unaffected.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Help wording: Practice no longer says "record" (which read like audio
capture) — it now says it times your playing and logs it to the practice log,
not audio. Play step and the session bar reworded too ("Practising…").
- Track settings dialog (mirrors the lane dialog), opened from a "⚙ Track"
summary button under the lanes: bar count, end behavior (loop / stop / next),
tempo ramp, practice gaps, and copy/paste of the track share-string. These
were previously read-only chips; now editable and persisted.
end/loop is now honored at runtime: loop repeats the phrase, stop halts at the
bar count, next advances the set list (the bar readout cycles 1..N when looping).
- Layout: pulse + lanes are centered as one block with the transport pinned at
the bottom — kills the big empty mid-band. Landscape reflows to pulse-left /
lanes-right with a full-width transport. Bigger pulse.
Engine untouched; conformance suite unaffected.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Editable lanes (no notation/konnakol — just pads): each lane is a row of pads
that blink on the beat; tap a pad to cycle rest → beat → accent → ghost. A
lane's label opens a sheet to set sound, grouping (e.g. 2+2+3), subdivision,
swing, mute and polymeter; plus "+ Add lane" / delete. Edits are live and feed
straight into the scheduler. (Replaces the read-only lane chips; the global
feature chips — bars/end/ramp/gaps — stay.)
- Help: a "?" runs a 7-step guided coachmark tour (spotlight + tooltip), shown
once on first run and re-runnable anytime. Removed the instruction hint under
the BPM (the tour covers it). Tour also frames tracks as named practice items.
- Persist + restore: the working state (set list / track / tempo / volume / lane
edits) is saved to metronome.mobile.state and restored on reload.
- Dropped the separate beat-dot row — the pulse flash + per-lane pad playhead
cover it, freeing room for the editable lanes.
Engine untouched; conformance suite unaffected.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Top section aggregates the CURRENT track across all sessions (track picker
defaults to the metronome's current track, persisted via metronome.curtrack):
total time / plays / bpm range, plus a per-session comparison table so you can
watch a single track progress across days.
- Each session is now a collapsible <details>: the summary shows a friendly
timestamp ("Fri Jun 16 at 2:46 PM") with total/practiced/track-count; the note
+ per-track aggregate table + delete live in the expanded body.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Bigger rework of the mobile player around a new "practice session" concept,
plus a second page to review sessions.
Transport / sessions:
- Practice now starts a continuous SESSION clock and begins practicing the
current track. While practicing, the Play button becomes Stop and Practice
becomes Pause, so Practice starts/stops individual tracks while the session
clock keeps running. Stop (the Play button) ends the session and records it.
- Plain Play still runs the metronome with no session/recording.
- Each track-practice is one segment {name, at, sec, bpm}; sub-3s blips are
skipped. A session = {at, endedAt, clockSec, note, segments[]} stored under
metronome.sessions (replaces the old per-track metronome.logs sheet).
- Switching track / set list mid-session rolls the current segment over.
Display:
- Removed the Tap Tempo button; the BPM display now does it: tap = tap tempo,
hold = type an exact value, vertical drag = scrub.
- Detail panel shows every lane (canonical share-token chips, disabled lanes
struck through) and the active features: bar count, end behavior, ramp, and
gaps (trainer play/mute).
- Meter line shows live bar count with total (e.g. "bar 4 / 16") and elapsed
play time; the bottom bar shows live session time + track count while
recording, and links to the sessions page otherwise.
New page mobile-sessions.html: lists saved sessions, each with an editable note
(autosaved) and an aggregate table of tracks practiced in that session
(track - time - plays - bpm range), with per-session delete. PWA scope widened
to /mobile so both pages stay in the installed app + offline (SW v2).
Engine untouched; conformance suite unaffected.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Reworks the mobile player's controls per use on a phone:
- Set list + track are now two dropdowns at the top (with the volume slider +
theme/fullscreen beside them); drops the hamburger/bottom-sheet menu. The
track dropdown stays in sync with prev/next and set-list auto-advance.
- Tempo grid adds coarse -10/+10 buttons above the fine -/+ buttons, laid out
as a 4-col grid with prev/next and play/practice in the centre columns.
- Separate Play and Practice transports: Play runs the metronome without
touching the practice log; Practice runs AND records a session
(metronome.logs, same format/key as the editor: {at,name,durationSec,bpm,
lanes}, per-track history, sub-3s blips skipped).
- Tap Tempo restyled as a real button.
- Collapsible practice log: a thin bar at the bottom opens a bottom-sheet
showing past sessions for the current track (date - duration @ bpm), with
per-entry delete and clear-this-track.
Landscape phones switch to a two-column layout (pulse left, transport right) so
everything fits without vertical overflow. Engine untouched.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
A new full-screen, touch-first edition of the player aimed at phones through
tablets - no native app, just a web page you can "Add to Home Screen".
Reuses the shared engine + look-ahead scheduler (same player loop as
player.html); new UI is a big pulsing beat display, beat-dot row with accent
grouping, huge BPM (tap to type, vertical drag to scrub), prev/play/next +/-
and tap-tempo, and a bottom sheet for set lists / patch+link loading / volume.
Mobile concerns handled:
- iOS ring/silent switch: navigator.audioSession.type="playback" + a silent
buffer warmup inside the play gesture, so audio isn't muted by the switch.
- Screen Wake Lock while running (re-acquired on visibilitychange).
- PWA: manifest.webmanifest + apple-touch meta + mobile-sw.js (network-first
app shell, passthrough for everything else) -> installable + offline.
Multi-file is fine here since it targets mobile (waives the single-file rule).
- viewport-fit=cover + safe-area insets, no user zoom, touch-action:manipulation,
overscroll-behavior:none; transport buttons flex-share the row so they never
overflow a narrow phone; responsive portrait/landscape, phone->tablet.
- Fullscreen toggle where supported (Android/desktop; iOS uses home-screen PWA).
Wired into build.sh + deploy.sh (page + PWA assets) and added to the index
gallery as PM_M-1 Mobile. New metronome app icons generated in assets/.
Conformance suite unaffected (engine untouched): 47 pass, 1 known.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>