wave-roll
Version:
JavaScript Library for Comparative MIDI Piano-Roll Visualization
199 lines • 5.3 kB
TypeScript
/**
* 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