/** * AudioPlayer - Framework-agnostic audio playback controller * Wraps Web Audio API with a clean, event-driven interface * * Inspired by GSAP's approach: imperative API that works anywhere * * @author Pleco-XA Audio Analysis Suite * @version 1.0.0 */ /** * @typedef {Object} AudioPlayerOptions * @property {AudioContext} [audioContext] - Existing audio context * @property {number} [volume=1.0] - Initial volume (0.0 to 1.0) * @property {boolean} [autoplay=false] - Whether to autoplay when loaded * @property {boolean} [loop=false] - Whether to loop by default */ /** * @typedef {Object} LoopRegion * @property {number} start - Start time in seconds * @property {number} end - End time in seconds */ /** * @typedef {Object} PlaybackState * @property {boolean} isPlaying - Whether audio is currently playing * @property {boolean} isPaused - Whether audio is paused * @property {number} currentTime - Current playback time in seconds * @property {number} duration - Total duration in seconds * @property {number} volume - Current volume (0.0 to 1.0) * @property {LoopRegion|null} loop - Current loop region or null */ /** * Event-driven AudioPlayer class for framework-agnostic audio control * * @example * // Basic usage * const player = new AudioPlayer(); * await player.load('song.mp3'); * player.setLoop(10.0, 20.5); * player.play(); * * // Event handling * player.on('timeupdate', (time) => console.log('Current time:', time)); * player.on('loopchange', (loop) => console.log('Loop changed:', loop)); */ export declare class AudioPlayer { /** * Create a new AudioPlayer instance * @param {AudioPlayerOptions} [options={}] - Configuration options */ constructor(options?: {}); /** * Get or create Web Audio API context * @returns {AudioContext} The audio context */ get audioContext(): any; /** * Get current audio buffer * @returns {AudioBuffer|null} The loaded audio buffer */ get audioBuffer(): any; /** * Get current playback state * @returns {PlaybackState} Current state information */ get state(): { isPlaying: any; isPaused: any; currentTime: any; duration: any; volume: any; loop: any; }; /** * Load audio from various sources * @param {string|File|AudioBuffer} source - URL, File object, or AudioBuffer * @returns {Promise} Promise that resolves when audio is loaded */ load(source: any): Promise; /** * Start playback * @throws {Error} If no audio is loaded */ play(): void; /** * Pause playback */ pause(): void; /** * Stop playback and reset position */ stop(): void; /** * Set volume level * @param {number} volume - Volume level (0.0 to 1.0) */ setVolume(volume: any): void; /** * Set loop region * @param {number} start - Start time in seconds * @param {number} end - End time in seconds * @throws {Error} If no audio is loaded */ setLoop(start: any, end: any): void; /** * Clear loop region (play entire track) */ clearLoop(): void; /** * Seek to specific time * @param {number} time - Time in seconds * @throws {Error} If no audio is loaded */ seek(time: any): void; /** * Get current playback time * @returns {number} Current time in seconds */ getCurrentTime(): any; /** * Add event listener * @param {string} event - Event name (play, pause, stop, timeupdate, etc.) * @param {Function} callback - Event callback function */ on(event: any, callback: any): void; /** * Remove event listener * @param {string} event - Event name * @param {Function} callback - Callback function to remove */ off(event: any, callback: any): void; /** * Clean up resources (important for web apps) */ dispose(): void; /** * Setup audio context with browser compatibility * @private */ _setupAudioContext(): void; /** * Create audio source node and connect audio graph * @private */ _createSource(): void; /** * Internal stop method * @private */ _stop(): void; /** * Start time tracking for timeupdate events * @private */ _startTimeTracking(): void; /** * Stop time tracking * @private */ _stopTimeTracking(): void; /** * Handle track end (loop or stop) * @private */ _handleTrackEnd(): void; /** * Emit event to all listeners * @private * @param {string} event - Event name * @param {*} data - Event data */ _emit(event: any, data: any): void; }