Sonic Player
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 NameCallback SignatureDescription
onProgress(event: ProgressEvent) => voidFired continuously with playback time updates.
onStatusChange(event: StatusEvent) => voidFired when playback status changes.
onPlaybackInfo(event: PlaybackInfoEvent) => voidEmits metadata about the current playback.
onMediaControlEvent(event: string, payload?: Record<string, string>) => voidHandles 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 NameDescription
errorPlayback encountered an error.
interruptedPlayback was interrupted by system events.
resumed_after_interruptionPlayback resumed after interruption.
route_changed_pausedPlayback paused due to route (e.g., headphones unplugged).
ended in av playerPlayback ended in the underlying AVPlayer.
resume error no playerCould not resume because no player exists.
resume_error_no_fileFailed to resume because the file was unavailable.
session_errorSession initialization failed.
loadingAudio is currently loading.
readyPlayer is ready to begin playback.
seekedSeek operation completed.
endedPlayback 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);
});