wave-roll
Version:
JavaScript Library for Comparative MIDI Piano-Roll Visualization
162 lines • 4.34 kB
TypeScript
/**
* AudioController - Legacy wrapper around CorePlaybackEngine for audio control
* Maintains backward compatibility while delegating to unified engine
*/
import { StateManager } from "@/core/state";
import { NoteData } from "@/lib/midi/types";
/**
* Audio player state interface
*/
export interface AudioPlayerState {
isPlaying: boolean;
currentTime: number;
duration: number;
volume: number;
tempo: number;
pan: number;
isRepeating: boolean;
}
/**
* Loop points interface
*/
export interface LoopPoints {
a: number | null;
b: number | null;
}
/**
* Audio controller configuration
*/
export interface AudioControllerConfig {
defaultVolume: number;
defaultTempo: number;
minTempo: number;
maxTempo: number;
updateInterval: number;
}
/**
* AudioController - Thin wrapper around CorePlaybackEngine
* Maintains backward compatibility for existing code
*/
export declare class AudioController {
private coreEngine;
private pianoRollManager;
private stateManager;
private config;
private loopPoints;
private seeking;
private muteDueNoLR;
private lastVolumeBeforeMute;
constructor(stateManager: StateManager, config?: Partial<AudioControllerConfig>);
/**
* Initialize audio player with notes and piano roll instance
*/
initializeAudioPlayer(notes: NoteData[], pianoRollInstance: import("@/core/playback").PianoRollInstance): Promise<void>;
/**
* Recreate audio player with new notes (preserving state)
*/
recreateAudioPlayer(notes: NoteData[]): Promise<void>;
/**
* Start audio playback
*/
play(): Promise<void>;
/**
* Pause audio playback
*/
pause(): void;
/**
* Restart audio playback from beginning
*/
restart(): void;
/**
* Seek to specific time position
*/
seek(seconds: number, updateVisual?: boolean): void;
/**
* Set playback volume
*/
setVolume(volume: number): void;
/**
* Set playback tempo
*/
setTempo(bpm: number): void;
/**
* Set stereo pan value
*/
setPan(pan: number): void;
/**
* Toggle repeat mode
*/
toggleRepeat(enabled: boolean): void;
/**
* Set A-B loop points
*/
setLoopPoints(start: number | null, end: number | null, preservePosition?: boolean): void;
/**
* Clear loop points
*/
clearLoopPoints(): void;
/**
* Get current audio player state
*/
getState(): AudioPlayerState;
/**
* Get loop points
*/
getLoopPoints(): LoopPoints;
/**
* Handle mute/unmute for L/R channel controls
*/
handleChannelMute(shouldMute: boolean): void;
/**
* Set seeking state
*/
setSeeking(seeking: boolean): void;
/**
* Check if currently seeking
*/
isSeeking(): boolean;
/**
* Handle seek bar interaction
*/
handleSeekBarClick(event: MouseEvent, seekBarElement: HTMLElement): void;
/**
* Handle loop restart (jump to loop start and play)
*/
handleLoopRestart(): void;
/**
* Get formatted time string
*/
getFormattedTime(): {
current: string;
total: string;
};
/**
* Get current playback progress as percentage
*/
getProgress(): number;
/**
* Destroy audio controller and cleanup resources
*/
destroy(): void;
}
/**
* Create audio controller instance
*/
export declare function createAudioController(stateManager: StateManager, config?: Partial<AudioControllerConfig>): AudioController;
/**
* Audio controller utility functions
* @deprecated Use PlaybackValueUtils from './utils' instead
*/
export declare const AudioControllerUtils: {
clampVolume(volume: number): number;
clampTempo(tempo: number, min?: number, max?: number): number;
clampPan(pan: number): number;
timeToPercent(time: number, duration: number): number;
percentToTime(percent: number, duration: number): number;
isSilent(volume: number, threshold?: number): boolean;
dbToLinear(db: number): number;
linearToDb(linear: number): number;
tempoToPlaybackRate(tempo: number, baseTempo?: number): number;
playbackRateToTempo(rate: number, baseTempo?: number): number;
};
//# sourceMappingURL=audio-controller.d.ts.map