Practice mode

Learn a piece note by note, and keep the evidence

The score can wait for you. Keyflow grades every note, remembers every run, draws fourteen days of progress and overlays your best take as a ghost — so practice is measured, not guessed.

4 practice modesA-B loop · tempo 50–150%Automatic practice tempo14-day chart & ghost
The Practice page: modes, tempo and the A-B loopSession · Practice
The Practice page of the dock: mode, tempo, loop points and the automatic practice tempo.
4practice modes
50–150%tempo range
14days of practice chart
256graded notes kept per run

Modes

Four ways to work through a piece

Follow along

The score runs at its own tempo while you play; every note is graded as it passes.

Wait for my note

The score stops and waits: it only moves on once you play the right note.

Right hand only

Practise one hand while the other keeps playing, read straight from the MusicXML staves.

Left hand only

The mirrored mode — the same split point feeds the per-hand colours too.

A-B loop

Set A and B at the playhead, clear with ×; every loop is re-scored from the start.

Automatic practice tempo

Off by default. Miss too many in a row and the song slows by 5% per step down to a 50% floor; four correct notes speed it back up by 2%, never past 100%.

Hands

The hand split is read, not guessed

  • The default split is C4 = MIDI 60 (Notes → Hand split point), shared by the per-hand colours and the one-hand practice modes.
  • With “Infer hand split from the song” on, opening a MIDI file picks the split from how its notes spread over the keyboard: two clusters weighted by sounding time, accepted only when at least five empty semitones separate the hands and each carries ten percent of the sounding time, then settled at middle C inside the gap.
  • The inferred value is remembered for that song, so reopening it never re-measures; a one-hand song or two overlapping hands keep the split you chose.
  • For MusicXML the split comes straight from the staves — staff 1 is the right hand, staff 2 the left, or one part per hand — and is saved with the file.
The Play dialog: choose a score, a hand preset and the session controlsPerform & Play
The Play dialog: score chooser, per-hand preset cards, quick adjustments and the recent/library lists.

Sheet music layer

Real notation drawn over the piano roll

Switch Sheet music on in the LAYERS card and a double staff runs above the keyboard, following the playhead. It is a reading layer built from the song's own notes and beat grid — not an imported engraving — and everything it needs is worked out once and cached.

  • The key signature is inferred from the song itself (a Krumhansl–Kessler correlation over how long each pitch sounds), so F major writes a B♭ on the B line rather than an A♯ on the A line; a song that matches no key is written in C major.
  • Accidentals appear only where the bar really needs them: notes already in the key signature stay plain, a sharp or flat holds to the end of its own bar and staff, and a natural sign restores.
  • Short notes are beamed by the song's own beat grid with single, double and triple flags; a note in between breaks the beam, and rests never join one.
  • A chord becomes one column of note heads sharing a single stem, and the silent hand gets proper rests — one rest for a continuous silence, a whole-bar rest for each fully silent bar.
  • Notes carried across a bar line are tied, the tie curves away from the stem side, and the accidental travels with it; a line changing hands gets a curve across the gap between the staves.
  • The whole plan — accidentals, beams, rests, ties, chords — is kept between frames and rebuilt only when the song, the beat grid, the hand split or the key changes.
The live stage, where the staff layer is drawnLive stage
The live stage: the staff layer is composited over the same frame, above the piano roll.

Scoring & history

What gets measured, and where it is kept

WhereWhat you get
Under the stageACCURACY, SCORE and STREAK update live, with hit/miss feedback at the moment the note passes.
History pageEvery run of the open song — when, accuracy, hits and misses, longest streak — plus the best take of that song, EXPORT HTML for a report and CLEAR HISTORY.
Practice chartOne column per day for the last fourteen days, height set by that day's accuracy, days without practice still on the axis, and the run count and window average printed below.
Ghost of this songEach dot is a graded note — across by its place in the song, up by its pitch, cyan for a hit and red for a miss. The best take and the latest take share one axis, so they can be compared; a song never played prints the reason instead of an empty frame.
On diskOne JSON line per run in history/practice.jsonl inside the settings folder, newest first with a cap, and up to 256 graded notes per run for the ghost; a corrupt line is skipped, not fatal.

A session

How a practice run goes

  1. Open the songPlay in the header → a MIDI file or a MusicXML score, or pick one from RECENT / LIBRARY with its saved values.
  2. Choose the modeFollow along, Wait for my note, or one hand only; set the tempo and, if you want it, the automatic practice tempo.
  3. Loop the hard barSet A and B on the timeline, slow to 50%, and let each loop be scored from the start.
  4. Read the ghostStop the transport and the run is written down; History shows the chart and your best take overlaid on the latest.

Seeking, changing the mode or a track, and setting an A-B loop never count the skipped notes as misses.

Honest about the staff layer

It is a reading layer, not a full engraving: each new staff carries one voice, several voices on one staff are not drawn yet, and slurs or articulations are not read from the score itself. Notes are placed by pitch, the hand split decides the staff, and a note never moves down when its pitch goes up.

Practise with the stage on

Every practice feature is in the same free download as the concert visuals.