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.
- package/android/CMakeLists.txt +6 -3
- package/android/build.gradle +1 -0
- package/android/src/main/java/com/swmansion/audioapi/AudioManagerModule.kt +15 -12
- package/android/src/main/java/com/swmansion/audioapi/system/AudioFocusListener.kt +60 -0
- package/android/src/main/java/com/swmansion/audioapi/system/LockScreenManager.kt +294 -0
- package/android/src/main/java/com/swmansion/audioapi/system/MediaNotificationManager.kt +279 -0
- package/android/src/main/java/com/swmansion/audioapi/system/MediaReceiver.kt +46 -0
- package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionCallback.kt +39 -0
- package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionEventEmitter.kt +84 -0
- package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionManager.kt +144 -0
- package/android/src/main/res/drawable/next.xml +9 -0
- package/android/src/main/res/drawable/pause.xml +9 -0
- package/android/src/main/res/drawable/play.xml +9 -0
- package/android/src/main/res/drawable/previous.xml +9 -0
- package/android/src/main/res/drawable/skip_backward_5.xml +9 -0
- package/android/src/main/res/drawable/skip_forward_5.xml +9 -0
- package/android/src/main/res/drawable/stop.xml +9 -0
- package/app.plugin.js +1 -0
- package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +1 -6
- package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +8 -4
- package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +1 -0
- package/common/cpp/audioapi/core/utils/AudioNodeDestructor.cpp +3 -3
- package/ios/audioapi/ios/AudioManagerModule.mm +9 -7
- package/ios/audioapi/ios/system/LockScreenManager.mm +4 -8
- package/ios/audioapi/ios/system/NotificationManager.h +7 -1
- package/ios/audioapi/ios/system/NotificationManager.mm +66 -44
- package/lib/commonjs/api.js +197 -0
- package/lib/commonjs/api.js.map +1 -0
- package/lib/commonjs/api.web.js +219 -0
- package/lib/commonjs/api.web.js.map +1 -0
- package/lib/commonjs/core/AnalyserNode.js +71 -0
- package/lib/commonjs/core/AnalyserNode.js.map +1 -0
- package/lib/commonjs/core/AudioBuffer.js +44 -0
- package/lib/commonjs/core/AudioBuffer.js.map +1 -0
- package/lib/commonjs/core/AudioBufferSourceNode.js +68 -0
- package/lib/commonjs/core/AudioBufferSourceNode.js.map +1 -0
- package/lib/commonjs/core/AudioContext.js +29 -0
- package/lib/commonjs/core/AudioContext.js.map +1 -0
- package/lib/commonjs/core/AudioDestinationNode.js +11 -0
- package/lib/commonjs/core/AudioDestinationNode.js.map +1 -0
- package/lib/commonjs/core/AudioNode.js +30 -0
- package/lib/commonjs/core/AudioNode.js.map +1 -0
- package/lib/commonjs/core/AudioParam.js +82 -0
- package/lib/commonjs/core/AudioParam.js.map +1 -0
- package/lib/commonjs/core/AudioScheduledSourceNode.js +38 -0
- package/lib/commonjs/core/AudioScheduledSourceNode.js.map +1 -0
- package/lib/commonjs/core/BaseAudioContext.js +80 -0
- package/lib/commonjs/core/BaseAudioContext.js.map +1 -0
- package/lib/commonjs/core/BiquadFilterNode.js +33 -0
- package/lib/commonjs/core/BiquadFilterNode.js.map +1 -0
- package/lib/commonjs/core/GainNode.js +17 -0
- package/lib/commonjs/core/GainNode.js.map +1 -0
- package/lib/commonjs/core/OfflineAudioContext.js +63 -0
- package/lib/commonjs/core/OfflineAudioContext.js.map +1 -0
- package/lib/commonjs/core/OscillatorNode.js +32 -0
- package/lib/commonjs/core/OscillatorNode.js.map +1 -0
- package/lib/commonjs/core/PeriodicWave.js +15 -0
- package/lib/commonjs/core/PeriodicWave.js.map +1 -0
- package/lib/commonjs/core/StereoPannerNode.js +17 -0
- package/lib/commonjs/core/StereoPannerNode.js.map +1 -0
- package/lib/commonjs/errors/IndexSizeError.js +14 -0
- package/lib/commonjs/errors/IndexSizeError.js.map +1 -0
- package/lib/commonjs/errors/InvalidAccessError.js +14 -0
- package/lib/commonjs/errors/InvalidAccessError.js.map +1 -0
- package/lib/commonjs/errors/InvalidStateError.js +14 -0
- package/lib/commonjs/errors/InvalidStateError.js.map +1 -0
- package/lib/commonjs/errors/NotSupportedError.js +14 -0
- package/lib/commonjs/errors/NotSupportedError.js.map +1 -0
- package/lib/commonjs/errors/RangeError.js +14 -0
- package/lib/commonjs/errors/RangeError.js.map +1 -0
- package/lib/commonjs/errors/index.js +42 -0
- package/lib/commonjs/errors/index.js.map +1 -0
- package/lib/commonjs/index.js +17 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/interfaces.js +6 -0
- package/lib/commonjs/interfaces.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/plugin/withAudioAPI.js +62 -0
- package/lib/commonjs/plugin/withAudioAPI.js.map +1 -0
- package/lib/commonjs/specs/NativeAudioAPIModule.js +9 -0
- package/lib/commonjs/specs/NativeAudioAPIModule.js.map +1 -0
- package/lib/commonjs/specs/NativeAudioManagerModule.js +33 -0
- package/lib/commonjs/specs/NativeAudioManagerModule.js.map +1 -0
- package/lib/commonjs/specs/index.js +27 -0
- package/lib/commonjs/specs/index.js.map +1 -0
- package/lib/commonjs/system/AudioManager.js +79 -0
- package/lib/commonjs/system/AudioManager.js.map +1 -0
- package/lib/commonjs/system/index.js +14 -0
- package/lib/commonjs/system/index.js.map +1 -0
- package/lib/commonjs/system/types.js +2 -0
- package/lib/commonjs/system/types.js.map +1 -0
- package/lib/commonjs/types.js +2 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/commonjs/utils/index.js +10 -0
- package/lib/commonjs/utils/index.js.map +1 -0
- package/lib/commonjs/web-core/AnalyserNode.js +38 -0
- package/lib/commonjs/web-core/AnalyserNode.js.map +1 -0
- package/lib/commonjs/web-core/AudioBuffer.js +44 -0
- package/lib/commonjs/web-core/AudioBuffer.js.map +1 -0
- package/lib/commonjs/web-core/AudioBufferSourceNode.js +214 -0
- package/lib/commonjs/web-core/AudioBufferSourceNode.js.map +1 -0
- package/lib/commonjs/web-core/AudioContext.js +93 -0
- package/lib/commonjs/web-core/AudioContext.js.map +1 -0
- package/lib/commonjs/web-core/AudioDestinationNode.js +11 -0
- package/lib/commonjs/web-core/AudioDestinationNode.js.map +1 -0
- package/lib/commonjs/web-core/AudioNode.js +33 -0
- package/lib/commonjs/web-core/AudioNode.js.map +1 -0
- package/lib/commonjs/web-core/AudioParam.js +81 -0
- package/lib/commonjs/web-core/AudioParam.js.map +1 -0
- package/lib/commonjs/web-core/AudioScheduledSourceNode.js +41 -0
- package/lib/commonjs/web-core/AudioScheduledSourceNode.js.map +1 -0
- package/lib/commonjs/web-core/BaseAudioContext.js +2 -0
- package/lib/commonjs/web-core/BaseAudioContext.js.map +1 -0
- package/lib/commonjs/web-core/BiquadFilterNode.js +33 -0
- package/lib/commonjs/web-core/BiquadFilterNode.js.map +1 -0
- package/lib/commonjs/web-core/GainNode.js +17 -0
- package/lib/commonjs/web-core/GainNode.js.map +1 -0
- package/lib/commonjs/web-core/OfflineAudioContext.js +96 -0
- package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -0
- package/lib/commonjs/web-core/OscillatorNode.js +31 -0
- package/lib/commonjs/web-core/OscillatorNode.js.map +1 -0
- package/lib/commonjs/web-core/PeriodicWave.js +15 -0
- package/lib/commonjs/web-core/PeriodicWave.js.map +1 -0
- package/lib/commonjs/web-core/StereoPannerNode.js +17 -0
- package/lib/commonjs/web-core/StereoPannerNode.js.map +1 -0
- package/lib/commonjs/web-core/custom/LoadCustomWasm.js +37 -0
- package/lib/commonjs/web-core/custom/LoadCustomWasm.js.map +1 -0
- package/lib/commonjs/web-core/custom/index.js +14 -0
- package/lib/commonjs/web-core/custom/index.js.map +1 -0
- package/lib/commonjs/web-core/custom/signalsmithStretch/LICENSE.txt +21 -0
- package/lib/commonjs/web-core/custom/signalsmithStretch/README.md +46 -0
- package/lib/commonjs/web-core/custom/signalsmithStretch/SignalsmithStretch.mjs +826 -0
- package/lib/commonjs/web-core/custom/signalsmithStretch/SignalsmithStretch.mjs.map +1 -0
- package/lib/module/plugin/withAudioAPI.js +58 -0
- package/lib/module/plugin/withAudioAPI.js.map +1 -0
- package/lib/module/specs/NativeAudioManagerModule.js +5 -6
- package/lib/module/specs/NativeAudioManagerModule.js.map +1 -1
- package/lib/module/system/AudioManager.js +9 -0
- package/lib/module/system/AudioManager.js.map +1 -1
- package/lib/typescript/plugin/withAudioAPI.d.ts +9 -0
- package/lib/typescript/plugin/withAudioAPI.d.ts.map +1 -0
- package/lib/typescript/specs/NativeAudioManagerModule.d.ts +2 -1
- package/lib/typescript/specs/NativeAudioManagerModule.d.ts.map +1 -1
- package/lib/typescript/system/AudioManager.d.ts +4 -2
- package/lib/typescript/system/AudioManager.d.ts.map +1 -1
- package/lib/typescript/system/types.d.ts +16 -4
- package/lib/typescript/system/types.d.ts.map +1 -1
- package/package.json +6 -3
- package/src/plugin/withAudioAPI.ts +90 -0
- package/src/specs/NativeAudioManagerModule.ts +8 -11
- package/src/system/AudioManager.ts +42 -15
- 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
|
}
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
namespace audioapi {
|
|
6
6
|
|
|
7
|
-
AudioNodeDestructor::AudioNodeDestructor()
|
|
8
|
-
|
|
9
|
-
|
|
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
|
|
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:@{@"
|
|
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:@{@"
|
|
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:@{@"
|
|
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:@{@"
|
|
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)
|
|
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)
|
|
10
|
+
+ (instancetype)sharedInstanceWithAudioManagerModule:(AudioManagerModule *)audioManagerModule
|
|
10
11
|
{
|
|
11
12
|
static dispatch_once_t onceToken;
|
|
12
13
|
dispatch_once(&onceToken, ^{
|
|
13
|
-
_sharedInstance = [[self alloc]
|
|
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)
|
|
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
|
-
|
|
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
|
-
|
|
84
|
+
NSInteger interruptionType = [notification.userInfo[AVAudioSessionInterruptionTypeKey] integerValue];
|
|
85
|
+
NSInteger interruptionOption = [notification.userInfo[AVAudioSessionInterruptionOptionKey] integerValue];
|
|
84
86
|
|
|
85
|
-
if (
|
|
86
|
-
|
|
87
|
+
if (interruptionType == AVAudioSessionInterruptionTypeBegan) {
|
|
88
|
+
[self.audioManagerModule sendEventWithName:@"onInterruption"
|
|
89
|
+
body:@{@"type" : @"began", @"shouldResume" : @"false"}];
|
|
87
90
|
return;
|
|
88
91
|
}
|
|
89
92
|
|
|
90
|
-
|
|
91
|
-
|
|
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
|
-
|
|
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
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
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":[]}
|