Skip to content

Audio Player API

The audioPlayer namespace provides playback commands, queue operations, state queries, and player event subscriptions.

interface AudioPlayerApi {
setup(options?: SetupOptions): Promise<void>;
add(options: AddOptions): Promise<PlaybackSnapshot>;
remove(options: RemoveOptions): Promise<PlaybackSnapshot>;
reset(): Promise<PlaybackSnapshot>;
play(): Promise<void>;
pause(): Promise<void>;
stop(): Promise<void>;
seekTo(options: SeekToOptions): Promise<void>;
skipTo(options: SkipToOptions): Promise<PlaybackSnapshot>;
skipToNext(): Promise<void>;
skipToPrevious(): Promise<void>;
getState(): Promise<PlaybackState>;
getPosition(): Promise<number>;
getDuration(): Promise<number | null>;
getCurrentTrack(): Promise<Track | null>;
getQueue(): Promise<QueueSnapshot>;
getSnapshot(): Promise<PlaybackSnapshot>;
getCapabilities(): Promise<BindingCapabilitiesSnapshot>;
addListener<E extends AudioPlayerEventName>(
eventName: E,
listener: AudioPlayerListener<E>
): Promise<BindingListenerHandle>;
removeAllListeners(): Promise<void>;
}

Initializes the native plugin. MUST be called before any other playback operations.

await audioPlayer.setup({
headerGroups: [
{
id: 'premium-us',
headers: { Authorization: 'Bearer shared-token' },
},
],
});

options is optional. If omitted, setup runs without shared header-group registration.

Parameters:

ParameterTypeRequiredDescription
headerGroupsHeaderGroup[]NoSetup-scoped shared static headers referenced later by Track.headerGroupId.

Returns: Promise<void>


Appends tracks to the playback queue.

const snapshot = await audioPlayer.add({
tracks: [
{ id: 'track-1', url: 'https://example.com/audio-1.mp3', title: 'Track One' },
{ id: 'track-2', url: 'https://example.com/audio-2.mp3', title: 'Track Two' },
],
startIndex: 0, // optional: position to activate after insertion
});

Parameters:

ParameterTypeRequiredDescription
tracksTrack[]YesTracks to append in insertion order.
startIndexnumberNoQueue index to activate after insertion.

Returns: Promise<PlaybackSnapshot>


Removes queue entries by ID or index.

// Remove by track ID
await audioPlayer.remove({ id: 'track-1' });
// Remove by index
await audioPlayer.remove({ index: 0 });

Parameters:

ParameterTypeRequiredDescription
idstringNoTrack identifier to remove.
indexnumberNoQueue index to remove.

Returns: Promise<PlaybackSnapshot>


Clears the queue and stops playback.

await audioPlayer.reset();

Returns: Promise<PlaybackSnapshot>


Starts or resumes playback.

await audioPlayer.play();

Returns: Promise<void>


Pauses playback.

await audioPlayer.pause();

Returns: Promise<void>


Stops playback and resets position.

await audioPlayer.stop();

Returns: Promise<void>


Seeks to a specific position.

await audioPlayer.seekTo({ position: 30.5 }); // 30.5 seconds

Parameters:

ParameterTypeRequiredDescription
positionnumberYesTarget playback position in seconds.

Returns: Promise<void>


Skips to a specific queue index.

const snapshot = await audioPlayer.skipTo({ index: 2 });

Parameters:

ParameterTypeRequiredDescription
indexnumberYesQueue index to activate.

Returns: Promise<PlaybackSnapshot>


Skips to the next track in the queue.

await audioPlayer.skipToNext();

Returns: Promise<void>


Skips to the previous track in the queue.

await audioPlayer.skipToPrevious();

Returns: Promise<void>


Queries the current playback state.

const state = await audioPlayer.getState();
// 'idle' | 'loading' | 'ready' | 'playing' | 'paused' | 'buffering' | 'ended' | 'error'

Returns: Promise<PlaybackState>


Queries the current playback position in seconds.

const position = await audioPlayer.getPosition();

Returns: Promise<number>


Queries the current track duration.

const duration = await audioPlayer.getDuration();
// number | null (null for live/unknown duration)

Returns: Promise<number | null>


Queries the active track.

const track = await audioPlayer.getCurrentTrack();

Returns: Promise<Track | null>


Queries the current queue state.

const queue = await audioPlayer.getQueue();

Returns: Promise<QueueSnapshot>


Queries the complete playback state.

const snapshot = await audioPlayer.getSnapshot();

Returns: Promise<PlaybackSnapshot>


Queries runtime-supported capabilities.

const caps = await audioPlayer.getCapabilities();
// { supported: ['play', 'pause', 'stop', 'seek', 'skip-next', 'skip-previous'] }

Returns: Promise<BindingCapabilitiesSnapshot>


Registers a listener for player lifecycle events.

const handle = await audioPlayer.addListener('playback-state-changed', (payload) => {
console.log('State changed:', payload.state);
});
// Remove listener when done
await handle.remove();

Parameters:

ParameterTypeRequiredDescription
eventNameAudioPlayerEventNameYesEvent to subscribe to.
listenerAudioPlayerListener<E>YesCallback with typed payload.

Returns: Promise<BindingListenerHandle>


Removes all registered player listeners.

await audioPlayer.removeAllListeners();

Returns: Promise<void>


interface AddOptions {
tracks: Track[];
startIndex?: number;
}
interface SetupOptions {
headerGroups?: HeaderGroup[];
}
interface HeaderGroup {
id: string;
headers: Record<string, string>;
}
interface RemoveOptions {
id?: string;
index?: number;
}
interface SeekToOptions {
position: number;
}
interface SkipToOptions {
index: number;
}
interface BindingCapabilitiesSnapshot {
supported: Capability[];
}
interface BindingListenerHandle {
remove(): Promise<void> | void;
}