import { Audio } from 'expo-av';
import { EventEmitter } from 'events';
import { Vector3 } from 'three';
export interface AudioSource {
    id: string;
    sound: Audio.Sound;
    position: Vector3;
    maxDistance?: number;
    refDistance?: number;
    rolloffFactor?: number;
}
export interface AudioOptions {
    maxDistance?: number;
    refDistance?: number;
    rolloffFactor?: number;
    loop?: boolean;
    volume?: number;
}
export declare class AudioManager extends EventEmitter {
    private audioSources;
    private listenerPosition;
    private isInitialized;
    constructor();
    /**
     * Initializes the audio system
     */
    initialize(): Promise<void>;
    /**
     * Loads and creates a spatial audio source
     * @param id Unique identifier for the audio source
     * @param uri URI of the audio file to load
     * @param position Initial 3D position of the audio source
     * @param options Audio options
     */
    createAudioSource(id: string, uri: string, position: Vector3, options?: AudioOptions): Promise<void>;
    /**
     * Updates the position of an audio source
     * @param id Audio source identifier
     * @param position New position
     */
    updateSourcePosition(id: string, position: Vector3): void;
    /**
     * Updates the listener's position (usually the camera/user position)
     * @param position New listener position
     */
    updateListenerPosition(position: Vector3): void;
    /**
     * Plays an audio source
     * @param id Audio source identifier
     */
    playSource(id: string): Promise<void>;
    /**
     * Stops an audio source
     * @param id Audio source identifier
     */
    stopSource(id: string): Promise<void>;
    /**
     * Removes an audio source and cleans up its resources
     * @param id Audio source identifier
     */
    removeSource(id: string): Promise<void>;
    /**
     * Updates the volume of an audio source based on its distance from the listener
     * @param source Audio source to update
     */
    private updateAudioSourceVolume;
    /**
     * Cleans up all audio resources
     */
    cleanup(): Promise<void>;
}
