From f11967f8d31bedd4a2556e154bbff00df6a4fd9f Mon Sep 17 00:00:00 2001 From: b1rdmania <102524336+b1rdmania@users.noreply.github.com> Date: Thu, 18 Dec 2025 23:34:06 +0000 Subject: [PATCH] Skip leading silence in preview playback MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Normalize event times to start at 0 in SoundfontMIDIPlayer, matching the existing fix in SynthesisEngine. Prevents delay when MIDI files have silence before the first note. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- src/synthesis/SoundfontMIDIPlayer.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/synthesis/SoundfontMIDIPlayer.ts b/src/synthesis/SoundfontMIDIPlayer.ts index 6f09d9e..e3d6b77 100644 --- a/src/synthesis/SoundfontMIDIPlayer.ts +++ b/src/synthesis/SoundfontMIDIPlayer.ts @@ -25,7 +25,11 @@ export class SoundfontMIDIPlayer { } async load(events: NoteEvent[]): Promise { - this.events = [...events].sort((a, b) => a.time - b.time); + const sorted = [...events].sort((a, b) => a.time - b.time); + + // Normalize times to start at 0 (skip leading silence) + const minTime = sorted.length > 0 ? sorted[0].time : 0; + this.events = sorted.map(e => ({ ...e, time: e.time - minTime })); this.currentEventIndex = 0; // Load the acoustic grand piano instrument (most versatile for MIDI playback)