Skip to content

feat: implement basic piano roll#18

Merged
britle20 merged 5 commits into
developfrom
feat/2-basic-piano-roll
Jun 6, 2026
Merged

feat: implement basic piano roll#18
britle20 merged 5 commits into
developfrom
feat/2-basic-piano-roll

Conversation

@britle20

@britle20 britle20 commented Jun 6, 2026

Copy link
Copy Markdown
Collaborator

Summary

Implements the basic 1-bar piano roll editor for the selected hybrid clip.

Closes #2.

Changes

  • Added C4-C5 piano roll pitch rows using the bundled Iowa Piano sample range.
  • Added left-click/drag note creation, note drag movement, and right-click deletion.
  • Stores note events in the selected clip as serializable midiNote, startTick, durationTicks, and velocity.
  • Added synth note loop playback through the audio engine so held notes can play for their tick duration.
  • Added bundled Iowa Piano sample metadata and committed the 13 C4-C5 WAV files under public/samples/pitched_instruments/Iowa_Piano/.
  • Synchronized piano keyboard vertical scrolling with the note grid and kept the beat ruler sticky.
  • Renamed visible instrument labels from Lead Synth to Iowa Piano.
  • Added unit tests for piano roll model transformations and bundled piano sample metadata.
  • Updated data model, audio engine, UI design, and feature spec docs.

Testing

  • git diff --check
  • npm run typecheck --if-present
  • npm run lint --if-present
  • npm run test --if-present
  • npm run build --if-present

Manual Check

  • Started Vite dev server. Port 5173 was occupied, so Vite served on http://127.0.0.1:5174/.
  • Confirmed the dev server returned HTTP 200 for the app root.

Notes / Limitations

  • Piano roll playback uses a basic oscillator synth for held-note duration.
  • The bundled Iowa Piano WAV files are registered as sample metadata and define the initial C4-C5 range, but a full sampler instrument is not implemented yet.
  • Dedicated note resize handles are not implemented; left-drag on empty grid creates longer notes, and existing notes can be moved by dragging.
  • Pause/resume and visual playhead behavior remain scoped to Transport pause/resume and editor playhead #16.

@britle20 britle20 merged commit 18fc404 into develop Jun 6, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant