musescore / musescore/MuseScore

Feature request: query VST3 plugin latency and apply plugin delay compensation

Open
#34,388 0 comments 0 reactions 1 assignee View on GitHub

@RomanPudashkin is already working on this.

Since Jul 31, 2026.

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

Description

Your idea

MuseScore hosts third party VST3 instruments but never asks them how much latency they introduce, and does not shift the rest of the mix to match. As a result, any VST instrument that uses internal look-ahead (it reads a little ahead in time before producing sound) plays out of time with the rest of the score, and the user has no way to correct it.

The request is for MuseScore to read the plugin reported latency (VST3 exposes it through IAudioProcessor::getLatencySamples()) and apply plugin delay compensation, delaying the other tracks by the largest plugin latency so a look-ahead instrument stays in sync. This is standard behaviour in DAWs and in the other major notation apps; MuseScore is currently the exception.

Problem to be solved

Concrete example (plectrum instruments): a VST for plectrum instruments such as bandurria, lute or mandolin wants to play long notes as tremolo automatically. Whether a note should be a tremolo depends on its duration, but a plugin only learns how long a note is as it plays, so to trigger the tremolo sample from the very start of a long note it must look slightly ahead and therefore report some latency. In Dorico, Sibelius and Finale this works because the host compensates; in MuseScore that instrument would simply sound late and out of sync with the other staves, so the technique is not usable there today.

Prior art
  • Every major DAW (Cubase, Logic, Reaper, Studio One, Pro Tools) implements plugin delay compensation from the latency each plugin reports.
  • Dorico, built on the Steinberg audio engine, compensates plugin latency during playback.
  • The VST3 SDK exposes the value through IAudioProcessor::getLatencySamples(); a host reads it after activation and can re-read it when the plugin signals a latency change.
Additional context

No response

Checklist
  • This request follows the guidelines for reporting issues
  • I have verified that this feature request has not been logged before, by searching the issue tracker for similar requests

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.