import type { RemoteAudioTrack } from "livekit-client"; import type { FormatConfig } from "./utils/BaseConnection.js"; import type { VolumeProvider } from "./utils/volumeProvider.js"; /** * Result of setting up volume analysis (input or output). */ export type AnalysisResult = { volumeProvider: VolumeProvider; /** AnalyserNode on web; undefined on other platforms. */ analyser?: unknown; }; /** * Abstracts platform-specific audio behaviour used by WebRTCConnection. * * - **Web:** AudioContext, HTMLAudioElement, AudioWorkletNode * - **React Native:** no-op (LiveKit handles playback natively; * volume comes from `setInputVolumeProvider`/`setOutputVolumeProvider`) * - **Default (no adapter):** NO_VOLUME, no playback setup */ export interface WebRTCAudioAdapter { /** * Attach a remote audio track for playback. * Web: creates HTMLAudioElement via `track.attach()` and appends to DOM. */ attachRemoteTrack(track: RemoteAudioTrack, outputDeviceId: string | null): Promise; /** * Set up input volume analysis from the local mic MediaStreamTrack. * Called once after mic is enabled and again after input device switches. * Implementations must clean up previous resources on re-call. */ setupInputAnalysis(mediaStreamTrack: MediaStreamTrack): AnalysisResult; /** * Set up output volume analysis and raw audio capture from a remote track. * @param onAudioData Called with captured audio data for the `onAudio` callback. */ setupOutputAnalysis(track: RemoteAudioTrack, format: FormatConfig, onAudioData: (audioData: ArrayBuffer, maxVolume: number) => void): Promise; /** Set playback volume (0-1) for all managed audio elements. */ setVolume(volume: number): void; /** Route audio output to the specified device. */ setOutputDevice(deviceId: string): Promise; /** Release all resources (AudioContexts, audio elements, etc.). */ cleanup(): void; } /** * Register a factory that creates a {@link WebRTCAudioAdapter} for each * new WebRTC connection. Called by platform-specific entrypoints * (e.g. `platform/web/index.ts`). */ export declare function setWebRTCAudioAdapterFactory(factory: () => WebRTCAudioAdapter): void; /** @internal Create an adapter using the registered factory, or null. */ export declare function createAudioAdapter(): WebRTCAudioAdapter | null; //# sourceMappingURL=WebRTCAudioAdapter.d.ts.map