UNPKG

wave-roll

Version:

JavaScript Library for Comparative MIDI Piano-Roll Visualization

162 lines 4.34 kB
/** * 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