Feature Spec
Related feature document: docs/features/05-basic-piano-roll.md
Goal
Build a basic 1-bar piano roll for editing note events in a hybrid clip.
Context
Hybrid clips should contain both drum events and pitched note events using tick-based timing.
Scope
Included:
- 1-bar piano roll grid
- Note add and delete
- Note move and resize if practical for the first version
- MIDI note numbers
- Note start and duration stored in ticks
- Basic oscillator or synth playback, or integration with the existing audio engine
- CSS Modules styling
Excluded:
- Advanced editing tools
- Automation
- Arrangement view
- Full sampler instrument
- Quantize or swing unless already supported
Constraints
Store all note timing in ticks. Keep note geometry derived from model data. Keep project state serializable.
Done when
Users can create and delete note events and the model stores midiNote, startTick, durationTicks, and velocity.
Verification
Run npm run typecheck, npm run lint, npm run test, and npm run build. Manually add/delete notes and verify playback if available.
Notes
Use inline styles only for computed note geometry when useful.
Feature Spec
Related feature document: docs/features/05-basic-piano-roll.md
Goal
Build a basic 1-bar piano roll for editing note events in a hybrid clip.
Context
Hybrid clips should contain both drum events and pitched note events using tick-based timing.
Scope
Included:
Excluded:
Constraints
Store all note timing in ticks. Keep note geometry derived from model data. Keep project state serializable.
Done when
Users can create and delete note events and the model stores midiNote, startTick, durationTicks, and velocity.
Verification
Run npm run typecheck, npm run lint, npm run test, and npm run build. Manually add/delete notes and verify playback if available.
Notes
Use inline styles only for computed note geometry when useful.