Audio Claudio v0.1.1
Audio Claudio v0.1.1 — watch the score write itself.
This is the v0.1.0 MVP plus one feature: live incremental notation. Play into the microphone and the staff renders in a browser tab, a note at a time, as you play — then snaps to the clean quantized score when you stop.
The headline — listen --view
claudio listen --tempo 100 --viewOpens a local page and streams the growing score to it. The same pipeline that was already proven correct against files (YIN pitch detection → onset segmentation → grid quantization → MusicXML) now also emits its running result to the browser after every detected onset. When you Ctrl+C, the session's raw.mid, score.mid, and score.musicxml are written exactly as before — --view is purely additive.
Confirmed working by ear and eye on the primary machine (macOS, default browser): the staves built up live from live input and snapped to the correct notation on stop.
How it's built (same discipline as the MVP)
The feature respects the project's hexagonal boundary — no new domain claims, just an adapter and a use case:
LiveScoreProjector(Application) — re-quantizes the growing note list on each onset into aScore. Pure; imports only the Domain.LiveNotationServer(Infrastructure) — a BCL-onlyHttpListener+ Server-Sent Events server. Each renderedScoreis serialized through the existingMusicXmlScoreWriter, base64-encoded, and pushed to connected browsers over a capacity-1, drop-oldest outbox (the view always shows the latest score, never a backlog). No ASP.NET, no web framework.- OpenSheetMusicDisplay (
wwwroot/, OSMD 2.0.0, BSD-3-Clause, vendored with its license) — renders the MusicXML to notation in the page.
--view cannot break plain listen: the live hooks are isolated (a throwing hook is caught and reported, capture continues) and the server start is guarded (if the port or browser is unavailable, listen degrades to its normal behavior). Plain claudio listen is byte-for-byte unchanged.
This also quietly corroborates the one remaining MVP follow-up (R11.2, the manual MuseScore-load check): the browser renders the same MusicXmlScoreWriter output correctly, so the emitted MusicXML is demonstrably valid and renderable.
Honest scope
Unchanged from v0.1.0: monophonic, declared (not estimated) tempo, single staff. The live view is a rendering of the same monophonic transcription — it does not add polyphony. Phase-2 items (polyphony via a neural model behind the same ITranscriber port, tempo estimation, pYIN pitch-hardening, treble/bass split) remain out of scope.
331 tests green (unit + property + closed loop + the new projection/server/asset tests) on a fresh CI clone. UNLICENSE (public domain); every dependency permissively licensed.
🤖 Built in collaboration with Claude Code.