@tonejs/midi
Version:
Convert binary midi into JSON
95 lines (94 loc) • 2.25 kB
TypeScript
import type { MidiData } from "midi-file";
export interface TempoEvent {
ticks: number;
bpm: number;
time?: number;
}
export interface TimeSignatureEvent {
ticks: number;
timeSignature: number[];
measures?: number;
}
export interface MetaEvent {
text: string;
type: string;
ticks: number;
}
export interface KeySignatureEvent {
ticks: number;
key: string;
scale: string;
}
/**
* @hidden
*/
export declare const keySignatureKeys: string[];
/**
* The parsed MIDI file header.
*/
export declare class Header {
/**
* The array of all the tempo events.
*/
tempos: TempoEvent[];
/**
* The time signatures.
*/
timeSignatures: TimeSignatureEvent[];
/**
* The time signatures.
*/
keySignatures: KeySignatureEvent[];
/**
* Additional meta events.
*/
meta: MetaEvent[];
/**
* The name of the MIDI file;
*/
name: string;
constructor(midiData?: MidiData);
/**
* This must be invoked after any changes are made to the tempo array
* or the timeSignature array for the updated values to be reflected.
*/
update(): void;
/**
* Convert ticks into seconds based on the tempo changes.
*/
ticksToSeconds(ticks: number): number;
/**
* Convert ticks into measures based off of the time signatures.
*/
ticksToMeasures(ticks: number): number;
/**
* The number of ticks per quarter note.
*/
get ppq(): number;
/**
* Convert seconds to ticks based on the tempo events.
*/
secondsToTicks(seconds: number): number;
/**
* Convert the header into an object.
*/
toJSON(): HeaderJSON;
/**
* Parse a header json object.
*/
fromJSON(json: HeaderJSON): void;
/**
* Update the tempo of the midi to a single tempo. Will remove and replace
* any other tempos currently set and update all of the event timing.
* @param bpm The tempo in beats per second.
*/
setTempo(bpm: number): void;
}
export interface HeaderJSON {
name: string;
ppq: number;
meta: MetaEvent[];
tempos: TempoEvent[];
timeSignatures: TimeSignatureEvent[];
keySignatures: KeySignatureEvent[];
}