API
🎧 Events
Expo Sonic emits several events during audio playback, which you can listen to for updates such as playback progress, status changes, media control actions, and more.
📦 Import
import { Events, PlayBackStatus } from "expo-sonic-ios-player";
📡 Events Enum
export enum Events {
OnProgress = "onProgress",
OnStatusChange = "onStatusChange",
OnPlaybackInfo = "onPlaybackInfo",
OnMediaControlEvent = "onMediaControlEvent",
}
Event Name | Callback Signature | Description |
---|---|---|
onProgress | (event: ProgressEvent) => void | Fired continuously with playback time updates. |
onStatusChange | (event: StatusEvent) => void | Fired when playback status changes. |
onPlaybackInfo | (event: PlaybackInfoEvent) => void | Emits metadata about the current playback. |
onMediaControlEvent | (event: string, payload?: Record<string, string>) => void | Handles events from external controls (e.g., lock screen, AirPods). |
🎛️ Playback Status Enum
export enum PlayBackStatus {
Error = "error",
Interrupted = "interrupted",
ResumedAfterInterruption = "resumed_after_interruption",
RouteChangedPaused = "route_changed_paused",
EndedInAvPlayer = "ended in av player",
ResumeErrorNoPlayer = "resume error no player",
ResumeErrorNoFile = "resume_error_no_file",
SessionError = "session_error",
Loading = "loading",
Ready = "ready",
Seeked = "seeked",
Ended = "ended",
}
Status Name | Description |
---|---|
error | Playback encountered an error. |
interrupted | Playback was interrupted by system events. |
resumed_after_interruption | Playback resumed after interruption. |
route_changed_paused | Playback paused due to route (e.g., headphones unplugged). |
ended in av player | Playback ended in the underlying AVPlayer. |
resume error no player | Could not resume because no player exists. |
resume_error_no_file | Failed to resume because the file was unavailable. |
session_error | Session initialization failed. |
loading | Audio is currently loading. |
ready | Player is ready to begin playback. |
seeked | Seek operation completed. |
ended | Playback reached the end of the track. |
🧠 Usage Example
import ExpoSonicPlayer, { Events } from "expo-sonic-ios-player";
ExpoSonicPlayer.addListener(Events.OnProgress, (event) => {
console.log("Progress:", event.positionMillis);
});
ExpoSonicPlayer.addListener(Events.OnStatusChange, (event) => {
console.log("Status:", event.status);
});
ExpoSonicPlayer.addListener(Events.OnPlaybackInfo, (event) => {
console.log("Playback Info:", event.title);
});
ExpoSonicPlayer.addListener(Events.OnMediaControlEvent, (event, payload) => {
console.log("Media Control:", event, payload);
});