react-native-nitro-player 0.3.0-alpha.9 → 0.4.1-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +444 -4
- package/android/build.gradle +4 -1
- package/android/src/main/AndroidManifest.xml +16 -1
- package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridAndroidAutoMediaLibrary.kt +2 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridAudioDevices.kt +8 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridDownloadManager.kt +225 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridEqualizer.kt +105 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridPlayerQueue.kt +6 -6
- package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridTrackPlayer.kt +37 -12
- package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerCore.kt +944 -213
- package/android/src/main/java/com/margelo/nitro/nitroplayer/download/DownloadDatabase.kt +475 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/download/DownloadFileManager.kt +159 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/download/DownloadManagerCore.kt +489 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/download/DownloadWorker.kt +209 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/equalizer/EqualizerCore.kt +486 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/media/MediaBrowserService.kt +3 -1
- package/android/src/main/java/com/margelo/nitro/nitroplayer/media/MediaSessionManager.kt +14 -6
- package/android/src/main/java/com/margelo/nitro/nitroplayer/playlist/PlaylistManager.kt +27 -0
- package/ios/HybridDownloadManager.swift +226 -0
- package/ios/HybridEqualizer.swift +111 -0
- package/ios/HybridTrackPlayer.swift +36 -8
- package/ios/core/TrackPlayerCore.swift +996 -288
- package/ios/download/DownloadDatabase.swift +493 -0
- package/ios/download/DownloadFileManager.swift +241 -0
- package/ios/download/DownloadManagerCore.swift +923 -0
- package/ios/equalizer/EqualizerCore.swift +685 -0
- package/ios/media/MediaSessionManager.swift +40 -28
- package/ios/playlist/PlaylistManager.swift +40 -9
- package/ios/queue/HybridPlayerQueue.swift +33 -13
- package/lib/hooks/callbackManager.d.ts +18 -0
- package/lib/hooks/callbackManager.js +66 -0
- package/lib/hooks/downloadCallbackManager.d.ts +36 -0
- package/lib/hooks/downloadCallbackManager.js +108 -0
- package/lib/hooks/equalizerCallbackManager.d.ts +37 -0
- package/lib/hooks/equalizerCallbackManager.js +109 -0
- package/lib/hooks/index.d.ts +16 -0
- package/lib/hooks/index.js +10 -0
- package/lib/hooks/useActualQueue.d.ts +48 -0
- package/lib/hooks/useActualQueue.js +98 -0
- package/lib/hooks/useDownloadActions.d.ts +26 -0
- package/lib/hooks/useDownloadActions.js +117 -0
- package/lib/hooks/useDownloadProgress.d.ts +25 -0
- package/lib/hooks/useDownloadProgress.js +79 -0
- package/lib/hooks/useDownloadStorage.d.ts +19 -0
- package/lib/hooks/useDownloadStorage.js +60 -0
- package/lib/hooks/useDownloadedTracks.d.ts +25 -0
- package/lib/hooks/useDownloadedTracks.js +69 -0
- package/lib/hooks/useEqualizer.d.ts +25 -0
- package/lib/hooks/useEqualizer.js +124 -0
- package/lib/hooks/useEqualizerPresets.d.ts +22 -0
- package/lib/hooks/useEqualizerPresets.js +96 -0
- package/lib/hooks/useNowPlaying.js +32 -19
- package/lib/hooks/useOnChangeTrack.js +15 -12
- package/lib/hooks/useOnPlaybackProgressChange.js +2 -2
- package/lib/hooks/useOnPlaybackStateChange.js +16 -13
- package/lib/hooks/usePlaylist.d.ts +48 -0
- package/lib/hooks/usePlaylist.js +136 -0
- package/lib/index.d.ts +6 -0
- package/lib/index.js +6 -0
- package/lib/specs/DownloadManager.nitro.d.ts +152 -0
- package/lib/specs/DownloadManager.nitro.js +1 -0
- package/lib/specs/Equalizer.nitro.d.ts +43 -0
- package/lib/specs/Equalizer.nitro.js +1 -0
- package/lib/specs/TrackPlayer.nitro.d.ts +6 -2
- package/lib/types/DownloadTypes.d.ts +110 -0
- package/lib/types/DownloadTypes.js +1 -0
- package/lib/types/EqualizerTypes.d.ts +52 -0
- package/lib/types/EqualizerTypes.js +1 -0
- package/lib/types/PlayerQueue.d.ts +4 -0
- package/nitro.json +8 -0
- package/nitrogen/generated/android/NitroPlayer+autolinking.cmake +10 -1
- package/nitrogen/generated/android/NitroPlayerOnLoad.cpp +32 -2
- package/nitrogen/generated/android/c++/JCurrentPlayingType.hpp +65 -0
- package/nitrogen/generated/android/c++/JDownloadConfig.hpp +92 -0
- package/nitrogen/generated/android/c++/JDownloadError.hpp +71 -0
- package/nitrogen/generated/android/c++/JDownloadErrorReason.hpp +74 -0
- package/nitrogen/generated/android/c++/JDownloadProgress.hpp +79 -0
- package/nitrogen/generated/android/c++/JDownloadQueueStatus.hpp +81 -0
- package/nitrogen/generated/android/c++/JDownloadState.hpp +71 -0
- package/nitrogen/generated/android/c++/JDownloadStorageInfo.hpp +73 -0
- package/nitrogen/generated/android/c++/JDownloadTask.hpp +108 -0
- package/nitrogen/generated/android/c++/JDownloadedPlaylist.hpp +111 -0
- package/nitrogen/generated/android/c++/JDownloadedTrack.hpp +92 -0
- package/nitrogen/generated/android/c++/JEqualizerBand.hpp +69 -0
- package/nitrogen/generated/android/c++/JEqualizerPreset.hpp +78 -0
- package/nitrogen/generated/android/c++/JEqualizerState.hpp +91 -0
- package/nitrogen/generated/android/c++/JFunc_void_DownloadProgress.hpp +80 -0
- package/nitrogen/generated/android/c++/JFunc_void_DownloadedTrack.hpp +89 -0
- package/nitrogen/generated/android/c++/JFunc_void_TrackItem_std__optional_Reason_.hpp +2 -0
- package/nitrogen/generated/android/c++/JFunc_void_std__optional_std__variant_nitro__NullType__std__string__.hpp +81 -0
- package/nitrogen/generated/android/c++/JFunc_void_std__string_Playlist_std__optional_QueueOperation_.hpp +2 -0
- package/nitrogen/generated/android/c++/JFunc_void_std__string_std__string_DownloadState_std__optional_DownloadError_.hpp +83 -0
- package/nitrogen/generated/android/c++/JFunc_void_std__vector_EqualizerBand_.hpp +97 -0
- package/nitrogen/generated/android/c++/JFunc_void_std__vector_Playlist__std__optional_QueueOperation_.hpp +2 -0
- package/nitrogen/generated/android/c++/JGainRange.hpp +61 -0
- package/nitrogen/generated/android/c++/JHybridDownloadManagerSpec.cpp +470 -0
- package/nitrogen/generated/android/c++/JHybridDownloadManagerSpec.hpp +99 -0
- package/nitrogen/generated/android/c++/JHybridEqualizerSpec.cpp +204 -0
- package/nitrogen/generated/android/c++/JHybridEqualizerSpec.hpp +82 -0
- package/nitrogen/generated/android/c++/JHybridPlayerQueueSpec.cpp +2 -0
- package/nitrogen/generated/android/c++/JHybridTrackPlayerSpec.cpp +117 -15
- package/nitrogen/generated/android/c++/JHybridTrackPlayerSpec.hpp +6 -2
- package/nitrogen/generated/android/c++/JPlaybackSource.hpp +62 -0
- package/nitrogen/generated/android/c++/JPlayerState.hpp +11 -3
- package/nitrogen/generated/android/c++/JPlaylist.hpp +2 -0
- package/nitrogen/generated/android/c++/JPresetType.hpp +59 -0
- package/nitrogen/generated/android/c++/JStorageLocation.hpp +59 -0
- package/nitrogen/generated/android/c++/JTrackItem.hpp +9 -3
- package/nitrogen/generated/android/c++/JTrackPlayerState.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_Double.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_Double.hpp +69 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_DownloadError.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_DownloadError.hpp +74 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_DownloadTask.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_DownloadTask.hpp +84 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_DownloadedPlaylist.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_DownloadedPlaylist.hpp +85 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_DownloadedTrack.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_DownloadedTrack.hpp +80 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_Playlist.hpp +2 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_TrackItem.hpp +2 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/CurrentPlayingType.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadConfig.kt +59 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadError.kt +47 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadErrorReason.kt +26 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadProgress.kt +53 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadQueueStatus.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadState.kt +25 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadStorageInfo.kt +50 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadTask.kt +65 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadedPlaylist.kt +53 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/DownloadedTrack.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/EqualizerBand.kt +47 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/EqualizerPreset.kt +44 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/EqualizerState.kt +44 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Func_void_DownloadProgress.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Func_void_DownloadedTrack.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Func_void_std__optional_std__variant_nitro__NullType__std__string__.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Func_void_std__string_std__string_DownloadState_std__optional_DownloadError_.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Func_void_std__vector_EqualizerBand_.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/GainRange.kt +41 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridDownloadManagerSpec.kt +210 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridEqualizerSpec.kt +141 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridTrackPlayerSpec.kt +19 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/PlaybackSource.kt +22 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/PlayerState.kt +6 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/PresetType.kt +21 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/StorageLocation.kt +21 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/TrackItem.kt +7 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/TrackPlayerState.kt +2 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_Double.kt +59 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_DownloadError.kt +59 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_DownloadTask.kt +59 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_DownloadedPlaylist.kt +59 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Variant_NullType_DownloadedTrack.kt +59 -0
- package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Bridge.cpp +138 -8
- package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Bridge.hpp +1046 -121
- package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Umbrella.hpp +66 -0
- package/nitrogen/generated/ios/NitroPlayerAutolinking.mm +16 -0
- package/nitrogen/generated/ios/NitroPlayerAutolinking.swift +30 -0
- package/nitrogen/generated/ios/c++/HybridDownloadManagerSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridDownloadManagerSpecSwift.hpp +386 -0
- package/nitrogen/generated/ios/c++/HybridEqualizerSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridEqualizerSpecSwift.hpp +223 -0
- package/nitrogen/generated/ios/c++/HybridPlayerQueueSpecSwift.hpp +1 -0
- package/nitrogen/generated/ios/c++/HybridTrackPlayerSpecSwift.hpp +46 -6
- package/nitrogen/generated/ios/swift/CurrentPlayingType.swift +48 -0
- package/nitrogen/generated/ios/swift/DownloadConfig.swift +270 -0
- package/nitrogen/generated/ios/swift/DownloadError.swift +69 -0
- package/nitrogen/generated/ios/swift/DownloadErrorReason.swift +60 -0
- package/nitrogen/generated/ios/swift/DownloadProgress.swift +91 -0
- package/nitrogen/generated/ios/swift/DownloadQueueStatus.swift +102 -0
- package/nitrogen/generated/ios/swift/DownloadState.swift +56 -0
- package/nitrogen/generated/ios/swift/DownloadStorageInfo.swift +80 -0
- package/nitrogen/generated/ios/swift/DownloadTask.swift +315 -0
- package/nitrogen/generated/ios/swift/DownloadedPlaylist.swift +103 -0
- package/nitrogen/generated/ios/swift/DownloadedTrack.swift +147 -0
- package/nitrogen/generated/ios/swift/EqualizerBand.swift +69 -0
- package/nitrogen/generated/ios/swift/EqualizerPreset.swift +70 -0
- package/nitrogen/generated/ios/swift/EqualizerState.swift +115 -0
- package/nitrogen/generated/ios/swift/Func_void.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_DownloadProgress.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_DownloadStorageInfo.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_DownloadedTrack.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_PlayerState.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_bool.swift +5 -5
- package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_std__optional_std__variant_nitro__NullType__std__string__.swift +66 -0
- package/nitrogen/generated/ios/swift/Func_void_std__string.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_std__string_std__string_DownloadState_std__optional_DownloadError_.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_EqualizerBand_.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_TrackItem_.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_std__string_.swift +47 -0
- package/nitrogen/generated/ios/swift/GainRange.swift +47 -0
- package/nitrogen/generated/ios/swift/HybridDownloadManagerSpec.swift +90 -0
- package/nitrogen/generated/ios/swift/HybridDownloadManagerSpec_cxx.swift +705 -0
- package/nitrogen/generated/ios/swift/HybridEqualizerSpec.swift +73 -0
- package/nitrogen/generated/ios/swift/HybridEqualizerSpec_cxx.swift +396 -0
- package/nitrogen/generated/ios/swift/HybridTrackPlayerSpec.swift +6 -2
- package/nitrogen/generated/ios/swift/HybridTrackPlayerSpec_cxx.swift +105 -8
- package/nitrogen/generated/ios/swift/PlaybackSource.swift +44 -0
- package/nitrogen/generated/ios/swift/PlayerState.swift +13 -2
- package/nitrogen/generated/ios/swift/PresetType.swift +40 -0
- package/nitrogen/generated/ios/swift/StorageLocation.swift +40 -0
- package/nitrogen/generated/ios/swift/TrackItem.swift +31 -1
- package/nitrogen/generated/ios/swift/TrackPlayerState.swift +4 -4
- package/nitrogen/generated/ios/swift/Variant_NullType_Double.swift +18 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_DownloadError.swift +18 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_DownloadTask.swift +18 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_DownloadedPlaylist.swift +18 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_DownloadedTrack.swift +18 -0
- package/nitrogen/generated/shared/c++/CurrentPlayingType.hpp +84 -0
- package/nitrogen/generated/shared/c++/DownloadConfig.hpp +108 -0
- package/nitrogen/generated/shared/c++/DownloadError.hpp +89 -0
- package/nitrogen/generated/shared/c++/DownloadErrorReason.hpp +96 -0
- package/nitrogen/generated/shared/c++/DownloadProgress.hpp +97 -0
- package/nitrogen/generated/shared/c++/DownloadQueueStatus.hpp +99 -0
- package/nitrogen/generated/shared/c++/DownloadState.hpp +92 -0
- package/nitrogen/generated/shared/c++/DownloadStorageInfo.hpp +91 -0
- package/nitrogen/generated/shared/c++/DownloadTask.hpp +122 -0
- package/nitrogen/generated/shared/c++/DownloadedPlaylist.hpp +101 -0
- package/nitrogen/generated/shared/c++/DownloadedTrack.hpp +107 -0
- package/nitrogen/generated/shared/c++/EqualizerBand.hpp +87 -0
- package/nitrogen/generated/shared/c++/EqualizerPreset.hpp +86 -0
- package/nitrogen/generated/shared/c++/EqualizerState.hpp +89 -0
- package/nitrogen/generated/shared/c++/GainRange.hpp +79 -0
- package/nitrogen/generated/shared/c++/HybridDownloadManagerSpec.cpp +55 -0
- package/nitrogen/generated/shared/c++/HybridDownloadManagerSpec.hpp +134 -0
- package/nitrogen/generated/shared/c++/HybridEqualizerSpec.cpp +38 -0
- package/nitrogen/generated/shared/c++/HybridEqualizerSpec.hpp +95 -0
- package/nitrogen/generated/shared/c++/HybridTrackPlayerSpec.cpp +4 -0
- package/nitrogen/generated/shared/c++/HybridTrackPlayerSpec.hpp +11 -5
- package/nitrogen/generated/shared/c++/PlaybackSource.hpp +80 -0
- package/nitrogen/generated/shared/c++/PlayerState.hpp +9 -2
- package/nitrogen/generated/shared/c++/PresetType.hpp +76 -0
- package/nitrogen/generated/shared/c++/StorageLocation.hpp +76 -0
- package/nitrogen/generated/shared/c++/TrackItem.hpp +7 -2
- package/nitrogen/generated/shared/c++/TrackPlayerState.hpp +5 -5
- package/package.json +1 -1
- package/src/hooks/callbackManager.ts +87 -0
- package/src/hooks/downloadCallbackManager.ts +149 -0
- package/src/hooks/equalizerCallbackManager.ts +138 -0
- package/src/hooks/index.ts +23 -0
- package/src/hooks/useActualQueue.ts +116 -0
- package/src/hooks/useDownloadActions.ts +179 -0
- package/src/hooks/useDownloadProgress.ts +126 -0
- package/src/hooks/useDownloadStorage.ts +84 -0
- package/src/hooks/useDownloadedTracks.ts +138 -0
- package/src/hooks/useEqualizer.ts +173 -0
- package/src/hooks/useEqualizerPresets.ts +140 -0
- package/src/hooks/useNowPlaying.ts +33 -20
- package/src/hooks/useOnChangeTrack.ts +15 -11
- package/src/hooks/useOnPlaybackProgressChange.ts +2 -2
- package/src/hooks/useOnPlaybackStateChange.ts +19 -15
- package/src/hooks/usePlaylist.ts +161 -0
- package/src/index.ts +12 -0
- package/src/specs/DownloadManager.nitro.ts +203 -0
- package/src/specs/Equalizer.nitro.ts +69 -0
- package/src/specs/TrackPlayer.nitro.ts +6 -2
- package/src/types/DownloadTypes.ts +135 -0
- package/src/types/EqualizerTypes.ts +72 -0
- package/src/types/PlayerQueue.ts +9 -0
package/README.md
CHANGED
|
@@ -18,6 +18,91 @@ Make sure you have these installed:
|
|
|
18
18
|
npm install react-native-nitro-modules
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
+
## API Reference
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
### React Hooks
|
|
25
|
+
|
|
26
|
+
| Name | Platform | Description |
|
|
27
|
+
| ----------------------------- | -------- | ------------------------------------------------------------------------------- |
|
|
28
|
+
| `useOnChangeTrack` | Both | Returns current track and change reason. Updates automatically. |
|
|
29
|
+
| `useOnPlaybackStateChange` | Both | Returns current playback state (playing/paused) and change reason. |
|
|
30
|
+
| `useOnPlaybackProgressChange` | Both | Returns real-time playback progress, duration, and seek status. |
|
|
31
|
+
| `useOnSeek` | Both | Returns information about the last seek event (position/duration). |
|
|
32
|
+
| `useNowPlaying` | Both | Returns complete player state (track, state, duration, playlist) in one object. |
|
|
33
|
+
| `useActualQueue` | Both | Returns the efficient playback queue including temporary tracks. |
|
|
34
|
+
| `usePlaylist` | Both | Manages playlist state, providing access to all playlists and tracks. |
|
|
35
|
+
| `useEqualizer` | Both | Controls the 5-band equalizer, including presets and individual band gains. |
|
|
36
|
+
| `useAndroidAutoConnection` | Both | Monitors Android Auto connection status. |
|
|
37
|
+
| `useAudioDevices` | Android | Returns list of available audio output devices. |
|
|
38
|
+
| `useDownloadProgress` | Both | Tracks download progress for tracks. Returns progress map and overall status. |
|
|
39
|
+
| `useDownloadedTracks` | Both | Returns all downloaded tracks and playlists with query helpers. |
|
|
40
|
+
|
|
41
|
+
### TrackPlayer Methods
|
|
42
|
+
|
|
43
|
+
| Name | Platform | Description |
|
|
44
|
+
| --------------------------- | -------- | ------------------------------------------------------------------- |
|
|
45
|
+
| `play()` | Both | Resumes playback. |
|
|
46
|
+
| `pause()` | Both | Pauses playback. |
|
|
47
|
+
| `playSong(id, playlistId?)` | Both | **Async**. Plays a specific song, optionally from a playlist. |
|
|
48
|
+
| `skipToNext()` | Both | Skips to the next track in the queue. |
|
|
49
|
+
| `skipToPrevious()` | Both | Skips to the previous track. |
|
|
50
|
+
| `seek(position)` | Both | Seeks to a specific time position in seconds. |
|
|
51
|
+
| `setVolume(0-100)` | Both | Sets playback volume (0-100). |
|
|
52
|
+
| `setRepeatMode(mode)` | Both | Sets repeat mode (`off`, `track`, `Playlist`). |
|
|
53
|
+
| `addToUpNext(id)` | Both | **Async**. Adds a track to the "up next" queue (FIFO). |
|
|
54
|
+
| `playNext(id)` | Both | **Async**. Adds a track to the "play next" stack (LIFO). |
|
|
55
|
+
| `getActualQueue()` | Both | **Async**. Gets the full playback queue including temporary tracks. |
|
|
56
|
+
| `getState()` | Both | **Async**. Gets the current player state immediately. |
|
|
57
|
+
| `skipToIndex(index)` | Both | **Async**. Skips to a specific index in the actual queue. |
|
|
58
|
+
| `configure(config)` | Both | Configures player settings (Android Auto, etc.). |
|
|
59
|
+
| `isAndroidAutoConnected()` | Both | Checks if Android Auto is currently connected. |
|
|
60
|
+
|
|
61
|
+
### PlayerQueue Methods
|
|
62
|
+
|
|
63
|
+
| Name | Platform | Description |
|
|
64
|
+
| --------------------------------------- | -------- | ------------------------------------------------------- |
|
|
65
|
+
| `createPlaylist(name, ...)` | Both | Creates a new playlist. Returns ID. |
|
|
66
|
+
| `deletePlaylist(id)` | Both | Deletes a playlist by ID. |
|
|
67
|
+
| `updatePlaylist(id, ...)` | Both | Updates playlist metadata (name, description, artwork). |
|
|
68
|
+
| `getPlaylist(id)` | Both | Gets a specific playlist object. |
|
|
69
|
+
| `getAllPlaylists()` | Both | Gets all available playlists. |
|
|
70
|
+
| `loadPlaylist(id)` | Both | Loads a playlist for playback. |
|
|
71
|
+
| `getCurrentPlaylistId()` | Both | Gets the ID of the currently playing playlist. |
|
|
72
|
+
| `addTrackToPlaylist(pid, track)` | Both | Adds a track to a playlist. |
|
|
73
|
+
| `addTracksToPlaylist(pid, tracks)` | Both | Adds multiple tracks to a playlist. |
|
|
74
|
+
| `removeTrackFromPlaylist(pid, tid)` | Both | Removes a track from a playlist. |
|
|
75
|
+
| `reorderTrackInPlaylist(pid, tid, idx)` | Both | Moves a track to a new position in the playlist. |
|
|
76
|
+
|
|
77
|
+
### Platform-Specific APIs
|
|
78
|
+
|
|
79
|
+
| Name | Platform | Description |
|
|
80
|
+
| ---------------------------------------- | -------- | ------------------------------------------------- |
|
|
81
|
+
| `AudioDevices.getAudioDevices()` | Android | Returns list of available audio devices. |
|
|
82
|
+
| `AudioDevices.setAudioDevice(id)` | Android | Sets the active audio output device. |
|
|
83
|
+
| `AudioRoutePicker.showRoutePicker()` | iOS | Opens the native AirPlay/Audio Route picker menu. |
|
|
84
|
+
| `AndroidAutoMediaLibraryHelper.set(...)` | Android | Sets custom folder structure for Android Auto. |
|
|
85
|
+
| `AndroidAutoMediaLibraryHelper.clear()` | Android | Resets Android Auto structure to default. |
|
|
86
|
+
|
|
87
|
+
### DownloadManager Methods
|
|
88
|
+
|
|
89
|
+
| Name | Platform | Description |
|
|
90
|
+
| -------------------------------------- | -------- | ------------------------------------------------------------- |
|
|
91
|
+
| `configure(config)` | Both | Configures download settings (storage, concurrency, etc.). |
|
|
92
|
+
| `downloadTrack(track, playlistId?)` | Both | **Async**. Downloads a track. Returns download ID. |
|
|
93
|
+
| `downloadPlaylist(playlistId, tracks)` | Both | **Async**. Downloads all tracks in a playlist. |
|
|
94
|
+
| `pauseDownload(downloadId)` | Both | **Async**. Pauses an active download. |
|
|
95
|
+
| `resumeDownload(downloadId)` | Both | **Async**. Resumes a paused download. |
|
|
96
|
+
| `cancelDownload(downloadId)` | Both | **Async**. Cancels a download. |
|
|
97
|
+
| `isTrackDownloaded(trackId)` | Both | Checks if a track is downloaded. |
|
|
98
|
+
| `getAllDownloadedTracks()` | Both | Gets all downloaded tracks. |
|
|
99
|
+
| `deleteDownloadedTrack(trackId)` | Both | **Async**. Deletes a downloaded track. |
|
|
100
|
+
| `getStorageInfo()` | Both | **Async**. Gets download storage usage information. |
|
|
101
|
+
| `setPlaybackSourcePreference(pref)` | Both | Sets playback source: `'auto'`, `'download'`, or `'network'`. |
|
|
102
|
+
|
|
103
|
+
> [!NOTE]
|
|
104
|
+
> See [DOWNLOADS.md](./DOWNLOADS.md) for complete downloads API documentation.
|
|
105
|
+
|
|
21
106
|
## Quick Start
|
|
22
107
|
|
|
23
108
|
### 1. Configure the Player
|
|
@@ -49,6 +134,12 @@ const tracks: TrackItem[] = [
|
|
|
49
134
|
duration: 180.0, // in seconds
|
|
50
135
|
url: 'https://example.com/song.mp3',
|
|
51
136
|
artwork: 'https://example.com/artwork.jpg',
|
|
137
|
+
// Optional custom data (accessible in player state)
|
|
138
|
+
extraPayload: {
|
|
139
|
+
artistId: '123',
|
|
140
|
+
genre: 'Rock',
|
|
141
|
+
isFavorite: true,
|
|
142
|
+
},
|
|
52
143
|
},
|
|
53
144
|
]
|
|
54
145
|
|
|
@@ -72,7 +163,7 @@ import { TrackPlayer, PlayerQueue } from 'react-native-nitro-player'
|
|
|
72
163
|
PlayerQueue.loadPlaylist(playlistId)
|
|
73
164
|
|
|
74
165
|
// Or play a specific song
|
|
75
|
-
TrackPlayer.playSong('song-id', playlistId)
|
|
166
|
+
await TrackPlayer.playSong('song-id', playlistId)
|
|
76
167
|
|
|
77
168
|
// Basic controls
|
|
78
169
|
TrackPlayer.play()
|
|
@@ -90,6 +181,178 @@ TrackPlayer.setRepeatMode('track') // Repeat current track
|
|
|
90
181
|
TrackPlayer.setVolume(50) // Set volume to 50%
|
|
91
182
|
TrackPlayer.setVolume(0) // Mute
|
|
92
183
|
TrackPlayer.setVolume(100) // Maximum volume
|
|
184
|
+
|
|
185
|
+
// Add temporary tracks to queue
|
|
186
|
+
await TrackPlayer.addToUpNext('song-id') // Add to up-next queue (FIFO)
|
|
187
|
+
await TrackPlayer.playNext('song-id') // Add to play-next stack (LIFO)
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### 4. Download for Offline Playback (Optional)
|
|
191
|
+
|
|
192
|
+
```typescript
|
|
193
|
+
import { DownloadManager } from 'react-native-nitro-player'
|
|
194
|
+
|
|
195
|
+
// Configure downloads
|
|
196
|
+
DownloadManager.configure({
|
|
197
|
+
maxConcurrentDownloads: 3,
|
|
198
|
+
backgroundDownloadsEnabled: true,
|
|
199
|
+
downloadArtwork: true,
|
|
200
|
+
})
|
|
201
|
+
|
|
202
|
+
// Download a track
|
|
203
|
+
const downloadId = await DownloadManager.downloadTrack(track)
|
|
204
|
+
|
|
205
|
+
// Download entire playlist
|
|
206
|
+
const playlist = PlayerQueue.getPlaylist(playlistId)
|
|
207
|
+
await DownloadManager.downloadPlaylist(playlist.id, playlist.tracks)
|
|
208
|
+
|
|
209
|
+
// Set playback to prefer downloaded tracks
|
|
210
|
+
DownloadManager.setPlaybackSourcePreference('auto')
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
> [!NOTE]
|
|
214
|
+
> See [DOWNLOADS.md](./DOWNLOADS.md) for complete offline downloads documentation.
|
|
215
|
+
|
|
216
|
+
## Temporary Queue Management
|
|
217
|
+
|
|
218
|
+
The player supports adding temporary tracks to the queue without modifying the original playlist. These tracks are automatically removed after playing.
|
|
219
|
+
|
|
220
|
+
### `addToUpNext(trackId: string): Promise<void>`
|
|
221
|
+
|
|
222
|
+
Adds a track to the **up-next queue** (FIFO - First In, First Out). Tracks play in the order they were added.
|
|
223
|
+
|
|
224
|
+
**Behavior:**
|
|
225
|
+
|
|
226
|
+
- Track is inserted after the current track and any "play next" tracks
|
|
227
|
+
- Multiple tracks can be added - they play in the order added
|
|
228
|
+
- Track is automatically removed after playing
|
|
229
|
+
- Does not modify the original playlist
|
|
230
|
+
|
|
231
|
+
**Example:**
|
|
232
|
+
|
|
233
|
+
```typescript
|
|
234
|
+
// Add tracks to up-next queue
|
|
235
|
+
await TrackPlayer.addToUpNext('song-1') // Will play 3rd
|
|
236
|
+
await TrackPlayer.addToUpNext('song-2') // Will play 4th
|
|
237
|
+
await TrackPlayer.addToUpNext('song-3') // Will play 5th
|
|
238
|
+
// Order: [current] → [song-1] → [song-2] → [song-3]
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### `playNext(trackId: string): Promise<void>`
|
|
242
|
+
|
|
243
|
+
Adds a track to the **play-next stack** (LIFO - Last In, First Out). The most recently added track plays first.
|
|
244
|
+
|
|
245
|
+
**Behavior:**
|
|
246
|
+
|
|
247
|
+
- Track is inserted immediately after the current track
|
|
248
|
+
- Multiple tracks can be added - the last added plays first
|
|
249
|
+
- Track is automatically removed after playing
|
|
250
|
+
- Does not modify the original playlist
|
|
251
|
+
|
|
252
|
+
**Example:**
|
|
253
|
+
|
|
254
|
+
```typescript
|
|
255
|
+
// Add tracks to play-next stack
|
|
256
|
+
await TrackPlayer.playNext('song-1') // Will play 3rd
|
|
257
|
+
await TrackPlayer.playNext('song-2') // Will play 2nd (most recent)
|
|
258
|
+
await TrackPlayer.playNext('song-3') // Will play 1st (most recent)
|
|
259
|
+
// Order: [current] → [song-3] → [song-2] → [song-1]
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
### Queue Order
|
|
263
|
+
|
|
264
|
+
The actual playback order is:
|
|
265
|
+
|
|
266
|
+
```
|
|
267
|
+
[original tracks before current]
|
|
268
|
+
+ [CURRENT TRACK]
|
|
269
|
+
+ [playNext stack (LIFO)]
|
|
270
|
+
+ [upNext queue (FIFO)]
|
|
271
|
+
+ [original tracks after current]
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
### Clearing Temporary Tracks
|
|
275
|
+
|
|
276
|
+
Temporary tracks are automatically cleared when:
|
|
277
|
+
|
|
278
|
+
- `await TrackPlayer.playSong()` is called
|
|
279
|
+
- `PlayerQueue.loadPlaylist()` is called
|
|
280
|
+
- `TrackPlayer.playFromIndex()` is called
|
|
281
|
+
|
|
282
|
+
### `skipToIndex(index: number): Promise<boolean>`
|
|
283
|
+
|
|
284
|
+
Skips to a specific index in the **actual queue** (the combined queue with temporary tracks).
|
|
285
|
+
|
|
286
|
+
**Behavior:**
|
|
287
|
+
|
|
288
|
+
- Takes an index into the actual queue structure
|
|
289
|
+
- If the target is a temporary track (playNext or upNext), plays that track
|
|
290
|
+
- If the target is beyond temporary tracks (in the remaining original playlist), clears all temporary tracks and plays from the original playlist
|
|
291
|
+
- Returns `true` if successful, `false` if the index is invalid
|
|
292
|
+
|
|
293
|
+
**Example:**
|
|
294
|
+
|
|
295
|
+
```typescript
|
|
296
|
+
// Queue: [track1(0), track2(1, current), playNext-A(2), upNext-B(3), track3(4), track4(5)]
|
|
297
|
+
|
|
298
|
+
// Skip to playNext track
|
|
299
|
+
await TrackPlayer.skipToIndex(2) // Plays playNext-A
|
|
300
|
+
|
|
301
|
+
// Skip to original playlist track (clears temporary tracks)
|
|
302
|
+
await TrackPlayer.skipToIndex(4) // Clears temps, plays track3
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
### Getting the Actual Queue
|
|
306
|
+
|
|
307
|
+
Use `useActualQueue()` hook to see the complete queue including temporary tracks:
|
|
308
|
+
|
|
309
|
+
```typescript
|
|
310
|
+
import { useActualQueue } from 'react-native-nitro-player'
|
|
311
|
+
|
|
312
|
+
function QueueView() {
|
|
313
|
+
const { queue, refreshQueue, isLoading } = useActualQueue()
|
|
314
|
+
|
|
315
|
+
return (
|
|
316
|
+
<ScrollView>
|
|
317
|
+
{queue.map((track, index) => (
|
|
318
|
+
<View key={track.id}>
|
|
319
|
+
<Text>{index + 1}. {track.title}</Text>
|
|
320
|
+
</View>
|
|
321
|
+
))}
|
|
322
|
+
</ScrollView>
|
|
323
|
+
)
|
|
324
|
+
}
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
**Returns:**
|
|
328
|
+
|
|
329
|
+
- `queue: TrackItem[]` - Complete queue in playback order
|
|
330
|
+
- `refreshQueue: () => void` - Manually refresh the queue
|
|
331
|
+
- `isLoading: boolean` - Whether the queue is currently loading
|
|
332
|
+
|
|
333
|
+
## CurrentPlayingType
|
|
334
|
+
|
|
335
|
+
The `currentPlayingType` field in `PlayerState` indicates the source of the currently playing track:
|
|
336
|
+
|
|
337
|
+
| Value | Description |
|
|
338
|
+
| -------------- | -------------------------------------------------------- |
|
|
339
|
+
| `'playlist'` | Playing from the original playlist |
|
|
340
|
+
| `'play-next'` | Playing a track added via `playNext()` (LIFO stack) |
|
|
341
|
+
| `'up-next'` | Playing a track added via `addToUpNext()` (FIFO queue) |
|
|
342
|
+
| `'not-playing'`| No track is currently playing |
|
|
343
|
+
|
|
344
|
+
**Example:**
|
|
345
|
+
|
|
346
|
+
```typescript
|
|
347
|
+
const state = await TrackPlayer.getState()
|
|
348
|
+
|
|
349
|
+
if (state.currentPlayingType === 'play-next') {
|
|
350
|
+
console.log('Playing a play-next track')
|
|
351
|
+
} else if (state.currentPlayingType === 'up-next') {
|
|
352
|
+
console.log('Playing an up-next track')
|
|
353
|
+
} else if (state.currentPlayingType === 'playlist') {
|
|
354
|
+
console.log('Playing from the original playlist')
|
|
355
|
+
}
|
|
93
356
|
```
|
|
94
357
|
|
|
95
358
|
## Core Concepts
|
|
@@ -111,6 +374,7 @@ Controls playback. Use it to:
|
|
|
111
374
|
- Skip tracks
|
|
112
375
|
- Control repeat mode
|
|
113
376
|
- Control volume
|
|
377
|
+
- Add temporary tracks to queue (`addToUpNext`, `playNext`)
|
|
114
378
|
- Get current player state
|
|
115
379
|
- Listen to playback events
|
|
116
380
|
|
|
@@ -183,9 +447,82 @@ Returns the complete current player state (same as `TrackPlayer.getState()`). Th
|
|
|
183
447
|
- `currentState: TrackPlayerState` - Current playback state (`'playing'`, `'paused'`, or `'stopped'`)
|
|
184
448
|
- `currentPlaylistId: string | null` - ID of the currently loaded playlist, or `null` if no playlist is loaded
|
|
185
449
|
- `currentIndex: number` - Index of the current track in the playlist (-1 if no track is playing)
|
|
450
|
+
- `currentPlayingType: CurrentPlayingType` - Source of the current track (`'playlist'`, `'play-next'`, `'up-next'`, or `'not-playing'`)
|
|
186
451
|
|
|
187
452
|
**Note:** This hook is equivalent to calling `TrackPlayer.getState()` but provides reactive updates. It listens to track changes and playback state changes to update automatically. Also dont rely on progress from this hook
|
|
188
453
|
|
|
454
|
+
### `useActualQueue()`
|
|
455
|
+
|
|
456
|
+
Returns the actual playback queue including temporary tracks (from `addToUpNext` and `playNext`).
|
|
457
|
+
|
|
458
|
+
**Returns:**
|
|
459
|
+
|
|
460
|
+
- `queue: TrackItem[]` - Complete queue in playback order: `[tracks_before_current] + [current] + [playNext_stack] + [upNext_queue] + [remaining_tracks]`
|
|
461
|
+
- `refreshQueue: () => void` - Manually refresh the queue (useful after adding tracks)
|
|
462
|
+
- `isLoading: boolean` - Whether the queue is currently loading
|
|
463
|
+
|
|
464
|
+
**Auto-updates when:**
|
|
465
|
+
|
|
466
|
+
- Track changes
|
|
467
|
+
- Temporary tracks are added (`playNext`/`addToUpNext`)
|
|
468
|
+
- Playback state changes
|
|
469
|
+
|
|
470
|
+
**Example:**
|
|
471
|
+
|
|
472
|
+
```typescript
|
|
473
|
+
import { useActualQueue } from 'react-native-nitro-player'
|
|
474
|
+
|
|
475
|
+
function QueueView() {
|
|
476
|
+
const { queue, refreshQueue, isLoading } = useActualQueue()
|
|
477
|
+
|
|
478
|
+
const handleAddToUpNext = async (trackId: string) => {
|
|
479
|
+
await TrackPlayer.addToUpNext(trackId)
|
|
480
|
+
// Refresh queue after adding track
|
|
481
|
+
setTimeout(refreshQueue, 100)
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
return (
|
|
485
|
+
<ScrollView>
|
|
486
|
+
{queue.map((track, index) => (
|
|
487
|
+
<View key={track.id}>
|
|
488
|
+
<Text>{index + 1}. {track.title}</Text>
|
|
489
|
+
</View>
|
|
490
|
+
))}
|
|
491
|
+
</ScrollView>
|
|
492
|
+
)
|
|
493
|
+
}
|
|
494
|
+
```
|
|
495
|
+
|
|
496
|
+
### `usePlaylist()`
|
|
497
|
+
|
|
498
|
+
Manages playlist-related state and provides access to all playlists and tracks.
|
|
499
|
+
|
|
500
|
+
**Returns:**
|
|
501
|
+
|
|
502
|
+
- `currentPlaylist: Playlist | null` - The currently loaded playlist
|
|
503
|
+
- `currentPlaylistId: string | null` - ID of the currently loaded playlist
|
|
504
|
+
- `allPlaylists: Playlist[]` - Array of all playlists
|
|
505
|
+
- `allTracks: TrackItem[]` - Array of all tracks from all playlists
|
|
506
|
+
- `isLoading: boolean` - Whether playlists are currently loading
|
|
507
|
+
- `refreshPlaylists: () => void` - Manually refresh playlist data
|
|
508
|
+
|
|
509
|
+
**Example:**
|
|
510
|
+
|
|
511
|
+
```typescript
|
|
512
|
+
import { usePlaylist } from 'react-native-nitro-player'
|
|
513
|
+
|
|
514
|
+
function PlaylistView() {
|
|
515
|
+
const { allPlaylists, allTracks, refreshPlaylists } = usePlaylist()
|
|
516
|
+
|
|
517
|
+
return (
|
|
518
|
+
<View>
|
|
519
|
+
<Text>Playlists: {allPlaylists.length}</Text>
|
|
520
|
+
<Text>Total Tracks: {allTracks.length}</Text>
|
|
521
|
+
</View>
|
|
522
|
+
)
|
|
523
|
+
}
|
|
524
|
+
```
|
|
525
|
+
|
|
189
526
|
## Audio Device APIs
|
|
190
527
|
|
|
191
528
|
### `AudioDevices` (Android only)
|
|
@@ -210,7 +547,7 @@ import { AudioDevices } from 'react-native-nitro-player'
|
|
|
210
547
|
|
|
211
548
|
if (AudioDevices) {
|
|
212
549
|
const devices = AudioDevices.getAudioDevices()
|
|
213
|
-
devices.forEach(device => {
|
|
550
|
+
devices.forEach((device) => {
|
|
214
551
|
console.log(`${device.name} - Active: ${device.isActive}`)
|
|
215
552
|
})
|
|
216
553
|
}
|
|
@@ -255,6 +592,73 @@ if (AudioRoutePicker) {
|
|
|
255
592
|
}
|
|
256
593
|
```
|
|
257
594
|
|
|
595
|
+
|
|
596
|
+
## Equalizer
|
|
597
|
+
|
|
598
|
+
The player includes a powerful 5-band equalizer that works on both iOS and Android.
|
|
599
|
+
|
|
600
|
+
### `useEqualizer()`
|
|
601
|
+
|
|
602
|
+
Returns the current equalizer state and control methods.
|
|
603
|
+
|
|
604
|
+
**Returns:**
|
|
605
|
+
|
|
606
|
+
- `isEnabled: boolean` - Whether the equalizer is currently active
|
|
607
|
+
- `bands: EqualizerBand[]` - Current gain settings for all 5 bands
|
|
608
|
+
- `currentPreset: string | null` - Name of the currently applied preset
|
|
609
|
+
- `setEnabled(enabled: boolean): boolean` - Toggle the equalizer on/off
|
|
610
|
+
- `setBandGain(index: number, gainDb: number): boolean` - Set gain for a specific band (range: -12dB to +12dB)
|
|
611
|
+
- `setAllBandGains(gains: number[]): boolean` - Set all band gains at once
|
|
612
|
+
- `reset(): void` - Reset to flat response
|
|
613
|
+
|
|
614
|
+
**Bands:**
|
|
615
|
+
|
|
616
|
+
The equalizer features 5 bands at the following center frequencies:
|
|
617
|
+
1. **60 Hz** - Sub-bass/Bass
|
|
618
|
+
2. **230 Hz** - Bass/Low-mids
|
|
619
|
+
3. **910 Hz** - Mids
|
|
620
|
+
4. **3.6 kHz** - Upper-mids/Treble
|
|
621
|
+
5. **14 kHz** - High treble/Air
|
|
622
|
+
|
|
623
|
+
**Example:**
|
|
624
|
+
|
|
625
|
+
```typescript
|
|
626
|
+
import { useEqualizer } from 'react-native-nitro-player'
|
|
627
|
+
|
|
628
|
+
function EqualizerControl() {
|
|
629
|
+
const {
|
|
630
|
+
isEnabled,
|
|
631
|
+
setEnabled,
|
|
632
|
+
bands,
|
|
633
|
+
setBandGain,
|
|
634
|
+
reset
|
|
635
|
+
} = useEqualizer()
|
|
636
|
+
|
|
637
|
+
return (
|
|
638
|
+
<View>
|
|
639
|
+
<Switch
|
|
640
|
+
value={isEnabled}
|
|
641
|
+
onValueChange={setEnabled}
|
|
642
|
+
/>
|
|
643
|
+
|
|
644
|
+
{bands.map((band) => (
|
|
645
|
+
<View key={band.index}>
|
|
646
|
+
<Text>{band.frequencyLabel}</Text>
|
|
647
|
+
<Slider
|
|
648
|
+
minimumValue={-12}
|
|
649
|
+
maximumValue={12}
|
|
650
|
+
value={band.gainDb}
|
|
651
|
+
onSlidingComplete={(value) => setBandGain(band.index, value)}
|
|
652
|
+
/>
|
|
653
|
+
</View>
|
|
654
|
+
))}
|
|
655
|
+
|
|
656
|
+
<Button title="Reset" onPress={reset} />
|
|
657
|
+
</View>
|
|
658
|
+
)
|
|
659
|
+
}
|
|
660
|
+
```
|
|
661
|
+
|
|
258
662
|
## Repeat Mode
|
|
259
663
|
|
|
260
664
|
Control how tracks repeat during playback.
|
|
@@ -457,7 +861,7 @@ TrackPlayer.onPlaybackProgressChange(
|
|
|
457
861
|
)
|
|
458
862
|
|
|
459
863
|
// Listen to Android Auto connection changes
|
|
460
|
-
TrackPlayer.onAndroidAutoConnectionChange(connected => {
|
|
864
|
+
TrackPlayer.onAndroidAutoConnectionChange((connected) => {
|
|
461
865
|
console.log('Android Auto:', connected ? 'Connected' : 'Disconnected')
|
|
462
866
|
})
|
|
463
867
|
```
|
|
@@ -467,7 +871,7 @@ TrackPlayer.onAndroidAutoConnectionChange(connected => {
|
|
|
467
871
|
```typescript
|
|
468
872
|
import { TrackPlayer } from 'react-native-nitro-player'
|
|
469
873
|
|
|
470
|
-
const state = TrackPlayer.getState()
|
|
874
|
+
const state = await TrackPlayer.getState()
|
|
471
875
|
|
|
472
876
|
console.log(state.currentState) // 'playing' | 'paused' | 'stopped'
|
|
473
877
|
console.log(state.currentPosition) // current position in seconds
|
|
@@ -475,6 +879,7 @@ console.log(state.totalDuration) // total duration in seconds
|
|
|
475
879
|
console.log(state.currentTrack) // current TrackItem or null
|
|
476
880
|
console.log(state.currentPlaylistId) // current playlist ID or null
|
|
477
881
|
console.log(state.currentIndex) // current track index in playlist
|
|
882
|
+
console.log(state.currentPlayingType) // 'playlist' | 'play-next' | 'up-next' | 'not-playing'
|
|
478
883
|
```
|
|
479
884
|
|
|
480
885
|
## Track Item Structure
|
|
@@ -490,6 +895,29 @@ interface TrackItem {
|
|
|
490
895
|
duration: number // Duration in seconds
|
|
491
896
|
url: string // Audio file URL
|
|
492
897
|
artwork?: string | null // Optional artwork URL
|
|
898
|
+
// key-value pairs for arbitrary data
|
|
899
|
+
extraPayload?: {
|
|
900
|
+
[key: string]: string | number | boolean | Record<string, unknown>
|
|
901
|
+
}
|
|
902
|
+
}
|
|
903
|
+
```
|
|
904
|
+
|
|
905
|
+
### Custom Track Metadata (extraPayload)
|
|
906
|
+
|
|
907
|
+
```typescript
|
|
908
|
+
const track = {
|
|
909
|
+
// ... standard fields
|
|
910
|
+
extraPayload: {
|
|
911
|
+
externalId: 'sp-12345',
|
|
912
|
+
rating: 4.5,
|
|
913
|
+
tags: ['chill', 'instrumental']
|
|
914
|
+
}
|
|
915
|
+
}
|
|
916
|
+
|
|
917
|
+
// Accessing it later
|
|
918
|
+
const { track } = useOnChangeTrack()
|
|
919
|
+
if (track?.extraPayload?.rating > 4) {
|
|
920
|
+
console.log('High rated track playing!')
|
|
493
921
|
}
|
|
494
922
|
```
|
|
495
923
|
|
|
@@ -687,6 +1115,7 @@ AndroidAutoMediaLibraryHelper.set({
|
|
|
687
1115
|
- ✅ **CarPlay Support**: Control playback from CarPlay (iOS)
|
|
688
1116
|
- ✅ **Notification Controls**: Show playback controls in notifications
|
|
689
1117
|
- ✅ **Progress Tracking**: Real-time playback progress updates
|
|
1118
|
+
- ✅ **Offline Downloads**: Download tracks and playlists for offline playback
|
|
690
1119
|
|
|
691
1120
|
## TypeScript Support
|
|
692
1121
|
|
|
@@ -698,6 +1127,7 @@ import type {
|
|
|
698
1127
|
Playlist,
|
|
699
1128
|
PlayerState,
|
|
700
1129
|
TrackPlayerState,
|
|
1130
|
+
CurrentPlayingType,
|
|
701
1131
|
QueueOperation,
|
|
702
1132
|
Reason,
|
|
703
1133
|
PlayerConfig,
|
|
@@ -705,6 +1135,16 @@ import type {
|
|
|
705
1135
|
MediaItem,
|
|
706
1136
|
LayoutType,
|
|
707
1137
|
MediaType,
|
|
1138
|
+
// Download types
|
|
1139
|
+
DownloadConfig,
|
|
1140
|
+
DownloadProgress,
|
|
1141
|
+
DownloadedTrack,
|
|
1142
|
+
DownloadedPlaylist,
|
|
1143
|
+
DownloadTask,
|
|
1144
|
+
DownloadState,
|
|
1145
|
+
DownloadError,
|
|
1146
|
+
DownloadStorageInfo,
|
|
1147
|
+
PlaybackSource,
|
|
708
1148
|
} from 'react-native-nitro-player'
|
|
709
1149
|
```
|
|
710
1150
|
|
package/android/build.gradle
CHANGED
|
@@ -129,7 +129,7 @@ repositories {
|
|
|
129
129
|
}
|
|
130
130
|
|
|
131
131
|
|
|
132
|
-
def media3_version = "1.
|
|
132
|
+
def media3_version = "1.9.0"
|
|
133
133
|
dependencies {
|
|
134
134
|
// For < 0.71, this will be from the local maven repo
|
|
135
135
|
// For > 0.71, this will be replaced by `com.facebook.react:react-android:$version` by react gradle plugin
|
|
@@ -143,5 +143,8 @@ dependencies {
|
|
|
143
143
|
implementation "androidx.media3:media3-session:$media3_version"
|
|
144
144
|
implementation "androidx.media3:media3-common:$media3_version"
|
|
145
145
|
implementation "androidx.media:media:1.7.0"
|
|
146
|
+
|
|
147
|
+
// WorkManager for background downloads
|
|
148
|
+
implementation "androidx.work:work-runtime-ktx:2.9.0"
|
|
146
149
|
}
|
|
147
150
|
|
|
@@ -1,2 +1,17 @@
|
|
|
1
|
-
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
1
|
+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
2
|
+
xmlns:tools="http://schemas.android.com/tools">
|
|
3
|
+
<!-- Permissions for downloads -->
|
|
4
|
+
<uses-permission android:name="android.permission.INTERNET" />
|
|
5
|
+
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
|
6
|
+
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
|
|
7
|
+
|
|
8
|
+
<application>
|
|
9
|
+
<!-- WorkManager's SystemForegroundService for download notifications -->
|
|
10
|
+
<service
|
|
11
|
+
android:name="androidx.work.impl.foreground.SystemForegroundService"
|
|
12
|
+
android:foregroundServiceType="dataSync"
|
|
13
|
+
android:exported="false"
|
|
14
|
+
tools:node="merge" />
|
|
15
|
+
</application>
|
|
2
16
|
</manifest>
|
|
17
|
+
|
package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridAndroidAutoMediaLibrary.kt
CHANGED
|
@@ -5,6 +5,8 @@ import com.facebook.proguard.annotations.DoNotStrip
|
|
|
5
5
|
import com.margelo.nitro.NitroModules
|
|
6
6
|
import com.margelo.nitro.nitroplayer.core.TrackPlayerCore
|
|
7
7
|
|
|
8
|
+
@DoNotStrip
|
|
9
|
+
@Keep
|
|
8
10
|
class HybridAndroidAutoMediaLibrary : HybridAndroidAutoMediaLibrarySpec() {
|
|
9
11
|
private val core: TrackPlayerCore
|
|
10
12
|
|
|
@@ -4,8 +4,12 @@ import android.content.Context
|
|
|
4
4
|
import android.media.AudioDeviceInfo
|
|
5
5
|
import android.media.AudioManager
|
|
6
6
|
import android.os.Build
|
|
7
|
+
import androidx.annotation.Keep
|
|
8
|
+
import com.facebook.proguard.annotations.DoNotStrip
|
|
7
9
|
import com.margelo.nitro.NitroModules
|
|
8
10
|
|
|
11
|
+
@DoNotStrip
|
|
12
|
+
@Keep
|
|
9
13
|
class HybridAudioDevices : HybridAudioDevicesSpec() {
|
|
10
14
|
val applicationContext = NitroModules.applicationContext
|
|
11
15
|
private val audioManager = applicationContext?.getSystemService(Context.AUDIO_SERVICE) as AudioManager
|
|
@@ -30,6 +34,8 @@ class HybridAudioDevices : HybridAudioDevicesSpec() {
|
|
|
30
34
|
types
|
|
31
35
|
}
|
|
32
36
|
|
|
37
|
+
@DoNotStrip
|
|
38
|
+
@Keep
|
|
33
39
|
override fun getAudioDevices(): Array<TAudioDevice> {
|
|
34
40
|
val devices = audioManager.getDevices(android.media.AudioManager.GET_DEVICES_OUTPUTS)
|
|
35
41
|
var activeDevice: AudioDeviceInfo? = null
|
|
@@ -66,6 +72,8 @@ class HybridAudioDevices : HybridAudioDevicesSpec() {
|
|
|
66
72
|
else -> "Type $type"
|
|
67
73
|
}
|
|
68
74
|
|
|
75
|
+
@DoNotStrip
|
|
76
|
+
@Keep
|
|
69
77
|
override fun setAudioDevice(deviceId: Double): Boolean {
|
|
70
78
|
val device =
|
|
71
79
|
audioManager
|