wave-roll
Version:
JavaScript Library for Comparative MIDI Piano-Roll Visualization
101 lines • 2.87 kB
TypeScript
/**
* Master Audio Clock - Single time source for all audio players
*
* This class provides a unified time reference to ensure perfect synchronization
* between WAV and MIDI players by converting master time to each system's format.
*/
export declare class AudioMasterClock {
private masterTime;
private startTime;
private isRunning;
private audioContextStartTime;
private toneTransportStartTime;
private seekLookaheadOverride;
readonly state: {
nowTime: number;
totalTime: number;
isPlaying: boolean;
tempo: number;
originalTempo: number;
masterVolume: number;
loopMode: "off" | "repeat" | "ab";
globalRepeat: boolean;
markerA: number | null;
markerB: number | null;
generation: number;
playbackGeneration: number;
};
private playerGroups;
constructor();
/**
* Get current master time
*/
getCurrentTime(): number;
/**
* Convert master time to AudioContext time
*/
toAudioContextTime(masterTime: number, lookahead?: number): number;
/**
* Convert master time to Tone.js Transport time
*/
toToneTransportTime(masterTime: number): number;
/**
* Register player group
*/
registerPlayerGroup(group: PlayerGroup): void;
/**
* Start unified playback - synchronize all player groups perfectly
*/
startPlayback(fromTime?: number, lookahead?: number): Promise<void>;
/**
* Stop playback
*/
stopPlayback(): void;
pausePlayback(): void;
/**
* Seek to specific time
*/
seekTo(time: number): void;
/**
* Seek with a custom lookahead, used for seamless retime (e.g., live tempo changes).
*/
seekToWithLookahead(time: number, lookahead: number): void;
/**
* Set tempo
*/
setTempo(bpm: number): void;
/**
* Set baseline/original tempo. Does not start/stop playback.
*/
setOriginalTempo(bpm: number): void;
/**
* Set master volume
*/
setMasterVolume(volume: number): void;
/**
* Set loop mode
*/
setLoopMode(mode: 'off' | 'repeat' | 'ab', markerA?: number, markerB?: number): void;
}
/**
* Interface that player groups must implement
*/
export interface PlayerGroup {
startSynchronized(syncInfo: SynchronizationInfo): Promise<void>;
stopSynchronized(): void;
seekTo(time: number): void;
setTempo(bpm: number): void;
setMasterVolume(volume: number): void;
setLoop(mode: 'off' | 'repeat' | 'ab', markerA: number | null, markerB: number | null): void;
}
/**
* Synchronization info
*/
export interface SynchronizationInfo {
audioContextTime: number;
toneTransportTime: number;
masterTime: number;
generation: number;
mode?: 'play' | 'seek';
}
//# sourceMappingURL=master-clock.d.ts.map