Free Piano — Phase 0 spikes

Throwaway harnesses that retire the two assumptions the vertical slice rests on. Neither is code we keep.

1 · OSMD notehead mapping

Can we map every MusicXML note to its rendered notehead box, merge ties correctly, and drive a smooth playhead? Grades itself against a known fixture.

2 · Microphone stack

Does getUserMedia with all processing disabled, plus AudioWorklet and an FFT, run in this WebView? Reports sampleRate, baseLatency and outputLatency.

Run both on the slowest Android phone you intend to support — that is the whole point. Desktop results tell us the code works, not whether the assumption holds.