expo-audio 58.0.6 → 58.0.8

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 (50) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/android/build.gradle +2 -2
  3. package/android/src/main/java/expo/modules/audio/AudioModule.kt +26 -23
  4. package/android/src/main/java/expo/modules/audio/AudioPlayer.kt +2 -2
  5. package/android/src/main/java/expo/modules/audio/AudioPlaylist.kt +2 -2
  6. package/android/src/main/java/expo/modules/audio/AudioUtils.kt +5 -2
  7. package/android/src/main/java/expo/modules/audio/BaseAudioPlayer.kt +1 -0
  8. package/android/src/main/java/expo/modules/audio/PlayRequestingPlayer.kt +24 -0
  9. package/android/src/main/java/expo/modules/audio/Playable.kt +9 -0
  10. package/android/src/main/java/expo/modules/audio/service/AudioControlsService.kt +9 -6
  11. package/ios/AudioPlayer.swift +8 -4
  12. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.8/expo.modules.audio-58.0.8-sources.jar +0 -0
  13. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.8/expo.modules.audio-58.0.8-sources.jar.md5 +1 -0
  14. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.8/expo.modules.audio-58.0.8-sources.jar.sha1 +1 -0
  15. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.8/expo.modules.audio-58.0.8-sources.jar.sha256 +1 -0
  16. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.8/expo.modules.audio-58.0.8-sources.jar.sha512 +1 -0
  17. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.8/expo.modules.audio-58.0.8.aar +0 -0
  18. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.8/expo.modules.audio-58.0.8.aar.md5 +1 -0
  19. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.8/expo.modules.audio-58.0.8.aar.sha1 +1 -0
  20. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.8/expo.modules.audio-58.0.8.aar.sha256 +1 -0
  21. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.8/expo.modules.audio-58.0.8.aar.sha512 +1 -0
  22. package/local-maven-repo/expo/modules/audio/expo.modules.audio/{58.0.6/expo.modules.audio-58.0.6.module → 58.0.8/expo.modules.audio-58.0.8.module} +22 -22
  23. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.8/expo.modules.audio-58.0.8.module.md5 +1 -0
  24. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.8/expo.modules.audio-58.0.8.module.sha1 +1 -0
  25. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.8/expo.modules.audio-58.0.8.module.sha256 +1 -0
  26. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.8/expo.modules.audio-58.0.8.module.sha512 +1 -0
  27. package/local-maven-repo/expo/modules/audio/expo.modules.audio/{58.0.6/expo.modules.audio-58.0.6.pom → 58.0.8/expo.modules.audio-58.0.8.pom} +1 -1
  28. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.8/expo.modules.audio-58.0.8.pom.md5 +1 -0
  29. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.8/expo.modules.audio-58.0.8.pom.sha1 +1 -0
  30. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.8/expo.modules.audio-58.0.8.pom.sha256 +1 -0
  31. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.8/expo.modules.audio-58.0.8.pom.sha512 +1 -0
  32. package/package.json +5 -5
  33. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6-sources.jar +0 -0
  34. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6-sources.jar.md5 +0 -1
  35. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6-sources.jar.sha1 +0 -1
  36. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6-sources.jar.sha256 +0 -1
  37. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6-sources.jar.sha512 +0 -1
  38. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.aar +0 -0
  39. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.aar.md5 +0 -1
  40. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.aar.sha1 +0 -1
  41. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.aar.sha256 +0 -1
  42. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.aar.sha512 +0 -1
  43. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.module.md5 +0 -1
  44. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.module.sha1 +0 -1
  45. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.module.sha256 +0 -1
  46. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.module.sha512 +0 -1
  47. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.pom.md5 +0 -1
  48. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.pom.sha1 +0 -1
  49. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.pom.sha256 +0 -1
  50. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.pom.sha512 +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 58.0.8
4
+
5
+ ### Patch Changes
6
+
7
+ - [Android] Request audio focus when playback is started from the notification, the lock screen or a media button, so it pauses for an incoming call like playback started from JS. ([#50745](https://github.com/expo/expo/pull/50745) by [@enavermate](https://github.com/enavermate))
8
+
9
+ ## 58.0.7
10
+
11
+ ### Patch Changes
12
+
13
+ - [iOS] Fix `currentDate` call in `replace()` freezing the app for up to several seconds while the new source loads. ([#50724](https://github.com/expo/expo/pull/50724) by [@tomKFM](https://github.com/tomKFM))
14
+
3
15
  ## 58.0.6
4
16
 
5
17
  ### Patch Changes
@@ -4,13 +4,13 @@ plugins {
4
4
  }
5
5
 
6
6
  group = 'expo.modules.audio'
7
- version = '58.0.6'
7
+ version = '58.0.8'
8
8
 
9
9
  android {
10
10
  namespace "expo.modules.audio"
11
11
  defaultConfig {
12
12
  versionCode 1
13
- versionName "58.0.6"
13
+ versionName "58.0.8"
14
14
  }
15
15
 
16
16
  compileOptions {
@@ -294,6 +294,28 @@ class AudioModule : Module() {
294
294
  focusAcquired = false
295
295
  }
296
296
 
297
+ // Called on the main thread, from JS and from outside it (see `Playable.onPlayRequest`).
298
+ private fun playWithAudioFocus(playable: Playable) {
299
+ if (!audioEnabled) {
300
+ Log.e(TAG, "Audio has been disabled. Re-enable to start playing")
301
+ return
302
+ }
303
+ if (!shouldPlayInSilentMode()) {
304
+ return
305
+ }
306
+ val focusResult = requestAudioFocus()
307
+ if (focusResult == AudioFocusResult.FAILED) {
308
+ return
309
+ }
310
+ (playable as? AudioPlayer)?.let { registerAudioSessionActivityKeeper(it) }
311
+ if (focusResult == AudioFocusResult.DELAYED) {
312
+ // The AUDIOFOCUS_GAIN branch starts it once the system grants focus.
313
+ playable.isPaused = true
314
+ return
315
+ }
316
+ playable.play()
317
+ }
318
+
297
319
  private fun registerAudioSessionActivityKeeper(player: AudioPlayer) {
298
320
  if (player.keepAudioSessionActive) {
299
321
  audioSessionActivityKeepers.add(player.id)
@@ -545,6 +567,7 @@ class AudioModule : Module() {
545
567
  releaseAudioFocusIfUnused()
546
568
  }
547
569
  }
570
+ player.onPlayRequest = { playWithAudioFocus(player) }
548
571
  players[player.id] = player
549
572
  player
550
573
  }
@@ -649,19 +672,8 @@ class AudioModule : Module() {
649
672
  }
650
673
 
651
674
  Function("play") { player: AudioPlayer ->
652
- if (!audioEnabled) {
653
- Log.e(TAG, "Audio has been disabled. Re-enable to start playing")
654
- return@Function
655
- }
656
- if (!shouldPlayInSilentMode()) {
657
- return@Function
658
- }
659
675
  runOnMain {
660
- if (requestAudioFocus() == AudioFocusResult.FAILED) {
661
- return@runOnMain
662
- }
663
- registerAudioSessionActivityKeeper(player)
664
- player.ref.play()
676
+ playWithAudioFocus(player)
665
677
  }
666
678
  }
667
679
 
@@ -913,6 +925,7 @@ class AudioModule : Module() {
913
925
  releaseAudioFocusIfUnused()
914
926
  }
915
927
  }
928
+ playlist.onPlayRequest = { playWithAudioFocus(playlist) }
916
929
  playlists[playlist.id] = playlist
917
930
  playlist
918
931
  }
@@ -1015,18 +1028,8 @@ class AudioModule : Module() {
1015
1028
  }
1016
1029
 
1017
1030
  Function("play") { playlist: AudioPlaylist ->
1018
- if (!audioEnabled) {
1019
- Log.e(TAG, "Audio has been disabled. Re-enable to start playing")
1020
- return@Function
1021
- }
1022
- if (!shouldPlayInSilentMode()) {
1023
- return@Function
1024
- }
1025
1031
  runOnMain {
1026
- if (!focusAcquired && requestAudioFocus() == AudioFocusResult.FAILED) {
1027
- return@runOnMain
1028
- }
1029
- playlist.ref.play()
1032
+ playWithAudioFocus(playlist)
1030
1033
  }
1031
1034
  }
1032
1035
 
@@ -66,7 +66,7 @@ class AudioPlayer(
66
66
  override var isActiveForLockScreen = false
67
67
  override var metadata: Metadata? = null
68
68
  override var lockScreenOptions: AudioLockScreenOptions? = null
69
- override var mediaSession: MediaSession = buildBasicMediaSession(context, ref)
69
+ override var mediaSession: MediaSession = buildBasicMediaSession(context, ref) { requestPlay() }
70
70
  override val serviceConnection = AudioPlaybackServiceConnection(WeakReference(this), appContext)
71
71
 
72
72
  override val isLive: Boolean
@@ -202,7 +202,7 @@ class AudioPlayer(
202
202
 
203
203
  override fun assignBasicMediaSession() {
204
204
  mediaSession.release()
205
- mediaSession = buildBasicMediaSession(context, ref)
205
+ mediaSession = buildBasicMediaSession(context, ref) { requestPlay() }
206
206
  }
207
207
 
208
208
  private fun sendAudioSampleUpdate(sample: List<Float>) {
@@ -43,7 +43,7 @@ class AudioPlaylist(
43
43
  override var isActiveForLockScreen = false
44
44
  override var metadata: Metadata? = null
45
45
  override var lockScreenOptions: AudioLockScreenOptions? = null
46
- override var mediaSession: MediaSession = buildBasicMediaSession(context, ref)
46
+ override var mediaSession: MediaSession = buildBasicMediaSession(context, ref) { requestPlay() }
47
47
  override val serviceConnection = AudioPlaybackServiceConnection(WeakReference(this), appContext)
48
48
  override val supportsNextTrack = true
49
49
  override val supportsPreviousTrack = true
@@ -198,7 +198,7 @@ class AudioPlaylist(
198
198
 
199
199
  override fun assignBasicMediaSession() {
200
200
  mediaSession.release()
201
- mediaSession = buildBasicMediaSession(appContext?.reactContext ?: return, ref)
201
+ mediaSession = buildBasicMediaSession(appContext?.reactContext ?: return, ref) { requestPlay() }
202
202
  }
203
203
 
204
204
  override fun currentStatus(): Map<String, Any?> {
@@ -3,7 +3,9 @@ package expo.modules.audio
3
3
  import android.content.Context
4
4
  import android.media.AudioDeviceInfo
5
5
  import android.os.Bundle
6
+ import androidx.annotation.OptIn
6
7
  import androidx.media3.common.Player
8
+ import androidx.media3.common.util.UnstableApi
7
9
  import androidx.media3.session.MediaSession
8
10
  import java.io.File
9
11
  import java.io.IOException
@@ -31,8 +33,9 @@ fun getMapFromDeviceInfo(deviceInfo: AudioDeviceInfo): Bundle {
31
33
  return map
32
34
  }
33
35
 
34
- fun buildBasicMediaSession(context: Context, player: Player): MediaSession {
35
- return MediaSession.Builder(context, player)
36
+ @OptIn(UnstableApi::class)
37
+ fun buildBasicMediaSession(context: Context, player: Player, onPlay: () -> Unit): MediaSession {
38
+ return MediaSession.Builder(context, PlayRequestingPlayer(player, onPlay))
36
39
  .setId("ExpoAudioBasicMediaSession_${player.hashCode()}")
37
40
  .build()
38
41
  }
@@ -41,6 +41,7 @@ abstract class BaseAudioPlayer(
41
41
  override var previousVolume = 1f
42
42
  override var onPlaybackStateChange: ((Boolean) -> Unit)? = null
43
43
  override var onRelease: (() -> Unit)? = null
44
+ override var onPlayRequest: (() -> Unit)? = null
44
45
  override val player get() = ref
45
46
 
46
47
  protected var playerScope = CoroutineScope(Dispatchers.Main)
@@ -0,0 +1,24 @@
1
+ package expo.modules.audio
2
+
3
+ import androidx.media3.common.ForwardingPlayer
4
+ import androidx.media3.common.Player
5
+ import androidx.media3.common.util.UnstableApi
6
+
7
+ // A media session calls `play()` on its player directly, and a Media3 `MediaController` can also
8
+ // start playback with `setPlayWhenReady(true)`. Routing both to `onPlay` lets playback started from
9
+ // the lock screen, a media button or another app request audio focus, like playback started in JS.
10
+ @UnstableApi
11
+ internal class PlayRequestingPlayer(
12
+ player: Player,
13
+ private val onPlay: () -> Unit
14
+ ) : ForwardingPlayer(player) {
15
+ override fun play() = onPlay()
16
+
17
+ override fun setPlayWhenReady(playWhenReady: Boolean) {
18
+ if (playWhenReady) {
19
+ onPlay()
20
+ } else {
21
+ super.setPlayWhenReady(false)
22
+ }
23
+ }
24
+ }
@@ -17,6 +17,13 @@ interface Playable {
17
17
  var onPlaybackStateChange: ((Boolean) -> Unit)?
18
18
  var onRelease: (() -> Unit)?
19
19
 
20
+ /**
21
+ * Starts playback through `AudioModule`, which requests audio focus first. Playback started outside
22
+ * JS (the notification, the lock screen, a headset or Bluetooth button) goes through `requestPlay`
23
+ * too, so the player never plays without holding focus.
24
+ */
25
+ var onPlayRequest: (() -> Unit)?
26
+
20
27
  val player: Player
21
28
  val appContext: AppContext?
22
29
 
@@ -31,6 +38,8 @@ interface Playable {
31
38
 
32
39
  fun play() = player.play()
33
40
 
41
+ fun requestPlay() = onPlayRequest?.invoke() ?: player.play()
42
+
34
43
  fun pause() = player.pause()
35
44
 
36
45
  fun seekTo(seconds: Double) = player.seekTo((seconds * 1000L).toLong())
@@ -26,6 +26,7 @@ import androidx.media3.session.SessionCommand
26
26
  import expo.modules.audio.AudioLockScreenOptions
27
27
  import expo.modules.audio.LockScreenPlayable
28
28
  import expo.modules.audio.Metadata
29
+ import expo.modules.audio.PlayRequestingPlayer
29
30
  import expo.modules.audio.getPlaybackServiceErrorMessage
30
31
  import expo.modules.kotlin.AppContext
31
32
  import kotlinx.coroutines.CoroutineScope
@@ -66,9 +67,10 @@ class AudioControlsService : MediaSessionService() {
66
67
  override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
67
68
  ensureForegroundNotification()
68
69
 
69
- val currentPlayer = currentPlayable?.player
70
+ val playable = currentPlayable
71
+ val currentPlayer = playable?.player
70
72
  val context = appContext
71
- if (currentPlayer == null || context == null) {
73
+ if (playable == null || currentPlayer == null || context == null) {
72
74
  stopForeground(STOP_FOREGROUND_REMOVE)
73
75
  return super.onStartCommand(intent, flags, startId)
74
76
  }
@@ -77,7 +79,7 @@ class AudioControlsService : MediaSessionService() {
77
79
  when (intent?.action) {
78
80
  ACTION_PLAY -> {
79
81
  if (shouldPlayInSilentMode()) {
80
- currentPlayer.play()
82
+ playable.requestPlay()
81
83
  }
82
84
  }
83
85
  ACTION_PAUSE -> currentPlayer.pause()
@@ -85,7 +87,7 @@ class AudioControlsService : MediaSessionService() {
85
87
  if (currentPlayer.isPlaying) {
86
88
  currentPlayer.pause()
87
89
  } else if (shouldPlayInSilentMode()) {
88
- currentPlayer.play()
90
+ playable.requestPlay()
89
91
  }
90
92
 
91
93
  ACTION_SEEK_FORWARD -> seekForward()
@@ -381,12 +383,13 @@ class AudioControlsService : MediaSessionService() {
381
383
  }
382
384
 
383
385
  private fun resolveSessionPlayer(playable: LockScreenPlayable, options: AudioLockScreenOptions?): Player {
386
+ val player = PlayRequestingPlayer(playable.player) { playable.requestPlay() }
384
387
  val isLive = options?.isLiveStream ?: playable.isLive
385
388
  if (!isLive) {
386
- return playable.player
389
+ return player
387
390
  }
388
391
 
389
- return object : ForwardingPlayer(playable.player) {
392
+ return object : ForwardingPlayer(player) {
390
393
  override fun getAvailableCommands(): Player.Commands {
391
394
  return super.getAvailableCommands().buildUpon()
392
395
  .remove(Player.COMMAND_SEEK_IN_CURRENT_MEDIA_ITEM)
@@ -75,7 +75,10 @@ public class AudioPlayer: SharedRef<AVPlayer>, Playable, LockScreenPlayable {
75
75
  }
76
76
 
77
77
  var currentOffsetFromLive: Double? {
78
- guard let currentDate = ref.currentItem?.currentDate() else {
78
+ // currentDate() blocks until the item has loaded, and a still-loading item looks live too.
79
+ guard let item = ref.currentItem, item.status == .readyToPlay, item.duration.isIndefinite,
80
+ let currentDate = item.currentDate()
81
+ else {
79
82
  return nil
80
83
  }
81
84
  return Date().timeIntervalSince1970 - currentDate.timeIntervalSince1970
@@ -136,12 +139,12 @@ public class AudioPlayer: SharedRef<AVPlayer>, Playable, LockScreenPlayable {
136
139
  }
137
140
  }
138
141
 
139
- func currentStatus() -> [String: Any?] {
142
+ func currentStatus(knownCurrentTime: Double? = nil) -> [String: Any?] {
140
143
  let currentDuration = ref.status == .readyToPlay ? duration : 0.0
141
144
  let rate = isPlaying ? ref.rate : currentRate
142
145
  return [
143
146
  "id": id,
144
- "currentTime": currentTime,
147
+ "currentTime": knownCurrentTime ?? currentTime,
145
148
  "playbackState": statusToString(status: ref.status),
146
149
  "timeControlStatus": timeControlStatusString(status: ref.timeControlStatus),
147
150
  "reasonForWaitingToPlay": reasonForWaitingToPlayString(status: ref.reasonForWaitingToPlay),
@@ -172,7 +175,8 @@ public class AudioPlayer: SharedRef<AVPlayer>, Playable, LockScreenPlayable {
172
175
  }
173
176
 
174
177
  func updateStatus(with dict: [String: Any]) {
175
- var arguments = currentStatus()
178
+ // Reading currentTime waits on the player's lock while a source swap pauses it.
179
+ var arguments = currentStatus(knownCurrentTime: dict["currentTime"] as? Double)
176
180
  arguments.merge(dict) { _, new in
177
181
  new
178
182
  }
@@ -0,0 +1 @@
1
+ 0f11527368066bf18f182fb39f3c1d69696aa59ddaec4b7ee16ec48183e25e23
@@ -0,0 +1 @@
1
+ ec4911e9008b292a0785c1496a40432c56b611dc2f19ecb0dc71020d4b439fed146d7bb18337a96bf6b77da28cb0fe71e6e8c7bd17b37649e554e4de43fb9d37
@@ -0,0 +1 @@
1
+ 148a8d932e5afc93e3a3cf4ea35d969d7f3329ac3127cc9da9fea428144321c9
@@ -0,0 +1 @@
1
+ 4251e28214a66fe78e625507dc58ff5a7f4547ce00a7ac7fd93171043547fd383168a0fff1936654259ebb916e4ac392770afd96be55a8ec7e7185fac49f7d2f
@@ -3,7 +3,7 @@
3
3
  "component": {
4
4
  "group": "expo.modules.audio",
5
5
  "module": "expo.modules.audio",
6
- "version": "58.0.6",
6
+ "version": "58.0.8",
7
7
  "attributes": {
8
8
  "org.gradle.status": "release"
9
9
  }
@@ -24,13 +24,13 @@
24
24
  },
25
25
  "files": [
26
26
  {
27
- "name": "expo.modules.audio-58.0.6.aar",
28
- "url": "expo.modules.audio-58.0.6.aar",
29
- "size": 560911,
30
- "sha512": "a5561246f985399aacbc1973743d782fdb42eade03470bee92eacfb77be5a67157f2b87e96f5004c16b65c146af341a9aa2ed90ca7b7129aca4224f161f0f98f",
31
- "sha256": "66ef223a729dc25795eb8a2ac81f772110be7331bcb8201858a53dce2d5be054",
32
- "sha1": "a67bfef57451d3cdbf9593b42736336fa342fec6",
33
- "md5": "8f4b5ebe1aaa3a88feb8d7e2d5ee1191"
27
+ "name": "expo.modules.audio-58.0.8.aar",
28
+ "url": "expo.modules.audio-58.0.8.aar",
29
+ "size": 562788,
30
+ "sha512": "4251e28214a66fe78e625507dc58ff5a7f4547ce00a7ac7fd93171043547fd383168a0fff1936654259ebb916e4ac392770afd96be55a8ec7e7185fac49f7d2f",
31
+ "sha256": "148a8d932e5afc93e3a3cf4ea35d969d7f3329ac3127cc9da9fea428144321c9",
32
+ "sha1": "bc24348a398e64ff880dc00571befaff11fcdd7c",
33
+ "md5": "9bd94c9bb03c7d84ae5536946035f450"
34
34
  }
35
35
  ]
36
36
  },
@@ -137,13 +137,13 @@
137
137
  ],
138
138
  "files": [
139
139
  {
140
- "name": "expo.modules.audio-58.0.6.aar",
141
- "url": "expo.modules.audio-58.0.6.aar",
142
- "size": 560911,
143
- "sha512": "a5561246f985399aacbc1973743d782fdb42eade03470bee92eacfb77be5a67157f2b87e96f5004c16b65c146af341a9aa2ed90ca7b7129aca4224f161f0f98f",
144
- "sha256": "66ef223a729dc25795eb8a2ac81f772110be7331bcb8201858a53dce2d5be054",
145
- "sha1": "a67bfef57451d3cdbf9593b42736336fa342fec6",
146
- "md5": "8f4b5ebe1aaa3a88feb8d7e2d5ee1191"
140
+ "name": "expo.modules.audio-58.0.8.aar",
141
+ "url": "expo.modules.audio-58.0.8.aar",
142
+ "size": 562788,
143
+ "sha512": "4251e28214a66fe78e625507dc58ff5a7f4547ce00a7ac7fd93171043547fd383168a0fff1936654259ebb916e4ac392770afd96be55a8ec7e7185fac49f7d2f",
144
+ "sha256": "148a8d932e5afc93e3a3cf4ea35d969d7f3329ac3127cc9da9fea428144321c9",
145
+ "sha1": "bc24348a398e64ff880dc00571befaff11fcdd7c",
146
+ "md5": "9bd94c9bb03c7d84ae5536946035f450"
147
147
  }
148
148
  ]
149
149
  },
@@ -157,13 +157,13 @@
157
157
  },
158
158
  "files": [
159
159
  {
160
- "name": "expo.modules.audio-58.0.6-sources.jar",
161
- "url": "expo.modules.audio-58.0.6-sources.jar",
162
- "size": 43154,
163
- "sha512": "e7dd160ec6dde30682c7e7001d944f703baa815825c685bc098757fa3f7a2a05db2aae5b95bb12eca2733d4d3867cd3b9321640e88683c2e0b0fc4f4855357c7",
164
- "sha256": "4a9c9fa744bae7346ceae6c312ed030bb16584e9d1e66473ebb84219a7ca3875",
165
- "sha1": "b025140d2c4d4afec6ff2177e5b11c3a65cf32b8",
166
- "md5": "83cf708677405e262c8c9b113888d179"
160
+ "name": "expo.modules.audio-58.0.8-sources.jar",
161
+ "url": "expo.modules.audio-58.0.8-sources.jar",
162
+ "size": 44166,
163
+ "sha512": "ec4911e9008b292a0785c1496a40432c56b611dc2f19ecb0dc71020d4b439fed146d7bb18337a96bf6b77da28cb0fe71e6e8c7bd17b37649e554e4de43fb9d37",
164
+ "sha256": "0f11527368066bf18f182fb39f3c1d69696aa59ddaec4b7ee16ec48183e25e23",
165
+ "sha1": "cbab8824e92895ba7865770ec62e4875325bd42a",
166
+ "md5": "a514205fbda56545f5396a0990b9f4f9"
167
167
  }
168
168
  ]
169
169
  }
@@ -0,0 +1 @@
1
+ 481cc4ef369c80dbd753c3bbea6ea352709701224a2dfb653840c7bded86978b
@@ -0,0 +1 @@
1
+ 04262d3a0cd6d37995770d7f1f382e83bc506c30914eb5de5471b2e9e4c23b5db707c8f6ae5c468d443198562fe81a1062e46cb85f37dee10b9abf02082343f0
@@ -9,7 +9,7 @@
9
9
  <modelVersion>4.0.0</modelVersion>
10
10
  <groupId>expo.modules.audio</groupId>
11
11
  <artifactId>expo.modules.audio</artifactId>
12
- <version>58.0.6</version>
12
+ <version>58.0.8</version>
13
13
  <packaging>aar</packaging>
14
14
  <name>expo.modules.audio</name>
15
15
  <url>https://github.com/expo/expo</url>
@@ -0,0 +1 @@
1
+ c00be317ef58194377605e45cf90cc515d2fef8a811b1bf7cc4d134126376897
@@ -0,0 +1 @@
1
+ a193e55608204cef121d078d46d5829cc00e091829035c617c286861573f064e226bd7618e15a5261e62cff48c9b6ee28c0ae8ebf9d0169cd5d6f62a995b50e0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expo-audio",
3
- "version": "58.0.6",
3
+ "version": "58.0.8",
4
4
  "description": "A cross-platform audio library for React Native and Expo apps.",
5
5
  "keywords": [
6
6
  "android",
@@ -22,12 +22,12 @@
22
22
  "main": "build/index.js",
23
23
  "types": "build/index.d.ts",
24
24
  "devDependencies": {
25
+ "@expo/internal-scripts": "58.0.1",
25
26
  "@types/jest": "^30.0.0",
26
27
  "@types/node": "^22.14.0",
27
28
  "@types/react": "~19.3.0",
28
- "expo": "58.0.4",
29
- "expo-asset": "58.0.12",
30
- "expo-module-scripts": "56.0.7"
29
+ "expo": "58.0.7",
30
+ "expo-asset": "58.0.13"
31
31
  },
32
32
  "peerDependencies": {
33
33
  "expo": "*",
@@ -36,7 +36,7 @@
36
36
  "react-native": "*"
37
37
  },
38
38
  "jest": {
39
- "preset": "expo-module-scripts"
39
+ "preset": "@expo/internal-scripts"
40
40
  },
41
41
  "title": "Expo Audio",
42
42
  "scripts": {
@@ -1 +0,0 @@
1
- 4a9c9fa744bae7346ceae6c312ed030bb16584e9d1e66473ebb84219a7ca3875
@@ -1 +0,0 @@
1
- e7dd160ec6dde30682c7e7001d944f703baa815825c685bc098757fa3f7a2a05db2aae5b95bb12eca2733d4d3867cd3b9321640e88683c2e0b0fc4f4855357c7
@@ -1 +0,0 @@
1
- a67bfef57451d3cdbf9593b42736336fa342fec6
@@ -1 +0,0 @@
1
- 66ef223a729dc25795eb8a2ac81f772110be7331bcb8201858a53dce2d5be054
@@ -1 +0,0 @@
1
- a5561246f985399aacbc1973743d782fdb42eade03470bee92eacfb77be5a67157f2b87e96f5004c16b65c146af341a9aa2ed90ca7b7129aca4224f161f0f98f
@@ -1 +0,0 @@
1
- d238ebe08a1acfb1e1063631b1294e755e2cca72712ce0f0feb03f8bd679aa43
@@ -1 +0,0 @@
1
- 8ee748f545e08acb280b4bdec8a0d1347a134a03691d2ab568d5c9599733c0c9f1082302c39a1519fd8629fa1fe59520b592ec4fd0ae031067cf9c6e9afea9ea
@@ -1 +0,0 @@
1
- a343a5516cd5affb9e2769eea981c20ba9842f12
@@ -1 +0,0 @@
1
- f4958b4616edd823a50ba07a97e253df89049a7a96d9def18be329b8dc3f1687
@@ -1 +0,0 @@
1
- 208812c172f0ca180d04bf00e1d9e8437b5e1eee5b474afb8cc51f3be64921f2a649f45cc40d6cfb102e8945ee18c64fb077232f869623045c804915d35df07b