diff --git a/src/meta-events/tempo-event.js b/src/meta-events/tempo-event.js index 903e031..15cfcda 100644 --- a/src/meta-events/tempo-event.js +++ b/src/meta-events/tempo-event.js @@ -15,6 +15,8 @@ class TempoEvent { this.type = 'tempo'; + this.tick = fields.tick; + const tempo = Math.round(60000000 / fields.bpm); // Start with zero time delta diff --git a/src/track.js b/src/track.js index 2741308..f46e3a8 100644 --- a/src/track.js +++ b/src/track.js @@ -110,6 +110,9 @@ class Track { precisionLoss = Utils.getPrecisionLoss(event.deltaWithPrecisionCorrection || 0); this.data = this.data.concat(built.data); this.tickPointer = Utils.getRoundedIfClose(event.tick); + } else if (event instanceof TempoEvent) { + this.tickPointer = Utils.getRoundedIfClose(event.tick); + this.data = this.data.concat(event.data); } else { this.data = this.data.concat(event.data); } @@ -206,10 +209,11 @@ class Track { /** * Sets tempo of the MIDI file. * @param {number} bpm - Tempo in beats per minute. + * @param {number} tick - Start tick. * @return {Track} */ - setTempo(bpm) { - return this.addEvent(new TempoEvent({bpm})); + setTempo(bpm, tick = 0) { + return this.addEvent(new TempoEvent({bpm, tick})); } /** diff --git a/types.d.ts b/types.d.ts index 5443605..800505b 100644 --- a/types.d.ts +++ b/types.d.ts @@ -89,7 +89,7 @@ declare module "midi-writer-js" { event: EventType | EventType[], mapFunction?: (index: number, event: EventType) => Partial ): void; - setTempo(tempo: number): void; + setTempo(tempo: number, tick: number): void; addText(text: string): void; addCopyright(text: string): void; addTrackName(text: string): void;