Detailed feature reference

Timed practice guide

CADENCE — PLAY IN TIME AND TAP THE RHYTHM

PLAY A PASSAGE

Open a piece in Library or Compose, choose Practise passage, then Play in time
in Studies. Select one notation staff (right or left hand for piano) and 1–8
bars. This first version supports a steady 2/4, 3/4 or 4/4 meter, 40–160 bpm,
up to one minute, and at least 120 ms between distinct entrances. Choose a
slower tempo for fast subdivisions. Both-hand timed grading is still planned.

Connect and choose your MIDI keyboard. Release the keys, choose the tempo,
and press Count in & play. The count-in uses one bar. Keep the click enabled
for support, or switch it off after the count-in. Keep going through mistakes;
each entrance is compared to its own place on the timeline.

Wait for me remains available beside Play in time. Use it to learn the notes
before trying a steady tempo. Its results remain separate and do not establish
rhythmic accuracy.

TAP A RHYTHM

Learn → Practice & review → Rhythm → Tap it out offers four two-bar patterns: steady pulse,
eighth-note subdivisions, rests, and offbeats. Every pattern stays available.
Hear the pattern plays a count-in followed by the target taps over a quiet
beat. The grid labels 1 & 2 & 3 & 4 &: a dot means tap and a dash means no new
tap. Each pair of boxes is one quarter-note beat.

Choose Spacebar or MIDI keyboard, then Count in & tap. Press and release Space
or any single piano key on each dot. Rhythm mode ignores pitch. Playing several
keys adds extra presses; held keys and computer key repeat do not create taps.
Space is captured only in the active practice window during a running pass.
Typing in text fields, shortcuts with modifiers, and other windows keep their
normal behavior. This requires no Accessibility permission or global keyboard
monitor. Audio, MIDI and taps stay on the Mac.

WHAT THE FEEDBACK MEANS

Pitch and entrance timing are separate. A correct pitch can be early or late.
Chords allow their constituent presses to arrive in either order. Tied notes
do not require an extra attack; a tie held into the first bar is played once.
Repeated notes require a new press. Pedal sound does not produce a new attack.
Rests retain their time, so presses in silent gaps can count as extras.

On time means within ±80 ms, narrowed to 20% of the shortest entrance spacing
for faster subdivisions. Matching windows are limited to 400 ms and less than
half the spacing to the neighboring entrances. A press beyond a window appears
as an extra press plus a missed note. This deliberately prevents one mistake
from shifting the rest of the phrase's matches.

The result separates on-time, early, late, wrong-pitch, missed and extra presses.
It shows the offsets and bars to revisit. Practise that smaller passage selects
the first difficult bar with its preceding bar and reduces the tempo by 10 bpm
(minimum 40). Rhythm patterns can also be retried at a slower tempo.

Note duration, pedal technique, dynamics, fingering, expressive rubato, swing,
repeats and tempo changes are not graded. This is a fixed-tempo entrance check,
not a measure of musical proficiency. An unfinished or interrupted pass is not
saved as a failure. Stopping, changing selection, losing app focus, sleeping,
disconnecting/resetting MIDI, or changing the audio engine stops the run.

TIMING SETUP

Clicks are pre-rendered at sample offsets and scheduled on the audio host
clock. Native MIDI packet times are retained before delivery to the interface;
Space uses the native keyboard event time. Display refresh does not time taps.
The audio engine's reported output presentation latency is included. Device
latency is still an estimate; physical FP-10 and acoustic loopback measurements
have not been performed. Built-in or wired audio is preferable to Bluetooth.

Timing setup → Check with eight taps is optional. After the count-in, follow
eight clicks using the currently selected input. At least six reasonably
consistent taps are needed before an offset is offered. Applying it is your
choice. This combines device delay and your tapping tendency; it cannot
separate them or certify absolute accuracy. It is not saved as practice.

Offsets can be adjusted from -250 to +250 ms in 5 ms steps. Positive offsets
compensate for consistently late input. They last for this view visit; changing
input or MIDI connection resets them. Recheck after changing audio devices.
Saved reviews show the previous offset, but reopen with zero so an old setup
does not silently calibrate a different device.

MIDI with absent or future timestamps falls back to the callback arrival time
and is identified in the result. A clean pass containing such input gets a
supported review, not a longer confident interval.

SAVING, REVIEW AND COACHING

Completed results, their journal entry and spaced review save in one atomic
transaction. A failed save retains the result in AppState, including when you
leave the screen; try saving again or explicitly discard it. Pending results
are memory-only, so save before quitting. Beginning another pass cannot replace
an unsaved completion. Retry saves are idempotent.

Results are scoped to the score's musical revision, passage, hand, tempo,
input method, click setting and offset. Renaming a piece preserves its evidence;
musical changes require a fresh pass. Saved results are revalidated against the
source before committing. There are at most 256 detailed current review records
and 10,000 journal entries, matching the bounded local practice design.

Learn → Practice & review → Return to the pulse shows due timed passages and rhythm patterns.
Misses return after 10 minutes; supported input after 20 minutes; clean due
reviews progress through 1/3/7/14/30/60 days. Immediate repeats do not extend
spacing. A review reopens its passage, hand, tempo, input and click setting.

Explicit passage and piece coaching requests can include these observations
with their conditions and limitations. Results never auto-complete a pathway
or claim mastery. Nothing is sent to AI until you request coaching or a pathway.

The practice snapshot upgrades from formats 1 or 2 to format 3 on successful
save, preserving the preceding bytes in practice-state.json.previous. Older
apps reject format 3 rather than silently dropping the new timing results.