UNPKG

@osobh/reactar

Version:

AR Library for React Native and Expo

72 lines (71 loc) 2.13 kB
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>; }