/** * AudioManager - high-level audio management * * Features: * - Named audio assets (play by name, not handle) * - Volume groups (SFX, music, master) * - Fade in/out effects * - Spatial audio (2D positional sound) * - Audio groups (random variation) * - Preloading * * Why this wrapper: * - tessera.js is low-level (handles, no names) * - Need organized asset management * - Need fade effects for polish * - Need volume groups for settings */ export class AudioManagerClass { audio: any; sounds: Map; music: Map; masterVolume: number; sfxVolume: number; musicVolume: number; activeSounds: Map; activeMusic: any; groups: Map; listenerPosition: { x: number; y: number; }; maxHearingDistance: number; /** * Initialize with tessera.js audio interface * * @param {Object} audioInterface - renderer.audio from tessera.js */ init(audioInterface: any): void; /** * Load sound effect (fully loaded into memory) * * @param {string} name - Unique name for this sound * @param {string} filePath - Path to audio file * @returns {Promise} - Success */ loadSound(name: string, filePath: string): Promise; /** * Load music (streamed from disk) * * @param {string} name - Unique name for this music * @param {string} filePath - Path to audio file * @returns {Promise} - Success */ loadMusic(name: string, filePath: string): Promise; /** * Play sound effect * * @param {string} name - Sound name * @param {Object} options - { volume, pitch, loop } * @returns {boolean} - Success */ playSound(name: string, options?: any): boolean; /** * Play music with fade options * * @param {string} name - Music name * @param {Object} options - { fadeIn, loop, volume } * @returns {boolean} - Success */ playMusic(name: string, options?: any): boolean; /** * Stop music with fade out * * @param {string} name - Music name * @param {Object} options - { fadeOut } */ stopMusic(name: string, options?: any): void; /** * Pause music */ pauseMusic(name: any): void; /** * Resume music */ resumeMusic(name: any): void; /** * Play sound with 2D spatial positioning * * Volume falls off with distance from listener * * @param {string} name - Sound name * @param {number} x - Sound world X * @param {number} y - Sound world Y * @param {number} listenerX - Listener world X (camera/player) * @param {number} listenerY - Listener world Y */ playSoundAt(name: string, x: number, y: number, listenerX: number, listenerY: number): void; /** * Set master volume (affects all audio) */ setMasterVolume(volume: any): void; /** * Set SFX volume group */ setSFXVolume(volume: any): void; /** * Set music volume group */ setMusicVolume(volume: any): void; /** * Update volumes for all active audio */ updateAllVolumes(): void; /** * Create audio group for random variation * * Example: footsteps group contains step1, step2, step3 * * @param {string} groupName - Group name * @param {Array} soundNames - Sound names in group */ createGroup(groupName: string, soundNames: Array): void; /** * Play random sound from group */ playRandomFromGroup(groupName: any, options?: {}): boolean; /** * Update fade effects (call every frame) * * @param {number} delta - Time delta in seconds */ update(delta: number): void; /** * Check if sound is playing */ isSoundPlaying(name: any): any; /** * Check if music is playing */ isMusicPlaying(name: any): any; /** * Unload sound */ unloadSound(name: any): void; /** * Unload music */ unloadMusic(name: any): void; /** * Unload all audio */ unloadAll(): void; /** * Get audio statistics */ getStats(): { soundsLoaded: number; musicLoaded: number; activeSounds: number; musicPlaying: boolean; masterVolume: number; sfxVolume: number; musicVolume: number; }; } export const AudioManager: AudioManagerClass; /** * AudioPresets - common audio patterns */ export class AudioPresets { /** * UI sound pack */ static loadUIAudio(): Promise; /** * Player action sounds */ static loadPlayerAudio(): Promise; /** * Background music */ static loadMusicTracks(): Promise; }