sound-manager-ts
Version:
Lightweight TypeScript soundmanager for Web Audio API. Seamless audio control in web apps and games with full type safety and modern API
126 lines (125 loc) • 5.85 kB
TypeScript
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;
}