import { PlayOptions } from './play-sound-options.interface';
import { SoundEvent } from './sound-event.interface';
import { SoundEventsEnum } from './sound-events.enum';
import { SoundGroup } from './sound-group';
import { SoundManagerConfig } from './sound-manager-config';
import { SoundPannerConfig } from './sound-panner-config';
import { SoundResetOptions } from './sound-reset-options.interface';
import { SoundStateInfo } from './sound-state-info.interface';
import { Sound } from './sound.interface';
export interface SoundManagerInterface {
    play(id: string, options?: PlayOptions, skipDispatchEvent?: boolean): void;
    playSprite(id: string, spriteKey: string, options: PlayOptions, skipDispatchEvent?: boolean): void;
    pause(id: string, skipDispatchEvent?: boolean): void;
    resume(id: string, skipDispatchEvent?: boolean): void;
    stop(id: string, skipDispatchEvent?: boolean): void;
    seek(id: string, time: number, skipDispatchEvent?: boolean): void;
    stopAllSounds(): void;
    pauseAllSounds(): void;
    resumeAllSounds(): void;
    fadeIn(id: string, duration: number, startVolume?: number, endVolume?: number, skipDispatchEvent?: boolean): void;
    fadeOut(id: string, duration?: number, startVolume?: number, endVolume?: number, stopAfterFade?: boolean, skipDispatchEvent?: boolean): void;
    fadeGlobalIn(duration?: number, startVolume?: number, endVolume?: number): void;
    fadeGlobalOut(duration?: number, startVolume?: number, endVolume?: number): void;
    getVolume(id: string): number;
    setSoundVolume(id: string, volume: number, skipDispatchEvent?: boolean): void;
    getSoundVolume(id: string): number;
    setGlobalVolume(volume: number): void;
    getGlobalVolume(): number;
    muteAllSounds(): void;
    unmuteAllSounds(): void;
    mute(id: string): void;
    unmute(id: string): void;
    toggleMute(id: string): void;
    toggleGlobalMute(): void;
    setLoop(id: string, loop: boolean): void;
    getLoop(id: string): boolean;
    loadSounds(soundsToLoad: {
        id: string;
        url: string;
    }[], signal?: AbortSignal): Promise<void>;
    loadSound(id: string, url: string, signal?: AbortSignal): Promise<void>;
    updateSoundUrl(id: string, newUrl: string): Promise<void>;
    unloadSound(id: string): void;
    removeSound(id: string): void;
    isSoundLoaded(id: string): boolean;
    createSoundGroup(groupName: string, options: SoundGroup): void;
    addToSoundGroup(groupName: string, soundId: string): void;
    removeFromSoundGroup(groupName: string, soundId: string): void;
    getGroup(groupName: string): SoundGroup | undefined;
    removeSoundGroup(groupName: string): void;
    setSoundSprite(id: string, sprite: {
        [key: string]: [number, number];
    }): void;
    getSpriteConfig(id: string): {
        [key: string]: [number, number];
    } | undefined;
    removeSpriteSound(id: string): void;
    removeSpriteConfig(id: string): void;
    suspendContext(): Promise<void>;
    resumeContext(): Promise<void>;
    getContext(): AudioContext;
    getMasterOutput(): AudioNode;
    isPlaying(id: string): boolean;
    isPaused(id: string): boolean;
    isStopped(id: string): boolean;
    getSoundState(id: string): SoundStateInfo;
    getCurrentTime(id: string): number;
    getCurrentTime(id: string): number;
    getDuration(id: string): number;
    getProgress(id: string): number;
    getProgressPercentage(id: string): number;
    startProgressTracking(id: string): void;
    stopProgressTracking(id: string): void;
    setProgressUpdateInterval(interval: number): void;
    setPan(id: string, pan: number): void;
    removePan(id: string): void;
    setGlobalPan(value: number): void;
    getGlobalPan(): number;
    resetPan(id?: string): void;
    resetGlobalPan(): void;
    cleanupGlobalPan(): void;
    isStereoPanActive(id: string): boolean;
    isSpatialAudioEnabled(): boolean;
    isSpatialAudioSupported(): boolean;
    setSpatialPosition(x: number, y: number, z: number, soundId?: string | null, soundPannerConfig?: SoundPannerConfig, skipDispatchEvent?: boolean): void;
    getSpatialPosition(soundId: string): {
        x: number;
        y: number;
        z: number;
    } | null;
    setMasterSpatialPosition(x: number, y: number, z: number, config?: SoundPannerConfig, skipDispatchEvent?: boolean): void;
    getMasterSpatialPosition(): {
        x: number;
        y: number;
        z: number;
    } | null;
    removeSpatialEffect(id: string): void;
    isSpatialAudioActive(id: string): boolean;
    updatePannerConfigById(soundId: string, newConfig: Partial<SoundPannerConfig>): void;
    resetSpatialPosition(id: string): void;
    resetMasterSpatialPosition(): void;
    setPlaybackRate(id: string, rate: number): void;
    getPlaybackRate(id: string): number;
    reset(options?: SoundResetOptions): void;
    resetSound(id: string, options?: SoundResetOptions): void;
    getSound(id: string): Sound | undefined;
    getBuffer(id: string): AudioBuffer | undefined;
    getSource(id: string): AudioBufferSourceNode | undefined;
    getGainNode(id: string): GainNode | undefined;
    hasSound(id: string): boolean;
    updateSoundOptions(soundId: string, options: Partial<PlayOptions>): void;
    isReady(): boolean;
    getSoundCount(): number;
    getSoundIds(): string[];
    setDebugMode(debug: boolean): void;
    getConfig(): Readonly<SoundManagerConfig>;
    getLastError(): Error | null;
    roundValue(value: number, decimals: number): number;
    destroy(): void;
    addEventListener(type: SoundEventsEnum, callback: (event: SoundEvent) => void): void;
    removeEventListener(type: SoundEventsEnum, callback: (event: SoundEvent) => void): void;
    removeEventListenersForInstance(instanceId: string): void;
    dispatchEvent(event: SoundEvent): void;
    hasEventListener(type: SoundEventsEnum): boolean;
}
