Compare commits

..

No commits in common. "61c933e44f6bf2303f971891fff37efc5dc53869" and "87f323b78285f0d2c4962463f5f9a31b515d2dae" have entirely different histories.

2 changed files with 20 additions and 49 deletions

View file

@ -7,28 +7,21 @@ pattern. Layering lanes produces polymeter and true ratio polyrhythm.
**Live:** https://metronome.varasys.io **Live:** https://metronome.varasys.io
It's a single, selfcontained `index.html`**zero dependencies**: no framework, It's a single page (`index.html`) plus a vendored QR library — no build step,
no build step, no bundled or CDN libraries, and nothing fetched at runtime. State no framework. State (presets, set lists, practice log, theme) lives in
(set lists, the practice log, theme and UI preferences) lives in `localStorage`. `localStorage`.
Because nothing loads from the network, you can save the page (`Ctrl`/`⌘`+`S`) and
open it straight from disk to run fully offline. One catch from a local `file://`:
the browser may not persist `localStorage` between sessions, so use **Export all**
(setlist **⋯** menu) to back up your work.
## Features ## Features
- **Meter lanes** — grouping (odd meters), subdivision, a synthesized drum/percussion voice, perbeat - **Meter lanes** — grouping (odd meters), subdivision, GM drum voice, perbeat
on/off pattern (rests), mute, live measure counter. on/off pattern (rests), mute, live measure counter.
- **Polyrhythm** — a perlane *poly* toggle fits a lane's beats evenly into lane 1's - **Polyrhythm** — a perlane *poly* toggle fits a lane's beats evenly into lane 1's
bar (e.g. 5over4, 3over2). bar (e.g. 5over4, 3over2).
- **Practice** — gap/mute trainer (play N / mute M bars) and a tempo ramp with a - **Practice** — gap/mute trainer (play N / mute M bars) and a tempo ramp with a
start BPM and signed step. start BPM and signed step.
- **Set lists** — named, ordered lists of saved setups; click an item to load it - **Set lists** — named, ordered lists of saved setups; ▶ loads + starts an item,
(it switches live if you're already playing), **N** loads the next; each play is **N** advances; each play is logged for crossday comparison.
logged for crossday comparison. - **Sharing** — copy a link (with QR) to your current settings or a whole set list.
- **Sharing** — copy a link to your current settings or a whole set list (with an
optional QR generated by an external service).
- **Theming** — System / Light / Dark. - **Theming** — System / Light / Dark.
## The share language ## The share language
@ -106,24 +99,21 @@ In the setlist panel's **⋯** menu:
- **QR ↗** opens a thirdparty QR service (api.qrserver.com) with the link in its - **QR ↗** opens a thirdparty QR service (api.qrserver.com) with the link in its
URL so you can scan it on a phone. A banner warns you it's external — confirm the URL so you can scan it on a phone. A banner warns you it's external — confirm the
QR decodes to the shown link before trusting it. (No QR is generated locally.) QR decodes to the shown link before trusting it. (No QR is generated locally.)
- **Export all / Import file** back up your set lists and practice log as a JSON - **Export all / Import file** back up presets + set lists + logs as a JSON file.
file (a legacy `presets` field is included for backward compatibility).
## Keyboard shortcuts ## Keyboard shortcuts
| Key | Action | | Key | Action |
|-----|--------| |-----|--------|
| `Space` | play / stop (works everywhere except while typing in a text field) | | `Space` | play / stop (except while typing in a text field) |
| `T` | tap tempo | | `T` | tap tempo |
| `↑` / `↓` | tempo ±1 (`Shift` = ±10) | | `↑` / `↓` | tempo ±1 (`Shift` = ±10) |
| `A` | add meter lane | | `A` | add meter lane |
| `N` | load next setlist item | | `1``9` | mute lane N |
| `Alt`+`↑` / `Alt`+`↓` | reorder the selected setlist item | | `R` | toggle the setlist panel |
| `1``9` | enable / silence lane 19 | | `N` | next setlist item |
| `?` | shortcuts help | | `?` | shortcuts help |
| `Esc` | close the help / share dialog | | `Esc` | close dialog / panel |
(Arrow keys are left alone while a slider or dropdown is focused, so they still adjust it.)
## Versioning ## Versioning
@ -132,9 +122,8 @@ In the setlist panel's **⋯** menu:
- **Formal** — a clean commit tagged `v<VERSION>``X.Y.Z`. - **Formal** — a clean commit tagged `v<VERSION>``X.Y.Z`.
- **Dev** — anything else → `X.Y.Z-dev.<utc-timestamp>.<short-sha>[.dirty]`. - **Dev** — anything else → `X.Y.Z-dev.<utc-timestamp>.<short-sha>[.dirty]`.
Cut a release with `./release.sh [X.Y.Z]` — the optional arg bumps & commits Cut a release with `./release.sh [X.Y.Z]` (bumps `VERSION` + tags `v<VERSION>`),
`VERSION`; it then tags the current commit `v<VERSION>` (requires a clean tree). then push the tag and deploy.
Push the tag, then deploy.
## Deploy ## Deploy

File diff suppressed because one or more lines are too long