expo-audio 58.0.4 → 58.0.6

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 (57) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/android/build.gradle +3 -2
  3. package/android/src/main/java/expo/modules/audio/AudioExceptions.kt +0 -6
  4. package/android/src/main/java/expo/modules/audio/AudioModule.kt +2 -6
  5. package/android/src/main/java/expo/modules/audio/AudioRecorder.kt +16 -12
  6. package/android/src/main/java/expo/modules/audio/service/AudioRecordingServiceConnection.kt +23 -12
  7. package/build/AudioPlayer.web.js +14 -2
  8. package/build/AudioPlayer.web.js.map +1 -1
  9. package/build/AudioPlaylist.web.d.ts +1 -0
  10. package/build/AudioPlaylist.web.js +15 -5
  11. package/build/AudioPlaylist.web.js.map +1 -1
  12. package/build/AudioUtils.web.d.ts +1 -0
  13. package/build/AudioUtils.web.js +4 -0
  14. package/build/AudioUtils.web.js.map +1 -1
  15. package/ios/AudioModule.swift +4 -12
  16. package/ios/AudioRecorder.swift +17 -0
  17. package/local-maven-repo/expo/modules/audio/expo.modules.audio/{58.0.4/expo.modules.audio-58.0.4-sources.jar → 58.0.6/expo.modules.audio-58.0.6-sources.jar} +0 -0
  18. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6-sources.jar.md5 +1 -0
  19. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6-sources.jar.sha1 +1 -0
  20. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6-sources.jar.sha256 +1 -0
  21. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6-sources.jar.sha512 +1 -0
  22. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.aar +0 -0
  23. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.aar.md5 +1 -0
  24. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.aar.sha1 +1 -0
  25. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.aar.sha256 +1 -0
  26. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.aar.sha512 +1 -0
  27. package/local-maven-repo/expo/modules/audio/expo.modules.audio/{58.0.4/expo.modules.audio-58.0.4.module → 58.0.6/expo.modules.audio-58.0.6.module} +22 -22
  28. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.module.md5 +1 -0
  29. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.module.sha1 +1 -0
  30. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.module.sha256 +1 -0
  31. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.module.sha512 +1 -0
  32. package/local-maven-repo/expo/modules/audio/expo.modules.audio/{58.0.4/expo.modules.audio-58.0.4.pom → 58.0.6/expo.modules.audio-58.0.6.pom} +1 -1
  33. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.pom.md5 +1 -0
  34. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.pom.sha1 +1 -0
  35. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.pom.sha256 +1 -0
  36. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.pom.sha512 +1 -0
  37. package/package.json +9 -5
  38. package/src/AudioPlayer.web.ts +14 -1
  39. package/src/AudioPlaylist.web.ts +16 -5
  40. package/src/AudioUtils.web.ts +5 -0
  41. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.4/expo.modules.audio-58.0.4-sources.jar.md5 +0 -1
  42. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.4/expo.modules.audio-58.0.4-sources.jar.sha1 +0 -1
  43. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.4/expo.modules.audio-58.0.4-sources.jar.sha256 +0 -1
  44. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.4/expo.modules.audio-58.0.4-sources.jar.sha512 +0 -1
  45. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.4/expo.modules.audio-58.0.4.aar +0 -0
  46. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.4/expo.modules.audio-58.0.4.aar.md5 +0 -1
  47. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.4/expo.modules.audio-58.0.4.aar.sha1 +0 -1
  48. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.4/expo.modules.audio-58.0.4.aar.sha256 +0 -1
  49. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.4/expo.modules.audio-58.0.4.aar.sha512 +0 -1
  50. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.4/expo.modules.audio-58.0.4.module.md5 +0 -1
  51. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.4/expo.modules.audio-58.0.4.module.sha1 +0 -1
  52. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.4/expo.modules.audio-58.0.4.module.sha256 +0 -1
  53. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.4/expo.modules.audio-58.0.4.module.sha512 +0 -1
  54. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.4/expo.modules.audio-58.0.4.pom.md5 +0 -1
  55. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.4/expo.modules.audio-58.0.4.pom.sha1 +0 -1
  56. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.4/expo.modules.audio-58.0.4.pom.sha256 +0 -1
  57. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.4/expo.modules.audio-58.0.4.pom.sha512 +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## 58.0.6
4
+
5
+ ### Patch Changes
6
+
7
+ - [iOS][Android] Fixed recorders that the user paused starting to record again when the app returned to the foreground. On iOS, this also happened to recorders that were only prepared, and when an audio interruption ended. Now only recordings that the system paused are resumed. ([#51048](https://github.com/expo/expo/pull/51048) by [@alanjhughes](https://github.com/alanjhughes))
8
+
9
+ ## 58.0.5
10
+
11
+ ### Patch Changes
12
+
13
+ - [Android] Fixed `prepareToRecordAsync` rejecting when `allowsBackgroundRecording` is `true` and the notification permission is not granted ([#50705](https://github.com/expo/expo/issues/50705)). ([#50968](https://github.com/expo/expo/pull/50968) by [@alanjhughes](https://github.com/alanjhughes))
14
+ - [Web] Fixed an uncaught promise rejection, and `playing` staying `true`, when the browser blocks playback before the user interacts with the page. The player now reports the rejection in `error` on its status ([#36264](https://github.com/expo/expo/issues/36264)). ([#50972](https://github.com/expo/expo/pull/50972) by [@alanjhughes](https://github.com/alanjhughes))
15
+ - [Android] Fix `prepareToRecordAsync()` hanging forever when background recording is enabled and the recording service never connects. The binding timeout is now started, and the promise also rejects when the React context is lost. ([#50883](https://github.com/expo/expo/pull/50883) by [@Cedric921](https://github.com/Cedric921))
16
+
3
17
  ## 58.0.4
4
18
 
5
19
  ### Patch Changes
@@ -4,13 +4,13 @@ plugins {
4
4
  }
5
5
 
6
6
  group = 'expo.modules.audio'
7
- version = '58.0.4'
7
+ version = '58.0.6'
8
8
 
9
9
  android {
10
10
  namespace "expo.modules.audio"
11
11
  defaultConfig {
12
12
  versionCode 1
13
- versionName "58.0.4"
13
+ versionName "58.0.6"
14
14
  }
15
15
 
16
16
  compileOptions {
@@ -37,4 +37,5 @@ dependencies {
37
37
  implementation "androidx.media3:media3-exoplayer-smoothstreaming:$androidxMedia3Version"
38
38
 
39
39
  testImplementation 'junit:junit:4.13.2'
40
+ testImplementation 'io.mockk:mockk:1.14.9'
40
41
  }
@@ -14,12 +14,6 @@ private const val defaultRecordingServiceTip =
14
14
  internal class AudioPermissionsException :
15
15
  CodedException("RECORD_AUDIO permission has not been granted")
16
16
 
17
- internal class NotificationPermissionsException :
18
- CodedException(
19
- "POST_NOTIFICATIONS permission has not been granted. This permission is required when using background recording (allowsBackgroundRecording: true). " +
20
- "Request notification permissions using AudioModule.requestNotificationPermissionsAsync() before calling prepareRecording()."
21
- )
22
-
23
17
  internal class GetAudioInputNotSupportedException :
24
18
  CodedException("Getting current audio input is not supported on devices running Android version lower than Android 9.0")
25
19
 
@@ -467,9 +467,7 @@ class AudioModule : Module() {
467
467
  }
468
468
  if (!allowsBackgroundRecording) {
469
469
  recorders.values.forEach { recorder ->
470
- if (recorder.isRecording) {
471
- recorder.pauseRecording()
472
- }
470
+ recorder.pauseForSystem()
473
471
  }
474
472
  }
475
473
  }
@@ -492,9 +490,7 @@ class AudioModule : Module() {
492
490
  }
493
491
  if (!allowsBackgroundRecording) {
494
492
  recorders.values.forEach { recorder ->
495
- if (recorder.isPaused) {
496
- recorder.record()
497
- }
493
+ recorder.resumeAfterSystemPause()
498
494
  }
499
495
  }
500
496
  if (shouldRouteThroughEarpiece) {
@@ -46,6 +46,7 @@ class AudioRecorder(
46
46
  var startTime = 0L
47
47
  var isRecording = false
48
48
  var isPaused = false
49
+ private var isPausedBySystem = false
49
50
  private var recordingTimerJob: Job? = null
50
51
  private var durationLimitMillis: Long? = null
51
52
  var useForegroundService = false
@@ -89,10 +90,6 @@ class AudioRecorder(
89
90
  throw AudioRecorderAlreadyPreparedException()
90
91
  }
91
92
 
92
- if (useForegroundService && !hasNotificationPermissions()) {
93
- throw NotificationPermissionsException()
94
- }
95
-
96
93
  val recordingOptions = options ?: this.options
97
94
  val mediaRecorder = createRecorder(recordingOptions)
98
95
  recorder = mediaRecorder
@@ -113,6 +110,7 @@ class AudioRecorder(
113
110
  }
114
111
 
115
112
  fun record() {
113
+ isPausedBySystem = false
116
114
  if (useForegroundService) {
117
115
  serviceConnection.recordingServiceBinder?.service?.registerRecorder(this) ?: run {
118
116
  throw AudioRecordingServiceException("The service connection is not bound, but `allowsBackgroundRecording` is set to `true`")
@@ -161,6 +159,7 @@ class AudioRecorder(
161
159
  }
162
160
 
163
161
  fun pauseRecording() {
162
+ isPausedBySystem = false
164
163
  recordingTimerJob?.cancel()
165
164
  recordingTimerJob = null
166
165
  recorder?.pause()
@@ -169,6 +168,19 @@ class AudioRecorder(
169
168
  isPaused = true
170
169
  }
171
170
 
171
+ fun pauseForSystem() {
172
+ if (isRecording) {
173
+ pauseRecording()
174
+ isPausedBySystem = true
175
+ }
176
+ }
177
+
178
+ fun resumeAfterSystemPause() {
179
+ if (isPausedBySystem && isPaused) {
180
+ record()
181
+ }
182
+ }
183
+
172
184
  private fun scheduleRecordingStop() {
173
185
  recordingTimerJob?.cancel()
174
186
  recordingTimerJob = durationLimitMillis?.let { limit ->
@@ -462,14 +474,6 @@ class AudioRecorder(
462
474
  private fun hasRecordingPermissions() =
463
475
  ContextCompat.checkSelfPermission(context, Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED
464
476
 
465
- private fun hasNotificationPermissions(): Boolean {
466
- // POST_NOTIFICATIONS permission is only required on Android 13+ (API 33+)
467
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
468
- return true
469
- }
470
- return ContextCompat.checkSelfPermission(context, Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED
471
- }
472
-
473
477
  fun getAvailableInputs(audioManager: AudioManager) =
474
478
  audioManager.getDevices(AudioManager.GET_DEVICES_INPUTS).mapNotNull { deviceInfo ->
475
479
  val type = deviceInfo.type
@@ -40,10 +40,11 @@ class AudioRecordingServiceConnection(
40
40
  bindingTimeoutJob?.cancel()
41
41
  bindingTimeoutJob = CoroutineScope(Dispatchers.Default).launch {
42
42
  delay(timeoutMs)
43
- if (bindingState == ServiceBindingState.BINDING) {
44
- bindingContinuation?.resumeWithException(AudioRecordingServiceException("The recording service connection has failed to connect with the recording service within ${timeoutMs}ms"))
45
- unbind()
46
- }
43
+ // Only the side that takes the continuation settles the binding. If a service callback
44
+ // got it first, the binding has already been handled and must not be unbound here.
45
+ val continuation = takeBindingContinuation() ?: return@launch
46
+ continuation.resumeWithException(AudioRecordingServiceException("The recording service connection has failed to connect with the recording service within ${timeoutMs}ms"))
47
+ unbind()
47
48
  }
48
49
  }
49
50
 
@@ -52,6 +53,14 @@ class AudioRecordingServiceConnection(
52
53
  bindingTimeoutJob = null
53
54
  }
54
55
 
56
+ /**
57
+ * Returns the pending binding continuation and clears it, so that it can be resumed at most once,
58
+ * even if the binding timeout races with a service connection callback.
59
+ */
60
+ private fun takeBindingContinuation(): Continuation<Unit>? = synchronized(this) {
61
+ bindingContinuation.also { bindingContinuation = null }
62
+ }
63
+
55
64
  /**
56
65
  * Binds with the recording service. If the service doesn't exist, it will create the service.
57
66
  */
@@ -71,7 +80,9 @@ class AudioRecordingServiceConnection(
71
80
  suspendCoroutine { continuation ->
72
81
  if (bindingState == ServiceBindingState.UNBOUND || bindingState == ServiceBindingState.FAILED) {
73
82
  val reactContext = appContext.reactContext ?: run {
74
- onBindingFailed("Binding with the expo-audio playback service failed: React context lost")
83
+ val message = "Binding with the expo-audio recording service failed: React context lost"
84
+ onBindingFailed(message)
85
+ continuation.resumeWithException(AudioRecordingServiceException(message))
75
86
  return@suspendCoroutine
76
87
  }
77
88
  val serviceRunning = startServiceAndBind(appContext, reactContext, this, AudioRecordingService::class.java, AudioRecordingService.ACTION_START_RECORDING)
@@ -83,6 +94,8 @@ class AudioRecordingServiceConnection(
83
94
 
84
95
  transitionToState(ServiceBindingState.BINDING)
85
96
  bindingContinuation = continuation
97
+ // Without a timeout, the promise would never settle if the system never calls back.
98
+ startBindingTimeout()
86
99
  }
87
100
  }
88
101
  }
@@ -93,18 +106,18 @@ class AudioRecordingServiceConnection(
93
106
  val recorder = recorder.get()
94
107
  if (recorder == null || isRecorderReleased) {
95
108
  transitionToState(ServiceBindingState.FAILED)
96
- bindingContinuation?.resumeWithException(AudioRecordingServiceException("The recorder has been deallocated"))
109
+ takeBindingContinuation()?.resumeWithException(AudioRecordingServiceException("The recorder has been deallocated"))
97
110
  return
98
111
  }
99
112
 
100
113
  val serviceBinder: AudioRecordingServiceBinder = binder as? AudioRecordingServiceBinder ?: run {
101
- bindingContinuation?.resumeWithException(AudioRecordingServiceException("Could not bind to the recording service - invalid binder type"))
114
+ takeBindingContinuation()?.resumeWithException(AudioRecordingServiceException("Could not bind to the recording service - invalid binder type"))
102
115
  transitionToState(ServiceBindingState.FAILED)
103
116
  return
104
117
  }
105
118
  transitionToState(ServiceBindingState.BOUND)
106
119
 
107
- bindingContinuation?.resume(Unit)
120
+ takeBindingContinuation()?.resume(Unit)
108
121
  recordingServiceBinder = serviceBinder
109
122
  serviceBinder.service.appContext = appContext
110
123
  }
@@ -117,19 +130,17 @@ class AudioRecordingServiceConnection(
117
130
 
118
131
  override fun onBindingDied(name: ComponentName?) {
119
132
  cancelBindingTimeout()
120
- bindingContinuation?.resumeWithException(
133
+ takeBindingContinuation()?.resumeWithException(
121
134
  AudioRecordingServiceException("Service binding died")
122
135
  )
123
- bindingContinuation = null
124
136
  super.onBindingDied(name)
125
137
  }
126
138
 
127
139
  override fun onNullBinding(componentName: ComponentName) {
128
140
  cancelBindingTimeout()
129
- bindingContinuation?.resumeWithException(
141
+ takeBindingContinuation()?.resumeWithException(
130
142
  AudioRecordingServiceException("Service returned null binding")
131
143
  )
132
- bindingContinuation = null
133
144
  super.onNullBinding(componentName)
134
145
  }
135
146
 
@@ -1,6 +1,6 @@
1
1
  import { AUDIO_SAMPLE_UPDATE, PLAYBACK_STATUS_UPDATE } from './AudioEventKeys';
2
2
  import { isAudioActive } from './AudioModule.web';
3
- import { getAudioContext, getSourceUri, getStatusFromMedia, nextId, preloadCache, safeDuration } from './AudioUtils.web';
3
+ import { getAudioContext, getSourceUri, getStatusFromMedia, isPlayInterrupted, nextId, preloadCache, safeDuration } from './AudioUtils.web';
4
4
  import { mediaSessionController } from './MediaSessionController.web';
5
5
  export const activePlayers = new Set();
6
6
  let hasWarnedIOSVolume = false;
@@ -82,7 +82,19 @@ export class AudioPlayerWeb extends globalThis.expo.SharedObject {
82
82
  if (!isAudioActive) {
83
83
  return;
84
84
  }
85
- this.media.play();
85
+ const media = this.media;
86
+ media.play().catch((error)=>{
87
+ if (isPlayInterrupted(error) || media !== this.media) {
88
+ return;
89
+ }
90
+ this.isPlaying = false;
91
+ this.stopSampling();
92
+ this.emit(PLAYBACK_STATUS_UPDATE, {
93
+ ...getStatusFromMedia(media, this.id),
94
+ playing: false,
95
+ error: error?.message ?? String(error)
96
+ });
97
+ });
86
98
  this.isPlaying = true;
87
99
  this.startSampling();
88
100
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["AudioPlayer.web.ts"],"sourcesContent":[null],"names":["AUDIO_SAMPLE_UPDATE","PLAYBACK_STATUS_UPDATE","isAudioActive","getAudioContext","getSourceUri","getStatusFromMedia","nextId","preloadCache","safeDuration","mediaSessionController","activePlayers","Set","hasWarnedIOSVolume","isIOSSafari","test","navigator","userAgent","AudioPlayerWeb","globalThis","expo","SharedObject","source","options","updateInterval","crossOrigin","src","interval","Math","max","media","_createMediaElement","add","id","isAudioSamplingSupported","isBuffering","shouldCorrectPitch","isPlaying","loaded","analyser","sourceNode","samplingFrameId","samplingEnabled","samplingBuffer","playing","muted","value","loop","duration","currentTime","paused","isLoaded","playbackRate","volume","console","warn","currentStatus","play","startSampling","pause","stopSampling","replace","wasPlaying","wasSampling","mediaSessionState","getActiveState","remove","setAudioSamplingEnabled","setActivePlayer","metadata","undefined","seekTo","seconds","toleranceMillisBefore","toleranceMillisAfter","enabled","_isCrossOrigin","ctx","state","resume","createMediaElementSource","createAnalyser","fftSize","disconnect","connect","destination","Float32Array","frequencyBinCount","sampleLoop","getFloatTimeDomainData","emit","channels","frames","Array","from","timestamp","requestAnimationFrame","cancelAnimationFrame","setPlaybackRate","second","pitchCorrectionQuality","preservesPitch","updatePositionState","clear","ontimeupdate","onplay","onpause","onseeked","onended","onloadeddata","onerror","removeAttribute","load","delete","release","setActiveForLockScreen","active","updateLockScreenMetadata","updateMetadata","clearLockScreenControls","URL","origin","window","location","newSource","cachedUri","has","get","blobUrl","Audio","lastEmitTime","intervalSec","now","updatePlaybackState","errorMessage","error","code"],"mappings":"AAQA,SAASA,mBAAmB,EAAEC,sBAAsB,QAAQ,mBAAmB;AAE/E,SAASC,aAAa,QAAQ,oBAAoB;AAClD,SACEC,eAAe,EACfC,YAAY,EACZC,kBAAkB,EAClBC,MAAM,EACNC,YAAY,EACZC,YAAY,QACP,mBAAmB;AAC1B,SAASC,sBAAsB,QAAQ,+BAA+B;AAEtE,OAAO,MAAMC,gBAAgB,IAAIC,MAAsB;AAEvD,IAAIC,qBAAqB;AACzB,SAASC;IACP,OAAO,mBAAmBC,IAAI,CAACC,UAAUC,SAAS;AACpD;AAEA,OAAO,MAAMC,uBACHC,WAAWC,IAAI,CAACC,YAAY;IAGpC,YAAYC,MAAmB,EAAEC,UAA8B,CAAC,CAAC,CAAE;QACjE,KAAK;QACL,MAAM,EAAEC,iBAAiB,GAAG,EAAEC,WAAW,EAAE,GAAGF;QAC9C,IAAI,CAACG,GAAG,GAAGJ;QACX,IAAI,CAACK,QAAQ,GAAGC,KAAKC,GAAG,CAACL,gBAAgB;QACzC,IAAI,CAACC,WAAW,GAAGA;QACnB,IAAI,CAACK,KAAK,GAAG,IAAI,CAACC,mBAAmB;QACrCpB,cAAcqB,GAAG,CAAC,IAAI;IACxB;IAEAC,KAAa1B,SAAS;IACtB2B,2BAA2B,MAAM;IACjCC,cAAc,MAAM;IACpBC,qBAAqB,MAAM;IAEnBV,MAAmB,KAAK;IACxBI,MAAwB;IACxBH,WAAW,IAAI;IACfU,YAAY,MAAM;IAClBC,SAAS,MAAM;IACfb,YAA8C;IAC9Cc,WAAgC,KAAK;IACrCC,aAAiD,KAAK;IACtDC,kBAAiC,KAAK;IACtCC,kBAAkB,MAAM;IACxBC,iBAAmD,KAAK;IAEhE,IAAIC,UAAmB;QACrB,OAAO,IAAI,CAACP,SAAS;IACvB;IAEA,IAAIQ,QAAiB;QACnB,OAAO,IAAI,CAACf,KAAK,CAACe,KAAK;IACzB;IAEA,IAAIA,MAAMC,KAAc,EAAE;QACxB,IAAI,CAAChB,KAAK,CAACe,KAAK,GAAGC;IACrB;IAEA,IAAIC,OAAgB;QAClB,OAAO,IAAI,CAACjB,KAAK,CAACiB,IAAI;IACxB;IAEA,IAAIA,KAAKD,KAAc,EAAE;QACvB,IAAI,CAAChB,KAAK,CAACiB,IAAI,GAAGD;IACpB;IAEA,IAAIE,WAAmB;QACrB,OAAOvC,aAAa,IAAI,CAACqB,KAAK,CAACkB,QAAQ;IACzC;IAEA,IAAIC,cAAsB;QACxB,OAAO,IAAI,CAACnB,KAAK,CAACmB,WAAW;IAC/B;IAEA,IAAIC,SAAkB;QACpB,OAAO,IAAI,CAACpB,KAAK,CAACoB,MAAM;IAC1B;IAEA,IAAIC,WAAoB;QACtB,OAAO,IAAI,CAACb,MAAM;IACpB;IAEA,IAAIc,eAAuB;QACzB,OAAO,IAAI,CAACtB,KAAK,CAACsB,YAAY;IAChC;IAEA,IAAIA,aAAaN,KAAa,EAAE;QAC9B,IAAI,CAAChB,KAAK,CAACsB,YAAY,GAAGN;IAC5B;IAEA,IAAIO,SAAiB;QACnB,OAAO,IAAI,CAACvB,KAAK,CAACuB,MAAM;IAC1B;IAEA,IAAIA,OAAOP,KAAa,EAAE;QACxB,IAAI,CAACjC,sBAAsBC,eAAe;YACxCD,qBAAqB;YACrByC,QAAQC,IAAI,CACV,kFACE;QAEN;QACA,IAAI,CAACzB,KAAK,CAACuB,MAAM,GAAGP;IACtB;IAEA,IAAIU,gBAA6B;QAC/B,OAAOlD,mBAAmB,IAAI,CAACwB,KAAK,EAAE,IAAI,CAACG,EAAE;IAC/C;IAEAwB,OAAa;QACX,IAAI,CAACtD,eAAe;YAClB;QACF;QACA,IAAI,CAAC2B,KAAK,CAAC2B,IAAI;QACf,IAAI,CAACpB,SAAS,GAAG;QACjB,IAAI,CAACqB,aAAa;IACpB;IAEAC,QAAc;QACZ,IAAI,CAAC7B,KAAK,CAAC6B,KAAK;QAChB,IAAI,CAACtB,SAAS,GAAG;QACjB,IAAI,CAACuB,YAAY;IACnB;IAEAC,QAAQvC,MAAmB,EAAQ;QACjC,MAAMwC,aAAa,IAAI,CAACzB,SAAS;QACjC,MAAM0B,cAAc,IAAI,CAACrB,eAAe;QACxC,MAAMsB,oBAAoBtD,uBAAuBuD,cAAc,CAAC,IAAI;QAEpE,mEAAmE;QACnE,IAAI,CAACC,MAAM;QAEX,IAAI,CAACxC,GAAG,GAAGJ;QACX,IAAI,CAACe,SAAS,GAAG;QACjB,IAAI,CAACC,MAAM,GAAG;QACd,IAAI,CAACR,KAAK,GAAG,IAAI,CAACC,mBAAmB;QAErC,IAAIgC,aAAa;YACf,IAAI,CAACI,uBAAuB,CAAC;QAC/B;QAEA,IAAIH,mBAAmB;YACrBtD,uBAAuB0D,eAAe,CACpC,IAAI,EACJJ,kBAAkBK,QAAQ,IAAIC,WAC9BN,kBAAkBzC,OAAO,IAAI+C;QAEjC;QAEA,2CAA2C;QAC3C,IAAIR,YAAY;YACd,IAAI,CAACL,IAAI;QACX;IACF;IAEA,MAAMc,OACJC,OAAe,EACfC,qBAA8B,EAC9BC,oBAA6B,EACd;QACf,IAAI,CAAC5C,KAAK,CAACmB,WAAW,GAAGuB;IAC3B;IAEAL,wBAAwBQ,OAAgB,EAAQ;QAC9C,IAAIA,SAAS;YACX,IAAI,CAAC,IAAI,CAAC7C,KAAK,CAACL,WAAW,IAAI,IAAI,CAACmD,cAAc,IAAI;gBACpD,IAAI,CAAC1C,wBAAwB,GAAG;gBAChC;YACF;YAEA,IAAI,IAAI,CAACK,QAAQ,EAAE;gBACjB;YACF;YAEA,MAAMsC,MAAMzE;YACZ,IAAIyE,IAAIC,KAAK,KAAK,aAAa;gBAC7BD,IAAIE,MAAM;YACZ;YAEA,IAAI,CAAC,IAAI,CAACvC,UAAU,EAAE;gBACpB,IAAI,CAACA,UAAU,GAAGqC,IAAIG,wBAAwB,CAAC,IAAI,CAAClD,KAAK;YAC3D;YAEA,IAAI,CAACS,QAAQ,GAAGsC,IAAII,cAAc;YAClC,IAAI,CAAC1C,QAAQ,CAAC2C,OAAO,GAAG;YAExB,IAAI,CAAC1C,UAAU,CAAC2C,UAAU;YAC1B,IAAI,CAAC3C,UAAU,CAAC4C,OAAO,CAAC,IAAI,CAAC7C,QAAQ;YACrC,IAAI,CAACA,QAAQ,CAAC6C,OAAO,CAACP,IAAIQ,WAAW;YAErC,IAAI,CAAC1C,cAAc,GAAG,IAAI2C,aAAa,IAAI,CAAC/C,QAAQ,CAACgD,iBAAiB;YACtE,IAAI,CAAC7C,eAAe,GAAG;YAEvB,IAAI,IAAI,CAACL,SAAS,EAAE;gBAClB,IAAI,CAACqB,aAAa;YACpB;YACA,IAAI,CAACxB,wBAAwB,GAAG;QAClC,OAAO;YACL,IAAI,CAAC0B,YAAY;YAEjB,IAAI,IAAI,CAACrB,QAAQ,EAAE;gBACjB,IAAI,CAACA,QAAQ,CAAC4C,UAAU;gBACxB,IAAI,CAAC5C,QAAQ,GAAG;YAClB;YAEA,IAAI,IAAI,CAACC,UAAU,EAAE;gBACnB,MAAMqC,MAAMzE;gBACZ,IAAI,CAACoC,UAAU,CAAC2C,UAAU;gBAC1B,IAAI,CAAC3C,UAAU,CAAC4C,OAAO,CAACP,IAAIQ,WAAW;YACzC;YAEA,IAAI,CAAC1C,cAAc,GAAG;YACtB,IAAI,CAACD,eAAe,GAAG;QACzB;IACF;IAEQgB,gBAAsB;QAC5B,IAAI,CAAC,IAAI,CAAChB,eAAe,IAAI,CAAC,IAAI,CAACH,QAAQ,IAAI,CAAC,IAAI,CAACI,cAAc,EAAE;YACnE;QACF;QACA,MAAM6C,aAAa;YACjB,IAAI,CAAC,IAAI,CAACjD,QAAQ,IAAI,CAAC,IAAI,CAACI,cAAc,EAAE;gBAC1C;YACF;YACA,IAAI,CAACJ,QAAQ,CAACkD,sBAAsB,CAAC,IAAI,CAAC9C,cAAc;YACxD,IAAI,CAAC+C,IAAI,CAACzF,qBAAqB;gBAC7B0F,UAAU;oBAAC;wBAAEC,QAAQC,MAAMC,IAAI,CAAC,IAAI,CAACnD,cAAc;oBAAE;iBAAE;gBACvDoD,WAAW,IAAI,CAACjE,KAAK,CAACmB,WAAW;YACnC;YACA,IAAI,CAACR,eAAe,GAAGuD,sBAAsBR;QAC/C;QACA,IAAI,CAAC/C,eAAe,GAAGuD,sBAAsBR;IAC/C;IAEQ5B,eAAqB;QAC3B,IAAI,IAAI,CAACnB,eAAe,IAAI,MAAM;YAChCwD,qBAAqB,IAAI,CAACxD,eAAe;YACzC,IAAI,CAACA,eAAe,GAAG;QACzB;IACF;IAEAyD,gBAAgBC,MAAc,EAAEC,sBAA+C,EAAQ;QACrF,IAAI,CAACtE,KAAK,CAACsB,YAAY,GAAG+C;QAC1B,IAAI,CAAC/D,kBAAkB,GAAGgE,2BAA2B;QACrD,IAAI,CAACtE,KAAK,CAACuE,cAAc,GAAG,IAAI,CAACjE,kBAAkB;QACnD1B,uBAAuB4F,mBAAmB,CAAC,IAAI;IACjD;IAEApC,SAAe;QACbxD,uBAAuB6F,KAAK,CAAC,IAAI;QACjC,IAAI,CAAC3C,YAAY;QAEjB,IAAI,IAAI,CAACrB,QAAQ,EAAE;YACjB,IAAI,CAACA,QAAQ,CAAC4C,UAAU;YACxB,IAAI,CAAC5C,QAAQ,GAAG;QAClB;QAEA,IAAI,IAAI,CAACC,UAAU,EAAE;YACnB,IAAI,CAACA,UAAU,CAAC2C,UAAU;YAC1B,IAAI,CAAC3C,UAAU,GAAG;QACpB;QAEA,IAAI,CAACE,eAAe,GAAG;QACvB,IAAI,CAACZ,KAAK,CAAC6B,KAAK;QAChB,+CAA+C;QAC/C,IAAI,CAAC7B,KAAK,CAAC0E,YAAY,GAAG;QAC1B,IAAI,CAAC1E,KAAK,CAAC2E,MAAM,GAAG;QACpB,IAAI,CAAC3E,KAAK,CAAC4E,OAAO,GAAG;QACrB,IAAI,CAAC5E,KAAK,CAAC6E,QAAQ,GAAG;QACtB,IAAI,CAAC7E,KAAK,CAAC8E,OAAO,GAAG;QACrB,IAAI,CAAC9E,KAAK,CAAC+E,YAAY,GAAG;QAC1B,IAAI,CAAC/E,KAAK,CAACgF,OAAO,GAAG;QACrB,IAAI,CAAChF,KAAK,CAACiF,eAAe,CAAC;QAC3B,IAAI,CAACjF,KAAK,CAACkF,IAAI;QACfrG,cAAcsG,MAAM,CAAC,IAAI;IAC3B;IAEAC,UAAgB;QACd,IAAI,CAAChD,MAAM;IACb;IAEAiD,uBACEC,MAAe,EACf/C,QAAwB,EACxB9C,OAAgC,EAC1B;QACN,IAAI6F,QAAQ;YACV1G,uBAAuB0D,eAAe,CAAC,IAAI,EAAEC,UAAU9C;QACzD,OAAO;YACLb,uBAAuB6F,KAAK,CAAC,IAAI;QACnC;IACF;IAEAc,yBAAyBhD,QAAuB,EAAQ;QACtD3D,uBAAuB4G,cAAc,CAAC,IAAI,EAAEjD;IAC9C;IAEAkD,0BAAgC;QAC9B7G,uBAAuB6F,KAAK,CAAC,IAAI;IACnC;IAEA3B,iBAA0B;QACxB,IAAI;YACF,OAAO,IAAI4C,IAAI,IAAI,CAAC1F,KAAK,CAACJ,GAAG,EAAE+F,MAAM,KAAKC,OAAOC,QAAQ,CAACF,MAAM;QAClE,EAAE,OAAM;YACN,OAAO;QACT;IACF;IAEA1F,sBAAwC;QACtC,MAAM6F,YAAYvH,aAAa,IAAI,CAACqB,GAAG;QACvC,MAAMmG,YACJD,aAAapH,aAAasH,GAAG,CAACF,aAAapH,aAAauH,GAAG,CAACH,WAAYI,OAAO,GAAGJ;QACpF,MAAM9F,QAAQ,IAAImG,MAAMJ;QACxB,IAAI,IAAI,CAACpG,WAAW,KAAK6C,WAAW;YAClCxC,MAAML,WAAW,GAAG,IAAI,CAACA,WAAW;QACtC;QAEA,IAAIyG,eAAe;QACnB,MAAMC,cAAc,IAAI,CAACxG,QAAQ,GAAG;QAEpC,6CAA6C;QAC7CG,MAAM0E,YAAY,GAAG;YACnB,MAAM4B,MAAMtG,MAAMmB,WAAW;YAC7B,oCAAoC;YACpC,IAAImF,MAAMF,cAAc;gBACtBA,eAAeE;YACjB;YACA,IAAIA,MAAMF,gBAAgBC,aAAa;gBACrCD,eAAeE;gBACf,IAAI,CAAC1C,IAAI,CAACxF,wBAAwBI,mBAAmBwB,OAAO,IAAI,CAACG,EAAE;gBACnEvB,uBAAuB4F,mBAAmB,CAAC,IAAI;YACjD;QACF;QAEAxE,MAAM2E,MAAM,GAAG;YACb,IAAI,CAACpE,SAAS,GAAG;YACjB6F,eAAepG,MAAMmB,WAAW;YAChC,IAAI,CAACyC,IAAI,CAACxF,wBAAwB;gBAChC,GAAGI,mBAAmBwB,OAAO,IAAI,CAACG,EAAE,CAAC;gBACrCW,SAAS,IAAI,CAACP,SAAS;YACzB;YACA3B,uBAAuB2H,mBAAmB,CAAC,IAAI;YAC/C3H,uBAAuB4F,mBAAmB,CAAC,IAAI;QACjD;QAEAxE,MAAM4E,OAAO,GAAG;YACd,IAAI,CAACrE,SAAS,GAAG;YACjB6F,eAAepG,MAAMmB,WAAW;YAChC,IAAI,CAACyC,IAAI,CAACxF,wBAAwB;gBAChC,GAAGI,mBAAmBwB,OAAO,IAAI,CAACG,EAAE,CAAC;gBACrCW,SAAS,IAAI,CAACP,SAAS;YACzB;YACA3B,uBAAuB2H,mBAAmB,CAAC,IAAI;YAC/C3H,uBAAuB4F,mBAAmB,CAAC,IAAI;QACjD;QAEAxE,MAAM6E,QAAQ,GAAG;YACfuB,eAAepG,MAAMmB,WAAW;YAChC,IAAI,CAACyC,IAAI,CAACxF,wBAAwBI,mBAAmBwB,OAAO,IAAI,CAACG,EAAE;YACnEvB,uBAAuB4F,mBAAmB,CAAC,IAAI;QACjD;QAEAxE,MAAM8E,OAAO,GAAG;YACdsB,eAAe;YACfxH,uBAAuB2H,mBAAmB,CAAC,IAAI;QACjD;QAEAvG,MAAM+E,YAAY,GAAG;YACnB,IAAI,CAACvE,MAAM,GAAG;YACd4F,eAAepG,MAAMmB,WAAW;YAChC,IAAI,CAACyC,IAAI,CAACxF,wBAAwB;gBAChC,GAAGI,mBAAmBwB,OAAO,IAAI,CAACG,EAAE,CAAC;gBACrCkB,UAAU,IAAI,CAACb,MAAM;YACvB;YACA5B,uBAAuB4F,mBAAmB,CAAC,IAAI;QACjD;QAEAxE,MAAMgF,OAAO,GAAG;YACd,IAAI,CAACxE,MAAM,GAAG;YACd,IAAI,CAACD,SAAS,GAAG;YACjB,MAAMiG,eAAexG,MAAMyG,KAAK,GAC5B,CAAC,qBAAqB,EAAEzG,MAAMyG,KAAK,CAACC,IAAI,CAAC,CAAC,CAAC,GAC3C;YACJ,IAAI,CAAC9C,IAAI,CAACxF,wBAAwB;gBAChC,GAAGI,mBAAmBwB,OAAO,IAAI,CAACG,EAAE,CAAC;gBACrCkB,UAAU;gBACVP,SAAS;gBACT2F,OAAOD;YACT;QACF;QAEA,OAAOxG;IACT;AACF"}
1
+ {"version":3,"sources":["AudioPlayer.web.ts"],"sourcesContent":[null],"names":["AUDIO_SAMPLE_UPDATE","PLAYBACK_STATUS_UPDATE","isAudioActive","getAudioContext","getSourceUri","getStatusFromMedia","isPlayInterrupted","nextId","preloadCache","safeDuration","mediaSessionController","activePlayers","Set","hasWarnedIOSVolume","isIOSSafari","test","navigator","userAgent","AudioPlayerWeb","globalThis","expo","SharedObject","source","options","updateInterval","crossOrigin","src","interval","Math","max","media","_createMediaElement","add","id","isAudioSamplingSupported","isBuffering","shouldCorrectPitch","isPlaying","loaded","analyser","sourceNode","samplingFrameId","samplingEnabled","samplingBuffer","playing","muted","value","loop","duration","currentTime","paused","isLoaded","playbackRate","volume","console","warn","currentStatus","play","catch","error","stopSampling","emit","message","String","startSampling","pause","replace","wasPlaying","wasSampling","mediaSessionState","getActiveState","remove","setAudioSamplingEnabled","setActivePlayer","metadata","undefined","seekTo","seconds","toleranceMillisBefore","toleranceMillisAfter","enabled","_isCrossOrigin","ctx","state","resume","createMediaElementSource","createAnalyser","fftSize","disconnect","connect","destination","Float32Array","frequencyBinCount","sampleLoop","getFloatTimeDomainData","channels","frames","Array","from","timestamp","requestAnimationFrame","cancelAnimationFrame","setPlaybackRate","second","pitchCorrectionQuality","preservesPitch","updatePositionState","clear","ontimeupdate","onplay","onpause","onseeked","onended","onloadeddata","onerror","removeAttribute","load","delete","release","setActiveForLockScreen","active","updateLockScreenMetadata","updateMetadata","clearLockScreenControls","URL","origin","window","location","newSource","cachedUri","has","get","blobUrl","Audio","lastEmitTime","intervalSec","now","updatePlaybackState","errorMessage","code"],"mappings":"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"}
@@ -56,6 +56,7 @@ export declare class AudioPlaylistWeb extends globalThis.expo.SharedObject<Audio
56
56
  private _attachMediaHandlers;
57
57
  private _createMediaElement;
58
58
  private _handleTrackEnded;
59
+ private _playCurrentMedia;
59
60
  private _getStatus;
60
61
  private _emitStatus;
61
62
  private _updateMediaSession;
@@ -1,5 +1,5 @@
1
1
  import { PLAYLIST_STATUS_UPDATE, TRACK_CHANGED } from './AudioEventKeys';
2
- import { getSourceUri, nextId } from './AudioUtils.web';
2
+ import { getSourceUri, isPlayInterrupted, nextId } from './AudioUtils.web';
3
3
  import { mediaSessionController } from './MediaSessionController.web';
4
4
  import { resolveSource } from './utils/resolveSource';
5
5
  function getSourceInfo(source) {
@@ -115,7 +115,7 @@ export class AudioPlaylistWeb extends globalThis.expo.SharedObject {
115
115
  if (!this._currentMedia || this._sources.length === 0) {
116
116
  return;
117
117
  }
118
- this._currentMedia.play();
118
+ this._playCurrentMedia();
119
119
  this._isPlaying = true;
120
120
  }
121
121
  pause() {
@@ -217,7 +217,7 @@ export class AudioPlaylistWeb extends globalThis.expo.SharedObject {
217
217
  if (source) {
218
218
  this._currentMedia = this._createMediaElement(source);
219
219
  if (wasPlaying) {
220
- this._currentMedia.play();
220
+ this._playCurrentMedia();
221
221
  }
222
222
  }
223
223
  this._preloadNext();
@@ -283,7 +283,7 @@ export class AudioPlaylistWeb extends globalThis.expo.SharedObject {
283
283
  }
284
284
  }
285
285
  if (this._currentMedia && wasPlaying) {
286
- this._currentMedia.play();
286
+ this._playCurrentMedia();
287
287
  this._isPlaying = true;
288
288
  }
289
289
  this._preloadNext();
@@ -424,7 +424,7 @@ export class AudioPlaylistWeb extends globalThis.expo.SharedObject {
424
424
  if (this._loopMode === 'single') {
425
425
  if (this._currentMedia) {
426
426
  this._currentMedia.currentTime = 0;
427
- this._currentMedia.play();
427
+ this._playCurrentMedia();
428
428
  }
429
429
  return;
430
430
  }
@@ -444,6 +444,16 @@ export class AudioPlaylistWeb extends globalThis.expo.SharedObject {
444
444
  this._transitionToTrack(this._currentIndex + 1, this._currentIndex);
445
445
  }
446
446
  }
447
+ _playCurrentMedia() {
448
+ const media = this._currentMedia;
449
+ media?.play().catch((error)=>{
450
+ if (isPlayInterrupted(error) || media !== this._currentMedia) {
451
+ return;
452
+ }
453
+ this._isPlaying = false;
454
+ this._emitStatus();
455
+ });
456
+ }
447
457
  _getStatus() {
448
458
  return {
449
459
  id: this.id,
@@ -1 +1 @@
1
- {"version":3,"sources":["AudioPlaylist.web.ts"],"sourcesContent":[null],"names":["PLAYLIST_STATUS_UPDATE","TRACK_CHANGED","getSourceUri","nextId","mediaSessionController","resolveSource","getSourceInfo","source","resolved","uri","name","AudioPlaylistWeb","globalThis","expo","SharedObject","initialSources","updateInterval","loopMode","crossOrigin","_updateInterval","Math","max","_loopMode","_crossOrigin","_sources","push","_sourceInfos","length","_currentMedia","_createMediaElement","_preloadNext","id","_currentIndex","_nextMedia","_isPlaying","_isLoaded","_isBuffering","_volume","_muted","_playbackRate","_knownDuration","currentIndex","trackCount","sources","playing","muted","value","isLoaded","isBuffering","currentTime","duration","volume","playbackRate","loop","_emitStatus","currentStatus","_getStatus","play","pause","next","previousIndex","nextIndex","_transitionToTrack","previous","prevIndex","skipTo","index","seekTo","seconds","add","insert","splice","remove","wasCurrentTrack","wasPlaying","_cleanupMedia","clear","destroy","setActiveForLockScreen","active","metadata","options","setActivePlayer","updateLockScreenMetadata","updateMetadata","clearLockScreenControls","newIndex","isNextSequential","_attachMediaHandlers","emit","Audio","undefined","preload","media","ontimeupdate","onplay","onpause","onseeked","onended","onloadedmetadata","onloadeddata","onwaiting","oncanplaythrough","onerror","removeAttribute","load","lastEmitTime","intervalSec","readyState","isNaN","isFinite","now","ended","_handleTrackEnded","isLastTrack","_updateMediaSession","didJustFinish","updatePlaybackState","updatePositionState"],"mappings":"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"}
1
+ {"version":3,"sources":["AudioPlaylist.web.ts"],"sourcesContent":[null],"names":["PLAYLIST_STATUS_UPDATE","TRACK_CHANGED","getSourceUri","isPlayInterrupted","nextId","mediaSessionController","resolveSource","getSourceInfo","source","resolved","uri","name","AudioPlaylistWeb","globalThis","expo","SharedObject","initialSources","updateInterval","loopMode","crossOrigin","_updateInterval","Math","max","_loopMode","_crossOrigin","_sources","push","_sourceInfos","length","_currentMedia","_createMediaElement","_preloadNext","id","_currentIndex","_nextMedia","_isPlaying","_isLoaded","_isBuffering","_volume","_muted","_playbackRate","_knownDuration","currentIndex","trackCount","sources","playing","muted","value","isLoaded","isBuffering","currentTime","duration","volume","playbackRate","loop","_emitStatus","currentStatus","_getStatus","play","_playCurrentMedia","pause","next","previousIndex","nextIndex","_transitionToTrack","previous","prevIndex","skipTo","index","seekTo","seconds","add","insert","splice","remove","wasCurrentTrack","wasPlaying","_cleanupMedia","clear","destroy","setActiveForLockScreen","active","metadata","options","setActivePlayer","updateLockScreenMetadata","updateMetadata","clearLockScreenControls","newIndex","isNextSequential","_attachMediaHandlers","emit","Audio","undefined","preload","media","ontimeupdate","onplay","onpause","onseeked","onended","onloadedmetadata","onloadeddata","onwaiting","oncanplaythrough","onerror","removeAttribute","load","lastEmitTime","intervalSec","readyState","isNaN","isFinite","now","ended","_handleTrackEnded","isLastTrack","_updateMediaSession","didJustFinish","catch","error","updatePlaybackState","updatePositionState"],"mappings":"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"}
@@ -3,6 +3,7 @@ export declare const nextId: () => string;
3
3
  export declare function getAudioContext(): AudioContext;
4
4
  export declare function getUserMedia(constraints: MediaStreamConstraints): Promise<MediaStream>;
5
5
  export declare function safeDuration(duration: number): number;
6
+ export declare function isPlayInterrupted(error: unknown): boolean;
6
7
  export declare function getStatusFromMedia(media: HTMLMediaElement, id: string): AudioStatus;
7
8
  export declare const preloadCache: Map<string, {
8
9
  blobUrl: string;
@@ -35,6 +35,10 @@ export function getUserMedia(constraints) {
35
35
  export function safeDuration(duration) {
36
36
  return isNaN(duration) || !isFinite(duration) ? 0 : duration;
37
37
  }
38
+ // `play()` rejects with an `AbortError` when `pause()` or a new source interrupts it, which is not a failure.
39
+ export function isPlayInterrupted(error) {
40
+ return error instanceof DOMException && error.name === 'AbortError';
41
+ }
38
42
  export function getStatusFromMedia(media, id) {
39
43
  const isPlaying = !!(media.currentTime > 0 && !media.paused && !media.ended && media.readyState > 2);
40
44
  const status = {
@@ -1 +1 @@
1
- {"version":3,"sources":["AudioUtils.web.ts"],"sourcesContent":[null],"names":["Asset","nextId","id","String","audioContext","getAudioContext","AudioContext","getUserMedia","constraints","navigator","mediaDevices","webkitGetUserMedia","mozGetUserMedia","error","Error","code","name","Promise","resolve","reject","call","safeDuration","duration","isNaN","isFinite","getStatusFromMedia","media","isPlaying","currentTime","paused","ended","readyState","status","isLoaded","playbackState","timeControlStatus","reasonForWaitingToPlay","playing","didJustFinish","isBuffering","playbackRate","shouldCorrectPitch","mute","muted","loop","isLive","Infinity","currentOffsetFromLive","preloadCache","Map","getSourceUri","source","asset","fromModule","uri","assetId","undefined"],"mappings":"AAAA,SAASA,KAAK,QAAQ,aAAa;AAInC,OAAO,MAAMC,SAAS,AAAC,CAAA;IACrB,IAAIC,KAAK;IACT,OAAO,IAAMC,OAAOD;AACtB,CAAA,IAAK;AAEL,IAAIE,eAAoC;AAExC,OAAO,SAASC;IACd,IAAI,CAACD,cAAc;QACjBA,eAAe,IAAIE;IACrB;IACA,OAAOF;AACT;AAEA,OAAO,SAASG,aAAaC,WAAmC;IAC9D,IAAIC,UAAUC,YAAY,IAAID,UAAUC,YAAY,CAACH,YAAY,EAAE;QACjE,OAAOE,UAAUC,YAAY,CAACH,YAAY,CAACC;IAC7C;IAEA,iFAAiF;IACjF,+DAA+D;IAC/D,oEAAoE;IAEpE,yDAAyD;IACzD,MAAMD,eACJ,yHAAyH;IACzHE,UAAUF,YAAY,IACtBE,UAAUE,kBAAkB,IAC5BF,UAAUG,eAAe,IACzB;QACE,MAAMC,QAAa,IAAIC,MAAM;QAC7BD,MAAME,IAAI,GAAG;QACbF,MAAMG,IAAI,GAAG;QACb,MAAMH;IACR;IAEF,OAAO,IAAII,QAAQ,CAACC,SAASC;QAC3B,6DAA6D;QAC7D,wCAAwC;QACxC,6EAA6E;QAC7EZ,aAAaa,IAAI,CAACX,WAAWD,aAAaU,SAASC;IACrD;AACF;AAEA,OAAO,SAASE,aAAaC,QAAgB;IAC3C,OAAOC,MAAMD,aAAa,CAACE,SAASF,YAAY,IAAIA;AACtD;AAEA,OAAO,SAASG,mBAAmBC,KAAuB,EAAExB,EAAU;IACpE,MAAMyB,YAAY,CAAC,CACjBD,CAAAA,MAAME,WAAW,GAAG,KACpB,CAACF,MAAMG,MAAM,IACb,CAACH,MAAMI,KAAK,IACZJ,MAAMK,UAAU,GAAG,CAAA;IAGrB,MAAMC,SAAsB;QAC1B9B;QACA+B,UAAU;QACVX,UAAUD,aAAaK,MAAMJ,QAAQ;QACrCM,aAAaF,MAAME,WAAW;QAC9BM,eAAe;QACfC,mBAAmBR,YAAY,YAAY;QAC3CS,wBAAwB;QACxBC,SAASV;QACTW,eAAeZ,MAAMI,KAAK;QAC1BS,aAAa;QACbC,cAAcd,MAAMc,YAAY;QAChCC,oBAAoB;QACpBC,MAAMhB,MAAMiB,KAAK;QACjBC,MAAMlB,MAAMkB,IAAI;QAChBC,QAAQnB,MAAMJ,QAAQ,KAAKwB;QAC3BC,uBAAuB;QACvBlC,OAAO;IACT;IAEA,OAAOmB;AACT;AAEA,oEAAoE;AACpE,OAAO,MAAMgB,eAAe,IAAIC,MAA4D;AAE5F,OAAO,SAASC,aAAaC,MAAmB;IAC9C,IAAI,OAAOA,WAAW,UAAU;QAC9B,OAAOA;IACT;IACA,IAAI,OAAOA,WAAW,UAAU;QAC9B,MAAMC,QAAQpD,MAAMqD,UAAU,CAACF;QAC/B,OAAOC,MAAME,GAAG;IAClB;IACA,IAAI,OAAOH,QAAQI,YAAY,YAAY,CAACJ,QAAQG,KAAK;QACvD,MAAMF,QAAQpD,MAAMqD,UAAU,CAACF,OAAOI,OAAO;QAC7C,OAAOH,MAAME,GAAG;IAClB;IAEA,OAAOH,QAAQG,OAAOE;AACxB"}
1
+ {"version":3,"sources":["AudioUtils.web.ts"],"sourcesContent":[null],"names":["Asset","nextId","id","String","audioContext","getAudioContext","AudioContext","getUserMedia","constraints","navigator","mediaDevices","webkitGetUserMedia","mozGetUserMedia","error","Error","code","name","Promise","resolve","reject","call","safeDuration","duration","isNaN","isFinite","isPlayInterrupted","DOMException","getStatusFromMedia","media","isPlaying","currentTime","paused","ended","readyState","status","isLoaded","playbackState","timeControlStatus","reasonForWaitingToPlay","playing","didJustFinish","isBuffering","playbackRate","shouldCorrectPitch","mute","muted","loop","isLive","Infinity","currentOffsetFromLive","preloadCache","Map","getSourceUri","source","asset","fromModule","uri","assetId","undefined"],"mappings":"AAAA,SAASA,KAAK,QAAQ,aAAa;AAInC,OAAO,MAAMC,SAAS,AAAC,CAAA;IACrB,IAAIC,KAAK;IACT,OAAO,IAAMC,OAAOD;AACtB,CAAA,IAAK;AAEL,IAAIE,eAAoC;AAExC,OAAO,SAASC;IACd,IAAI,CAACD,cAAc;QACjBA,eAAe,IAAIE;IACrB;IACA,OAAOF;AACT;AAEA,OAAO,SAASG,aAAaC,WAAmC;IAC9D,IAAIC,UAAUC,YAAY,IAAID,UAAUC,YAAY,CAACH,YAAY,EAAE;QACjE,OAAOE,UAAUC,YAAY,CAACH,YAAY,CAACC;IAC7C;IAEA,iFAAiF;IACjF,+DAA+D;IAC/D,oEAAoE;IAEpE,yDAAyD;IACzD,MAAMD,eACJ,yHAAyH;IACzHE,UAAUF,YAAY,IACtBE,UAAUE,kBAAkB,IAC5BF,UAAUG,eAAe,IACzB;QACE,MAAMC,QAAa,IAAIC,MAAM;QAC7BD,MAAME,IAAI,GAAG;QACbF,MAAMG,IAAI,GAAG;QACb,MAAMH;IACR;IAEF,OAAO,IAAII,QAAQ,CAACC,SAASC;QAC3B,6DAA6D;QAC7D,wCAAwC;QACxC,6EAA6E;QAC7EZ,aAAaa,IAAI,CAACX,WAAWD,aAAaU,SAASC;IACrD;AACF;AAEA,OAAO,SAASE,aAAaC,QAAgB;IAC3C,OAAOC,MAAMD,aAAa,CAACE,SAASF,YAAY,IAAIA;AACtD;AAEA,8GAA8G;AAC9G,OAAO,SAASG,kBAAkBZ,KAAc;IAC9C,OAAOA,iBAAiBa,gBAAgBb,MAAMG,IAAI,KAAK;AACzD;AAEA,OAAO,SAASW,mBAAmBC,KAAuB,EAAE1B,EAAU;IACpE,MAAM2B,YAAY,CAAC,CACjBD,CAAAA,MAAME,WAAW,GAAG,KACpB,CAACF,MAAMG,MAAM,IACb,CAACH,MAAMI,KAAK,IACZJ,MAAMK,UAAU,GAAG,CAAA;IAGrB,MAAMC,SAAsB;QAC1BhC;QACAiC,UAAU;QACVb,UAAUD,aAAaO,MAAMN,QAAQ;QACrCQ,aAAaF,MAAME,WAAW;QAC9BM,eAAe;QACfC,mBAAmBR,YAAY,YAAY;QAC3CS,wBAAwB;QACxBC,SAASV;QACTW,eAAeZ,MAAMI,KAAK;QAC1BS,aAAa;QACbC,cAAcd,MAAMc,YAAY;QAChCC,oBAAoB;QACpBC,MAAMhB,MAAMiB,KAAK;QACjBC,MAAMlB,MAAMkB,IAAI;QAChBC,QAAQnB,MAAMN,QAAQ,KAAK0B;QAC3BC,uBAAuB;QACvBpC,OAAO;IACT;IAEA,OAAOqB;AACT;AAEA,oEAAoE;AACpE,OAAO,MAAMgB,eAAe,IAAIC,MAA4D;AAE5F,OAAO,SAASC,aAAaC,MAAmB;IAC9C,IAAI,OAAOA,WAAW,UAAU;QAC9B,OAAOA;IACT;IACA,IAAI,OAAOA,WAAW,UAAU;QAC9B,MAAMC,QAAQtD,MAAMuD,UAAU,CAACF;QAC/B,OAAOC,MAAME,GAAG;IAClB;IACA,IAAI,OAAOH,QAAQI,YAAY,YAAY,CAACJ,QAAQG,KAAK;QACvD,MAAMF,QAAQtD,MAAMuD,UAAU,CAACF,OAAOI,OAAO;QAC7C,OAAOH,MAAME,GAAG;IAClB;IAEA,OAAOH,QAAQG,OAAOE;AACxB"}
@@ -685,9 +685,7 @@ public class AudioModule: Module {
685
685
 
686
686
  #if os(iOS)
687
687
  registry.allRecorders.values.forEach { recorder in
688
- if recorder.isRecording {
689
- recorder.pauseRecording()
690
- }
688
+ recorder.pauseForSystem()
691
689
  }
692
690
  #endif
693
691
 
@@ -774,9 +772,7 @@ public class AudioModule: Module {
774
772
 
775
773
  #if os(iOS)
776
774
  registry.allRecorders.values.forEach { recorder in
777
- if recorder.allowsRecording && !recorder.isRecording {
778
- _ = try? recorder.startRecording()
779
- }
775
+ try? recorder.resumeAfterSystemPause()
780
776
  }
781
777
  #endif
782
778
 
@@ -805,9 +801,7 @@ public class AudioModule: Module {
805
801
  private func pauseAllRecorders() {
806
802
  #if os(iOS)
807
803
  registry.allRecorders.values.forEach { recorder in
808
- if recorder.isRecording {
809
- recorder.pauseRecording()
810
- }
804
+ recorder.pauseForSystem()
811
805
  }
812
806
  #endif
813
807
  }
@@ -815,9 +809,7 @@ public class AudioModule: Module {
815
809
  private func resumeAllRecorders() {
816
810
  #if os(iOS)
817
811
  registry.allRecorders.values.forEach { recorder in
818
- if recorder.allowsRecording && !recorder.isRecording {
819
- _ = try? recorder.startRecording()
820
- }
812
+ try? recorder.resumeAfterSystemPause()
821
813
  }
822
814
  #endif
823
815
  }
@@ -19,6 +19,7 @@ class AudioRecorder: SharedRef<AVAudioRecorder>, RecordingResultHandler {
19
19
  private var currentState: RecordingState = .idle
20
20
  private var recordingSession = AVAudioSession.sharedInstance()
21
21
  var allowsRecording = false
22
+ private var isPausedBySystem = false
22
23
  weak var owningRegistry: AudioComponentRegistry?
23
24
  private var mediaServicesDidReset = false
24
25
  private var currentOptions: RecordingOptions?
@@ -158,6 +159,7 @@ class AudioRecorder: SharedRef<AVAudioRecorder>, RecordingResultHandler {
158
159
  }
159
160
 
160
161
  func startRecording() throws -> [String: Any] {
162
+ isPausedBySystem = false
161
163
  guard allowsRecording else {
162
164
  throw RecordingDisabledException()
163
165
  }
@@ -189,6 +191,7 @@ class AudioRecorder: SharedRef<AVAudioRecorder>, RecordingResultHandler {
189
191
 
190
192
  // Public method to update state when calling native recording methods directly
191
193
  func updateStateForDirectRecording() {
194
+ isPausedBySystem = false
192
195
  if currentState != .paused {
193
196
  resetDurationTracking()
194
197
  }
@@ -208,6 +211,7 @@ class AudioRecorder: SharedRef<AVAudioRecorder>, RecordingResultHandler {
208
211
  }
209
212
 
210
213
  func pauseRecording() {
214
+ isPausedBySystem = false
211
215
  guard currentState == .recording else {
212
216
  return
213
217
  }
@@ -218,6 +222,19 @@ class AudioRecorder: SharedRef<AVAudioRecorder>, RecordingResultHandler {
218
222
  currentState = .paused
219
223
  }
220
224
 
225
+ func pauseForSystem() {
226
+ if currentState == .recording {
227
+ pauseRecording()
228
+ isPausedBySystem = true
229
+ }
230
+ }
231
+
232
+ func resumeAfterSystemPause() throws {
233
+ if isPausedBySystem && currentState == .paused {
234
+ _ = try startRecording()
235
+ }
236
+ }
237
+
221
238
  func getRecordingStatus() -> [String: Any] {
222
239
  var result: [String: Any] = [
223
240
  "canRecord": isPrepared,
@@ -0,0 +1 @@
1
+ 4a9c9fa744bae7346ceae6c312ed030bb16584e9d1e66473ebb84219a7ca3875
@@ -0,0 +1 @@
1
+ e7dd160ec6dde30682c7e7001d944f703baa815825c685bc098757fa3f7a2a05db2aae5b95bb12eca2733d4d3867cd3b9321640e88683c2e0b0fc4f4855357c7
@@ -0,0 +1 @@
1
+ 66ef223a729dc25795eb8a2ac81f772110be7331bcb8201858a53dce2d5be054
@@ -0,0 +1 @@
1
+ a5561246f985399aacbc1973743d782fdb42eade03470bee92eacfb77be5a67157f2b87e96f5004c16b65c146af341a9aa2ed90ca7b7129aca4224f161f0f98f
@@ -3,7 +3,7 @@
3
3
  "component": {
4
4
  "group": "expo.modules.audio",
5
5
  "module": "expo.modules.audio",
6
- "version": "58.0.4",
6
+ "version": "58.0.6",
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.4.aar",
28
- "url": "expo.modules.audio-58.0.4.aar",
29
- "size": 561320,
30
- "sha512": "d4b63688a2ed10c3f1fe4192ed93dc10be270a38c726808f283042c6beeafb2065684b81722fd82f13c8fa586ae6f9f475998388b93ab5ad56523e645a1a1df0",
31
- "sha256": "0c0ed2cf6c37a869edbcfc37199ef6bfd777023df6f61b7ceb70f3a2d15cf646",
32
- "sha1": "2a51da42795e2957fbe1d1eb650010d66125cf92",
33
- "md5": "d333307c9a865618efe34cad33089160"
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"
34
34
  }
35
35
  ]
36
36
  },
@@ -137,13 +137,13 @@
137
137
  ],
138
138
  "files": [
139
139
  {
140
- "name": "expo.modules.audio-58.0.4.aar",
141
- "url": "expo.modules.audio-58.0.4.aar",
142
- "size": 561320,
143
- "sha512": "d4b63688a2ed10c3f1fe4192ed93dc10be270a38c726808f283042c6beeafb2065684b81722fd82f13c8fa586ae6f9f475998388b93ab5ad56523e645a1a1df0",
144
- "sha256": "0c0ed2cf6c37a869edbcfc37199ef6bfd777023df6f61b7ceb70f3a2d15cf646",
145
- "sha1": "2a51da42795e2957fbe1d1eb650010d66125cf92",
146
- "md5": "d333307c9a865618efe34cad33089160"
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"
147
147
  }
148
148
  ]
149
149
  },
@@ -157,13 +157,13 @@
157
157
  },
158
158
  "files": [
159
159
  {
160
- "name": "expo.modules.audio-58.0.4-sources.jar",
161
- "url": "expo.modules.audio-58.0.4-sources.jar",
162
- "size": 43055,
163
- "sha512": "6b52b2086aaa77e0c85829d33c244fc628004d9826eff8170fcc7bee594583e0ca63141233401eb034b101d9c24c605d86079ed9ee2abdfda1ee93929586e9a0",
164
- "sha256": "b9a922c1e17423223501c1f3387d7719f6fae5cd9555b861931c948af389e891",
165
- "sha1": "449174b8832846258619989167d246fd963d015d",
166
- "md5": "d35f8337cadbb8f86ff1171e41ad9d5f"
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"
167
167
  }
168
168
  ]
169
169
  }
@@ -0,0 +1 @@
1
+ d238ebe08a1acfb1e1063631b1294e755e2cca72712ce0f0feb03f8bd679aa43
@@ -0,0 +1 @@
1
+ 8ee748f545e08acb280b4bdec8a0d1347a134a03691d2ab568d5c9599733c0c9f1082302c39a1519fd8629fa1fe59520b592ec4fd0ae031067cf9c6e9afea9ea
@@ -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.4</version>
12
+ <version>58.0.6</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
+ f4958b4616edd823a50ba07a97e253df89049a7a96d9def18be329b8dc3f1687
@@ -0,0 +1 @@
1
+ 208812c172f0ca180d04bf00e1d9e8437b5e1eee5b474afb8cc51f3be64921f2a649f45cc40d6cfb102e8945ee18c64fb077232f869623045c804915d35df07b
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expo-audio",
3
- "version": "58.0.4",
3
+ "version": "58.0.6",
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
- "@types/jest": "^29.2.1",
25
+ "@types/jest": "^30.0.0",
26
26
  "@types/node": "^22.14.0",
27
27
  "@types/react": "~19.3.0",
28
- "expo": "58.0.2",
29
- "expo-asset": "58.0.10",
30
- "expo-module-scripts": "56.0.5"
28
+ "expo": "58.0.4",
29
+ "expo-asset": "58.0.12",
30
+ "expo-module-scripts": "56.0.7"
31
31
  },
32
32
  "peerDependencies": {
33
33
  "expo": "*",
@@ -35,6 +35,9 @@
35
35
  "react": "*",
36
36
  "react-native": "*"
37
37
  },
38
+ "jest": {
39
+ "preset": "expo-module-scripts"
40
+ },
38
41
  "title": "Expo Audio",
39
42
  "scripts": {
40
43
  "precompile-android": "et prebuild-android-package-for-publish",
@@ -43,6 +46,7 @@
43
46
  "build:plugin": "expo-build --base plugin cjs:src",
44
47
  "clean": "expo-module clean",
45
48
  "lint": "oxlint --config oxlint.config.mjs .",
49
+ "test": "jest",
46
50
  "format": "expo-module format",
47
51
  "depscheck": "expo-module depscheck",
48
52
  "typecheck": "tsc -b tsconfig.all.json"
@@ -13,6 +13,7 @@ import {
13
13
  getAudioContext,
14
14
  getSourceUri,
15
15
  getStatusFromMedia,
16
+ isPlayInterrupted,
16
17
  nextId,
17
18
  preloadCache,
18
19
  safeDuration,
@@ -124,7 +125,19 @@ export class AudioPlayerWeb
124
125
  if (!isAudioActive) {
125
126
  return;
126
127
  }
127
- this.media.play();
128
+ const media = this.media;
129
+ media.play().catch((error) => {
130
+ if (isPlayInterrupted(error) || media !== this.media) {
131
+ return;
132
+ }
133
+ this.isPlaying = false;
134
+ this.stopSampling();
135
+ this.emit(PLAYBACK_STATUS_UPDATE, {
136
+ ...getStatusFromMedia(media, this.id),
137
+ playing: false,
138
+ error: error?.message ?? String(error),
139
+ });
140
+ });
128
141
  this.isPlaying = true;
129
142
  this.startSampling();
130
143
  }
@@ -8,7 +8,7 @@ import type {
8
8
  import type { AudioLockScreenOptions } from './AudioConstants';
9
9
  import { PLAYLIST_STATUS_UPDATE, TRACK_CHANGED } from './AudioEventKeys';
10
10
  import type { AudioPlaylist, AudioPlaylistEvents } from './AudioModule.types';
11
- import { getSourceUri, nextId } from './AudioUtils.web';
11
+ import { getSourceUri, isPlayInterrupted, nextId } from './AudioUtils.web';
12
12
  import { mediaSessionController } from './MediaSessionController.web';
13
13
  import { resolveSource } from './utils/resolveSource';
14
14
 
@@ -152,7 +152,7 @@ export class AudioPlaylistWeb
152
152
  if (!this._currentMedia || this._sources.length === 0) {
153
153
  return;
154
154
  }
155
- this._currentMedia.play();
155
+ this._playCurrentMedia();
156
156
  this._isPlaying = true;
157
157
  }
158
158
 
@@ -278,7 +278,7 @@ export class AudioPlaylistWeb
278
278
  if (source) {
279
279
  this._currentMedia = this._createMediaElement(source);
280
280
  if (wasPlaying) {
281
- this._currentMedia.play();
281
+ this._playCurrentMedia();
282
282
  }
283
283
  }
284
284
  this._preloadNext();
@@ -359,7 +359,7 @@ export class AudioPlaylistWeb
359
359
  }
360
360
 
361
361
  if (this._currentMedia && wasPlaying) {
362
- this._currentMedia.play();
362
+ this._playCurrentMedia();
363
363
  this._isPlaying = true;
364
364
  }
365
365
 
@@ -521,7 +521,7 @@ export class AudioPlaylistWeb
521
521
  if (this._loopMode === 'single') {
522
522
  if (this._currentMedia) {
523
523
  this._currentMedia.currentTime = 0;
524
- this._currentMedia.play();
524
+ this._playCurrentMedia();
525
525
  }
526
526
  return;
527
527
  }
@@ -544,6 +544,17 @@ export class AudioPlaylistWeb
544
544
  }
545
545
  }
546
546
 
547
+ private _playCurrentMedia(): void {
548
+ const media = this._currentMedia;
549
+ media?.play().catch((error) => {
550
+ if (isPlayInterrupted(error) || media !== this._currentMedia) {
551
+ return;
552
+ }
553
+ this._isPlaying = false;
554
+ this._emitStatus();
555
+ });
556
+ }
557
+
547
558
  private _getStatus(): AudioPlaylistStatus {
548
559
  return {
549
560
  id: this.id,
@@ -50,6 +50,11 @@ export function safeDuration(duration: number): number {
50
50
  return isNaN(duration) || !isFinite(duration) ? 0 : duration;
51
51
  }
52
52
 
53
+ // `play()` rejects with an `AbortError` when `pause()` or a new source interrupts it, which is not a failure.
54
+ export function isPlayInterrupted(error: unknown): boolean {
55
+ return error instanceof DOMException && error.name === 'AbortError';
56
+ }
57
+
53
58
  export function getStatusFromMedia(media: HTMLMediaElement, id: string): AudioStatus {
54
59
  const isPlaying = !!(
55
60
  media.currentTime > 0 &&
@@ -1 +0,0 @@
1
- b9a922c1e17423223501c1f3387d7719f6fae5cd9555b861931c948af389e891
@@ -1 +0,0 @@
1
- 6b52b2086aaa77e0c85829d33c244fc628004d9826eff8170fcc7bee594583e0ca63141233401eb034b101d9c24c605d86079ed9ee2abdfda1ee93929586e9a0
@@ -1 +0,0 @@
1
- 2a51da42795e2957fbe1d1eb650010d66125cf92
@@ -1 +0,0 @@
1
- 0c0ed2cf6c37a869edbcfc37199ef6bfd777023df6f61b7ceb70f3a2d15cf646
@@ -1 +0,0 @@
1
- d4b63688a2ed10c3f1fe4192ed93dc10be270a38c726808f283042c6beeafb2065684b81722fd82f13c8fa586ae6f9f475998388b93ab5ad56523e645a1a1df0
@@ -1 +0,0 @@
1
- decd83e81a4bef0a035c67a9e8fd9981114e02611a315293838a8f35c6486beb
@@ -1 +0,0 @@
1
- bb910e6f53e77c6cb5c40c6d98d27486ef68c68ae635e5853bd7205d0137822e4f6736e0b0eca3516ad737d049a0acfdbcc21d9cd54fe2eda00b982e0c2d17e6
@@ -1 +0,0 @@
1
- 3553c6a7ac54616659753c4f03d7d3783b1908a3
@@ -1 +0,0 @@
1
- 5e376957cfba5b72e87cb249b3778a698cb139ceaf6ef5a6fc1dd75f7f3505f4
@@ -1 +0,0 @@
1
- a07ea293fb89b12a185465fdc1352423c2d0045c534b9f2ee2ffbff585791103e4c3c709fa211c462c65a73515d678a85fb4a2e12838e86121939494e509a1fe