## Objective Map MIDI messages into the normal play/control/release scheduler path with deterministic note ownership and cleanup. ## Scope - [ ] Implement `midi-devices`, note/CC/pitch bindings, unbinding, and binding inspection. - [ ] Resolve devices/channels/synths/parameters symbolically and report conflicts/errors structurally. - [ ] Map note-on/off to play/release and declared voice-scoped velocity to its configured range. - [ ] Handle repeated device/channel/note presses with deterministic LIFO ownership. - [ ] Scale CC and pitch bend with validated transforms/smoothing and require declared compatible parameters. - [ ] On disconnect, release device-owned notes, mark bindings inactive, and support optional reconnection without crashing audio. - [ ] Add MIDI source→frame→scheduler→handle traces and scale, repeated-note, CC sweep, pitch, disconnect, burst, and no-stuck-note tests. ## Acceptance criteria - [ ] MIDI scale/velocity, repeated-note LIFO release, CC, and explicit pitch-bend fixtures pass with exact timing. - [ ] Disconnects and unbinding leave no stuck voices. - [ ] Mapping uses the existing bounded sample-accurate scheduler and never silently drops events. Spec: `phase-3.md` §§20–22, 24, 26–27, 29–33, 35, 40 (Milestone 9), 42.
Objective
Map MIDI messages into the normal play/control/release scheduler path with deterministic note ownership and cleanup.
Scope
midi-devices, note/CC/pitch bindings, unbinding, and binding inspection.Acceptance criteria
Spec:
phase-3.md§§20–22, 24, 26–27, 29–33, 35, 40 (Milestone 9), 42.