-
Notifications
You must be signed in to change notification settings - Fork 5
4.1 Track Player Integration
Relevant source files
The following files were used as context for generating this wiki page:
This document covers the integration and configuration of react-native-track-player, the core audio engine that powers AudioScape's music playback functionality. It details the setup process, background service configuration, and event handling mechanisms that enable continuous audio playback with media controls.
For information about the higher-level music player context that orchestrates playback logic, see Music Player Context. For details about the UI components that display player controls, see Player Interface.
The track player setup is handled through the useSetupTrackPlayer hook, which ensures the audio engine is properly configured when the application starts. This hook initializes the player with specific capabilities, cache settings, and platform-specific behaviors.
graph TD
App["App Startup"] --> useSetup["useSetupTrackPlayer Hook"]
useSetup --> setupPlayer["setupPlayer Function"]
setupPlayer --> init["TrackPlayer.setupPlayer()"]
setupPlayer --> options["TrackPlayer.updateOptions()"]
setupPlayer --> volume["TrackPlayer.setVolume()"]
setupPlayer --> repeat["TrackPlayer.setRepeatMode()"]
init --> cache["Cache Configuration<br/>maxCacheSize: 1024 * 10"]
options --> android["Android Settings<br/>AppKilledPlaybackBehavior"]
options --> icon["Notification Icon<br/>transparent-icon.png"]
options --> intervals["Jump Intervals<br/>forwardJumpInterval: 10<br/>backwardJumpInterval: 10"]
options --> rating["Rating Type<br/>RatingType.Heart"]
options --> capabilities["Player Capabilities<br/>Play, Pause, SkipToNext, etc."]
volume --> vol["Volume: 1.0"]
repeat --> mode["RepeatMode.Off"]
setupPlayer --> callback["onLoad Callback"]
Track Player Capabilities Configuration
| Capability | Purpose |
|---|---|
Capability.Play |
Enable play control |
Capability.Pause |
Enable pause control |
Capability.SkipToNext |
Enable next track navigation |
Capability.SkipToPrevious |
Enable previous track navigation |
Capability.Stop |
Enable stop control |
Capability.SeekTo |
Enable seeking to specific positions |
Capability.JumpForward |
Enable 10-second forward jumps |
Capability.JumpBackward |
Enable 10-second backward jumps |
The setup process includes specific Android configuration for handling app termination behavior, where playback stops and notifications are removed when the app is killed.
Sources: hooks/useSetupTrackPlayer.tsx:21-57
The background playback service enables music to continue playing when the app is backgrounded or when users interact with media controls from the lock screen, notification panel, or connected devices.
graph LR
subgraph "Remote Controls"
LockScreen["Lock Screen Controls"]
Notification["Notification Controls"]
Headphones["Headphone Controls"]
CarPlay["Car Play / Android Auto"]
end
subgraph "Background Service"
Service["playbackService Function"]
PlayEvent["Event.RemotePlay"]
PauseEvent["Event.RemotePause"]
StopEvent["Event.RemoteStop"]
NextEvent["Event.RemoteNext"]
PrevEvent["Event.RemotePrevious"]
SeekEvent["Event.RemoteSeek"]
JumpFwdEvent["Event.RemoteJumpForward"]
JumpBackEvent["Event.RemoteJumpBackward"]
end
subgraph "Track Player Actions"
PlayAction["TrackPlayer.play()"]
PauseAction["TrackPlayer.pause()"]
StopAction["TrackPlayer.stop()"]
NextAction["TrackPlayer.skipToNext()"]
PrevAction["TrackPlayer.skipToPrevious()"]
SeekAction["TrackPlayer.seekTo()"]
SeekByAction["TrackPlayer.seekBy()"]
end
LockScreen --> Service
Notification --> Service
Headphones --> Service
CarPlay --> Service
Service --> PlayEvent
Service --> PauseEvent
Service --> StopEvent
Service --> NextEvent
Service --> PrevEvent
Service --> SeekEvent
Service --> JumpFwdEvent
Service --> JumpBackEvent
PlayEvent --> PlayAction
PauseEvent --> PauseAction
StopEvent --> StopAction
NextEvent --> NextAction
PrevEvent --> PrevAction
SeekEvent --> SeekAction
JumpFwdEvent --> SeekByAction
JumpBackEvent --> SeekByAction
The background service maps remote control events directly to TrackPlayer actions, enabling seamless control from any media interface on the device.
Sources: constants/playbackService.ts:15-55
AudioScape includes event monitoring capabilities for tracking player state changes and diagnosing playback issues during development.
Key Event Types Monitored
| Event | Purpose | Handler Action |
|---|---|---|
Event.PlaybackState |
Track playback state changes | Log current state |
Event.PlaybackError |
Detect playback failures | Log error details |
Event.PlaybackActiveTrackChanged |
Monitor track transitions | Log track index |
graph TD
TrackPlayer["react-native-track-player"] --> Events["Track Player Events"]
Events --> StateChange["Event.PlaybackState"]
Events --> Error["Event.PlaybackError"]
Events --> TrackChange["Event.PlaybackActiveTrackChanged"]
StateChange --> LogState["console.log(event.state)"]
Error --> LogError["console.warn(event)"]
TrackChange --> LogTrack["console.log(event.index)"]
subgraph "useLogTrackPlayerState Hook"
useTrackPlayerEvents["useTrackPlayerEvents(events, callback)"]
EventSwitch["Event Type Switch"]
end
Events --> useTrackPlayerEvents
useTrackPlayerEvents --> EventSwitch
EventSwitch --> LogState
EventSwitch --> LogError
EventSwitch --> LogTrack
The useLogTrackPlayerState hook provides real-time visibility into player behavior, which is essential for debugging complex playback scenarios and ensuring smooth user experience.
Sources: hooks/useLogTrackPlayerState.tsx:12-40
The track player integration connects with several key application systems to provide a complete music experience.
System Integration Overview
| Integration Point | Purpose | Implementation |
|---|---|---|
| App Initialization | Setup track player on startup |
useSetupTrackPlayer hook |
| Background Service | Handle remote controls |
playbackService function registration |
| State Monitoring | Debug and track events |
useLogTrackPlayerState hook |
| Context Management | Bridge to higher-level logic | Used by MusicPlayerContext |
graph TB
subgraph "Application Layer"
AppStart["App Startup"]
RootLayout["Root Layout Component"]
end
subgraph "Track Player Integration"
SetupHook["useSetupTrackPlayer"]
LogHook["useLogTrackPlayerState"]
BackgroundSvc["playbackService"]
end
subgraph "Track Player Core"
TPSetup["TrackPlayer.setupPlayer()"]
TPOptions["TrackPlayer.updateOptions()"]
TPEvents["TrackPlayer Events"]
TPControls["TrackPlayer Controls"]
end
subgraph "Higher Level Systems"
MusicContext["MusicPlayerContext"]
PlayerUI["Player UI Components"]
end
AppStart --> RootLayout
RootLayout --> SetupHook
RootLayout --> LogHook
SetupHook --> TPSetup
SetupHook --> TPOptions
LogHook --> TPEvents
BackgroundSvc --> TPEvents
TPEvents --> TPControls
TPControls --> MusicContext
MusicContext --> PlayerUI
TPSetup -.->|"Enables"| BackgroundSvc
The track player serves as the foundational audio engine that enables all music playback functionality in AudioScape, from basic play/pause controls to advanced features like queue management and background playback.
Sources: hooks/useSetupTrackPlayer.tsx:64-81, constants/playbackService.ts:9-55, hooks/useLogTrackPlayerState.tsx:22-40