@javascriptcommon/react-native-track-player 1.2.9 → 4.1.4

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.
Files changed (437) hide show
  1. package/LICENSE +201 -21
  2. package/README.md +8 -0
  3. package/android/build.gradle +92 -18
  4. package/android/proguard-rules.txt +0 -3
  5. package/android/src/main/AndroidManifest.xml +10 -13
  6. package/android/src/main/java/com/doublesymmetry/trackplayer/HeadlessJsMediaService.kt +199 -0
  7. package/android/src/main/java/com/doublesymmetry/trackplayer/TrackPlayer.kt +33 -0
  8. package/android/src/main/java/com/doublesymmetry/trackplayer/extensions/AudioPlayerStateExt.kt +19 -0
  9. package/android/src/main/java/com/doublesymmetry/trackplayer/extensions/EnumExtensions.kt +5 -0
  10. package/android/src/main/java/com/doublesymmetry/trackplayer/extensions/NumberExt.kt +13 -0
  11. package/android/src/main/java/com/doublesymmetry/trackplayer/model/MetadataAdapter.kt +227 -0
  12. package/android/src/main/java/com/doublesymmetry/trackplayer/model/NowPlayingMetadata.kt +16 -0
  13. package/android/src/main/java/com/doublesymmetry/trackplayer/model/PlaybackMetadata.kt +203 -0
  14. package/android/src/main/java/com/doublesymmetry/trackplayer/model/State.kt +13 -0
  15. package/android/src/main/java/com/doublesymmetry/trackplayer/model/Track.kt +67 -0
  16. package/android/src/main/java/com/doublesymmetry/trackplayer/model/TrackAudioItem.kt +18 -0
  17. package/android/src/main/java/com/doublesymmetry/trackplayer/model/TrackMetadata.kt +38 -0
  18. package/android/src/main/java/com/doublesymmetry/trackplayer/module/MusicEvents.kt +67 -0
  19. package/android/src/main/java/com/doublesymmetry/trackplayer/module/MusicModule.kt +778 -0
  20. package/android/src/main/java/com/doublesymmetry/trackplayer/service/MusicService.kt +1286 -0
  21. package/android/src/main/java/com/doublesymmetry/trackplayer/utils/AppForegroundTracker.kt +35 -0
  22. package/android/src/main/java/com/doublesymmetry/trackplayer/utils/BundleUtils.kt +147 -0
  23. package/android/src/main/java/com/doublesymmetry/trackplayer/utils/CoilBitmapLoader.kt +65 -0
  24. package/android/src/main/java/com/doublesymmetry/trackplayer/utils/MediaItemBuilder.kt +41 -0
  25. package/android/src/main/java/com/doublesymmetry/trackplayer/utils/RejectionException.kt +11 -0
  26. package/android/src/main/java/com/doublesymmetry/trackplayer/video/TrackPlayerVideoView.kt +42 -0
  27. package/android/src/main/java/com/doublesymmetry/trackplayer/video/TrackPlayerVideoViewManager.kt +18 -0
  28. package/android/src/main/java/com/lovegaoshi/kotlinaudio/event/EventHolder.kt +30 -0
  29. package/android/src/main/java/com/lovegaoshi/kotlinaudio/event/PlayerEventHolder.kt +124 -0
  30. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/AudioContentType.kt +10 -0
  31. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/AudioItem.kt +118 -0
  32. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/AudioItemTransitionReason.kt +33 -0
  33. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/AudioPlayerState.kt +30 -0
  34. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/BufferConfig.kt +8 -0
  35. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/CacheConfig.kt +17 -0
  36. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/Capability.kt +19 -0
  37. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/CustomButton.kt +19 -0
  38. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/FocusChangeData.kt +3 -0
  39. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/MediaSessionCallback.kt +17 -0
  40. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/PlayWhenReadyChangeData.kt +3 -0
  41. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/PlaybackEndedReason.kt +5 -0
  42. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/PlaybackError.kt +6 -0
  43. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/PlayerConfig.kt +36 -0
  44. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/PlayerOptions.kt +40 -0
  45. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/PositionChangedReason.kt +39 -0
  46. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/RepeatMode.kt +16 -0
  47. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/WakeMode.kt +7 -0
  48. package/android/src/main/java/com/lovegaoshi/kotlinaudio/player/AudioPlayer.kt +756 -0
  49. package/android/src/main/java/com/lovegaoshi/kotlinaudio/player/ForwardingPlayer.java +1124 -0
  50. package/android/src/main/java/com/lovegaoshi/kotlinaudio/player/QueuedAudioPlayer.kt +279 -0
  51. package/android/src/main/java/com/lovegaoshi/kotlinaudio/player/components/APMRenderersFactory.kt +33 -0
  52. package/android/src/main/java/com/lovegaoshi/kotlinaudio/player/components/Buffer.kt +34 -0
  53. package/android/src/main/java/com/lovegaoshi/kotlinaudio/player/components/Cache.kt +27 -0
  54. package/android/src/main/java/com/lovegaoshi/kotlinaudio/player/components/FocusManager.kt +59 -0
  55. package/android/src/main/java/com/lovegaoshi/kotlinaudio/player/components/MediaFactory.kt +130 -0
  56. package/android/src/main/java/com/lovegaoshi/kotlinaudio/processors/TeeListener.kt +171 -0
  57. package/android/src/main/java/com/lovegaoshi/kotlinaudio/service/MusicService.kt +127 -0
  58. package/android/src/main/java/com/lovegaoshi/kotlinaudio/utils/FFT.java +99 -0
  59. package/android/src/main/java/com/lovegaoshi/kotlinaudio/utils/Utils.kt +113 -0
  60. package/android/src/main/res/drawable/baseline_repeat_24.xml +5 -0
  61. package/android/src/main/res/drawable/baseline_repeat_one_24.xml +5 -0
  62. package/android/src/main/res/drawable/forward.xml +5 -0
  63. package/android/src/main/res/drawable/heart_24px.xml +5 -0
  64. package/android/src/main/res/drawable/hearte_24px.xml +5 -0
  65. package/android/src/main/res/drawable/ifl_24px.xml +5 -0
  66. package/android/src/main/res/drawable/rewind.xml +5 -0
  67. package/android/src/main/res/drawable/shuffle_24px.xml +5 -0
  68. package/android/src/main/res/values/strings.xml +5 -0
  69. package/android/src/main/res/xml/automotive_app_desc.xml +3 -0
  70. package/ios/Example/SwiftAudio/Assets.xcassets/22AMI.imageset/22AMillion.jpg +0 -0
  71. package/ios/Example/SwiftAudio/Assets.xcassets/22AMI.imageset/Contents.json +21 -0
  72. package/ios/Example/SwiftAudio/Assets.xcassets/AccentColor.colorset/Contents.json +11 -0
  73. package/ios/Example/SwiftAudio/Assets.xcassets/AppIcon.appiconset/Contents.json +58 -0
  74. package/ios/Example/SwiftAudio/Assets.xcassets/Contents.json +6 -0
  75. package/ios/Example/SwiftAudio/Assets.xcassets/cover.imageset/Contents.json +21 -0
  76. package/ios/Example/SwiftAudio/Assets.xcassets/cover.imageset/cover.jpg +0 -0
  77. package/ios/Example/SwiftAudio/AudioController.swift +46 -0
  78. package/ios/Example/SwiftAudio/Extensions.swift +22 -0
  79. package/ios/Example/SwiftAudio/PlayerView.swift +172 -0
  80. package/ios/Example/SwiftAudio/PlayerViewModel.swift +120 -0
  81. package/ios/Example/SwiftAudio/Preview Content/Preview Assets.xcassets/Contents.json +6 -0
  82. package/ios/Example/SwiftAudio/QueueView.swift +65 -0
  83. package/ios/{TrackPlayer.xcodeproj/xcuserdata/marco.xcuserdatad/xcschemes/xcschememanagement.plist → Example/SwiftAudio/SwiftAudio.entitlements} +6 -8
  84. package/ios/Example/SwiftAudio/SwiftAudioApp.swift +17 -0
  85. package/ios/Example/SwiftAudio.xcodeproj/project.pbxproj +412 -0
  86. package/ios/{TrackPlayer.xcodeproj → Example/SwiftAudio.xcodeproj}/project.xcworkspace/contents.xcworkspacedata +1 -1
  87. package/ios/RNTrackPlayer/Models/Capabilities.swift +39 -4
  88. package/ios/RNTrackPlayer/Models/MediaURL.swift +12 -6
  89. package/ios/RNTrackPlayer/Models/MetadataAdapter.swift +147 -0
  90. package/ios/RNTrackPlayer/Models/PitchAlgorithms.swift +13 -0
  91. package/ios/RNTrackPlayer/Models/SessionCategories.swift +106 -0
  92. package/ios/RNTrackPlayer/Models/State.swift +26 -0
  93. package/ios/RNTrackPlayer/Models/Track.swift +74 -54
  94. package/ios/RNTrackPlayer/RNTrackPlayer.swift +867 -406
  95. package/ios/RNTrackPlayer/Support/RNTrackPlayer-Bridging-Header.h +1 -0
  96. package/ios/RNTrackPlayer/TrackPlayer.h +14 -0
  97. package/ios/RNTrackPlayer/TrackPlayer.mm +249 -0
  98. package/ios/RNTrackPlayer/Utils/EventType.swift +45 -0
  99. package/ios/RNTrackPlayer/Utils/Metadata.swift +60 -0
  100. package/ios/RNTrackPlayer/Video/RNTrackPlayerVideoView.swift +83 -0
  101. package/ios/RNTrackPlayer/Video/RNTrackPlayerVideoViewManager.m +5 -0
  102. package/ios/RNTrackPlayer/Video/RNTrackPlayerVideoViewManager.swift +17 -0
  103. package/ios/SwiftAudioEx/Package.swift +20 -0
  104. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/AVPlayerWrapper/AVPlayerWrapper.swift +531 -0
  105. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/AVPlayerWrapper/AVPlayerWrapperDelegate.swift +27 -0
  106. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/AVPlayerWrapper/AVPlayerWrapperProtocol.swift +69 -0
  107. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/AVPlayerWrapper/AVPlayerWrapperState.swift +43 -0
  108. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/AudioItem.swift +158 -0
  109. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/AudioPlayer.swift +459 -0
  110. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/AudioPlayerError.swift +26 -0
  111. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/AudioSessionController/AudioSession.swift +33 -0
  112. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/AudioSessionController/AudioSessionController.swift +135 -0
  113. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/AudioTap.swift +96 -0
  114. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/Event.swift +155 -0
  115. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/NowPlayingInfoController/MediaItemProperty.swift +95 -0
  116. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/NowPlayingInfoController/NowPlayingInfoCenter.swift +17 -0
  117. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/NowPlayingInfoController/NowPlayingInfoController.swift +73 -0
  118. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/NowPlayingInfoController/NowPlayingInfoControllerProtocol.swift +26 -0
  119. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/NowPlayingInfoController/NowPlayingInfoKeyValue.swift +14 -0
  120. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/NowPlayingInfoController/NowPlayingInfoProperty.swift +234 -0
  121. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/Observer/AVPlayerItemNotificationObserver.swift +102 -0
  122. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/Observer/AVPlayerItemObserver.swift +136 -0
  123. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/Observer/AVPlayerObserver.swift +120 -0
  124. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/Observer/AVPlayerTimeObserver.swift +112 -0
  125. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/QueueManager.swift +356 -0
  126. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/QueuedAudioPlayer.swift +236 -0
  127. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/RemoteCommandController/RemoteCommand.swift +170 -0
  128. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/RemoteCommandController/RemoteCommandController.swift +206 -0
  129. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/RepeatMode.swift +15 -0
  130. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/TimeEventFrequency.swift +26 -0
  131. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/Utils/DispatchQueueType.swift +18 -0
  132. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/WaveformAudioTap.swift +159 -0
  133. package/lib/specs/NativeTrackPlayer.d.ts +134 -0
  134. package/lib/specs/NativeTrackPlayer.js +4 -0
  135. package/lib/src/TrackPlayerModule.web.d.ts +2 -0
  136. package/lib/src/TrackPlayerModule.web.js +2 -0
  137. package/lib/src/VideoView.d.ts +16 -0
  138. package/lib/src/VideoView.js +25 -0
  139. package/lib/src/constants/AndroidAudioContentType.d.ts +35 -0
  140. package/lib/src/constants/AndroidAudioContentType.js +36 -0
  141. package/lib/src/constants/AndroidAutoContentStyle.d.ts +10 -0
  142. package/lib/src/constants/AndroidAutoContentStyle.js +11 -0
  143. package/lib/src/constants/AppKilledPlaybackBehavior.d.ts +17 -0
  144. package/lib/src/constants/AppKilledPlaybackBehavior.js +18 -0
  145. package/lib/src/constants/Capability.d.ts +17 -0
  146. package/lib/src/constants/Capability.js +19 -0
  147. package/lib/src/constants/Event.d.ts +172 -0
  148. package/lib/src/constants/Event.js +173 -0
  149. package/lib/src/constants/IOSCategory.d.ts +36 -0
  150. package/lib/src/constants/IOSCategory.js +37 -0
  151. package/lib/src/constants/IOSCategoryMode.d.ts +47 -0
  152. package/lib/src/constants/IOSCategoryMode.js +48 -0
  153. package/lib/src/constants/IOSCategoryOptions.d.ts +44 -0
  154. package/lib/src/constants/IOSCategoryOptions.js +45 -0
  155. package/lib/src/constants/MediaItemPlayable.d.ts +4 -0
  156. package/lib/src/constants/MediaItemPlayable.js +5 -0
  157. package/lib/src/constants/PitchAlgorithm.d.ts +14 -0
  158. package/lib/src/constants/PitchAlgorithm.js +16 -0
  159. package/lib/src/constants/RatingType.d.ts +8 -0
  160. package/lib/src/constants/RatingType.js +10 -0
  161. package/lib/src/constants/RepeatMode.d.ts +8 -0
  162. package/lib/src/constants/RepeatMode.js +10 -0
  163. package/lib/src/constants/State.d.ts +34 -0
  164. package/lib/src/constants/State.js +35 -0
  165. package/lib/src/constants/TrackType.d.ts +6 -0
  166. package/lib/src/constants/TrackType.js +7 -0
  167. package/lib/src/constants/index.d.ts +14 -0
  168. package/lib/src/constants/index.js +14 -0
  169. package/lib/src/hooks/index.d.ts +6 -0
  170. package/lib/src/hooks/index.js +6 -0
  171. package/lib/src/hooks/useActiveTrack.d.ts +2 -0
  172. package/lib/src/hooks/useActiveTrack.js +28 -0
  173. package/lib/src/hooks/useAppIsInBackground.d.ts +1 -0
  174. package/lib/src/hooks/useAppIsInBackground.js +16 -0
  175. package/lib/src/hooks/useIsPlaying.d.ts +35 -0
  176. package/lib/src/hooks/useIsPlaying.js +50 -0
  177. package/lib/src/hooks/usePlayWhenReady.d.ts +1 -0
  178. package/lib/src/hooks/usePlayWhenReady.js +27 -0
  179. package/lib/src/hooks/usePlaybackState.d.ts +10 -0
  180. package/lib/src/hooks/usePlaybackState.js +35 -0
  181. package/lib/src/hooks/useProgress.d.ts +7 -0
  182. package/lib/src/hooks/useProgress.js +55 -0
  183. package/lib/src/hooks/useTrackPlayerEvents.d.ts +8 -0
  184. package/lib/src/hooks/useTrackPlayerEvents.js +30 -0
  185. package/lib/src/index.d.ts +6 -0
  186. package/lib/src/index.js +6 -0
  187. package/lib/src/interfaces/AndroidAutoBrowseTree.d.ts +5 -0
  188. package/lib/src/interfaces/AndroidAutoBrowseTree.js +1 -0
  189. package/lib/src/interfaces/AndroidOptions.d.ts +41 -0
  190. package/lib/src/interfaces/AndroidOptions.js +1 -0
  191. package/lib/src/interfaces/CustomButtons.d.ts +5 -0
  192. package/lib/src/interfaces/CustomButtons.js +1 -0
  193. package/lib/src/interfaces/FeedbackOptions.d.ts +6 -0
  194. package/lib/src/interfaces/FeedbackOptions.js +1 -0
  195. package/lib/src/interfaces/MediaItem.d.ts +18 -0
  196. package/lib/src/interfaces/MediaItem.js +1 -0
  197. package/lib/src/interfaces/MetadataOptions.d.ts +3 -0
  198. package/lib/src/interfaces/MetadataOptions.js +1 -0
  199. package/lib/src/interfaces/NowPlayingMetadata.d.ts +4 -0
  200. package/lib/src/interfaces/NowPlayingMetadata.js +1 -0
  201. package/lib/src/interfaces/PlaybackState.d.ts +8 -0
  202. package/lib/src/interfaces/PlaybackState.js +1 -0
  203. package/lib/src/interfaces/PlayerOptions.d.ts +132 -0
  204. package/lib/src/interfaces/PlayerOptions.js +1 -0
  205. package/lib/src/interfaces/Progress.d.ts +15 -0
  206. package/lib/src/interfaces/Progress.js +1 -0
  207. package/lib/src/interfaces/ResourceObject.d.ts +1 -0
  208. package/lib/src/interfaces/ResourceObject.js +1 -0
  209. package/lib/src/interfaces/ServiceHandler.d.ts +1 -0
  210. package/lib/src/interfaces/ServiceHandler.js +1 -0
  211. package/lib/src/interfaces/Track.d.ts +21 -0
  212. package/lib/src/interfaces/Track.js +1 -0
  213. package/lib/src/interfaces/TrackMetadataBase.d.ts +28 -0
  214. package/lib/src/interfaces/TrackMetadataBase.js +1 -0
  215. package/lib/src/interfaces/UpdateOptions.d.ts +52 -0
  216. package/lib/src/interfaces/UpdateOptions.js +1 -0
  217. package/lib/src/interfaces/events/AudioMetadataReceivedEvent.d.ts +33 -0
  218. package/lib/src/interfaces/events/AudioMetadataReceivedEvent.js +1 -0
  219. package/lib/src/interfaces/events/ControllerConnectedEvent.d.ts +8 -0
  220. package/lib/src/interfaces/events/ControllerConnectedEvent.js +1 -0
  221. package/lib/src/interfaces/events/EventPayloadByEvent.d.ts +77 -0
  222. package/lib/src/interfaces/events/EventPayloadByEvent.js +1 -0
  223. package/lib/src/interfaces/events/FFTUpdateEvent.d.ts +7 -0
  224. package/lib/src/interfaces/events/FFTUpdateEvent.js +1 -0
  225. package/lib/src/interfaces/events/PlaybackActiveTrackChangedEvent.d.ts +24 -0
  226. package/lib/src/interfaces/events/PlaybackActiveTrackChangedEvent.js +1 -0
  227. package/lib/src/interfaces/events/PlaybackAnimatedVolumeChangedEvent.d.ts +4 -0
  228. package/lib/src/interfaces/events/PlaybackAnimatedVolumeChangedEvent.js +1 -0
  229. package/lib/src/interfaces/events/PlaybackErrorEvent.d.ts +6 -0
  230. package/lib/src/interfaces/events/PlaybackErrorEvent.js +1 -0
  231. package/lib/src/interfaces/events/PlaybackMetadataReceivedEvent.d.ts +16 -0
  232. package/lib/src/interfaces/events/PlaybackMetadataReceivedEvent.js +1 -0
  233. package/lib/src/interfaces/events/PlaybackPlayWhenReadyChangedEvent.d.ts +4 -0
  234. package/lib/src/interfaces/events/PlaybackPlayWhenReadyChangedEvent.js +1 -0
  235. package/lib/src/interfaces/events/PlaybackProgressUpdatedEvent.d.ts +4 -0
  236. package/lib/src/interfaces/events/PlaybackProgressUpdatedEvent.js +1 -0
  237. package/lib/src/interfaces/events/PlaybackQueueEndedEvent.d.ts +9 -0
  238. package/lib/src/interfaces/events/PlaybackQueueEndedEvent.js +1 -0
  239. package/lib/src/interfaces/events/PlaybackResumeEvent.d.ts +3 -0
  240. package/lib/src/interfaces/events/PlaybackResumeEvent.js +1 -0
  241. package/lib/src/interfaces/events/PlaybackTrackChangedEvent.d.ts +11 -0
  242. package/lib/src/interfaces/events/PlaybackTrackChangedEvent.js +1 -0
  243. package/lib/src/interfaces/events/PlayerErrorEvent.d.ts +6 -0
  244. package/lib/src/interfaces/events/PlayerErrorEvent.js +1 -0
  245. package/lib/src/interfaces/events/RemoteBrowseEvent.d.ts +4 -0
  246. package/lib/src/interfaces/events/RemoteBrowseEvent.js +1 -0
  247. package/lib/src/interfaces/events/RemoteCustomActionEvent.d.ts +7 -0
  248. package/lib/src/interfaces/events/RemoteCustomActionEvent.js +1 -0
  249. package/lib/src/interfaces/events/RemoteDuckEvent.d.ts +13 -0
  250. package/lib/src/interfaces/events/RemoteDuckEvent.js +1 -0
  251. package/lib/src/interfaces/events/RemoteJumpBackwardEvent.d.ts +7 -0
  252. package/lib/src/interfaces/events/RemoteJumpBackwardEvent.js +1 -0
  253. package/lib/src/interfaces/events/RemoteJumpForwardEvent.d.ts +7 -0
  254. package/lib/src/interfaces/events/RemoteJumpForwardEvent.js +1 -0
  255. package/lib/src/interfaces/events/RemotePlayIdEvent.d.ts +4 -0
  256. package/lib/src/interfaces/events/RemotePlayIdEvent.js +1 -0
  257. package/lib/src/interfaces/events/RemotePlaySearchEvent.d.ts +9 -0
  258. package/lib/src/interfaces/events/RemotePlaySearchEvent.js +1 -0
  259. package/lib/src/interfaces/events/RemoteSearchEvent.d.ts +3 -0
  260. package/lib/src/interfaces/events/RemoteSearchEvent.js +1 -0
  261. package/lib/src/interfaces/events/RemoteSeekEvent.d.ts +4 -0
  262. package/lib/src/interfaces/events/RemoteSeekEvent.js +1 -0
  263. package/lib/src/interfaces/events/RemoteSetRatingEvent.d.ts +4 -0
  264. package/lib/src/interfaces/events/RemoteSetRatingEvent.js +1 -0
  265. package/lib/src/interfaces/events/RemoteSkipEvent.d.ts +3 -0
  266. package/lib/src/interfaces/events/RemoteSkipEvent.js +1 -0
  267. package/lib/src/interfaces/events/index.d.ts +20 -0
  268. package/lib/src/interfaces/events/index.js +20 -0
  269. package/lib/src/interfaces/index.d.ts +15 -0
  270. package/lib/src/interfaces/index.js +15 -0
  271. package/lib/src/resolveAssetSource.d.ts +2 -0
  272. package/lib/src/resolveAssetSource.js +3 -0
  273. package/lib/src/resolveAssetSource.web.d.ts +2 -0
  274. package/lib/src/resolveAssetSource.web.js +8 -0
  275. package/lib/src/trackPlayer.d.ts +371 -0
  276. package/lib/src/trackPlayer.js +627 -0
  277. package/lib/web/TrackPlayer/Player.d.ts +40 -0
  278. package/lib/web/TrackPlayer/Player.js +188 -0
  279. package/lib/web/TrackPlayer/PlaylistPlayer.d.ts +31 -0
  280. package/lib/web/TrackPlayer/PlaylistPlayer.js +181 -0
  281. package/lib/web/TrackPlayer/RepeatMode.d.ts +5 -0
  282. package/lib/web/TrackPlayer/RepeatMode.js +6 -0
  283. package/lib/web/TrackPlayer/SetupNotCalledError.d.ts +3 -0
  284. package/lib/web/TrackPlayer/SetupNotCalledError.js +5 -0
  285. package/lib/web/TrackPlayer/index.d.ts +3 -0
  286. package/lib/web/TrackPlayer/index.js +3 -0
  287. package/lib/web/TrackPlayerModule.d.ts +63 -0
  288. package/lib/web/TrackPlayerModule.js +153 -0
  289. package/lib/web/index.d.ts +3 -0
  290. package/lib/web/index.js +3 -0
  291. package/package.json +85 -6
  292. package/react-native-track-player.podspec +13 -13
  293. package/specs/NativeTrackPlayer.ts +153 -0
  294. package/src/TrackPlayerModule.web.ts +2 -0
  295. package/src/VideoView.tsx +51 -0
  296. package/src/constants/AndroidAudioContentType.ts +35 -0
  297. package/src/constants/AndroidAutoContentStyle.ts +10 -0
  298. package/src/constants/AppKilledPlaybackBehavior.ts +19 -0
  299. package/src/constants/Capability.ts +19 -0
  300. package/src/constants/Event.ts +173 -0
  301. package/src/constants/IOSCategory.ts +36 -0
  302. package/src/constants/IOSCategoryMode.ts +47 -0
  303. package/src/constants/IOSCategoryOptions.ts +44 -0
  304. package/src/constants/MediaItemPlayable.ts +4 -0
  305. package/src/constants/PitchAlgorithm.ts +16 -0
  306. package/src/constants/RatingType.ts +10 -0
  307. package/src/constants/RepeatMode.ts +10 -0
  308. package/src/constants/State.ts +34 -0
  309. package/src/constants/TrackType.ts +6 -0
  310. package/src/constants/index.ts +14 -0
  311. package/src/hooks/index.ts +6 -0
  312. package/src/hooks/useActiveTrack.ts +36 -0
  313. package/src/hooks/useAppIsInBackground.ts +20 -0
  314. package/src/hooks/useIsPlaying.ts +56 -0
  315. package/src/hooks/usePlayWhenReady.ts +37 -0
  316. package/src/hooks/usePlaybackState.ts +45 -0
  317. package/src/hooks/useProgress.ts +64 -0
  318. package/src/hooks/useTrackPlayerEvents.ts +48 -0
  319. package/src/index.ts +8 -0
  320. package/src/interfaces/AndroidAutoBrowseTree.ts +6 -0
  321. package/src/interfaces/AndroidOptions.ts +48 -0
  322. package/src/interfaces/CustomButtons.ts +6 -0
  323. package/src/interfaces/FeedbackOptions.ts +7 -0
  324. package/src/interfaces/MediaItem.ts +19 -0
  325. package/src/interfaces/MetadataOptions.ts +4 -0
  326. package/src/interfaces/NowPlayingMetadata.ts +5 -0
  327. package/src/interfaces/PlaybackState.ts +11 -0
  328. package/src/interfaces/PlayerOptions.ts +138 -0
  329. package/src/interfaces/Progress.ts +15 -0
  330. package/src/interfaces/ResourceObject.ts +1 -0
  331. package/src/interfaces/ServiceHandler.ts +1 -0
  332. package/src/interfaces/Track.ts +23 -0
  333. package/src/interfaces/TrackMetadataBase.ts +29 -0
  334. package/src/interfaces/UpdateOptions.ts +59 -0
  335. package/src/interfaces/events/AudioMetadataReceivedEvent.ts +37 -0
  336. package/src/interfaces/events/ControllerConnectedEvent.ts +9 -0
  337. package/src/interfaces/events/EventPayloadByEvent.ts +80 -0
  338. package/src/interfaces/events/FFTUpdateEvent.ts +9 -0
  339. package/src/interfaces/events/PlaybackActiveTrackChangedEvent.ts +29 -0
  340. package/src/interfaces/events/PlaybackAnimatedVolumeChangedEvent.ts +4 -0
  341. package/src/interfaces/events/PlaybackErrorEvent.ts +6 -0
  342. package/src/interfaces/events/PlaybackMetadataReceivedEvent.ts +16 -0
  343. package/src/interfaces/events/PlaybackPlayWhenReadyChangedEvent.ts +4 -0
  344. package/src/interfaces/events/PlaybackProgressUpdatedEvent.ts +5 -0
  345. package/src/interfaces/events/PlaybackQueueEndedEvent.ts +9 -0
  346. package/src/interfaces/events/PlaybackResumeEvent.ts +5 -0
  347. package/src/interfaces/events/PlaybackTrackChangedEvent.ts +11 -0
  348. package/src/interfaces/events/PlayerErrorEvent.ts +6 -0
  349. package/src/interfaces/events/RemoteBrowseEvent.ts +4 -0
  350. package/src/interfaces/events/RemoteCustomActionEvent.ts +7 -0
  351. package/src/interfaces/events/RemoteDuckEvent.ts +13 -0
  352. package/src/interfaces/events/RemoteJumpBackwardEvent.ts +7 -0
  353. package/src/interfaces/events/RemoteJumpForwardEvent.ts +7 -0
  354. package/src/interfaces/events/RemotePlayIdEvent.ts +4 -0
  355. package/src/interfaces/events/RemotePlaySearchEvent.ts +21 -0
  356. package/src/interfaces/events/RemoteSearchEvent.ts +3 -0
  357. package/src/interfaces/events/RemoteSeekEvent.ts +4 -0
  358. package/src/interfaces/events/RemoteSetRatingEvent.ts +5 -0
  359. package/src/interfaces/events/RemoteSkipEvent.ts +3 -0
  360. package/src/interfaces/events/index.ts +20 -0
  361. package/src/interfaces/index.ts +15 -0
  362. package/src/resolveAssetSource.ts +3 -0
  363. package/src/resolveAssetSource.web.ts +10 -0
  364. package/src/trackPlayer.ts +806 -0
  365. package/web/TrackPlayer/Player.ts +201 -0
  366. package/web/TrackPlayer/PlaylistPlayer.ts +215 -0
  367. package/web/TrackPlayer/RepeatMode.ts +6 -0
  368. package/web/TrackPlayer/SetupNotCalledError.ts +5 -0
  369. package/web/TrackPlayer/index.ts +3 -0
  370. package/web/TrackPlayerModule.ts +181 -0
  371. package/web/index.ts +4 -0
  372. package/CHANGELOG.md +0 -75
  373. package/android/react-native-music-control.iml +0 -139
  374. package/android/react-native-track-player.iml +0 -151
  375. package/android/src/main/java/com/guichaguri/trackplayer/TrackPlayer.java +0 -28
  376. package/android/src/main/java/com/guichaguri/trackplayer/module/MusicEvents.java +0 -55
  377. package/android/src/main/java/com/guichaguri/trackplayer/module/MusicModule.java +0 -298
  378. package/android/src/main/java/com/guichaguri/trackplayer/service/HeadlessJsMediaService.java +0 -174
  379. package/android/src/main/java/com/guichaguri/trackplayer/service/MusicBinder.java +0 -47
  380. package/android/src/main/java/com/guichaguri/trackplayer/service/MusicManager.java +0 -383
  381. package/android/src/main/java/com/guichaguri/trackplayer/service/MusicService.java +0 -271
  382. package/android/src/main/java/com/guichaguri/trackplayer/service/Utils.java +0 -243
  383. package/android/src/main/java/com/guichaguri/trackplayer/service/metadata/ButtonEvents.java +0 -148
  384. package/android/src/main/java/com/guichaguri/trackplayer/service/metadata/MetadataManager.java +0 -379
  385. package/android/src/main/java/com/guichaguri/trackplayer/service/models/Track.java +0 -141
  386. package/android/src/main/java/com/guichaguri/trackplayer/service/models/TrackType.java +0 -35
  387. package/android/src/main/res/drawable-hdpi/ic_forward.png +0 -0
  388. package/android/src/main/res/drawable-hdpi/ic_logo.png +0 -0
  389. package/android/src/main/res/drawable-hdpi/ic_next.png +0 -0
  390. package/android/src/main/res/drawable-hdpi/ic_pause.png +0 -0
  391. package/android/src/main/res/drawable-hdpi/ic_play.png +0 -0
  392. package/android/src/main/res/drawable-hdpi/ic_previous.png +0 -0
  393. package/android/src/main/res/drawable-hdpi/ic_rewind.png +0 -0
  394. package/android/src/main/res/drawable-hdpi/ic_stop.png +0 -0
  395. package/android/src/main/res/drawable-mdpi/ic_forward.png +0 -0
  396. package/android/src/main/res/drawable-mdpi/ic_logo.png +0 -0
  397. package/android/src/main/res/drawable-mdpi/ic_next.png +0 -0
  398. package/android/src/main/res/drawable-mdpi/ic_pause.png +0 -0
  399. package/android/src/main/res/drawable-mdpi/ic_play.png +0 -0
  400. package/android/src/main/res/drawable-mdpi/ic_previous.png +0 -0
  401. package/android/src/main/res/drawable-mdpi/ic_rewind.png +0 -0
  402. package/android/src/main/res/drawable-mdpi/ic_stop.png +0 -0
  403. package/android/src/main/res/drawable-xhdpi/ic_forward.png +0 -0
  404. package/android/src/main/res/drawable-xhdpi/ic_logo.png +0 -0
  405. package/android/src/main/res/drawable-xhdpi/ic_next.png +0 -0
  406. package/android/src/main/res/drawable-xhdpi/ic_pause.png +0 -0
  407. package/android/src/main/res/drawable-xhdpi/ic_play.png +0 -0
  408. package/android/src/main/res/drawable-xhdpi/ic_previous.png +0 -0
  409. package/android/src/main/res/drawable-xhdpi/ic_rewind.png +0 -0
  410. package/android/src/main/res/drawable-xhdpi/ic_stop.png +0 -0
  411. package/android/src/main/res/drawable-xxhdpi/ic_forward.png +0 -0
  412. package/android/src/main/res/drawable-xxhdpi/ic_logo.png +0 -0
  413. package/android/src/main/res/drawable-xxhdpi/ic_next.png +0 -0
  414. package/android/src/main/res/drawable-xxhdpi/ic_pause.png +0 -0
  415. package/android/src/main/res/drawable-xxhdpi/ic_play.png +0 -0
  416. package/android/src/main/res/drawable-xxhdpi/ic_previous.png +0 -0
  417. package/android/src/main/res/drawable-xxhdpi/ic_rewind.png +0 -0
  418. package/android/src/main/res/drawable-xxhdpi/ic_stop.png +0 -0
  419. package/android/src/main/res/drawable-xxxhdpi/ic_forward.png +0 -0
  420. package/android/src/main/res/drawable-xxxhdpi/ic_logo.png +0 -0
  421. package/android/src/main/res/drawable-xxxhdpi/ic_next.png +0 -0
  422. package/android/src/main/res/drawable-xxxhdpi/ic_pause.png +0 -0
  423. package/android/src/main/res/drawable-xxxhdpi/ic_play.png +0 -0
  424. package/android/src/main/res/drawable-xxxhdpi/ic_previous.png +0 -0
  425. package/android/src/main/res/drawable-xxxhdpi/ic_rewind.png +0 -0
  426. package/android/src/main/res/drawable-xxxhdpi/ic_stop.png +0 -0
  427. package/index.d.ts +0 -174
  428. package/index.js +0 -4
  429. package/ios/RNTrackPlayer/RNTrackPlayerBridge.h +0 -12
  430. package/ios/RNTrackPlayer/RNTrackPlayerBridge.m +0 -29
  431. package/ios/TrackPlayer.xcodeproj/project.pbxproj +0 -495
  432. package/ios/TrackPlayer.xcodeproj/project.xcworkspace/xcuserdata/marco.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  433. package/lib/ProgressComponent.js +0 -70
  434. package/lib/eventTypes.js +0 -28
  435. package/lib/hooks.js +0 -160
  436. package/lib/index.js +0 -177
  437. /package/ios/{TrackPlayer.xcodeproj → Example/SwiftAudio.xcodeproj}/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -0
@@ -0,0 +1,627 @@
1
+ import { AppRegistry, NativeEventEmitter, Platform, Animated, } from 'react-native';
2
+ import TrackPlayer from '../specs/NativeTrackPlayer';
3
+ import resolveAssetSource from './resolveAssetSource';
4
+ const isAndroid = Platform.OS === 'android';
5
+ const emitter = new NativeEventEmitter(TrackPlayer);
6
+ const animatedVolume = new Animated.Value(1);
7
+ animatedVolume.addListener((state) => TrackPlayer.setVolume(state.value));
8
+ // MARK: - Helpers
9
+ function resolveImportedAssetOrPath(pathOrAsset) {
10
+ return pathOrAsset === undefined
11
+ ? undefined
12
+ : typeof pathOrAsset === 'string'
13
+ ? pathOrAsset
14
+ : resolveImportedAsset(pathOrAsset);
15
+ }
16
+ function resolveImportedAsset(id) {
17
+ return id
18
+ ? (resolveAssetSource(id) ?? undefined)
19
+ : undefined;
20
+ }
21
+ // MARK: - General API
22
+ /**
23
+ * Initializes the player with the specified options.
24
+ *
25
+ * Note that on Android this method must only be called while the app is in the
26
+ * foreground, otherwise it will throw an error with code
27
+ * `'android_cannot_setup_player_in_background'`. In this case you can wait for
28
+ * the app to be in the foreground and try again.
29
+ *
30
+ * @param options The options to initialize the player with.
31
+ * @see https://rntp.dev/docs/api/functions/lifecycle
32
+ */
33
+ export async function setupPlayer(options = {}, background = false) {
34
+ return TrackPlayer.setupPlayer(options, background);
35
+ }
36
+ /**
37
+ * Register the playback service. The service will run as long as the player runs.
38
+ */
39
+ export function registerPlaybackService(factory) {
40
+ if (isAndroid) {
41
+ // Registers the headless task
42
+ AppRegistry.registerHeadlessTask('TrackPlayer', factory);
43
+ }
44
+ else if (Platform.OS === 'web') {
45
+ factory()();
46
+ }
47
+ else {
48
+ // Initializes and runs the service in the next tick
49
+ setImmediate(factory());
50
+ }
51
+ }
52
+ export function addEventListener(event, listener) {
53
+ return emitter.addListener(event, listener);
54
+ }
55
+ export async function add(tracks, insertBeforeIndex = -1) {
56
+ const resolvedTracks = (Array.isArray(tracks) ? tracks : [tracks]).map((track) => ({
57
+ ...track,
58
+ url: resolveImportedAssetOrPath(track.url),
59
+ artwork: resolveImportedAssetOrPath(track.artwork),
60
+ }));
61
+ return resolvedTracks.length < 1
62
+ ? undefined
63
+ : TrackPlayer.add(resolvedTracks, insertBeforeIndex);
64
+ }
65
+ /**
66
+ * Replaces the current track or loads the track as the first in the queue.
67
+ *
68
+ * @param track The track to load.
69
+ */
70
+ export async function load(track) {
71
+ return TrackPlayer.load(track);
72
+ }
73
+ /**
74
+ * Move a track within the queue.
75
+ *
76
+ * @param fromIndex The index of the track to be moved.
77
+ * @param toIndex The index to move the track to. If the index is larger than
78
+ * the size of the queue, then the track is moved to the end of the queue.
79
+ */
80
+ export async function move(fromIndex, toIndex) {
81
+ return TrackPlayer.move(fromIndex, toIndex);
82
+ }
83
+ export async function remove(indexOrIndexes) {
84
+ return TrackPlayer.remove(Array.isArray(indexOrIndexes) ? indexOrIndexes : [indexOrIndexes]);
85
+ }
86
+ /**
87
+ * Clears any upcoming tracks from the queue.
88
+ */
89
+ export async function removeUpcomingTracks() {
90
+ return TrackPlayer.removeUpcomingTracks();
91
+ }
92
+ /**
93
+ * Skips to a track in the queue.
94
+ *
95
+ * @param index The index of the track to skip to.
96
+ * @param initialPosition (Optional) The initial position to seek to in seconds.
97
+ */
98
+ export async function skip(index, initialPosition = -1) {
99
+ return TrackPlayer.skip(index, initialPosition);
100
+ }
101
+ /**
102
+ * Skips to the next track in the queue.
103
+ *
104
+ * @param initialPosition (Optional) The initial position to seek to in seconds.
105
+ */
106
+ export async function skipToNext(initialPosition = -1) {
107
+ return TrackPlayer.skipToNext(initialPosition);
108
+ }
109
+ /**
110
+ * Skips to the previous track in the queue.
111
+ *
112
+ * @param initialPosition (Optional) The initial position to seek to in seconds.
113
+ */
114
+ export async function skipToPrevious(initialPosition = -1) {
115
+ return TrackPlayer.skipToPrevious(initialPosition);
116
+ }
117
+ // MARK: - Control Center / Notifications API
118
+ /**
119
+ * Updates the configuration for the components.
120
+ *
121
+ * @param options The options to update.
122
+ * @see https://rntp.dev/docs/api/functions/player#updateoptionsoptions
123
+ */
124
+ export async function updateOptions({ alwaysPauseOnInterruption, ...options } = {}) {
125
+ return TrackPlayer.updateOptions({
126
+ ...options,
127
+ android: {
128
+ // Handle deprecated alwaysPauseOnInterruption option:
129
+ alwaysPauseOnInterruption: options.android?.alwaysPauseOnInterruption ?? alwaysPauseOnInterruption,
130
+ ...options.android,
131
+ },
132
+ icon: resolveImportedAsset(options.icon),
133
+ playIcon: resolveImportedAsset(options.playIcon),
134
+ pauseIcon: resolveImportedAsset(options.pauseIcon),
135
+ stopIcon: resolveImportedAsset(options.stopIcon),
136
+ previousIcon: resolveImportedAsset(options.previousIcon),
137
+ nextIcon: resolveImportedAsset(options.nextIcon),
138
+ // rewindIcon: resolveImportedAsset(options.rewindIcon),
139
+ // forwardIcon: resolveImportedAsset(options.forwardIcon),
140
+ });
141
+ }
142
+ /**
143
+ * Updates the metadata of a track in the queue. If the current track is updated,
144
+ * the notification and the Now Playing Center will be updated accordingly.
145
+ *
146
+ * @param trackIndex The index of the track whose metadata will be updated.
147
+ * @param metadata The metadata to update.
148
+ */
149
+ export async function updateMetadataForTrack(trackIndex, metadata) {
150
+ return TrackPlayer.updateMetadataForTrack(trackIndex, {
151
+ ...metadata,
152
+ artwork: resolveImportedAssetOrPath(metadata.artwork),
153
+ });
154
+ }
155
+ /**
156
+ * Updates the metadata content of the notification (Android) and the Now Playing Center (iOS)
157
+ * without affecting the data stored for the current track.
158
+ */
159
+ export function updateNowPlayingMetadata(metadata) {
160
+ return TrackPlayer.updateNowPlayingMetadata({
161
+ ...metadata,
162
+ artwork: resolveImportedAssetOrPath(metadata.artwork),
163
+ });
164
+ }
165
+ // MARK: - Player API
166
+ /**
167
+ * Resets the player stopping the current track and clearing the queue.
168
+ */
169
+ export async function reset() {
170
+ return TrackPlayer.reset();
171
+ }
172
+ /**
173
+ * Plays or resumes the current track.
174
+ */
175
+ export async function play() {
176
+ return TrackPlayer.play();
177
+ }
178
+ /**
179
+ * Pauses the current track.
180
+ */
181
+ export async function pause() {
182
+ return TrackPlayer.pause();
183
+ }
184
+ /**
185
+ * Stops the current track.
186
+ */
187
+ export async function stop() {
188
+ return TrackPlayer.stop();
189
+ }
190
+ /**
191
+ * Sets whether the player will play automatically when it is ready to do so.
192
+ * This is the equivalent of calling `TrackPlayer.play()` when `playWhenReady = true`
193
+ * or `TrackPlayer.pause()` when `playWhenReady = false`.
194
+ */
195
+ export async function setPlayWhenReady(playWhenReady) {
196
+ return TrackPlayer.setPlayWhenReady(playWhenReady);
197
+ }
198
+ /**
199
+ * Gets whether the player will play automatically when it is ready to do so.
200
+ */
201
+ export async function getPlayWhenReady() {
202
+ return TrackPlayer.getPlayWhenReady();
203
+ }
204
+ /**
205
+ * Seeks to a specified time position in the current track.
206
+ *
207
+ * @param position The position to seek to in seconds.
208
+ */
209
+ export async function seekTo(position) {
210
+ return TrackPlayer.seekTo(position);
211
+ }
212
+ /**
213
+ * Seeks by a relative time offset in the current track.
214
+ *
215
+ * @param offset The time offset to seek by in seconds.
216
+ */
217
+ export async function seekBy(offset) {
218
+ return TrackPlayer.seekBy(offset);
219
+ }
220
+ /**
221
+ * Sets the volume of the player.
222
+ *
223
+ * @param volume The volume as a number between 0 and 1.
224
+ */
225
+ export async function setVolume(level) {
226
+ return TrackPlayer.setVolume(level);
227
+ }
228
+ /**
229
+ * Sets the volume of the player with a simple linear scaling.
230
+ * In Android this is achieved via a native thread call.
231
+ * In other platforms this is achieved via RN's Animated.Value.
232
+ *
233
+ * @param volume The volume as a number between 0 and 1.
234
+ * @param duration The duration of the animation in milliseconds. defualt is 0 ms, which just functions as TP.setVolume.
235
+ * @param init The initial value of the volume. This may be useful eg to be 0 for a fade in event.
236
+ * @param interval The interval of the animation in milliseconds. default is 20 ms.
237
+ * @param msg (Android) The message to be emitted after volume is fully changed, via Event.PlaybackAnimatedVolumeChanged.
238
+ * @param callback (other platforms) The callback to be called after volume is fully changed.
239
+ */
240
+ export const setAnimatedVolume = async ({ volume, duration = 0, init = -1, interval = 20, msg = '', callback = () => undefined, }) => {
241
+ if (duration === 0) {
242
+ TrackPlayer.setVolume(volume);
243
+ return callback();
244
+ }
245
+ if (init !== -1) {
246
+ TrackPlayer.setVolume(init);
247
+ }
248
+ if (isAndroid) {
249
+ return TrackPlayer.setAnimatedVolume(volume, duration, interval, msg);
250
+ }
251
+ else {
252
+ /*
253
+ TODO: Animated.value change relies on React rendering so Android
254
+ headlessJS will not work with it. however does iOS and windows work in the background?
255
+ if not this code block is needed
256
+ if (AppState.currentState !== 'active') {
257
+ // need to figure out a way to run Animated.timing in background. probably needs our own module
258
+ duration = 0;
259
+ }
260
+ */
261
+ volume = Math.min(volume, 1);
262
+ if (duration === 0) {
263
+ animatedVolume.setValue(volume);
264
+ callback();
265
+ return;
266
+ }
267
+ animatedVolume.stopAnimation();
268
+ Animated.timing(animatedVolume, {
269
+ toValue: volume,
270
+ useNativeDriver: true,
271
+ duration,
272
+ }).start(() => callback());
273
+ }
274
+ };
275
+ /**
276
+ * performs fading out to pause playback.
277
+ * @param duration duration of the fade progress in ms
278
+ * @param interval interval of the fade progress in ms
279
+ */
280
+ export const fadeOutPause = async (duration = 500, interval = 20) => {
281
+ if (isAndroid) {
282
+ TrackPlayer.fadeOutPause(duration, interval);
283
+ }
284
+ else {
285
+ setAnimatedVolume({
286
+ duration,
287
+ interval,
288
+ volume: 0,
289
+ callback: () => pause(),
290
+ });
291
+ }
292
+ };
293
+ /**
294
+ * performs fading into playing the next track.
295
+ * @param duration duration of the fade progress in ms
296
+ * @param interval interval of the fade progress in ms
297
+ * @param toVolume volume to fade into
298
+ */
299
+ export const fadeOutNext = async (duration = 500, interval = 20, toVolume = 1) => {
300
+ if (isAndroid) {
301
+ TrackPlayer.fadeOutNext(duration, interval, toVolume);
302
+ }
303
+ else {
304
+ setAnimatedVolume({
305
+ duration,
306
+ interval,
307
+ volume: 0,
308
+ callback: async () => {
309
+ await skipToNext();
310
+ setAnimatedVolume({
311
+ duration,
312
+ interval,
313
+ volume: toVolume,
314
+ });
315
+ },
316
+ });
317
+ }
318
+ };
319
+ /**
320
+ * performs fading into playing the previous track.
321
+ * @param duration duration of the fade progress in ms
322
+ * @param interval interval of the fade progress in ms
323
+ * @param toVolume volume to fade into
324
+ */
325
+ export const fadeOutPrevious = async (duration = 500, interval = 20, toVolume = 1) => {
326
+ if (isAndroid) {
327
+ TrackPlayer.fadeOutPrevious(duration, interval, toVolume);
328
+ }
329
+ else {
330
+ setAnimatedVolume({
331
+ duration,
332
+ interval,
333
+ volume: 0,
334
+ callback: async () => {
335
+ await skipToPrevious();
336
+ setAnimatedVolume({
337
+ duration,
338
+ interval,
339
+ volume: toVolume,
340
+ });
341
+ },
342
+ });
343
+ }
344
+ };
345
+ /**
346
+ * performs fading into skipping to a track.
347
+ * @param index the index of the track to skip to
348
+ * @param duration duration of the fade progress in ms
349
+ * @param interval interval of the fade progress in ms
350
+ * @param toVolume volume to fade into
351
+ */
352
+ export const fadeOutJump = async (index, duration = 500, interval = 20, toVolume = 1) => {
353
+ if (isAndroid) {
354
+ TrackPlayer.fadeOutJump(index, duration, interval, toVolume);
355
+ }
356
+ else {
357
+ setAnimatedVolume({
358
+ duration,
359
+ interval,
360
+ volume: 0,
361
+ callback: async () => {
362
+ await skip(index);
363
+ setAnimatedVolume({
364
+ duration,
365
+ interval,
366
+ volume: toVolume,
367
+ });
368
+ },
369
+ });
370
+ }
371
+ };
372
+ /**
373
+ * Sets the playback rate.
374
+ *
375
+ * @param rate The playback rate to change to, where 0.5 would be half speed,
376
+ * 1 would be regular speed, 2 would be double speed etc.
377
+ */
378
+ export async function setRate(rate) {
379
+ return TrackPlayer.setRate(rate);
380
+ }
381
+ /**
382
+ * Sets the playback pitch. android only
383
+ *
384
+ * @param pitch The pitch.
385
+ */
386
+ export async function setPitch(pitch) {
387
+ return isAndroid ? TrackPlayer.setPitch(pitch) : void 0;
388
+ }
389
+ /**
390
+ * Sets the queue.
391
+ *
392
+ * @param tracks The tracks to set as the queue.
393
+ * @see https://rntp.dev/docs/api/constants/repeat-mode
394
+ */
395
+ export async function setQueue(tracks) {
396
+ return TrackPlayer.setQueue(tracks);
397
+ }
398
+ /**
399
+ * Sets the queue repeat mode.
400
+ *
401
+ * @param repeatMode The repeat mode to set.
402
+ * @see https://rntp.dev/docs/api/constants/repeat-mode
403
+ */
404
+ export async function setRepeatMode(mode) {
405
+ return TrackPlayer.setRepeatMode(mode);
406
+ }
407
+ // MARK: - Getters
408
+ /**
409
+ * Gets the volume of the player as a number between 0 and 1.
410
+ */
411
+ export async function getVolume() {
412
+ return TrackPlayer.getVolume();
413
+ }
414
+ /**
415
+ * Gets the playback rate where 0.5 would be half speed, 1 would be
416
+ * regular speed and 2 would be double speed etc.
417
+ */
418
+ export async function getRate() {
419
+ return TrackPlayer.getRate();
420
+ }
421
+ /**
422
+ * Gets the pitch of the track.
423
+ */
424
+ export async function getPitch() {
425
+ return isAndroid ? TrackPlayer.getPitch() : 1;
426
+ }
427
+ /**
428
+ * Gets a track object from the queue.
429
+ *
430
+ * @param index The index of the track.
431
+ * @returns The track object or undefined if there isn't a track object at that
432
+ * index.
433
+ */
434
+ export async function getTrack(index) {
435
+ // @ts-expect-error codegen issues
436
+ return TrackPlayer.getTrack(index);
437
+ }
438
+ /**
439
+ * Gets the whole queue.
440
+ */
441
+ export async function getQueue() {
442
+ // @ts-expect-error codegen issues
443
+ return TrackPlayer.getQueue();
444
+ }
445
+ /**
446
+ * Gets the index of the active track in the queue or undefined if there is no
447
+ * current track.
448
+ */
449
+ export async function getActiveTrackIndex() {
450
+ return (await TrackPlayer.getActiveTrackIndex()) ?? undefined;
451
+ }
452
+ /**
453
+ * Gets the active track or undefined if there is no current track.
454
+ */
455
+ export async function getActiveTrack() {
456
+ // @ts-expect-error codegen issues
457
+ return (await TrackPlayer.getActiveTrack()) ?? undefined;
458
+ }
459
+ /**
460
+ * Gets information on the progress of the currently active track, including its
461
+ * current playback position in seconds, buffered position in seconds and
462
+ * duration in seconds.
463
+ */
464
+ export async function getProgress() {
465
+ // @ts-expect-error codegen issues
466
+ return TrackPlayer.getProgress();
467
+ }
468
+ /**
469
+ * Gets the playback state of the player.
470
+ *
471
+ * @see https://rntp.dev/docs/api/constants/state
472
+ */
473
+ export async function getPlaybackState() {
474
+ // @ts-expect-error codegen issues
475
+ return TrackPlayer.getPlaybackState();
476
+ }
477
+ /**
478
+ * Gets the queue repeat mode.
479
+ *
480
+ * @see https://rntp.dev/docs/api/constants/repeat-mode
481
+ */
482
+ export async function getRepeatMode() {
483
+ return TrackPlayer.getRepeatMode();
484
+ }
485
+ /**
486
+ * Retries the current item when the playback state is `State.Error`.
487
+ */
488
+ export async function retry() {
489
+ return TrackPlayer.retry();
490
+ }
491
+ /**
492
+ * Sets the content hierarchy of Android Auto (Android only). The hierarchy structure is a dict with
493
+ * the mediaId as keys, and a list of MediaItem as values. To use, you must at least specify the root directory, where
494
+ * the key is "/". If the root directory contains BROWSABLE MediaItems, they will be shown as tabs. Do note Google requires
495
+ * AA to have a max of 4 tabs. You may then set the mediaId keys of the browsable MediaItems to be a list of other MediaItems.
496
+ *
497
+ * @param browseTree the content hierarchy dict.
498
+ * @returns a serialized copy of the browseTree set by native. For debug purposes.
499
+ */
500
+ export async function setBrowseTree(browseTree) {
501
+ if (!isAndroid)
502
+ return new Promise(() => '');
503
+ return TrackPlayer.setBrowseTree(browseTree);
504
+ }
505
+ /**
506
+ * this method enables android auto playback progress tracking; see
507
+ * https://developer.android.com/training/cars/media#browse-progress-bar
508
+ * android only.
509
+ * @param mediaID the mediaID.
510
+ * @returns
511
+ */
512
+ export async function setPlaybackState(mediaID) {
513
+ if (!isAndroid)
514
+ return;
515
+ TrackPlayer.setPlaybackState(mediaID);
516
+ }
517
+ /**
518
+ * Sets the content style of Android Auto (Android only).
519
+ * there are list style and grid style. see https://developer.android.com/training/cars/media#apply_content_style .
520
+ * the styles are applicable to browsable nodes and playable nodes. setting the args to true will yield the list style.
521
+ * false = the grid style.
522
+ */
523
+ export function setBrowseTreeStyle(browsableStyle, playableStyle) {
524
+ if (!isAndroid)
525
+ return null;
526
+ TrackPlayer.setBrowseTreeStyle(browsableStyle, playableStyle);
527
+ return null;
528
+ }
529
+ /**
530
+ * Sets the search results of Android Auto (Android only). The hierarchy structure is a dict with
531
+ * the mediaId as keys, and a list of MediaItem as values.
532
+ *
533
+ * @param searchResults the search results.
534
+ * @returns a serialized copy of the searchResults set by native. For debug purposes.
535
+ */
536
+ export async function setSearchResults(searchResults) {
537
+ if (!isAndroid)
538
+ return new Promise(() => '');
539
+ return TrackPlayer.setSearchResults(searchResults);
540
+ }
541
+ /**
542
+ * acquires the wake lock of MusicService (android only.)
543
+ */
544
+ export async function acquireWakeLock() {
545
+ if (!isAndroid)
546
+ return;
547
+ TrackPlayer.acquireWakeLock();
548
+ }
549
+ /**
550
+ * acquires the wake lock of MusicService (android only.)
551
+ */
552
+ export async function abandonWakeLock() {
553
+ if (!isAndroid)
554
+ return;
555
+ TrackPlayer.abandonWakeLock();
556
+ }
557
+ /**
558
+ * prepare to crossfade (android only.) the crossfade alternate
559
+ * player will be automatically primed to the current player's index,
560
+ * then by previous = true or not, skip to previous or next. player
561
+ * will be prepared. its advised to call this well before actually performing
562
+ * crossfade so the resource can be prepared.
563
+ */
564
+ export async function crossFadePrepare(previous = false, seekTo = 0) {
565
+ if (!isAndroid)
566
+ return;
567
+ TrackPlayer.crossFadePrepare(previous, seekTo);
568
+ }
569
+ /**
570
+ * perform crossfade (android only).
571
+ *
572
+ * fadeDuration and fadeInterval are both in ms.
573
+ *
574
+ * fadeToVolume is a float from 0-1.
575
+ *
576
+ * waitUntil is in ms.
577
+ */
578
+ export async function crossFade(fadeDuration = 2000, fadeInterval = 20, fadeToVolume = 1, waitUntil = 0) {
579
+ if (!isAndroid)
580
+ return;
581
+ TrackPlayer.switchExoPlayer(fadeDuration, fadeInterval, fadeToVolume, waitUntil);
582
+ }
583
+ /**
584
+ * get the last connected package. non android will return undefined.
585
+ *
586
+ * android without a connected package (either system.UI, android auto, or media controller) yet
587
+ * will return ''; else will be one of the three.
588
+ *
589
+ * I intend to use this to determine if app crashed from android auto.
590
+ */
591
+ export async function getLastConnectedPackage() {
592
+ if (!isAndroid)
593
+ return;
594
+ return TrackPlayer.getLastConnectedPackage();
595
+ }
596
+ /**
597
+ * android only. set loudnessEnhance via audiofx's loudnessEnhancer. gain is in mB (1dB=100mB)
598
+ */
599
+ export async function setLoudnessEnhance(gain = 0) {
600
+ if (!isAndroid)
601
+ return;
602
+ TrackPlayer.setLoudnessEnhance(gain);
603
+ }
604
+ /**
605
+ * android only. set equalizer preset.
606
+ */
607
+ export async function setEqualizerPreset(preset = 0) {
608
+ if (!isAndroid)
609
+ return;
610
+ TrackPlayer.setEqualizerPreset(preset);
611
+ }
612
+ /**
613
+ * android only. get the current equalizer preset index (int).
614
+ */
615
+ export async function getCurrentEqualizerPreset() {
616
+ if (!isAndroid)
617
+ return -1;
618
+ return TrackPlayer.getCurrentEqualizerPreset();
619
+ }
620
+ /**
621
+ * android only. get the current eq preset names.
622
+ */
623
+ export async function getEqualizerPresets() {
624
+ if (!isAndroid)
625
+ return [];
626
+ return TrackPlayer.getEqualizerPresets();
627
+ }
@@ -0,0 +1,40 @@
1
+ import { State } from '../../src/constants/State';
2
+ import type { Track, Progress, PlaybackState } from '../../src/interfaces';
3
+ export declare class Player {
4
+ protected hasInitialized: boolean;
5
+ protected element?: HTMLMediaElement;
6
+ protected player?: shaka.Player;
7
+ protected _current?: Track;
8
+ protected _playWhenReady: boolean;
9
+ protected _state: PlaybackState;
10
+ get current(): Track | undefined;
11
+ set current(cur: Track | undefined);
12
+ get state(): PlaybackState;
13
+ set state(newState: PlaybackState);
14
+ get playWhenReady(): boolean;
15
+ set playWhenReady(pwr: boolean);
16
+ setupPlayer(): Promise<void>;
17
+ /**
18
+ * event handlers
19
+ */
20
+ protected onStateUpdate(state: Exclude<State, State.Error>): void;
21
+ protected onError(error: any): void;
22
+ /**
23
+ * player control
24
+ */
25
+ load(track: Track): Promise<void>;
26
+ retry(): Promise<void>;
27
+ stop(): Promise<void>;
28
+ play(): Promise<void>;
29
+ pause(): void;
30
+ setRate(rate: number): number;
31
+ getRate(): number;
32
+ seekBy(offset: number): void;
33
+ seekTo(seconds: number): void;
34
+ setVolume(volume: number): void;
35
+ getVolume(): number;
36
+ getDuration(): number;
37
+ getPosition(): number;
38
+ getProgress(): Progress;
39
+ getBufferedPosition(): (index: number) => number;
40
+ }