Skip to content

feat: add piano roll synth editor shell#1007

Closed
ChuxiJ wants to merge 3 commits intomainfrom
feat/v0.0.x-sprint-01-engine-and-piano-roll
Closed

feat: add piano roll synth editor shell#1007
ChuxiJ wants to merge 3 commits intomainfrom
feat/v0.0.x-sprint-01-engine-and-piano-roll

Conversation

@ChuxiJ
Copy link
Copy Markdown

@ChuxiJ ChuxiJ commented Mar 27, 2026

Summary

  • keep piano roll and transport playback routed through canonical track.instrument state with legacy fallback helpers where needed
  • add a dedicated SynthInstrumentEditor shell for subtractive and FM instruments inside Piano Roll
  • let the piano roll instrument selector switch directly between subtractive presets, FM, and Quick Sampler while always writing canonical instrument state
  • add regression coverage for the new editor wiring and the sampler -> fm -> subtractive selector flow

Verification

  • npx tsc --noEmit
  • npx vitest run tests/unit/SynthInstrumentEditor.test.tsx tests/unit/PianoRoll.test.tsx tests/unit/VirtualKeyboard.test.tsx tests/unit/trackPresets.test.tsx src/utils/__tests__/trackInstrument.test.ts tests/unit/pianoRollContextMenu.test.tsx tests/unit/sessionLaunchModes.test.ts tests/unit/sessionLegato.test.ts
  • npm run build

Notes

  • FM still falls back to the legacy synth voice in the playback engine for now; this PR adds the canonical FM state path and editor shell, not a full FM voice implementation yet.
  • Quick Sampler sample metadata still uses the legacy sampler mirrors for playback, but track identity and editor routing now come from track.instrument.
  • Browser smoke automation was attempted locally, but the desktop Playwright/Chrome environment was unreliable in this session, so this update is backed by typecheck, unit coverage, and build verification.

@ChuxiJ ChuxiJ changed the title feat: route piano roll playback through canonical instruments feat: add piano roll synth editor shell Mar 27, 2026
Copy link
Copy Markdown
Author

ChuxiJ commented Mar 27, 2026

Triage: Hold — Piano roll synth editor shell. Part of synth UX improvements. Defer until core features stable.


Generated by Claude Code

Copy link
Copy Markdown
Author

ChuxiJ commented Mar 29, 2026

Closing this stacked PR series (#1007#1015#1018#1019#1043#1051#1053#1060).

Reason: Main has since landed the InstrumentEngine / InstrumentFactory architecture (#1038, #1064), which fundamentally conflicts with this stack's SynthPlaybackChain / SynthRuntimeSpec / RuntimeModulationRack approach. Cherry-picking was attempted but the SynthEngine rewrite (384→623 lines) cannot be cleanly layered on top of the current main.

What to do instead: The sprint plan docs merged in #982 still apply. New PRs should build on top of main's current InstrumentEngine pattern rather than replacing it. Specific pieces from this stack (e.g., SynthInstrumentEditor UI, filter envelope controls, glide runtime) can be extracted into new standalone PRs that respect the current architecture.


Generated by Claude Code

@ChuxiJ ChuxiJ closed this Mar 29, 2026
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