- PhraseSheetMusic: min width per bar scales with notation density
(16ths 320px, 8ths 260px, quarters 210px) — narrow screens wrap into
more rows instead of clipping notes off-screen.
- 6/8 crash fixed at the root: melody templatesFor had no 6/8 templates
(empty pool -> pick on empty array). Added 6/8 template sets for levels
1/2 plus an empty-pool fallback guard so generators can never pick from
an empty array again (any meter/level combination stays playable).
- More arpeggio broken-chord figures: 1-3-5-3, 1-2-1-3-2-1, 1-5-4-5-3-5,
1-3-2-5-3-2.
- More Giuliani patterns: p-i-a-i (wide), p-m-a-m-i, p-i-m-a-m-i (waltz
feel), p-i-m-a-i-a.
- Tests 179/179.
- NEW material 'giuliani': figures require a real voicing — the generator
assigns cycle positions (bass root + upper chord tones) to DISTINCT
strings with valid frets per bar; bars that cannot be voiced are skipped
(deterministic), clear error when nothing fits. Patterns: p-i-m, p-i-m-a,
p-a-m-i, a-i-m, p-i-m-a-m-i, p-m-a-m-i-m. Honors the chord pool, string
restrictions and the tuning; one figure per beat.
- 6/8 meter added (numerator 6) across score model, settings, generators;
meter selects now offer 4/4, 3/4, 6/8.
- Arpeggio category: Giuliani entries replaced with note-sequence
broken-chord figures (1-3-2-1, 1-3-2-5(8), 1-5-3-5(8), 1-2-3-5-3) —
pure pitch sequences, no voicing claims.
- Beam fix (root cause): setBeam now happens BEFORE voice.draw — VexFlow
decides flag vs beam at draw time; registering after drawing left both
flag and beam. Beams drawn after notes, flags suppressed correctly.
- Pace dropdown REMOVED from Phrase setup — replaced by a 'Sync to
exercise' checkbox in the Metronome widget (analog to 'Auto' in
single-note modes). pace is derived from the checkbox (checked = tempo,
unchecked = step).
- Preview clicks now registered in PREVIEW_GROUP: stopping/abandoning a
preview cancels its scheduled clicks — no more parallel ghost
metronomes after preview->stop->next exercise.
- Chord pool replaces the chord dropdown entirely (single chord AND
sequences): togglable degree list, empty = all 7.
- Giuliani figures corrected to NOTE sequences (p always takes the bass/
root): p-i-m, p-i-m-a, p-a-m-i, a-i-m, p-i-m-a-m-i, p-m-a-m-i-m,
p-e-a-m-a-m (replaced the fingering-driven patterns that made no
musical sense).
- 'Limit notes' is now one bordered section like Tuner/Metronome, with a
header, Clear-all link, and Strings behind a toggle (row hidden until
restricted).
- MetronomeWidget: the Phrase Mode switch now lives IN the widget as a
Free/Sync toggle. Free = independent metronome (own clock, starts when
toggled, with or without clicks). Sync = silent while idle, starts with
the exercise (count-in included), pendulum mirrors the run's beats.
- Fixed double phraseBeatBus.emit (leftover from an earlier edit) that
flipped the pendulum twice per beat — animation appeared frozen.
- Click decision unified: one sound checkbox governs both the widget and
(in sync mode) the run's click scheduler. 'Click 1 after count-in' is
musically the last count-in click (suppressed duplicate) — now with a
working pendulum the offset is visible rather than confusing.
- Giuliani figures extended: p-i-m-a-m-i, p-a-p-i-m-a, a-m-i-p-i-m,
m-i-a-m-i-m (six-note rolling/bass-skip/tremolo-adjacent figures).
- Arpeggio chord pool: togglable degree list (empty = all 7); functional
and random progressions honor the pool; first bar draws a random chord
from the pool.
- Tests 174/174.
- MetronomeWidget rebuilt cleanly: ONE 'Click sound' checkbox (the earlier
restructure left duplicated option rows behind — neither worked). Widget
body always visible (dimmed when disarmed); toggle arms sound+pendulum.
- Click decision unified: 'sync to metronome' derives phrase clickSound
from the widget's sound checkbox (no separate phrase click option);
'at your pace' clicks when the metronome is armed.
- Chord selection: abwählbare Liste (arpeggioChordSelection) restricts
progression chords; first bar draws a random chord FROM THE SELECTION
(fixed first chord repeated the exercise identically).
- Scales: rhythm setting (quarters/eighths) shared with arpeggios;
drill id includes rhythm to invalidate cached scores.
- Beam fix: register Beam via note.setBeam so VexFlow suppresses flags
(eighths/16ths previously drew BOTH beam and flag).
- Metronome widget: BPM/slider row and pendulum always visible (dimmed
when off); the toggle gates sound + animation only. BPM/Timer mode
switch restored for single-note auto-advance.
- Giuliani right-hand figures as arpeggio patterns: p-i-m, p-i-m-a,
p-a-m-i, m-a-m-i, a-m-i — cycle [root, third, fifth, octave] per figure
with octave register shift per repetition (120-studies feel).
- Pool fix: fretted instruments without active filters now get the full
0-12 fretboard in ALL modes (legacy difficulty ranges no longer clamp
the pool since the Note Set dropdown was removed).
- Tests 174/174.
- Sequence mode: bars (2/4/6/8) with one chord per bar, chosen by
functional rules (I->IV/V/vi...), diatonic cycle, or random (no immediate
repeats); deterministic via melody seed. Chord symbols per bar in the
score model (chordSymbols) rendered above the staff via setSection.
- Rhythm: quarters or eighths (cycling up/down through the pattern).
- Single-chord mode unchanged (whole path, overflow bars if needed).
- Auto-start: 'Start on first note (no count-in)' — step pace begins the
run as soon as the mic detects the first note; no start press needed.
- 'New' button re-rolls the progression (new seed).
- Tests 174/174.
- music/arpeggioGenerator.ts: diatonic triads (I-vii*) built from the
selected key/mode via the shared degree spelling; patterns up / down /
up-down / 1-2-3-5; one or two octaves (cycle ends on the octave; two-
octave path continues from the turning root). Quarter-note rhythm with
final note extended to fill the bar; title is labeled 'Arpeggio -
<tonic> <degree> (pattern, coverage)'.
- Settings: PhraseMaterial 'arpeggio' + arpeggioDegree/Pattern/Coverage
(defaults I / up / one-octave).
- PhraseTrainer: material option 'Arpeggios (generated)' + Chord/Pattern/
Coverage/Meter selects; key/mode reuse the shared Target key controls.
- Tests: 9 arpeggio cases (170 total).