Skip to content

Add per-note playback start/duration offset properties #34545

Description

@tharos-devs

Problem

There is currently no way to nudge the audio playback timing of an individual note without changing its notated position or duration. Anyone wanting subtle expressive timing (rubato, swing feel on a single note, fixing an awkward MIDI-imported note that plays slightly early/late) has to resort to workarounds — tiny tuplets, extra tempo changes, or editing the exported audio afterwards — none of which are practical or non-destructive.

Proposed solution

Add two new per-note properties, editable from the Properties panel → Play section:

  • Start offset — shifts when the note starts sounding during playback, in ticks.
  • Duration offset — shifts how long the note sounds during playback, in ticks.

Both offsets only affect the audio rendering of the note (NoteRenderer). The note's actual tick position, duration, and notation/engraving are completely unaffected — this is purely a playback-timing adjustment, similar in spirit to existing per-voice playback toggles (playbackVoice1..4).

Scope

  • Two new Pid properties (PLAYBACK_START_OFFSET, PLAYBACK_DURATION_OFFSET), stored per-note and saved/loaded with the score (MSCX read/write).
  • Two new spin boxes in the Note "Play" section of the Properties panel (range: -1920..+1920 ticks).
  • Exposed on the plugins API (Note.playbackStartOffset / Note.playbackDurationOffset) for scripting use cases.
  • No change to layout/engraving; no change to existing file compatibility (new optional properties default to 0).

Additional notes

I have a working implementation of this and would like to submit a PR for it. Happy to adjust naming/scope based on maintainer feedback before doing so.

Image

Metadata

Metadata

Labels

needs reviewThe issue needs review to set priority, fix version or change status etc.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions