UNPKG

wave-roll

Version:

JavaScript Library for Comparative MIDI Piano-Roll Visualization

199 lines 5.3 kB
/** * Unified Audio Controller * * Fully implements user requirements: * - Upper-level object: unified management of nowTime, isPlaying, tempo, masterVolume, loopMode, markerA/B * - Lower-level groups: per-player control of volume, pan, and mute * * This class synchronizes WAV and MIDI player groups perfectly via AudioMasterClock. */ export declare class UnifiedAudioController { private masterClock; private wavPlayerGroup; private midiPlayerGroup; private isInitialized; private initPromise; private visualUpdateCallback?; private visualUpdateLoop?; private _prevTime; private _lastLoopJumpAtGen; private _lastRepeatWrapAtGen; private lastJoinRequestTs; private handleWavVisibilityChange; private handleWavMuteChange; constructor(); /** * Compute effective total duration considering both MIDI and audible WAV sources. * Falls back to master clock's totalTime when registry is unavailable. */ private getEffectiveTotalTime; /** * Initialize (async) */ initialize(): Promise<void>; private performInitialization; /** * Start unified playback */ play(): Promise<void>; /** * Pause unified playback */ pause(): void; /** * Stop unified playback (rewind to start) */ stop(): void; /** * Seek to a specific time */ seek(time: number): void; /** * Get current playback time */ getCurrentTime(): number; /** * Check playing state */ get isPlaying(): boolean; /** * Current nowTime (user requirements) */ get nowTime(): number; set nowTime(time: number); /** * Set/get total time */ get totalTime(): number; set totalTime(time: number); /** * Set/get tempo (user requirements) */ get tempo(): number; set tempo(bpm: number); /** * Update baseline/original tempo (used as 100%). */ setOriginalTempo(bpm: number): void; /** * Set/get master volume (user requirements) */ get masterVolume(): number; set masterVolume(volume: number); /** * Set/get loop mode (user requirements) */ get loopMode(): 'off' | 'repeat' | 'ab'; set loopMode(mode: 'off' | 'repeat' | 'ab'); /** * Independent global repeat flag (separate from AB loop mode) */ get isGlobalRepeat(): boolean; set isGlobalRepeat(enabled: boolean); /** * Set/get marker A (user requirements) */ get markerA(): number | null; set markerA(time: number | null); /** * Set/get marker B (user requirements) */ get markerB(): number | null; set markerB(time: number | null); /** * Configure A–B loop */ setABLoop(markerA: number, markerB: number): void; /** * Set WAV player volume */ setWavPlayerVolume(playerId: string, volume: number): void; /** * Adjust WAV group mix vs MIDI (0-1) */ setWavGroupMix(gain: number): void; /** * Set WAV player pan */ setWavPlayerPan(playerId: string, pan: number): void; /** * Set WAV player mute */ setWavPlayerMute(playerId: string, muted: boolean): void; /** * Get all WAV player states */ getWavPlayerStates(): Record<string, { volume: number; pan: number; muted: boolean; }>; /** * Set MIDI player volume */ setMidiPlayerVolume(fileId: string, volume: number): void; /** * Set MIDI player pan */ setMidiPlayerPan(fileId: string, pan: number): void; /** * Set MIDI player mute */ setMidiPlayerMute(fileId: string, muted: boolean): void; /** * Get all MIDI player states */ getMidiPlayerStates(): Record<string, { volume: number; pan: number; muted: boolean; }>; /** * Set MIDI manager (compatibility with existing code) */ setMidiManager(midiManager: any): void; /** * Return state object (compatibility with existing code) */ getState(): { currentTime: number; duration: number; wavPlayers: Record<string, { volume: number; pan: number; muted: boolean; }>; midiPlayers: Record<string, { volume: number; pan: number; muted: boolean; }>; 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; }; /** * Set visual update callback (compatibility with existing code) */ setOnVisualUpdate(callback: (time: number) => void): void; private startVisualUpdateLoop; private stopVisualUpdateLoop; /** * Resource cleanup */ destroy(): void; /** * Public: Align a WAV track to join playback at the exact master time, if appropriate. */ alignWavJoin(fileId: string, lookahead?: number): void; } //# sourceMappingURL=unified-audio-controller.d.ts.map