UNPKG

wave-roll

Version:

JavaScript Library for Comparative MIDI Piano-Roll Visualization

101 lines 2.87 kB
/** * 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