musescore / musescore/MuseScore

Add per-note playback start/duration offset properties

Open
#34,545 2 comments 0 reactions 2 assignees View on GitHub

@jessjwilliamson is already working on this.

Since Aug 12, 2026.

needs review
Dominant language
C++
Stars
15.1k
Forks
3.3k
Avg merge
2d 2h
Merged PRs (30d)
91

Description

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

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.