react-native-audio-api 0.6.0-rc.0 → 0.6.0-rc.1

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 (152) hide show
  1. package/android/CMakeLists.txt +6 -3
  2. package/android/build.gradle +1 -0
  3. package/android/src/main/java/com/swmansion/audioapi/AudioManagerModule.kt +15 -12
  4. package/android/src/main/java/com/swmansion/audioapi/system/AudioFocusListener.kt +60 -0
  5. package/android/src/main/java/com/swmansion/audioapi/system/LockScreenManager.kt +294 -0
  6. package/android/src/main/java/com/swmansion/audioapi/system/MediaNotificationManager.kt +279 -0
  7. package/android/src/main/java/com/swmansion/audioapi/system/MediaReceiver.kt +46 -0
  8. package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionCallback.kt +39 -0
  9. package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionEventEmitter.kt +84 -0
  10. package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionManager.kt +144 -0
  11. package/android/src/main/res/drawable/next.xml +9 -0
  12. package/android/src/main/res/drawable/pause.xml +9 -0
  13. package/android/src/main/res/drawable/play.xml +9 -0
  14. package/android/src/main/res/drawable/previous.xml +9 -0
  15. package/android/src/main/res/drawable/skip_backward_5.xml +9 -0
  16. package/android/src/main/res/drawable/skip_forward_5.xml +9 -0
  17. package/android/src/main/res/drawable/stop.xml +9 -0
  18. package/app.plugin.js +1 -0
  19. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +1 -6
  20. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +8 -4
  21. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +1 -0
  22. package/common/cpp/audioapi/core/utils/AudioNodeDestructor.cpp +3 -3
  23. package/ios/audioapi/ios/AudioManagerModule.mm +9 -7
  24. package/ios/audioapi/ios/system/LockScreenManager.mm +4 -8
  25. package/ios/audioapi/ios/system/NotificationManager.h +7 -1
  26. package/ios/audioapi/ios/system/NotificationManager.mm +66 -44
  27. package/lib/commonjs/api.js +197 -0
  28. package/lib/commonjs/api.js.map +1 -0
  29. package/lib/commonjs/api.web.js +219 -0
  30. package/lib/commonjs/api.web.js.map +1 -0
  31. package/lib/commonjs/core/AnalyserNode.js +71 -0
  32. package/lib/commonjs/core/AnalyserNode.js.map +1 -0
  33. package/lib/commonjs/core/AudioBuffer.js +44 -0
  34. package/lib/commonjs/core/AudioBuffer.js.map +1 -0
  35. package/lib/commonjs/core/AudioBufferSourceNode.js +68 -0
  36. package/lib/commonjs/core/AudioBufferSourceNode.js.map +1 -0
  37. package/lib/commonjs/core/AudioContext.js +29 -0
  38. package/lib/commonjs/core/AudioContext.js.map +1 -0
  39. package/lib/commonjs/core/AudioDestinationNode.js +11 -0
  40. package/lib/commonjs/core/AudioDestinationNode.js.map +1 -0
  41. package/lib/commonjs/core/AudioNode.js +30 -0
  42. package/lib/commonjs/core/AudioNode.js.map +1 -0
  43. package/lib/commonjs/core/AudioParam.js +82 -0
  44. package/lib/commonjs/core/AudioParam.js.map +1 -0
  45. package/lib/commonjs/core/AudioScheduledSourceNode.js +38 -0
  46. package/lib/commonjs/core/AudioScheduledSourceNode.js.map +1 -0
  47. package/lib/commonjs/core/BaseAudioContext.js +80 -0
  48. package/lib/commonjs/core/BaseAudioContext.js.map +1 -0
  49. package/lib/commonjs/core/BiquadFilterNode.js +33 -0
  50. package/lib/commonjs/core/BiquadFilterNode.js.map +1 -0
  51. package/lib/commonjs/core/GainNode.js +17 -0
  52. package/lib/commonjs/core/GainNode.js.map +1 -0
  53. package/lib/commonjs/core/OfflineAudioContext.js +63 -0
  54. package/lib/commonjs/core/OfflineAudioContext.js.map +1 -0
  55. package/lib/commonjs/core/OscillatorNode.js +32 -0
  56. package/lib/commonjs/core/OscillatorNode.js.map +1 -0
  57. package/lib/commonjs/core/PeriodicWave.js +15 -0
  58. package/lib/commonjs/core/PeriodicWave.js.map +1 -0
  59. package/lib/commonjs/core/StereoPannerNode.js +17 -0
  60. package/lib/commonjs/core/StereoPannerNode.js.map +1 -0
  61. package/lib/commonjs/errors/IndexSizeError.js +14 -0
  62. package/lib/commonjs/errors/IndexSizeError.js.map +1 -0
  63. package/lib/commonjs/errors/InvalidAccessError.js +14 -0
  64. package/lib/commonjs/errors/InvalidAccessError.js.map +1 -0
  65. package/lib/commonjs/errors/InvalidStateError.js +14 -0
  66. package/lib/commonjs/errors/InvalidStateError.js.map +1 -0
  67. package/lib/commonjs/errors/NotSupportedError.js +14 -0
  68. package/lib/commonjs/errors/NotSupportedError.js.map +1 -0
  69. package/lib/commonjs/errors/RangeError.js +14 -0
  70. package/lib/commonjs/errors/RangeError.js.map +1 -0
  71. package/lib/commonjs/errors/index.js +42 -0
  72. package/lib/commonjs/errors/index.js.map +1 -0
  73. package/lib/commonjs/index.js +17 -0
  74. package/lib/commonjs/index.js.map +1 -0
  75. package/lib/commonjs/interfaces.js +6 -0
  76. package/lib/commonjs/interfaces.js.map +1 -0
  77. package/lib/commonjs/package.json +1 -0
  78. package/lib/commonjs/plugin/withAudioAPI.js +62 -0
  79. package/lib/commonjs/plugin/withAudioAPI.js.map +1 -0
  80. package/lib/commonjs/specs/NativeAudioAPIModule.js +9 -0
  81. package/lib/commonjs/specs/NativeAudioAPIModule.js.map +1 -0
  82. package/lib/commonjs/specs/NativeAudioManagerModule.js +33 -0
  83. package/lib/commonjs/specs/NativeAudioManagerModule.js.map +1 -0
  84. package/lib/commonjs/specs/index.js +27 -0
  85. package/lib/commonjs/specs/index.js.map +1 -0
  86. package/lib/commonjs/system/AudioManager.js +79 -0
  87. package/lib/commonjs/system/AudioManager.js.map +1 -0
  88. package/lib/commonjs/system/index.js +14 -0
  89. package/lib/commonjs/system/index.js.map +1 -0
  90. package/lib/commonjs/system/types.js +2 -0
  91. package/lib/commonjs/system/types.js.map +1 -0
  92. package/lib/commonjs/types.js +2 -0
  93. package/lib/commonjs/types.js.map +1 -0
  94. package/lib/commonjs/utils/index.js +10 -0
  95. package/lib/commonjs/utils/index.js.map +1 -0
  96. package/lib/commonjs/web-core/AnalyserNode.js +38 -0
  97. package/lib/commonjs/web-core/AnalyserNode.js.map +1 -0
  98. package/lib/commonjs/web-core/AudioBuffer.js +44 -0
  99. package/lib/commonjs/web-core/AudioBuffer.js.map +1 -0
  100. package/lib/commonjs/web-core/AudioBufferSourceNode.js +214 -0
  101. package/lib/commonjs/web-core/AudioBufferSourceNode.js.map +1 -0
  102. package/lib/commonjs/web-core/AudioContext.js +93 -0
  103. package/lib/commonjs/web-core/AudioContext.js.map +1 -0
  104. package/lib/commonjs/web-core/AudioDestinationNode.js +11 -0
  105. package/lib/commonjs/web-core/AudioDestinationNode.js.map +1 -0
  106. package/lib/commonjs/web-core/AudioNode.js +33 -0
  107. package/lib/commonjs/web-core/AudioNode.js.map +1 -0
  108. package/lib/commonjs/web-core/AudioParam.js +81 -0
  109. package/lib/commonjs/web-core/AudioParam.js.map +1 -0
  110. package/lib/commonjs/web-core/AudioScheduledSourceNode.js +41 -0
  111. package/lib/commonjs/web-core/AudioScheduledSourceNode.js.map +1 -0
  112. package/lib/commonjs/web-core/BaseAudioContext.js +2 -0
  113. package/lib/commonjs/web-core/BaseAudioContext.js.map +1 -0
  114. package/lib/commonjs/web-core/BiquadFilterNode.js +33 -0
  115. package/lib/commonjs/web-core/BiquadFilterNode.js.map +1 -0
  116. package/lib/commonjs/web-core/GainNode.js +17 -0
  117. package/lib/commonjs/web-core/GainNode.js.map +1 -0
  118. package/lib/commonjs/web-core/OfflineAudioContext.js +96 -0
  119. package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -0
  120. package/lib/commonjs/web-core/OscillatorNode.js +31 -0
  121. package/lib/commonjs/web-core/OscillatorNode.js.map +1 -0
  122. package/lib/commonjs/web-core/PeriodicWave.js +15 -0
  123. package/lib/commonjs/web-core/PeriodicWave.js.map +1 -0
  124. package/lib/commonjs/web-core/StereoPannerNode.js +17 -0
  125. package/lib/commonjs/web-core/StereoPannerNode.js.map +1 -0
  126. package/lib/commonjs/web-core/custom/LoadCustomWasm.js +37 -0
  127. package/lib/commonjs/web-core/custom/LoadCustomWasm.js.map +1 -0
  128. package/lib/commonjs/web-core/custom/index.js +14 -0
  129. package/lib/commonjs/web-core/custom/index.js.map +1 -0
  130. package/lib/commonjs/web-core/custom/signalsmithStretch/LICENSE.txt +21 -0
  131. package/lib/commonjs/web-core/custom/signalsmithStretch/README.md +46 -0
  132. package/lib/commonjs/web-core/custom/signalsmithStretch/SignalsmithStretch.mjs +826 -0
  133. package/lib/commonjs/web-core/custom/signalsmithStretch/SignalsmithStretch.mjs.map +1 -0
  134. package/lib/module/plugin/withAudioAPI.js +58 -0
  135. package/lib/module/plugin/withAudioAPI.js.map +1 -0
  136. package/lib/module/specs/NativeAudioManagerModule.js +5 -6
  137. package/lib/module/specs/NativeAudioManagerModule.js.map +1 -1
  138. package/lib/module/system/AudioManager.js +9 -0
  139. package/lib/module/system/AudioManager.js.map +1 -1
  140. package/lib/typescript/plugin/withAudioAPI.d.ts +9 -0
  141. package/lib/typescript/plugin/withAudioAPI.d.ts.map +1 -0
  142. package/lib/typescript/specs/NativeAudioManagerModule.d.ts +2 -1
  143. package/lib/typescript/specs/NativeAudioManagerModule.d.ts.map +1 -1
  144. package/lib/typescript/system/AudioManager.d.ts +4 -2
  145. package/lib/typescript/system/AudioManager.d.ts.map +1 -1
  146. package/lib/typescript/system/types.d.ts +16 -4
  147. package/lib/typescript/system/types.d.ts.map +1 -1
  148. package/package.json +6 -3
  149. package/src/plugin/withAudioAPI.ts +90 -0
  150. package/src/specs/NativeAudioManagerModule.ts +8 -11
  151. package/src/system/AudioManager.ts +42 -15
  152. package/src/system/types.ts +20 -4
@@ -1,7 +1,22 @@
1
- import { SessionOptions, LockScreenInfo, RemoteControl } from './types';
1
+ import {
2
+ SessionOptions,
3
+ LockScreenInfo,
4
+ RemoteControlEventName,
5
+ InterruptionEventName,
6
+ RemoteControlEmptyEventType,
7
+ RemoteControlEventType,
8
+ OnInterruptionEventType,
9
+ OnRouteChangeEventType,
10
+ } from './types';
2
11
  import { AudioManagerModule, eventEmitter } from '../specs';
3
12
  import { EmitterSubscription } from 'react-native';
4
13
 
14
+ type AudioManagerEventType =
15
+ | RemoteControlEmptyEventType
16
+ | RemoteControlEventType
17
+ | OnInterruptionEventType
18
+ | OnRouteChangeEventType;
19
+
5
20
  class AudioManager {
6
21
  setLockScreenInfo(info: LockScreenInfo) {
7
22
  AudioManagerModule.setLockScreenInfo(info);
@@ -24,10 +39,14 @@ class AudioManager {
24
39
  return AudioManagerModule.getDevicePreferredSampleRate();
25
40
  }
26
41
 
42
+ observeAudioInterruptions(enabled: boolean) {
43
+ AudioManagerModule.observeAudioInterruptions(enabled);
44
+ }
45
+
27
46
  enableRemoteCommand(
28
- name: RemoteControl,
47
+ name: RemoteControlEventName | InterruptionEventName,
29
48
  enabled: boolean,
30
- callback?: (value?: number) => void
49
+ callback?: (event: AudioManagerEventType) => void
31
50
  ): EmitterSubscription | null {
32
51
  AudioManagerModule.enableRemoteCommand(name, enabled);
33
52
 
@@ -36,80 +55,88 @@ class AudioManager {
36
55
  if (enabled && callback) {
37
56
  switch (name) {
38
57
  case 'play':
39
- subscription = eventEmitter!.addListener('onRemotePlay', callback);
58
+ subscription = eventEmitter.addListener('onRemotePlay', callback);
40
59
  break;
41
60
 
42
61
  case 'pause':
43
- subscription = eventEmitter!.addListener('onRemotePause', callback);
62
+ subscription = eventEmitter.addListener('onRemotePause', callback);
44
63
  break;
45
64
 
46
65
  case 'stop':
47
- subscription = eventEmitter!.addListener('onRemoteStop', callback);
66
+ subscription = eventEmitter.addListener('onRemoteStop', callback);
48
67
  break;
49
68
 
50
69
  case 'togglePlayPause':
51
- subscription = eventEmitter!.addListener(
70
+ subscription = eventEmitter.addListener(
52
71
  'onRemoteTogglePlayPause',
53
72
  callback
54
73
  );
55
74
  break;
56
75
 
57
76
  case 'changePlaybackRate':
58
- subscription = eventEmitter!.addListener(
77
+ subscription = eventEmitter.addListener(
59
78
  'onRemoteChangePlaybackRate',
60
79
  callback
61
80
  );
62
81
  break;
63
82
 
64
83
  case 'nextTrack':
65
- subscription = eventEmitter!.addListener(
84
+ subscription = eventEmitter.addListener(
66
85
  'onRemoteNextTrack',
67
86
  callback
68
87
  );
69
88
  break;
70
89
 
71
90
  case 'previousTrack':
72
- subscription = eventEmitter!.addListener(
91
+ subscription = eventEmitter.addListener(
73
92
  'onRemotePreviousTrack',
74
93
  callback
75
94
  );
76
95
  break;
77
96
 
78
97
  case 'skipForward':
79
- subscription = eventEmitter!.addListener(
98
+ subscription = eventEmitter.addListener(
80
99
  'onRemoteSkipForward',
81
100
  callback
82
101
  );
83
102
  break;
84
103
 
85
104
  case 'skipBackward':
86
- subscription = eventEmitter!.addListener(
105
+ subscription = eventEmitter.addListener(
87
106
  'onRemoteSkipBackward',
88
107
  callback
89
108
  );
90
109
  break;
91
110
 
92
111
  case 'seekForward':
93
- subscription = eventEmitter!.addListener(
112
+ subscription = eventEmitter.addListener(
94
113
  'onRemoteSeekForward',
95
114
  callback
96
115
  );
97
116
  break;
98
117
 
99
118
  case 'seekBackward':
100
- subscription = eventEmitter!.addListener(
119
+ subscription = eventEmitter.addListener(
101
120
  'onRemoteSeekBackward',
102
121
  callback
103
122
  );
104
123
  break;
105
124
 
106
125
  case 'changePlaybackPosition':
107
- subscription = eventEmitter!.addListener(
126
+ subscription = eventEmitter.addListener(
108
127
  'onRemoteChangePlaybackPosition',
109
128
  callback
110
129
  );
111
130
  break;
112
131
 
132
+ case 'interruption':
133
+ subscription = eventEmitter.addListener('onInterruption', callback);
134
+ break;
135
+
136
+ case 'routeChange':
137
+ subscription = eventEmitter.addListener('onRouteChange', callback);
138
+ break;
139
+
113
140
  default:
114
141
  console.error('Unsupported RemoteControl action:', name);
115
142
  }
@@ -34,7 +34,7 @@ export interface SessionOptions {
34
34
  active?: boolean;
35
35
  }
36
36
 
37
- export type MediaState = 'state_playing' | 'state_paused' | 'state_stopped';
37
+ export type MediaState = 'state_playing' | 'state_paused';
38
38
 
39
39
  interface BaseLockScreenInfo {
40
40
  [key: string]: string | boolean | number | undefined;
@@ -45,15 +45,14 @@ export interface LockScreenInfo extends BaseLockScreenInfo {
45
45
  artwork?: string;
46
46
  artist?: string;
47
47
  album?: string;
48
- genre?: string;
49
48
  duration?: number;
50
- isLiveStream?: boolean;
49
+ description?: string; // android only
51
50
  state?: MediaState;
52
51
  speed?: number;
53
52
  elapsedTime?: number;
54
53
  }
55
54
 
56
- export type RemoteControl =
55
+ export type RemoteControlEventName =
57
56
  | 'play'
58
57
  | 'pause'
59
58
  | 'stop'
@@ -66,3 +65,20 @@ export type RemoteControl =
66
65
  | 'seekForward'
67
66
  | 'seekBackward'
68
67
  | 'changePlaybackPosition';
68
+
69
+ export type InterruptionEventName = 'interruption' | 'routeChange';
70
+
71
+ export interface RemoteControlEmptyEventType {}
72
+
73
+ export interface RemoteControlEventType {
74
+ value: number;
75
+ }
76
+
77
+ export interface OnInterruptionEventType {
78
+ type: 'ended' | 'began';
79
+ shouldResume: boolean;
80
+ }
81
+
82
+ export interface OnRouteChangeEventType {
83
+ reason: string;
84
+ }