Skip to main content

Getting Started

This guide will help you set up React Track Player Web and implement basic audio playback functionality in your application.

Basic Setup​

Before you can use any of the player's features, you need to set up the player. This is typically done when your app initializes.

import TrackPlayer from "react-track-player-web"

// In your app initialization
async function setupAudioPlayer() {
await TrackPlayer.setupPlayer({
// Configuration options
updateInterval: 1, // Progress updates every 1 second
useMediaSession: true // Enable system media controls
})
}

setupAudioPlayer()

Adding Tracks​

After setting up the player, you can add tracks to the queue:

// Add a single track
await TrackPlayer.add({
url: "https://example.com/audio.mp3", // Required
title: "Track Title", // Required
artist: "Artist Name",
album: "Album Name",
artwork: "https://example.com/artwork.jpg",
duration: 183 // Duration in seconds (optional)
})

// Add multiple tracks at once
await TrackPlayer.add([
{
url: "https://example.com/track1.mp3",
title: "First Track",
artist: "Various Artists"
},
{
url: "https://example.com/track2.mp3",
title: "Second Track",
artist: "Various Artists"
}
])

Basic Controls​

Once you've added tracks, you can control playback:

// Start playback
await TrackPlayer.play()

// Pause playback
await TrackPlayer.pause()

// Skip to next track
await TrackPlayer.skipToNext()

// Skip to previous track
await TrackPlayer.skipToPrevious()

// Seek to position (in seconds)
await TrackPlayer.seekTo(30)

// Adjust volume (0 to 1)
await TrackPlayer.setVolume(0.5)

Handling Events​

You can listen for various playback events:

import { Event } from "react-track-player-web"

// Listen for state changes
TrackPlayer.addEventListener(Event.PlaybackState, (event) => {
console.log("Playback state changed to:", event.state)
})

// Listen for track changes
TrackPlayer.addEventListener(Event.PlaybackTrackChanged, (event) => {
console.log("Current track changed from", event.prevTrack, "to", event.nextTrack)
})

// Listen for playback progress updates
TrackPlayer.addEventListener(Event.PlaybackProgressUpdated, (event) => {
console.log("Progress:", event.position, "of", event.duration)
console.log("Buffered:", event.buffered)
})

// Listen for errors
TrackPlayer.addEventListener(Event.PlaybackError, (event) => {
console.error("Error:", event.error)
})

Using with React Components​

For React components, it's recommended to use the provided hooks for better integration:

import React from "react"
import { usePlaybackState, useProgress, useActiveTrack, State } from "react-track-player-web"

function Player() {
const playbackState = usePlaybackState()
const { position, duration } = useProgress(500) // Update every 500ms
const track = useActiveTrack()

// Calculate progress percentage
const progress = position && duration ? (position / duration) * 100 : 0

// Format time (mm:ss)
const formatTime = (seconds) => {
const min = Math.floor(seconds / 60)
const sec = Math.floor(seconds % 60)
return `${min}:${sec < 10 ? "0" : ""}${sec}`
}

return (
<div className="player">
{track && (
<div className="track-info">
<h3>{track.title}</h3>
<p>{track.artist}</p>
</div>
)}

<div className="progress-bar">
<div className="progress" style={{ width: `${progress}%` }} />
</div>

<div className="time">
{formatTime(position)} / {formatTime(duration)}
</div>

<div className="controls">
<button onClick={() => TrackPlayer.skipToPrevious()}>Previous</button>

<button
onClick={() => {
if (playbackState === State.Playing) {
TrackPlayer.pause()
} else {
TrackPlayer.play()
}
}}
>
{playbackState === State.Playing ? "Pause" : "Play"}
</button>

<button onClick={() => TrackPlayer.skipToNext()}>Next</button>
</div>
</div>
)
}

Cleaning Up​

When your app or component unmounts, you should clean up the player:

// Clear the queue but keep the player
await TrackPlayer.reset()

// Completely destroy the player and release resources
await TrackPlayer.destroy()

By following these steps, you should have a basic implementation of React Track Player Web in your application. For more advanced usage, check out the API reference sections.