Repository navigation
Listen options, animated keys and an input picker in the practice bar - #8
Merged
Merged
Conversation
In listen mode, two pill switches sit left of the song name above the on-screen keyboard: Keyboard speakers (only when a MIDI output is connected) sends playback to the keyboard, and Animate keys presses each on-screen key as its note sounds and lifts it when the note ends. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HvmoDPbUWx35sRniGQQfBT
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HvmoDPbUWx35sRniGQQfBT
…ards A quiet settings button sits left of the song name in listen mode; its square menu lists one row per option so more can be added later. It closes on an outside click or Escape. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HvmoDPbUWx35sRniGQQfBT
A Hand colours switch (on by default, off when keys are not animated) lights the keys the app plays blue for the right hand and purple for the left, matching the falling notes. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HvmoDPbUWx35sRniGQQfBT
PaulJoshi
marked this pull request as ready for review
October 3, 2026 09:36
…hone A small icon picker beside the input meter changes the judged input without going to Settings; it is locked while a take runs. The meter shows the new source straight away and calibration reloads for it. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HvmoDPbUWx35sRniGQQfBT
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by Paul · project thread
Before: in Listen mode the piece plays through the app piano and the on-screen keyboard stays still. Sending playback to a MIDI keyboard, and switching between computer keys, MIDI and microphone, were only possible from Settings.
After: when Listen is selected, a small settings button sits left of the song name, above the on-screen keyboard. It opens a menu upwards with one switch per option, so more can be added later. Keyboard speakers (shown only when a MIDI output is connected) plays the piece through the keyboard's own speakers. Animate keys (on by default) presses each on-screen key as its note sounds and lifts it when the note ends. Hand colours (on by default, unavailable while keys are not animated) lights those keys blue for the right hand and purple for the left, matching the falling notes. The menu closes on an outside click or Escape. In every practice mode, the bar with the input meter also has a small icon picker for computer keys, MIDI keyboard or microphone, locked while a take runs; the usual "Connect MIDI keyboard" / "Turn on the microphone" prompt appears below it after switching.
How: the Player emits each note as it schedules it, with its hand and key-down and key-up times (the written length including ties, not the pedalled sound). In listen mode the practice controller turns those into timed presses on a new
liveKeys.playingmap (token -> hand, or null for the neutral pressed look from #5), which the keyboard shows asdown,play-Rorplay-L. Keys lift slightly early so repeated notes visibly strike again. The speaker switch reuses the existingmidiOutPlaybacksetting, picks the connected output if the remembered one is gone, and the runtime now re-routes playback when MIDI ports change. New settingslistenKeyAnimationandlistenHandColours. The input picker calls a newruntime.setSource, which stops the mic when leaving it, updates the meter right away and reloads calibration for the new source. Everything follows the design system: square menu panel with a hairline, no shadow, pill tracks with ink for the chosen item, Lucide icons.Tests: player unit test for key timings;
e2e/listen.spec.tscovers the menu (only in listen mode, keys go down and up, hand colours on and off, switching animation off clears keys and disables hand colours, MIDI out receives notes with a mocked output, Escape closes it) and the input picker (switches source and meter, shows the connect prompts, locked while running). Typecheck, unit tests, build and full e2e pass locally.🤖 Generated with Claude Code
https://claude.ai/code/session_01HvmoDPbUWx35sRniGQQfBT