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
@@ -141,12 +141,16 @@ void AudioScheduledSourceNode::updatePlaybackInfo(
141
141
  nonSilentFramesToProcess = framesToProcess;
142
142
  }
143
143
 
144
+ void AudioScheduledSourceNode::disable() {
145
+ AudioNode::disable();
146
+
147
+ if (onendedCallback_) {
148
+ onendedCallback_(getStopTime());
149
+ }
150
+ }
151
+
144
152
  void AudioScheduledSourceNode::handleStopScheduled() {
145
153
  if (isStopScheduled()) {
146
- if (onendedCallback_) {
147
- onendedCallback_(getStopTime());
148
- }
149
-
150
154
  playbackState_ = PlaybackState::FINISHED;
151
155
  disable();
152
156
  }
@@ -33,6 +33,7 @@ class AudioScheduledSourceNode : public AudioNode {
33
33
  void setOnendedCallback(const std::function<void(double)> &onendedCallback);
34
34
 
35
35
  virtual double getStopTime() const = 0;
36
+ void disable() override;
36
37
 
37
38
  protected:
38
39
  PlaybackState playbackState_;
@@ -4,9 +4,9 @@
4
4
 
5
5
  namespace audioapi {
6
6
 
7
- AudioNodeDestructor::AudioNodeDestructor()
8
- : thread_(std::thread(&AudioNodeDestructor::process, this)),
9
- isExiting_(false) {}
7
+ AudioNodeDestructor::AudioNodeDestructor() : isExiting_(false) {
8
+ thread_ = std::thread(&AudioNodeDestructor::process, this);
9
+ }
10
10
 
11
11
  AudioNodeDestructor::~AudioNodeDestructor() {
12
12
  isExiting_ = true;
@@ -14,7 +14,7 @@ RCT_EXPORT_MODULE(AudioManagerModule);
14
14
  if (self == [super init]) {
15
15
  self.audioEngine = [AudioEngine sharedInstance];
16
16
  self.audioSessionManager = [AudioSessionManager sharedInstance];
17
- self.notificationManager = [NotificationManager sharedInstance];
17
+ self.notificationManager = [NotificationManager sharedInstanceWithAudioManagerModule:self];
18
18
  self.lockScreenManager = [LockScreenManager sharedInstanceWithAudioManagerModule:self];
19
19
  }
20
20
 
@@ -61,6 +61,11 @@ RCT_EXPORT_METHOD(setAudioSessionOptions : (NSString *)category mode : (NSString
61
61
  }
62
62
  }
63
63
 
64
+ RCT_EXPORT_METHOD(observeAudioInterruptions : (BOOL)enabled)
65
+ {
66
+ [self.notificationManager observeAudioInterruptions:enabled];
67
+ }
68
+
64
69
  RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(getDevicePreferredSampleRate)
65
70
  {
66
71
  return [self.audioSessionManager getDevicePreferredSampleRate];
@@ -80,13 +85,10 @@ RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(getDevicePreferredSampleRate)
80
85
  @"onRemoteSkipBackward",
81
86
  @"onRemoteSeekForward",
82
87
  @"onRemoteSeekBackward",
83
- @"onRemoteChangePlaybackPosition"
88
+ @"onRemoteChangePlaybackPosition",
89
+ @"onInterruption",
90
+ @"onRouteChange"
84
91
  ];
85
92
  }
86
93
 
87
- - (void)sendEventWithValue:(NSString *)event withValue:(NSString *)value
88
- {
89
- [self sendEventWithName:@"AudioManagerModule" body:@{@"name" : event, @"value" : value}];
90
- }
91
-
92
94
  @end
@@ -6,10 +6,8 @@
6
6
  @{ \
7
7
  @"album" : MPMediaItemPropertyAlbumTitle, \
8
8
  @"artist" : MPMediaItemPropertyArtist, \
9
- @"genre" : MPMediaItemPropertyGenre, \
10
9
  @"duration" : MPMediaItemPropertyPlaybackDuration, \
11
10
  @"title" : MPMediaItemPropertyTitle, \
12
- @"isLiveStream" : MPNowPlayingInfoPropertyIsLiveStream, \
13
11
  @"speed" : MPNowPlayingInfoPropertyPlaybackRate, \
14
12
  @"elapsedTime" : MPNowPlayingInfoPropertyElapsedPlaybackTime, \
15
13
  }
@@ -76,8 +74,6 @@ static LockScreenManager *_sharedInstance = nil;
76
74
  self.playingInfoCenter.playbackState = MPNowPlayingPlaybackStatePlaying;
77
75
  } else if ([state isEqualToString:@"state_paused"]) {
78
76
  self.playingInfoCenter.playbackState = MPNowPlayingPlaybackStatePaused;
79
- } else if ([state isEqualToString:@"state_stopped"]) {
80
- self.playingInfoCenter.playbackState = MPNowPlayingPlaybackStateStopped;
81
77
  }
82
78
  }
83
79
 
@@ -247,7 +243,7 @@ static LockScreenManager *_sharedInstance = nil;
247
243
  - (MPRemoteCommandHandlerStatus)onChangePlaybackRate:(MPChangePlaybackRateCommandEvent *)event
248
244
  {
249
245
  [self.audioManagerModule sendEventWithName:@"onRemoteChangePlaybackRate"
250
- body:@{@"playbackRate" : [NSNumber numberWithDouble:event.playbackRate]}];
246
+ body:@{@"value" : [NSNumber numberWithDouble:event.playbackRate]}];
251
247
  return MPRemoteCommandHandlerStatusSuccess;
252
248
  }
253
249
 
@@ -278,21 +274,21 @@ static LockScreenManager *_sharedInstance = nil;
278
274
  - (MPRemoteCommandHandlerStatus)onSkipForward:(MPSkipIntervalCommandEvent *)event
279
275
  {
280
276
  [self.audioManagerModule sendEventWithName:@"onRemoteSkipForward"
281
- body:@{@"interval" : [NSNumber numberWithDouble:event.interval]}];
277
+ body:@{@"value" : [NSNumber numberWithDouble:event.interval]}];
282
278
  return MPRemoteCommandHandlerStatusSuccess;
283
279
  }
284
280
 
285
281
  - (MPRemoteCommandHandlerStatus)onSkipBackward:(MPSkipIntervalCommandEvent *)event
286
282
  {
287
283
  [self.audioManagerModule sendEventWithName:@"onRemoteSkipBackward"
288
- body:@{@"interval" : [NSNumber numberWithDouble:event.interval]}];
284
+ body:@{@"value" : [NSNumber numberWithDouble:event.interval]}];
289
285
  return MPRemoteCommandHandlerStatusSuccess;
290
286
  }
291
287
 
292
288
  - (MPRemoteCommandHandlerStatus)onChangePlaybackPosition:(MPChangePlaybackPositionCommandEvent *)event
293
289
  {
294
290
  [self.audioManagerModule sendEventWithName:@"onRemoteChangePlaybackPosition"
295
- body:@{@"positionTime" : [NSNumber numberWithDouble:event.positionTime]}];
291
+ body:@{@"value" : [NSNumber numberWithDouble:event.positionTime]}];
296
292
  return MPRemoteCommandHandlerStatusSuccess;
297
293
  }
298
294
 
@@ -3,14 +3,20 @@
3
3
  #import <AVFoundation/AVFoundation.h>
4
4
  #import <Foundation/Foundation.h>
5
5
 
6
+ @class AudioManagerModule;
7
+
6
8
  @interface NotificationManager : NSObject
7
9
 
10
+ @property (nonatomic, weak) AudioManagerModule *audioManagerModule;
8
11
  @property (nonatomic, weak) NSNotificationCenter *notificationCenter;
9
12
 
10
13
  @property (nonatomic, assign) bool isInterrupted;
11
14
  @property (nonatomic, assign) bool hadConfigurationChange;
15
+ @property (nonatomic, assign) BOOL audioInterruptionsObserved;
12
16
 
13
- + (instancetype)sharedInstance;
17
+ + (instancetype)sharedInstanceWithAudioManagerModule:(AudioManagerModule *)audioManagerModule;
14
18
  - (void)cleanup;
15
19
 
20
+ - (void)observeAudioInterruptions:(BOOL)enabled;
21
+
16
22
  @end
@@ -1,3 +1,4 @@
1
+ #import <audioapi/ios/AudioManagerModule.h>
1
2
  #import <audioapi/ios/system/AudioEngine.h>
2
3
  #import <audioapi/ios/system/AudioSessionManager.h>
3
4
  #import <audioapi/ios/system/NotificationManager.h>
@@ -6,11 +7,11 @@
6
7
 
7
8
  static NotificationManager *_sharedInstance = nil;
8
9
 
9
- + (instancetype)sharedInstance
10
+ + (instancetype)sharedInstanceWithAudioManagerModule:(AudioManagerModule *)audioManagerModule
10
11
  {
11
12
  static dispatch_once_t onceToken;
12
13
  dispatch_once(&onceToken, ^{
13
- _sharedInstance = [[self alloc] initPrivate];
14
+ _sharedInstance = [[self alloc] initPrivateWithAudioManagerModule:audioManagerModule];
14
15
  });
15
16
  return _sharedInstance;
16
17
  }
@@ -21,10 +22,12 @@ static NotificationManager *_sharedInstance = nil;
21
22
  return nil;
22
23
  }
23
24
 
24
- - (instancetype)initPrivate
25
+ - (instancetype)initPrivateWithAudioManagerModule:(AudioManagerModule *)audioManagerModule
25
26
  {
26
27
  if (self = [super init]) {
28
+ self.audioManagerModule = audioManagerModule;
27
29
  self.notificationCenter = [NSNotificationCenter defaultCenter];
30
+ self.audioInterruptionsObserved = false;
28
31
 
29
32
  [self configureNotifications];
30
33
  }
@@ -38,12 +41,26 @@ static NotificationManager *_sharedInstance = nil;
38
41
  self.notificationCenter = nil;
39
42
  }
40
43
 
44
+ - (void)observeAudioInterruptions:(BOOL)enabled
45
+ {
46
+ if (self.audioInterruptionsObserved == enabled) {
47
+ return;
48
+ }
49
+
50
+ if (enabled) {
51
+ [self.notificationCenter addObserver:self
52
+ selector:@selector(handleInterruption:)
53
+ name:AVAudioSessionInterruptionNotification
54
+ object:nil];
55
+ } else {
56
+ [self.notificationCenter removeObserver:self name:AVAudioSessionInterruptionNotification object:nil];
57
+ }
58
+
59
+ self.audioInterruptionsObserved = enabled;
60
+ }
61
+
41
62
  - (void)configureNotifications
42
63
  {
43
- [self.notificationCenter addObserver:self
44
- selector:@selector(handleInterruption:)
45
- name:AVAudioSessionInterruptionNotification
46
- object:nil];
47
64
  [self.notificationCenter addObserver:self
48
65
  selector:@selector(handleRouteChange:)
49
66
  name:AVAudioSessionRouteChangeNotification
@@ -60,58 +77,63 @@ static NotificationManager *_sharedInstance = nil;
60
77
 
61
78
  - (void)handleInterruption:(NSNotification *)notification
62
79
  {
63
- NSError *error;
64
- UInt8 type = [[notification.userInfo valueForKey:AVAudioSessionInterruptionTypeKey] intValue];
65
- UInt8 option = [[notification.userInfo valueForKey:AVAudioSessionInterruptionOptionKey] intValue];
66
- AudioEngine *audioEngine = [AudioEngine sharedInstance];
67
- AudioSessionManager *audioSessionManager = [AudioSessionManager sharedInstance];
68
-
69
- if (type == AVAudioSessionInterruptionTypeBegan) {
70
- self.isInterrupted = true;
71
- NSLog(@"[NotificationManager] Detected interruption, stopping the engine");
72
-
73
- [audioEngine stopEngine];
74
-
75
- return;
76
- }
77
-
78
- if (type != AVAudioSessionInterruptionTypeEnded) {
79
- NSLog(@"[NotificationManager] Unexpected interruption state, chilling");
80
+ if (!self.audioInterruptionsObserved) {
80
81
  return;
81
82
  }
82
83
 
83
- self.isInterrupted = false;
84
+ NSInteger interruptionType = [notification.userInfo[AVAudioSessionInterruptionTypeKey] integerValue];
85
+ NSInteger interruptionOption = [notification.userInfo[AVAudioSessionInterruptionOptionKey] integerValue];
84
86
 
85
- if (option != AVAudioSessionInterruptionOptionShouldResume) {
86
- NSLog(@"[NotificationManager] Interruption ended, but engine is not allowed to resume");
87
+ if (interruptionType == AVAudioSessionInterruptionTypeBegan) {
88
+ [self.audioManagerModule sendEventWithName:@"onInterruption"
89
+ body:@{@"type" : @"began", @"shouldResume" : @"false"}];
87
90
  return;
88
91
  }
89
92
 
90
- NSLog(@"[NotificationManager] Interruption ended, resuming the engine");
91
- bool success = [audioSessionManager setActive:true error:&error];
92
-
93
- if (!success) {
94
- NSLog(@"[NotificationManager] Unable to activate the audio session, reason: %@", [error debugDescription]);
93
+ if (interruptionOption == AVAudioSessionInterruptionOptionShouldResume) {
94
+ [self.audioManagerModule sendEventWithName:@"onInterruption" body:@{@"type" : @"ended", @"shouldResume" : @"true"}];
95
95
  return;
96
96
  }
97
97
 
98
- if (self.hadConfigurationChange) {
99
- [audioEngine rebuildAudioEngine];
100
- }
101
-
102
- [audioEngine startEngine];
98
+ [self.audioManagerModule sendEventWithName:@"onInterruption" body:@{@"type" : @"ended", @"shouldResume" : @"false"}];
103
99
  }
104
100
 
105
101
  - (void)handleRouteChange:(NSNotification *)notification
106
102
  {
107
- UInt8 reason = [[notification.userInfo valueForKey:AVAudioSessionInterruptionTypeKey] intValue];
108
- NSLog(@"[NotificationManager] Route change detected, reason: %u", reason);
109
- AudioEngine *audioEngine = [AudioEngine sharedInstance];
110
-
111
- if (reason == AVAudioSessionRouteChangeReasonOldDeviceUnavailable) {
112
- NSLog(@"[NotificationManager] The previously used audio device became unavailable. Audio engine paused");
113
- [audioEngine stopEngine];
103
+ NSInteger routeChangeReason = [notification.userInfo[AVAudioSessionRouteChangeReasonKey] integerValue];
104
+ NSString *reasonStr;
105
+
106
+ switch (routeChangeReason) {
107
+ case AVAudioSessionRouteChangeReasonUnknown:
108
+ reasonStr = @"Unknown";
109
+ break;
110
+ case AVAudioSessionRouteChangeReasonOverride:
111
+ reasonStr = @"Override";
112
+ break;
113
+ case AVAudioSessionRouteChangeReasonCategoryChange:
114
+ reasonStr = @"CategoryChange";
115
+ break;
116
+ case AVAudioSessionRouteChangeReasonWakeFromSleep:
117
+ reasonStr = @"WakeFromSleep";
118
+ break;
119
+ case AVAudioSessionRouteChangeReasonNewDeviceAvailable:
120
+ reasonStr = @"NewDeviceAvailable";
121
+ break;
122
+ case AVAudioSessionRouteChangeReasonOldDeviceUnavailable:
123
+ reasonStr = @"OldDeviceUnavailable";
124
+ break;
125
+ case AVAudioSessionRouteChangeReasonRouteConfigurationChange:
126
+ reasonStr = @"ConfigurationChange";
127
+ break;
128
+ case AVAudioSessionRouteChangeReasonNoSuitableRouteForCategory:
129
+ reasonStr = @"NoSuitableRouteForCategory";
130
+ break;
131
+ default:
132
+ reasonStr = @"DoubleUnknown";
133
+ break;
114
134
  }
135
+
136
+ [self.audioManagerModule sendEventWithName:@"onRouteChange" body:@{@"reason" : @"reasonStr"}];
115
137
  }
116
138
 
117
139
  - (void)handleMediaServicesReset:(NSNotification *)notification
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "AnalyserNode", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _AnalyserNode.default;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "AudioBuffer", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _AudioBuffer.default;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "AudioBufferSourceNode", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _AudioBufferSourceNode.default;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "AudioContext", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _AudioContext.default;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "AudioDestinationNode", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _AudioDestinationNode.default;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "AudioManager", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _system.default;
40
+ }
41
+ });
42
+ Object.defineProperty(exports, "AudioNode", {
43
+ enumerable: true,
44
+ get: function () {
45
+ return _AudioNode.default;
46
+ }
47
+ });
48
+ Object.defineProperty(exports, "AudioParam", {
49
+ enumerable: true,
50
+ get: function () {
51
+ return _AudioParam.default;
52
+ }
53
+ });
54
+ Object.defineProperty(exports, "AudioScheduledSourceNode", {
55
+ enumerable: true,
56
+ get: function () {
57
+ return _AudioScheduledSourceNode.default;
58
+ }
59
+ });
60
+ Object.defineProperty(exports, "BaseAudioContext", {
61
+ enumerable: true,
62
+ get: function () {
63
+ return _BaseAudioContext.default;
64
+ }
65
+ });
66
+ Object.defineProperty(exports, "BiquadFilterNode", {
67
+ enumerable: true,
68
+ get: function () {
69
+ return _BiquadFilterNode.default;
70
+ }
71
+ });
72
+ Object.defineProperty(exports, "BiquadFilterType", {
73
+ enumerable: true,
74
+ get: function () {
75
+ return _types.BiquadFilterType;
76
+ }
77
+ });
78
+ Object.defineProperty(exports, "ChannelCountMode", {
79
+ enumerable: true,
80
+ get: function () {
81
+ return _types.ChannelCountMode;
82
+ }
83
+ });
84
+ Object.defineProperty(exports, "ChannelInterpretation", {
85
+ enumerable: true,
86
+ get: function () {
87
+ return _types.ChannelInterpretation;
88
+ }
89
+ });
90
+ Object.defineProperty(exports, "ContextState", {
91
+ enumerable: true,
92
+ get: function () {
93
+ return _types.ContextState;
94
+ }
95
+ });
96
+ Object.defineProperty(exports, "GainNode", {
97
+ enumerable: true,
98
+ get: function () {
99
+ return _GainNode.default;
100
+ }
101
+ });
102
+ Object.defineProperty(exports, "IndexSizeError", {
103
+ enumerable: true,
104
+ get: function () {
105
+ return _errors.IndexSizeError;
106
+ }
107
+ });
108
+ Object.defineProperty(exports, "InvalidAccessError", {
109
+ enumerable: true,
110
+ get: function () {
111
+ return _errors.InvalidAccessError;
112
+ }
113
+ });
114
+ Object.defineProperty(exports, "InvalidStateError", {
115
+ enumerable: true,
116
+ get: function () {
117
+ return _errors.InvalidStateError;
118
+ }
119
+ });
120
+ Object.defineProperty(exports, "NotSupportedError", {
121
+ enumerable: true,
122
+ get: function () {
123
+ return _errors.NotSupportedError;
124
+ }
125
+ });
126
+ Object.defineProperty(exports, "OfflineAudioContext", {
127
+ enumerable: true,
128
+ get: function () {
129
+ return _OfflineAudioContext.default;
130
+ }
131
+ });
132
+ Object.defineProperty(exports, "OscillatorNode", {
133
+ enumerable: true,
134
+ get: function () {
135
+ return _OscillatorNode.default;
136
+ }
137
+ });
138
+ Object.defineProperty(exports, "OscillatorType", {
139
+ enumerable: true,
140
+ get: function () {
141
+ return _types.OscillatorType;
142
+ }
143
+ });
144
+ Object.defineProperty(exports, "PeriodicWaveConstraints", {
145
+ enumerable: true,
146
+ get: function () {
147
+ return _types.PeriodicWaveConstraints;
148
+ }
149
+ });
150
+ Object.defineProperty(exports, "RangeError", {
151
+ enumerable: true,
152
+ get: function () {
153
+ return _errors.RangeError;
154
+ }
155
+ });
156
+ Object.defineProperty(exports, "StereoPannerNode", {
157
+ enumerable: true,
158
+ get: function () {
159
+ return _StereoPannerNode.default;
160
+ }
161
+ });
162
+ Object.defineProperty(exports, "WindowType", {
163
+ enumerable: true,
164
+ get: function () {
165
+ return _types.WindowType;
166
+ }
167
+ });
168
+ var _NativeAudioAPIModule = _interopRequireDefault(require("./specs/NativeAudioAPIModule"));
169
+ var _AudioBuffer = _interopRequireDefault(require("./core/AudioBuffer"));
170
+ var _AudioBufferSourceNode = _interopRequireDefault(require("./core/AudioBufferSourceNode"));
171
+ var _AudioContext = _interopRequireDefault(require("./core/AudioContext"));
172
+ var _OfflineAudioContext = _interopRequireDefault(require("./core/OfflineAudioContext"));
173
+ var _AudioDestinationNode = _interopRequireDefault(require("./core/AudioDestinationNode"));
174
+ var _AudioNode = _interopRequireDefault(require("./core/AudioNode"));
175
+ var _AnalyserNode = _interopRequireDefault(require("./core/AnalyserNode"));
176
+ var _AudioParam = _interopRequireDefault(require("./core/AudioParam"));
177
+ var _AudioScheduledSourceNode = _interopRequireDefault(require("./core/AudioScheduledSourceNode"));
178
+ var _BaseAudioContext = _interopRequireDefault(require("./core/BaseAudioContext"));
179
+ var _BiquadFilterNode = _interopRequireDefault(require("./core/BiquadFilterNode"));
180
+ var _GainNode = _interopRequireDefault(require("./core/GainNode"));
181
+ var _OscillatorNode = _interopRequireDefault(require("./core/OscillatorNode"));
182
+ var _StereoPannerNode = _interopRequireDefault(require("./core/StereoPannerNode"));
183
+ var _system = _interopRequireDefault(require("./system"));
184
+ var _types = require("./types");
185
+ var _errors = require("./errors");
186
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
187
+ /* eslint-disable no-var */
188
+
189
+ /* eslint-disable no-var */
190
+
191
+ if (global.createAudioContext == null || global.createOfflineAudioContext == null) {
192
+ if (!_NativeAudioAPIModule.default) {
193
+ throw new Error(`Failed to install react-native-audio-api: The native module could not be found.`);
194
+ }
195
+ _NativeAudioAPIModule.default.install();
196
+ }
197
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_NativeAudioAPIModule","_interopRequireDefault","require","_AudioBuffer","_AudioBufferSourceNode","_AudioContext","_OfflineAudioContext","_AudioDestinationNode","_AudioNode","_AnalyserNode","_AudioParam","_AudioScheduledSourceNode","_BaseAudioContext","_BiquadFilterNode","_GainNode","_OscillatorNode","_StereoPannerNode","_system","_types","_errors","e","__esModule","default","global","createAudioContext","createOfflineAudioContext","NativeAudioAPIModule","Error","install"],"sourceRoot":"../../src","sources":["api.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,qBAAA,GAAAC,sBAAA,CAAAC,OAAA;AA2BA,IAAAC,YAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,sBAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,aAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,oBAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,qBAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,UAAA,GAAAP,sBAAA,CAAAC,OAAA;AACA,IAAAO,aAAA,GAAAR,sBAAA,CAAAC,OAAA;AACA,IAAAQ,WAAA,GAAAT,sBAAA,CAAAC,OAAA;AACA,IAAAS,yBAAA,GAAAV,sBAAA,CAAAC,OAAA;AACA,IAAAU,iBAAA,GAAAX,sBAAA,CAAAC,OAAA;AACA,IAAAW,iBAAA,GAAAZ,sBAAA,CAAAC,OAAA;AACA,IAAAY,SAAA,GAAAb,sBAAA,CAAAC,OAAA;AACA,IAAAa,eAAA,GAAAd,sBAAA,CAAAC,OAAA;AACA,IAAAc,iBAAA,GAAAf,sBAAA,CAAAC,OAAA;AACA,IAAAe,OAAA,GAAAhB,sBAAA,CAAAC,OAAA;AAEA,IAAAgB,MAAA,GAAAhB,OAAA;AAUA,IAAAiB,OAAA,GAAAjB,OAAA;AAMkB,SAAAD,uBAAAmB,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAxDlB;;AASA;;AAEA,IACEG,MAAM,CAACC,kBAAkB,IAAI,IAAI,IACjCD,MAAM,CAACE,yBAAyB,IAAI,IAAI,EACxC;EACA,IAAI,CAACC,6BAAoB,EAAE;IACzB,MAAM,IAAIC,KAAK,CACb,iFACF,CAAC;EACH;EAEAD,6BAAoB,CAACE,OAAO,CAAC,CAAC;AAChC","ignoreList":[]}