react-native-audio-api 0.6.1-rc.4 → 0.6.1-rc.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.
- package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +3 -9
- package/android/src/main/cpp/audioapi/android/core/AudioPlayer.h +1 -2
- package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +17 -10
- package/android/src/oldarch/NativeAudioAPIModuleSpec.java +68 -64
- package/common/cpp/audioapi/HostObjects/AudioContextHostObject.h +4 -14
- package/common/cpp/audioapi/core/AudioContext.cpp +5 -5
- package/common/cpp/audioapi/core/BaseAudioContext.cpp +4 -0
- package/common/cpp/audioapi/core/BaseAudioContext.h +1 -0
- package/ios/audioapi/ios/AudioAPIModule.mm +22 -10
- package/ios/audioapi/ios/core/IOSAudioPlayer.h +1 -2
- package/ios/audioapi/ios/core/IOSAudioPlayer.mm +8 -13
- package/ios/audioapi/ios/system/AudioSessionManager.mm +1 -1
- package/ios/audioapi/ios/system/LockScreenManager.mm +13 -1
- package/ios/audioapi/ios/system/NotificationManager.mm +1 -1
- package/lib/commonjs/core/AudioNode.js +5 -1
- package/lib/commonjs/core/AudioNode.js.map +1 -1
- package/lib/commonjs/hooks/useSytemVolume.js +1 -1
- package/lib/commonjs/hooks/useSytemVolume.js.map +1 -1
- package/lib/commonjs/specs/NativeAudioAPIModule.js.map +1 -1
- package/lib/commonjs/system/AudioManager.js +12 -10
- package/lib/commonjs/system/AudioManager.js.map +1 -1
- package/lib/module/core/AudioNode.js +5 -1
- package/lib/module/core/AudioNode.js.map +1 -1
- package/lib/module/hooks/useSytemVolume.js +1 -1
- package/lib/module/hooks/useSytemVolume.js.map +1 -1
- package/lib/module/specs/NativeAudioAPIModule.js.map +1 -1
- package/lib/module/system/AudioManager.js +12 -10
- package/lib/module/system/AudioManager.js.map +1 -1
- package/lib/typescript/core/AudioNode.d.ts +1 -1
- package/lib/typescript/core/AudioNode.d.ts.map +1 -1
- package/lib/typescript/events/types.d.ts +10 -7
- package/lib/typescript/events/types.d.ts.map +1 -1
- package/lib/typescript/hooks/useSytemVolume.d.ts.map +1 -1
- package/lib/typescript/specs/NativeAudioAPIModule.d.ts +3 -2
- package/lib/typescript/specs/NativeAudioAPIModule.d.ts.map +1 -1
- package/lib/typescript/system/AudioManager.d.ts +6 -4
- package/lib/typescript/system/AudioManager.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/core/AudioNode.ts +6 -2
- package/src/events/types.ts +20 -7
- package/src/hooks/useSytemVolume.ts +6 -3
- package/src/specs/NativeAudioAPIModule.ts +14 -6
- package/src/system/AudioManager.ts +21 -16
|
@@ -33,13 +33,13 @@ void AudioPlayer::start() {
|
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
void AudioPlayer::
|
|
36
|
+
void AudioPlayer::stop() {
|
|
37
37
|
if (mStream_) {
|
|
38
|
-
mStream_->
|
|
38
|
+
mStream_->requestPause();
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
void AudioPlayer::
|
|
42
|
+
void AudioPlayer::cleanup() {
|
|
43
43
|
isInitialized_ = false;
|
|
44
44
|
|
|
45
45
|
if (mStream_) {
|
|
@@ -49,12 +49,6 @@ void AudioPlayer::stop() {
|
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
void AudioPlayer::pause() {
|
|
53
|
-
if (mStream_) {
|
|
54
|
-
mStream_->requestPause();
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
52
|
DataCallbackResult AudioPlayer::onAudioReady(
|
|
59
53
|
AudioStream *oboeStream,
|
|
60
54
|
void *audioData,
|
|
@@ -53,6 +53,23 @@ class AudioAPIModule(
|
|
|
53
53
|
return true
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
+
override fun getDevicePreferredSampleRate(): Double = MediaSessionManager.getDevicePreferredSampleRate()
|
|
57
|
+
|
|
58
|
+
override fun setAudioSessionActivity(
|
|
59
|
+
enabled: Boolean,
|
|
60
|
+
promise: Promise?,
|
|
61
|
+
) {
|
|
62
|
+
// noting to do here
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
override fun setAudioSessionOptions(
|
|
66
|
+
category: String?,
|
|
67
|
+
mode: String?,
|
|
68
|
+
options: ReadableArray?,
|
|
69
|
+
) {
|
|
70
|
+
// noting to do here
|
|
71
|
+
}
|
|
72
|
+
|
|
56
73
|
override fun setLockScreenInfo(info: ReadableMap?) {
|
|
57
74
|
MediaSessionManager.setLockScreenInfo(info)
|
|
58
75
|
}
|
|
@@ -68,16 +85,6 @@ class AudioAPIModule(
|
|
|
68
85
|
MediaSessionManager.enableRemoteCommand(name!!, enabled)
|
|
69
86
|
}
|
|
70
87
|
|
|
71
|
-
override fun setAudioSessionOptions(
|
|
72
|
-
category: String?,
|
|
73
|
-
mode: String?,
|
|
74
|
-
options: ReadableArray?,
|
|
75
|
-
) {
|
|
76
|
-
// noting to do here
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
override fun getDevicePreferredSampleRate(): Double = MediaSessionManager.getDevicePreferredSampleRate()
|
|
80
|
-
|
|
81
88
|
override fun observeAudioInterruptions(enabled: Boolean) {
|
|
82
89
|
MediaSessionManager.observeAudioInterruptions(enabled)
|
|
83
90
|
}
|
|
@@ -10,67 +10,71 @@
|
|
|
10
10
|
* @nolint
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
package com.swmansion.audioapi;
|
|
14
|
-
|
|
15
|
-
import com.facebook.proguard.annotations.DoNotStrip;
|
|
16
|
-
import com.facebook.react.bridge.Promise;
|
|
17
|
-
import com.facebook.react.bridge.ReactApplicationContext;
|
|
18
|
-
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
|
19
|
-
import com.facebook.react.bridge.ReactMethod;
|
|
20
|
-
import com.facebook.react.bridge.ReadableArray;
|
|
21
|
-
import com.facebook.react.bridge.ReadableMap;
|
|
22
|
-
import com.facebook.react.turbomodule.core.interfaces.TurboModule;
|
|
23
|
-
import javax.annotation.Nonnull;
|
|
24
|
-
|
|
25
|
-
public abstract class NativeAudioAPIModuleSpec extends ReactContextBaseJavaModule implements TurboModule {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
13
|
+
package com.swmansion.audioapi;
|
|
14
|
+
|
|
15
|
+
import com.facebook.proguard.annotations.DoNotStrip;
|
|
16
|
+
import com.facebook.react.bridge.Promise;
|
|
17
|
+
import com.facebook.react.bridge.ReactApplicationContext;
|
|
18
|
+
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
|
19
|
+
import com.facebook.react.bridge.ReactMethod;
|
|
20
|
+
import com.facebook.react.bridge.ReadableArray;
|
|
21
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
22
|
+
import com.facebook.react.turbomodule.core.interfaces.TurboModule;
|
|
23
|
+
import javax.annotation.Nonnull;
|
|
24
|
+
|
|
25
|
+
public abstract class NativeAudioAPIModuleSpec extends ReactContextBaseJavaModule implements TurboModule {
|
|
26
|
+
public static final String NAME = "AudioAPIModule";
|
|
27
|
+
|
|
28
|
+
public NativeAudioAPIModuleSpec(ReactApplicationContext reactContext) {
|
|
29
|
+
super(reactContext);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
@Override
|
|
33
|
+
public @Nonnull String getName() {
|
|
34
|
+
return NAME;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
@ReactMethod(isBlockingSynchronousMethod = true)
|
|
38
|
+
@DoNotStrip
|
|
39
|
+
public abstract boolean install();
|
|
40
|
+
|
|
41
|
+
@ReactMethod(isBlockingSynchronousMethod = true)
|
|
42
|
+
@DoNotStrip
|
|
43
|
+
public abstract double getDevicePreferredSampleRate();
|
|
44
|
+
|
|
45
|
+
@ReactMethod
|
|
46
|
+
@DoNotStrip
|
|
47
|
+
public abstract void setAudioSessionActivity(boolean enabled, Promise promise);
|
|
48
|
+
|
|
49
|
+
@ReactMethod
|
|
50
|
+
@DoNotStrip
|
|
51
|
+
public abstract void setAudioSessionOptions(String category, String mode, ReadableArray options);
|
|
52
|
+
|
|
53
|
+
@ReactMethod
|
|
54
|
+
@DoNotStrip
|
|
55
|
+
public abstract void setLockScreenInfo(ReadableMap info);
|
|
56
|
+
|
|
57
|
+
@ReactMethod
|
|
58
|
+
@DoNotStrip
|
|
59
|
+
public abstract void resetLockScreenInfo();
|
|
60
|
+
|
|
61
|
+
@ReactMethod
|
|
62
|
+
@DoNotStrip
|
|
63
|
+
public abstract void enableRemoteCommand(String name, boolean enabled);
|
|
64
|
+
|
|
65
|
+
@ReactMethod
|
|
66
|
+
@DoNotStrip
|
|
67
|
+
public abstract void observeAudioInterruptions(boolean enabled);
|
|
68
|
+
|
|
69
|
+
@ReactMethod
|
|
70
|
+
@DoNotStrip
|
|
71
|
+
public abstract void observeVolumeChanges(boolean enabled);
|
|
72
|
+
|
|
73
|
+
@ReactMethod
|
|
74
|
+
@DoNotStrip
|
|
75
|
+
public abstract void requestRecordingPermissions(Promise promise);
|
|
76
|
+
|
|
77
|
+
@ReactMethod
|
|
78
|
+
@DoNotStrip
|
|
79
|
+
public abstract void checkRecordingPermissions(Promise promise);
|
|
80
|
+
}
|
|
@@ -45,13 +45,8 @@ class AudioContextHostObject : public BaseAudioContextHostObject {
|
|
|
45
45
|
auto audioContext = std::static_pointer_cast<AudioContext>(context_);
|
|
46
46
|
auto result = audioContext->resume();
|
|
47
47
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
promise->resolve([](jsi::Runtime &runtime) {
|
|
54
|
-
return jsi::Value::undefined();
|
|
48
|
+
promise->resolve([result](jsi::Runtime &runtime) {
|
|
49
|
+
return jsi::Value(result);
|
|
55
50
|
});
|
|
56
51
|
}).detach();
|
|
57
52
|
});
|
|
@@ -65,13 +60,8 @@ class AudioContextHostObject : public BaseAudioContextHostObject {
|
|
|
65
60
|
auto audioContext = std::static_pointer_cast<AudioContext>(context_);
|
|
66
61
|
auto result = audioContext->suspend();
|
|
67
62
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
promise->resolve([](jsi::Runtime &runtime) {
|
|
74
|
-
return jsi::Value::undefined();
|
|
63
|
+
promise->resolve([result](jsi::Runtime &runtime) {
|
|
64
|
+
return jsi::Value(result);
|
|
75
65
|
});
|
|
76
66
|
}).detach();
|
|
77
67
|
});
|
|
@@ -36,28 +36,28 @@ AudioContext::~AudioContext() {
|
|
|
36
36
|
|
|
37
37
|
void AudioContext::close() {
|
|
38
38
|
state_ = ContextState::CLOSED;
|
|
39
|
-
audioPlayer_->stop();
|
|
40
39
|
|
|
40
|
+
audioPlayer_->cleanup();
|
|
41
41
|
nodeManager_->cleanup();
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
bool AudioContext::resume() {
|
|
45
|
-
if (isClosed()) {
|
|
45
|
+
if (isClosed() || isRunning()) {
|
|
46
46
|
return false;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
state_ = ContextState::RUNNING;
|
|
50
|
-
audioPlayer_->
|
|
50
|
+
audioPlayer_->start();
|
|
51
51
|
return true;
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
bool AudioContext::suspend() {
|
|
55
|
-
if (isClosed()) {
|
|
55
|
+
if (isClosed() || isSuspended()) {
|
|
56
56
|
return false;
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
state_ = ContextState::SUSPENDED;
|
|
60
|
-
audioPlayer_->
|
|
60
|
+
audioPlayer_->stop();
|
|
61
61
|
return true;
|
|
62
62
|
}
|
|
63
63
|
|
|
@@ -139,6 +139,10 @@ bool BaseAudioContext::isRunning() const {
|
|
|
139
139
|
return state_ == ContextState::RUNNING;
|
|
140
140
|
}
|
|
141
141
|
|
|
142
|
+
bool BaseAudioContext::isSuspended() const {
|
|
143
|
+
return state_ == ContextState::SUSPENDED;
|
|
144
|
+
}
|
|
145
|
+
|
|
142
146
|
bool BaseAudioContext::isClosed() const {
|
|
143
147
|
return state_ == ContextState::CLOSED;
|
|
144
148
|
}
|
|
@@ -80,19 +80,21 @@ RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(install)
|
|
|
80
80
|
return @true;
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
-
|
|
83
|
+
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(getDevicePreferredSampleRate)
|
|
84
84
|
{
|
|
85
|
-
[self.
|
|
85
|
+
return [self.audioSessionManager getDevicePreferredSampleRate];
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
RCT_EXPORT_METHOD(
|
|
88
|
+
RCT_EXPORT_METHOD(
|
|
89
|
+
setAudioSessionActivity : (BOOL)enabled resolve : (RCTPromiseResolveBlock)resolve reject : (RCTPromiseRejectBlock)
|
|
90
|
+
reject)
|
|
89
91
|
{
|
|
90
|
-
[self.
|
|
91
|
-
|
|
92
|
+
if ([self.audioSessionManager setActive:enabled]) {
|
|
93
|
+
resolve(@"true");
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
92
96
|
|
|
93
|
-
|
|
94
|
-
{
|
|
95
|
-
[self.lockScreenManager enableRemoteCommand:name enabled:enabled];
|
|
97
|
+
resolve(@"false");
|
|
96
98
|
}
|
|
97
99
|
|
|
98
100
|
RCT_EXPORT_METHOD(setAudioSessionOptions : (NSString *)category mode : (NSString *)mode options : (NSArray *)options)
|
|
@@ -100,9 +102,19 @@ RCT_EXPORT_METHOD(setAudioSessionOptions : (NSString *)category mode : (NSString
|
|
|
100
102
|
[self.audioSessionManager setAudioSessionOptions:category mode:mode options:options];
|
|
101
103
|
}
|
|
102
104
|
|
|
103
|
-
|
|
105
|
+
RCT_EXPORT_METHOD(setLockScreenInfo : (NSDictionary *)info)
|
|
104
106
|
{
|
|
105
|
-
|
|
107
|
+
[self.lockScreenManager setLockScreenInfo:info];
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
RCT_EXPORT_METHOD(resetLockScreenInfo)
|
|
111
|
+
{
|
|
112
|
+
[self.lockScreenManager resetLockScreenInfo];
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
RCT_EXPORT_METHOD(enableRemoteCommand : (NSString *)name enabled : (BOOL)enabled)
|
|
116
|
+
{
|
|
117
|
+
[self.lockScreenManager enableRemoteCommand:name enabled:enabled];
|
|
106
118
|
}
|
|
107
119
|
|
|
108
120
|
RCT_EXPORT_METHOD(observeAudioInterruptions : (BOOL)enabled)
|
|
@@ -43,12 +43,7 @@ IOSAudioPlayer::IOSAudioPlayer(const std::function<void(std::shared_ptr<AudioBus
|
|
|
43
43
|
|
|
44
44
|
IOSAudioPlayer::~IOSAudioPlayer()
|
|
45
45
|
{
|
|
46
|
-
|
|
47
|
-
[audioPlayer_ cleanup];
|
|
48
|
-
|
|
49
|
-
if (audioBus_) {
|
|
50
|
-
audioBus_ = nullptr;
|
|
51
|
-
}
|
|
46
|
+
cleanup();
|
|
52
47
|
}
|
|
53
48
|
|
|
54
49
|
void IOSAudioPlayer::start()
|
|
@@ -61,20 +56,20 @@ void IOSAudioPlayer::start()
|
|
|
61
56
|
isRunning_.store(true);
|
|
62
57
|
}
|
|
63
58
|
|
|
64
|
-
void IOSAudioPlayer::resume()
|
|
65
|
-
{
|
|
66
|
-
isRunning_.store(true);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
59
|
void IOSAudioPlayer::stop()
|
|
70
60
|
{
|
|
71
61
|
isRunning_.store(false);
|
|
72
62
|
[audioPlayer_ stop];
|
|
73
63
|
}
|
|
74
64
|
|
|
75
|
-
void IOSAudioPlayer::
|
|
65
|
+
void IOSAudioPlayer::cleanup()
|
|
76
66
|
{
|
|
77
|
-
|
|
67
|
+
stop();
|
|
68
|
+
[audioPlayer_ cleanup];
|
|
69
|
+
|
|
70
|
+
if (audioBus_) {
|
|
71
|
+
audioBus_ = nullptr;
|
|
72
|
+
}
|
|
78
73
|
}
|
|
79
74
|
|
|
80
75
|
} // namespace audioapi
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
self.sessionCategory = AVAudioSessionCategoryPlayback;
|
|
11
11
|
self.sessionMode = AVAudioSessionModeDefault;
|
|
12
|
-
self.sessionOptions =
|
|
12
|
+
self.sessionOptions = 0;
|
|
13
13
|
self.hasDirtySettings = true;
|
|
14
14
|
self.isActive = false;
|
|
15
15
|
}
|
|
@@ -19,7 +19,10 @@
|
|
|
19
19
|
if (self = [super init]) {
|
|
20
20
|
self.audioAPIModule = audioAPIModule;
|
|
21
21
|
self.playingInfoCenter = [MPNowPlayingInfoCenter defaultCenter];
|
|
22
|
-
|
|
22
|
+
|
|
23
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
|
24
|
+
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
|
|
25
|
+
});
|
|
23
26
|
}
|
|
24
27
|
|
|
25
28
|
return self;
|
|
@@ -29,10 +32,16 @@
|
|
|
29
32
|
{
|
|
30
33
|
NSLog(@"[LockScreenManager] cleanup");
|
|
31
34
|
[self resetLockScreenInfo];
|
|
35
|
+
|
|
36
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
|
37
|
+
[[UIApplication sharedApplication] endReceivingRemoteControlEvents];
|
|
38
|
+
});
|
|
32
39
|
}
|
|
33
40
|
|
|
34
41
|
- (void)setLockScreenInfo:(NSDictionary *)info
|
|
35
42
|
{
|
|
43
|
+
self.playingInfoCenter = [MPNowPlayingInfoCenter defaultCenter];
|
|
44
|
+
|
|
36
45
|
// now playing info(lock screen info)
|
|
37
46
|
NSMutableDictionary *lockScreenInfoDict;
|
|
38
47
|
|
|
@@ -61,6 +70,8 @@
|
|
|
61
70
|
}
|
|
62
71
|
}
|
|
63
72
|
|
|
73
|
+
self.playingInfoCenter.playbackState = MPNowPlayingPlaybackStatePaused;
|
|
74
|
+
|
|
64
75
|
// artwork
|
|
65
76
|
NSString *artworkUrl = [self getArtworkUrl:[info objectForKey:@"artwork"]];
|
|
66
77
|
[self updateArtworkIfNeeded:artworkUrl];
|
|
@@ -68,6 +79,7 @@
|
|
|
68
79
|
|
|
69
80
|
- (void)resetLockScreenInfo
|
|
70
81
|
{
|
|
82
|
+
self.playingInfoCenter = [MPNowPlayingInfoCenter defaultCenter];
|
|
71
83
|
self.playingInfoCenter.nowPlayingInfo = nil;
|
|
72
84
|
self.artworkUrl = nil;
|
|
73
85
|
}
|
|
@@ -29,7 +29,11 @@ class AudioNode {
|
|
|
29
29
|
return destination;
|
|
30
30
|
}
|
|
31
31
|
disconnect(destination) {
|
|
32
|
-
|
|
32
|
+
if (destination instanceof _AudioParam.default) {
|
|
33
|
+
this.node.disconnect(destination.audioParam);
|
|
34
|
+
} else {
|
|
35
|
+
this.node.disconnect(destination?.node);
|
|
36
|
+
}
|
|
33
37
|
}
|
|
34
38
|
}
|
|
35
39
|
exports.default = AudioNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_AudioParam","_interopRequireDefault","require","_errors","e","__esModule","default","AudioNode","constructor","context","node","numberOfInputs","numberOfOutputs","channelCount","channelCountMode","channelInterpretation","connect","destination","InvalidAccessError","AudioParam","audioParam","disconnect","exports"],"sourceRoot":"../../../src","sources":["core/AudioNode.ts"],"mappings":";;;;;;AACA,IAAAA,WAAA,GAAAC,sBAAA,CAAAC,OAAA;AAGA,IAAAC,OAAA,GAAAD,OAAA;AAA+C,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEhC,MAAMG,SAAS,CAAC;EAS7BC,WAAWA,CAACC,OAAyB,EAAEC,IAAgB,EAAE;IACvD,IAAI,CAACD,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACC,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACC,cAAc,GAAG,IAAI,CAACD,IAAI,CAACC,cAAc;IAC9C,IAAI,CAACC,eAAe,GAAG,IAAI,CAACF,IAAI,CAACE,eAAe;IAChD,IAAI,CAACC,YAAY,GAAG,IAAI,CAACH,IAAI,CAACG,YAAY;IAC1C,IAAI,CAACC,gBAAgB,GAAG,IAAI,CAACJ,IAAI,CAACI,gBAAgB;IAClD,IAAI,CAACC,qBAAqB,GAAG,IAAI,CAACL,IAAI,CAACK,qBAAqB;EAC9D;EAEOC,OAAOA,CAACC,WAAmC,EAA0B;IAC1E,IAAI,IAAI,CAACR,OAAO,KAAKQ,WAAW,CAACR,OAAO,EAAE;MACxC,MAAM,IAAIS,0BAAkB,CAC1B,6DACF,CAAC;IACH;IAEA,IAAID,WAAW,YAAYE,mBAAU,EAAE;MACrC,IAAI,CAACT,IAAI,CAACM,OAAO,CAACC,WAAW,CAACG,UAAU,CAAC;IAC3C,CAAC,MAAM;MACL,IAAI,CAACV,IAAI,CAACM,OAAO,CAACC,WAAW,CAACP,IAAI,CAAC;IACrC;IAEA,OAAOO,WAAW;EACpB;EAEOI,UAAUA,CAACJ,
|
|
1
|
+
{"version":3,"names":["_AudioParam","_interopRequireDefault","require","_errors","e","__esModule","default","AudioNode","constructor","context","node","numberOfInputs","numberOfOutputs","channelCount","channelCountMode","channelInterpretation","connect","destination","InvalidAccessError","AudioParam","audioParam","disconnect","exports"],"sourceRoot":"../../../src","sources":["core/AudioNode.ts"],"mappings":";;;;;;AACA,IAAAA,WAAA,GAAAC,sBAAA,CAAAC,OAAA;AAGA,IAAAC,OAAA,GAAAD,OAAA;AAA+C,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEhC,MAAMG,SAAS,CAAC;EAS7BC,WAAWA,CAACC,OAAyB,EAAEC,IAAgB,EAAE;IACvD,IAAI,CAACD,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACC,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACC,cAAc,GAAG,IAAI,CAACD,IAAI,CAACC,cAAc;IAC9C,IAAI,CAACC,eAAe,GAAG,IAAI,CAACF,IAAI,CAACE,eAAe;IAChD,IAAI,CAACC,YAAY,GAAG,IAAI,CAACH,IAAI,CAACG,YAAY;IAC1C,IAAI,CAACC,gBAAgB,GAAG,IAAI,CAACJ,IAAI,CAACI,gBAAgB;IAClD,IAAI,CAACC,qBAAqB,GAAG,IAAI,CAACL,IAAI,CAACK,qBAAqB;EAC9D;EAEOC,OAAOA,CAACC,WAAmC,EAA0B;IAC1E,IAAI,IAAI,CAACR,OAAO,KAAKQ,WAAW,CAACR,OAAO,EAAE;MACxC,MAAM,IAAIS,0BAAkB,CAC1B,6DACF,CAAC;IACH;IAEA,IAAID,WAAW,YAAYE,mBAAU,EAAE;MACrC,IAAI,CAACT,IAAI,CAACM,OAAO,CAACC,WAAW,CAACG,UAAU,CAAC;IAC3C,CAAC,MAAM;MACL,IAAI,CAACV,IAAI,CAACM,OAAO,CAACC,WAAW,CAACP,IAAI,CAAC;IACrC;IAEA,OAAOO,WAAW;EACpB;EAEOI,UAAUA,CAACJ,WAAoC,EAAQ;IAC5D,IAAIA,WAAW,YAAYE,mBAAU,EAAE;MACrC,IAAI,CAACT,IAAI,CAACW,UAAU,CAACJ,WAAW,CAACG,UAAU,CAAC;IAC9C,CAAC,MAAM;MACL,IAAI,CAACV,IAAI,CAACW,UAAU,CAACJ,WAAW,EAAEP,IAAI,CAAC;IACzC;EACF;AACF;AAACY,OAAA,CAAAhB,OAAA,GAAAC,SAAA","ignoreList":[]}
|
|
@@ -11,7 +11,7 @@ function useSystemVolume() {
|
|
|
11
11
|
const [volume, setVolume] = (0, _react.useState)(0);
|
|
12
12
|
(0, _react.useEffect)(() => {
|
|
13
13
|
_AudioManager.default.observeVolumeChanges(true);
|
|
14
|
-
const listener = _AudioManager.default.
|
|
14
|
+
const listener = _AudioManager.default.addSystemEventListener('volumeChange', e => {
|
|
15
15
|
setVolume(parseFloat(e.value.toFixed(2)));
|
|
16
16
|
});
|
|
17
17
|
return () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_AudioManager","_interopRequireDefault","e","__esModule","default","useSystemVolume","volume","setVolume","useState","useEffect","AudioManager","observeVolumeChanges","listener","
|
|
1
|
+
{"version":3,"names":["_react","require","_AudioManager","_interopRequireDefault","e","__esModule","default","useSystemVolume","volume","setVolume","useState","useEffect","AudioManager","observeVolumeChanges","listener","addSystemEventListener","parseFloat","value","toFixed","remove"],"sourceRoot":"../../../src","sources":["hooks/useSytemVolume.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAC,sBAAA,CAAAF,OAAA;AAAkD,SAAAE,uBAAAC,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEnC,SAASG,eAAeA,CAAA,EAAG;EACxC,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAG,IAAAC,eAAQ,EAAC,CAAC,CAAC;EAEvC,IAAAC,gBAAS,EAAC,MAAM;IACdC,qBAAY,CAACC,oBAAoB,CAAC,IAAI,CAAC;IACvC,MAAMC,QAAQ,GAAGF,qBAAY,CAACG,sBAAsB,CAClD,cAAc,EACbX,CAAC,IAAK;MACLK,SAAS,CAACO,UAAU,CAACZ,CAAC,CAACa,KAAK,CAACC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,CACF,CAAC;IACD,OAAO,MAAM;MACXJ,QAAQ,EAAEK,MAAM,CAAC,CAAC;MAElBP,qBAAY,CAACC,oBAAoB,CAAC,KAAK,CAAC;IAC1C,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,OAAOL,MAAM;AACf","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Object","defineProperty","exports","value","NativeAudioAPIModule","_reactNative","require","TurboModuleRegistry","get"],"sourceRoot":"../../../src","sources":["specs/NativeAudioAPIModule.ts"],"mappings":"AAAA,YAAY;;AAACA,MAAA,CAAAC,cAAA,CAAAC,OAAA;EAAAC,KAAA;AAAA;AAAAD,OAAA,CAAAE,oBAAA;AACb,IAAAC,YAAA,GAAAC,OAAA;
|
|
1
|
+
{"version":3,"names":["Object","defineProperty","exports","value","NativeAudioAPIModule","_reactNative","require","TurboModuleRegistry","get"],"sourceRoot":"../../../src","sources":["specs/NativeAudioAPIModule.ts"],"mappings":"AAAA,YAAY;;AAACA,MAAA,CAAAC,cAAA,CAAAC,OAAA;EAAAC,KAAA;AAAA;AAAAD,OAAA,CAAAE,oBAAA;AACb,IAAAC,YAAA,GAAAC,OAAA;AAgCA,MAAMF,oBAAoB,GAAAF,OAAA,CAAAE,oBAAA,GAAGG,gCAAmB,CAACC,GAAG,CAAO,gBAAgB,CAAC","ignoreList":[]}
|
|
@@ -16,17 +16,20 @@ class AudioManager {
|
|
|
16
16
|
constructor() {
|
|
17
17
|
this.audioEventEmitter = new _events.AudioEventEmitter(global.AudioEventEmitter);
|
|
18
18
|
}
|
|
19
|
-
|
|
20
|
-
_specs.NativeAudioAPIModule.
|
|
19
|
+
getDevicePreferredSampleRate() {
|
|
20
|
+
return _specs.NativeAudioAPIModule.getDevicePreferredSampleRate();
|
|
21
21
|
}
|
|
22
|
-
|
|
23
|
-
_specs.NativeAudioAPIModule.
|
|
22
|
+
setAudioSessionActivity(enabled) {
|
|
23
|
+
return _specs.NativeAudioAPIModule.setAudioSessionActivity(enabled);
|
|
24
24
|
}
|
|
25
25
|
setAudioSessionOptions(options) {
|
|
26
26
|
_specs.NativeAudioAPIModule.setAudioSessionOptions(options.iosCategory ?? '', options.iosMode ?? '', options.iosOptions ?? []);
|
|
27
27
|
}
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
setLockScreenInfo(info) {
|
|
29
|
+
_specs.NativeAudioAPIModule.setLockScreenInfo(info);
|
|
30
|
+
}
|
|
31
|
+
resetLockScreenInfo() {
|
|
32
|
+
_specs.NativeAudioAPIModule.resetLockScreenInfo();
|
|
30
33
|
}
|
|
31
34
|
observeAudioInterruptions(enabled) {
|
|
32
35
|
_specs.NativeAudioAPIModule.observeAudioInterruptions(enabled);
|
|
@@ -34,11 +37,10 @@ class AudioManager {
|
|
|
34
37
|
observeVolumeChanges(enabled) {
|
|
35
38
|
_specs.NativeAudioAPIModule.observeVolumeChanges(enabled);
|
|
36
39
|
}
|
|
37
|
-
|
|
40
|
+
enableRemoteCommand(name, enabled) {
|
|
38
41
|
_specs.NativeAudioAPIModule.enableRemoteCommand(name, enabled);
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
+
}
|
|
43
|
+
addSystemEventListener(name, callback) {
|
|
42
44
|
return this.audioEventEmitter.addAudioEventListener(name, callback);
|
|
43
45
|
}
|
|
44
46
|
async requestRecordingPermissions() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_specs","require","_events","global","AudioEventEmitter","NativeAudioAPIModule","Error","install","AudioManager","constructor","audioEventEmitter","
|
|
1
|
+
{"version":3,"names":["_specs","require","_events","global","AudioEventEmitter","NativeAudioAPIModule","Error","install","AudioManager","constructor","audioEventEmitter","getDevicePreferredSampleRate","setAudioSessionActivity","enabled","setAudioSessionOptions","options","iosCategory","iosMode","iosOptions","setLockScreenInfo","info","resetLockScreenInfo","observeAudioInterruptions","observeVolumeChanges","enableRemoteCommand","name","addSystemEventListener","callback","addAudioEventListener","requestRecordingPermissions","checkRecordingPermissions","_default","exports","default"],"sourceRoot":"../../../src","sources":["system/AudioManager.ts"],"mappings":";;;;;;AAMA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AAEA,IAAIE,MAAM,CAACC,iBAAiB,IAAI,IAAI,EAAE;EACpC,IAAI,CAACC,2BAAoB,EAAE;IACzB,MAAM,IAAIC,KAAK,CACb,iFACF,CAAC;EACH;EAEAD,2BAAoB,CAACE,OAAO,CAAC,CAAC;AAChC;AAEA,MAAMC,YAAY,CAAC;EAEjBC,WAAWA,CAAA,EAAG;IACZ,IAAI,CAACC,iBAAiB,GAAG,IAAIN,yBAAiB,CAACD,MAAM,CAACC,iBAAiB,CAAC;EAC1E;EAEAO,4BAA4BA,CAAA,EAAW;IACrC,OAAON,2BAAoB,CAAEM,4BAA4B,CAAC,CAAC;EAC7D;EAEAC,uBAAuBA,CAACC,OAAgB,EAAoB;IAC1D,OAAOR,2BAAoB,CAAEO,uBAAuB,CAACC,OAAO,CAAC;EAC/D;EAEAC,sBAAsBA,CAACC,OAAuB,EAAE;IAC9CV,2BAAoB,CAAES,sBAAsB,CAC1CC,OAAO,CAACC,WAAW,IAAI,EAAE,EACzBD,OAAO,CAACE,OAAO,IAAI,EAAE,EACrBF,OAAO,CAACG,UAAU,IAAI,EACxB,CAAC;EACH;EAEAC,iBAAiBA,CAACC,IAAoB,EAAE;IACtCf,2BAAoB,CAAEc,iBAAiB,CAACC,IAAI,CAAC;EAC/C;EAEAC,mBAAmBA,CAAA,EAAG;IACpBhB,2BAAoB,CAAEgB,mBAAmB,CAAC,CAAC;EAC7C;EAEAC,yBAAyBA,CAACT,OAAgB,EAAE;IAC1CR,2BAAoB,CAAEiB,yBAAyB,CAACT,OAAO,CAAC;EAC1D;EAEAU,oBAAoBA,CAACV,OAAgB,EAAE;IACrCR,2BAAoB,CAAEkB,oBAAoB,CAACV,OAAO,CAAC;EACrD;EAEAW,mBAAmBA,CAACC,IAA4B,EAAEZ,OAAgB,EAAE;IAClER,2BAAoB,CAAEmB,mBAAmB,CAACC,IAAI,EAAEZ,OAAO,CAAC;EAC1D;EAEAa,sBAAsBA,CACpBD,IAAU,EACVE,QAAmC,EACX;IACxB,OAAO,IAAI,CAACjB,iBAAiB,CAACkB,qBAAqB,CAACH,IAAI,EAAEE,QAAQ,CAAC;EACrE;EAEA,MAAME,2BAA2BA,CAAA,EAA8B;IAC7D,OAAOxB,2BAAoB,CAAEwB,2BAA2B,CAAC,CAAC;EAC5D;EAEA,MAAMC,yBAAyBA,CAAA,EAA8B;IAC3D,OAAOzB,2BAAoB,CAAEyB,yBAAyB,CAAC,CAAC;EAC1D;AACF;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEc,IAAIzB,YAAY,CAAC,CAAC","ignoreList":[]}
|
|
@@ -24,7 +24,11 @@ export default class AudioNode {
|
|
|
24
24
|
return destination;
|
|
25
25
|
}
|
|
26
26
|
disconnect(destination) {
|
|
27
|
-
|
|
27
|
+
if (destination instanceof AudioParam) {
|
|
28
|
+
this.node.disconnect(destination.audioParam);
|
|
29
|
+
} else {
|
|
30
|
+
this.node.disconnect(destination?.node);
|
|
31
|
+
}
|
|
28
32
|
}
|
|
29
33
|
}
|
|
30
34
|
//# sourceMappingURL=AudioNode.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["AudioParam","InvalidAccessError","AudioNode","constructor","context","node","numberOfInputs","numberOfOutputs","channelCount","channelCountMode","channelInterpretation","connect","destination","audioParam","disconnect"],"sourceRoot":"../../../src","sources":["core/AudioNode.ts"],"mappings":";;AACA,OAAOA,UAAU,MAAM,iBAAc;AAGrC,SAASC,kBAAkB,QAAQ,oBAAW;AAE9C,eAAe,MAAMC,SAAS,CAAC;EAS7BC,WAAWA,CAACC,OAAyB,EAAEC,IAAgB,EAAE;IACvD,IAAI,CAACD,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACC,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACC,cAAc,GAAG,IAAI,CAACD,IAAI,CAACC,cAAc;IAC9C,IAAI,CAACC,eAAe,GAAG,IAAI,CAACF,IAAI,CAACE,eAAe;IAChD,IAAI,CAACC,YAAY,GAAG,IAAI,CAACH,IAAI,CAACG,YAAY;IAC1C,IAAI,CAACC,gBAAgB,GAAG,IAAI,CAACJ,IAAI,CAACI,gBAAgB;IAClD,IAAI,CAACC,qBAAqB,GAAG,IAAI,CAACL,IAAI,CAACK,qBAAqB;EAC9D;EAEOC,OAAOA,CAACC,WAAmC,EAA0B;IAC1E,IAAI,IAAI,CAACR,OAAO,KAAKQ,WAAW,CAACR,OAAO,EAAE;MACxC,MAAM,IAAIH,kBAAkB,CAC1B,6DACF,CAAC;IACH;IAEA,IAAIW,WAAW,YAAYZ,UAAU,EAAE;MACrC,IAAI,CAACK,IAAI,CAACM,OAAO,CAACC,WAAW,CAACC,UAAU,CAAC;IAC3C,CAAC,MAAM;MACL,IAAI,CAACR,IAAI,CAACM,OAAO,CAACC,WAAW,CAACP,IAAI,CAAC;IACrC;IAEA,OAAOO,WAAW;EACpB;EAEOE,UAAUA,CAACF,
|
|
1
|
+
{"version":3,"names":["AudioParam","InvalidAccessError","AudioNode","constructor","context","node","numberOfInputs","numberOfOutputs","channelCount","channelCountMode","channelInterpretation","connect","destination","audioParam","disconnect"],"sourceRoot":"../../../src","sources":["core/AudioNode.ts"],"mappings":";;AACA,OAAOA,UAAU,MAAM,iBAAc;AAGrC,SAASC,kBAAkB,QAAQ,oBAAW;AAE9C,eAAe,MAAMC,SAAS,CAAC;EAS7BC,WAAWA,CAACC,OAAyB,EAAEC,IAAgB,EAAE;IACvD,IAAI,CAACD,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACC,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACC,cAAc,GAAG,IAAI,CAACD,IAAI,CAACC,cAAc;IAC9C,IAAI,CAACC,eAAe,GAAG,IAAI,CAACF,IAAI,CAACE,eAAe;IAChD,IAAI,CAACC,YAAY,GAAG,IAAI,CAACH,IAAI,CAACG,YAAY;IAC1C,IAAI,CAACC,gBAAgB,GAAG,IAAI,CAACJ,IAAI,CAACI,gBAAgB;IAClD,IAAI,CAACC,qBAAqB,GAAG,IAAI,CAACL,IAAI,CAACK,qBAAqB;EAC9D;EAEOC,OAAOA,CAACC,WAAmC,EAA0B;IAC1E,IAAI,IAAI,CAACR,OAAO,KAAKQ,WAAW,CAACR,OAAO,EAAE;MACxC,MAAM,IAAIH,kBAAkB,CAC1B,6DACF,CAAC;IACH;IAEA,IAAIW,WAAW,YAAYZ,UAAU,EAAE;MACrC,IAAI,CAACK,IAAI,CAACM,OAAO,CAACC,WAAW,CAACC,UAAU,CAAC;IAC3C,CAAC,MAAM;MACL,IAAI,CAACR,IAAI,CAACM,OAAO,CAACC,WAAW,CAACP,IAAI,CAAC;IACrC;IAEA,OAAOO,WAAW;EACpB;EAEOE,UAAUA,CAACF,WAAoC,EAAQ;IAC5D,IAAIA,WAAW,YAAYZ,UAAU,EAAE;MACrC,IAAI,CAACK,IAAI,CAACS,UAAU,CAACF,WAAW,CAACC,UAAU,CAAC;IAC9C,CAAC,MAAM;MACL,IAAI,CAACR,IAAI,CAACS,UAAU,CAACF,WAAW,EAAEP,IAAI,CAAC;IACzC;EACF;AACF","ignoreList":[]}
|
|
@@ -6,7 +6,7 @@ export default function useSystemVolume() {
|
|
|
6
6
|
const [volume, setVolume] = useState(0);
|
|
7
7
|
useEffect(() => {
|
|
8
8
|
AudioManager.observeVolumeChanges(true);
|
|
9
|
-
const listener = AudioManager.
|
|
9
|
+
const listener = AudioManager.addSystemEventListener('volumeChange', e => {
|
|
10
10
|
setVolume(parseFloat(e.value.toFixed(2)));
|
|
11
11
|
});
|
|
12
12
|
return () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useState","AudioManager","useSystemVolume","volume","setVolume","observeVolumeChanges","listener","
|
|
1
|
+
{"version":3,"names":["useEffect","useState","AudioManager","useSystemVolume","volume","setVolume","observeVolumeChanges","listener","addSystemEventListener","e","parseFloat","value","toFixed","remove"],"sourceRoot":"../../../src","sources":["hooks/useSytemVolume.ts"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAC3C,OAAOC,YAAY,MAAM,2BAAwB;AAEjD,eAAe,SAASC,eAAeA,CAAA,EAAG;EACxC,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAGJ,QAAQ,CAAC,CAAC,CAAC;EAEvCD,SAAS,CAAC,MAAM;IACdE,YAAY,CAACI,oBAAoB,CAAC,IAAI,CAAC;IACvC,MAAMC,QAAQ,GAAGL,YAAY,CAACM,sBAAsB,CAClD,cAAc,EACbC,CAAC,IAAK;MACLJ,SAAS,CAACK,UAAU,CAACD,CAAC,CAACE,KAAK,CAACC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,CACF,CAAC;IACD,OAAO,MAAM;MACXL,QAAQ,EAAEM,MAAM,CAAC,CAAC;MAElBX,YAAY,CAACI,oBAAoB,CAAC,KAAK,CAAC;IAC1C,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,OAAOF,MAAM;AACf","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["TurboModuleRegistry","NativeAudioAPIModule","get"],"sourceRoot":"../../../src","sources":["specs/NativeAudioAPIModule.ts"],"mappings":"AAAA,YAAY;;AACZ,SAASA,mBAAmB,QAAQ,cAAc;
|
|
1
|
+
{"version":3,"names":["TurboModuleRegistry","NativeAudioAPIModule","get"],"sourceRoot":"../../../src","sources":["specs/NativeAudioAPIModule.ts"],"mappings":"AAAA,YAAY;;AACZ,SAASA,mBAAmB,QAAQ,cAAc;AAgClD,MAAMC,oBAAoB,GAAGD,mBAAmB,CAACE,GAAG,CAAO,gBAAgB,CAAC;AAE5E,SAASD,oBAAoB","ignoreList":[]}
|
|
@@ -12,17 +12,20 @@ class AudioManager {
|
|
|
12
12
|
constructor() {
|
|
13
13
|
this.audioEventEmitter = new AudioEventEmitter(global.AudioEventEmitter);
|
|
14
14
|
}
|
|
15
|
-
|
|
16
|
-
NativeAudioAPIModule.
|
|
15
|
+
getDevicePreferredSampleRate() {
|
|
16
|
+
return NativeAudioAPIModule.getDevicePreferredSampleRate();
|
|
17
17
|
}
|
|
18
|
-
|
|
19
|
-
NativeAudioAPIModule.
|
|
18
|
+
setAudioSessionActivity(enabled) {
|
|
19
|
+
return NativeAudioAPIModule.setAudioSessionActivity(enabled);
|
|
20
20
|
}
|
|
21
21
|
setAudioSessionOptions(options) {
|
|
22
22
|
NativeAudioAPIModule.setAudioSessionOptions(options.iosCategory ?? '', options.iosMode ?? '', options.iosOptions ?? []);
|
|
23
23
|
}
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
setLockScreenInfo(info) {
|
|
25
|
+
NativeAudioAPIModule.setLockScreenInfo(info);
|
|
26
|
+
}
|
|
27
|
+
resetLockScreenInfo() {
|
|
28
|
+
NativeAudioAPIModule.resetLockScreenInfo();
|
|
26
29
|
}
|
|
27
30
|
observeAudioInterruptions(enabled) {
|
|
28
31
|
NativeAudioAPIModule.observeAudioInterruptions(enabled);
|
|
@@ -30,11 +33,10 @@ class AudioManager {
|
|
|
30
33
|
observeVolumeChanges(enabled) {
|
|
31
34
|
NativeAudioAPIModule.observeVolumeChanges(enabled);
|
|
32
35
|
}
|
|
33
|
-
|
|
36
|
+
enableRemoteCommand(name, enabled) {
|
|
34
37
|
NativeAudioAPIModule.enableRemoteCommand(name, enabled);
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
+
}
|
|
39
|
+
addSystemEventListener(name, callback) {
|
|
38
40
|
return this.audioEventEmitter.addAudioEventListener(name, callback);
|
|
39
41
|
}
|
|
40
42
|
async requestRecordingPermissions() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeAudioAPIModule","AudioEventEmitter","global","Error","install","AudioManager","constructor","audioEventEmitter","
|
|
1
|
+
{"version":3,"names":["NativeAudioAPIModule","AudioEventEmitter","global","Error","install","AudioManager","constructor","audioEventEmitter","getDevicePreferredSampleRate","setAudioSessionActivity","enabled","setAudioSessionOptions","options","iosCategory","iosMode","iosOptions","setLockScreenInfo","info","resetLockScreenInfo","observeAudioInterruptions","observeVolumeChanges","enableRemoteCommand","name","addSystemEventListener","callback","addAudioEventListener","requestRecordingPermissions","checkRecordingPermissions"],"sourceRoot":"../../../src","sources":["system/AudioManager.ts"],"mappings":";;AAMA,SAASA,oBAAoB,QAAQ,mBAAU;AAC/C,SAASC,iBAAiB,QAAgC,oBAAW;AAErE,IAAIC,MAAM,CAACD,iBAAiB,IAAI,IAAI,EAAE;EACpC,IAAI,CAACD,oBAAoB,EAAE;IACzB,MAAM,IAAIG,KAAK,CACb,iFACF,CAAC;EACH;EAEAH,oBAAoB,CAACI,OAAO,CAAC,CAAC;AAChC;AAEA,MAAMC,YAAY,CAAC;EAEjBC,WAAWA,CAAA,EAAG;IACZ,IAAI,CAACC,iBAAiB,GAAG,IAAIN,iBAAiB,CAACC,MAAM,CAACD,iBAAiB,CAAC;EAC1E;EAEAO,4BAA4BA,CAAA,EAAW;IACrC,OAAOR,oBAAoB,CAAEQ,4BAA4B,CAAC,CAAC;EAC7D;EAEAC,uBAAuBA,CAACC,OAAgB,EAAoB;IAC1D,OAAOV,oBAAoB,CAAES,uBAAuB,CAACC,OAAO,CAAC;EAC/D;EAEAC,sBAAsBA,CAACC,OAAuB,EAAE;IAC9CZ,oBAAoB,CAAEW,sBAAsB,CAC1CC,OAAO,CAACC,WAAW,IAAI,EAAE,EACzBD,OAAO,CAACE,OAAO,IAAI,EAAE,EACrBF,OAAO,CAACG,UAAU,IAAI,EACxB,CAAC;EACH;EAEAC,iBAAiBA,CAACC,IAAoB,EAAE;IACtCjB,oBAAoB,CAAEgB,iBAAiB,CAACC,IAAI,CAAC;EAC/C;EAEAC,mBAAmBA,CAAA,EAAG;IACpBlB,oBAAoB,CAAEkB,mBAAmB,CAAC,CAAC;EAC7C;EAEAC,yBAAyBA,CAACT,OAAgB,EAAE;IAC1CV,oBAAoB,CAAEmB,yBAAyB,CAACT,OAAO,CAAC;EAC1D;EAEAU,oBAAoBA,CAACV,OAAgB,EAAE;IACrCV,oBAAoB,CAAEoB,oBAAoB,CAACV,OAAO,CAAC;EACrD;EAEAW,mBAAmBA,CAACC,IAA4B,EAAEZ,OAAgB,EAAE;IAClEV,oBAAoB,CAAEqB,mBAAmB,CAACC,IAAI,EAAEZ,OAAO,CAAC;EAC1D;EAEAa,sBAAsBA,CACpBD,IAAU,EACVE,QAAmC,EACX;IACxB,OAAO,IAAI,CAACjB,iBAAiB,CAACkB,qBAAqB,CAACH,IAAI,EAAEE,QAAQ,CAAC;EACrE;EAEA,MAAME,2BAA2BA,CAAA,EAA8B;IAC7D,OAAO1B,oBAAoB,CAAE0B,2BAA2B,CAAC,CAAC;EAC5D;EAEA,MAAMC,yBAAyBA,CAAA,EAA8B;IAC3D,OAAO3B,oBAAoB,CAAE2B,yBAAyB,CAAC,CAAC;EAC1D;AACF;AAEA,eAAe,IAAItB,YAAY,CAAC,CAAC","ignoreList":[]}
|
|
@@ -12,6 +12,6 @@ export default class AudioNode {
|
|
|
12
12
|
protected readonly node: IAudioNode;
|
|
13
13
|
constructor(context: BaseAudioContext, node: IAudioNode);
|
|
14
14
|
connect(destination: AudioNode | AudioParam): AudioNode | AudioParam;
|
|
15
|
-
disconnect(destination?: AudioNode): void;
|
|
15
|
+
disconnect(destination?: AudioNode | AudioParam): void;
|
|
16
16
|
}
|
|
17
17
|
//# sourceMappingURL=AudioNode.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioNode.d.ts","sourceRoot":"","sources":["../../../src/core/AudioNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACnE,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAGlD,MAAM,CAAC,OAAO,OAAO,SAAS;IAC5B,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IACtD,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;gBAExB,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,UAAU;IAUhD,OAAO,CAAC,WAAW,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU;IAgBpE,UAAU,CAAC,WAAW,CAAC,EAAE,SAAS,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"AudioNode.d.ts","sourceRoot":"","sources":["../../../src/core/AudioNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACnE,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAGlD,MAAM,CAAC,OAAO,OAAO,SAAS;IAC5B,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IACtD,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;gBAExB,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,UAAU;IAUhD,OAAO,CAAC,WAAW,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU;IAgBpE,UAAU,CAAC,WAAW,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,IAAI;CAO9D"}
|
|
@@ -18,9 +18,9 @@ interface OnInterruptionEventType {
|
|
|
18
18
|
shouldResume: boolean;
|
|
19
19
|
}
|
|
20
20
|
interface OnRouteChangeEventType {
|
|
21
|
-
reason:
|
|
21
|
+
reason: 'Unknown' | 'Override' | 'CategoryChange' | 'WakeFromSleep' | 'NewDeviceAvailable' | 'OldDeviceUnavailable' | 'ConfigurationChange' | 'NoSuitableRouteForCategory';
|
|
22
22
|
}
|
|
23
|
-
interface
|
|
23
|
+
interface RemoteCommandEvents {
|
|
24
24
|
remotePlay: EventEmptyType;
|
|
25
25
|
remotePause: EventEmptyType;
|
|
26
26
|
remoteStop: EventEmptyType;
|
|
@@ -28,15 +28,17 @@ interface SystemEvents {
|
|
|
28
28
|
remoteChangePlaybackRate: EventTypeWithValue;
|
|
29
29
|
remoteNextTrack: EventEmptyType;
|
|
30
30
|
remotePreviousTrack: EventEmptyType;
|
|
31
|
-
remoteSkipForward:
|
|
32
|
-
remoteSkipBackward:
|
|
33
|
-
remoteSeekForward:
|
|
34
|
-
remoteSeekBackward:
|
|
31
|
+
remoteSkipForward: EventTypeWithValue;
|
|
32
|
+
remoteSkipBackward: EventTypeWithValue;
|
|
33
|
+
remoteSeekForward: EventEmptyType;
|
|
34
|
+
remoteSeekBackward: EventEmptyType;
|
|
35
35
|
remoteChangePlaybackPosition: EventTypeWithValue;
|
|
36
|
+
}
|
|
37
|
+
type SystemEvents = RemoteCommandEvents & {
|
|
36
38
|
volumeChange: EventTypeWithValue;
|
|
37
39
|
interruption: OnInterruptionEventType;
|
|
38
40
|
routeChange: OnRouteChangeEventType;
|
|
39
|
-
}
|
|
41
|
+
};
|
|
40
42
|
export interface OnAudioReadyEventType {
|
|
41
43
|
buffer: AudioBuffer;
|
|
42
44
|
numFrames: number;
|
|
@@ -50,6 +52,7 @@ interface AudioAPIEvents {
|
|
|
50
52
|
systemStateChanged: EventEmptyType;
|
|
51
53
|
}
|
|
52
54
|
type AudioEvents = SystemEvents & AudioAPIEvents;
|
|
55
|
+
export type RemoteCommandEventName = keyof RemoteCommandEvents;
|
|
53
56
|
export type SystemEventName = keyof SystemEvents;
|
|
54
57
|
export type SystemEventCallback<Name extends SystemEventName> = (event: SystemEvents[Name]) => void;
|
|
55
58
|
export type AudioAPIEventName = keyof AudioAPIEvents;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/events/types.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,qBAAqB,CAAC;AAE9C,UAAU,cAAc;CAAG;AAE3B,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,uBAAuB;IAC/B,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,UAAU,sBAAsB;IAC9B,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/events/types.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,qBAAqB,CAAC;AAE9C,UAAU,cAAc;CAAG;AAE3B,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,uBAAuB;IAC/B,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,UAAU,sBAAsB;IAC9B,MAAM,EACF,SAAS,GACT,UAAU,GACV,gBAAgB,GAChB,eAAe,GACf,oBAAoB,GACpB,sBAAsB,GACtB,qBAAqB,GACrB,4BAA4B,CAAC;CAClC;AAED,UAAU,mBAAmB;IAC3B,UAAU,EAAE,cAAc,CAAC;IAC3B,WAAW,EAAE,cAAc,CAAC;IAC5B,UAAU,EAAE,cAAc,CAAC;IAC3B,qBAAqB,EAAE,cAAc,CAAC;IACtC,wBAAwB,EAAE,kBAAkB,CAAC;IAC7C,eAAe,EAAE,cAAc,CAAC;IAChC,mBAAmB,EAAE,cAAc,CAAC;IACpC,iBAAiB,EAAE,kBAAkB,CAAC;IACtC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,iBAAiB,EAAE,cAAc,CAAC;IAClC,kBAAkB,EAAE,cAAc,CAAC;IACnC,4BAA4B,EAAE,kBAAkB,CAAC;CAClD;AAED,KAAK,YAAY,GAAG,mBAAmB,GAAG;IACxC,YAAY,EAAE,kBAAkB,CAAC;IACjC,YAAY,EAAE,uBAAuB,CAAC;IACtC,WAAW,EAAE,sBAAsB,CAAC;CACrC,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,cAAc;IACtB,KAAK,EAAE,gBAAgB,CAAC;IACxB,UAAU,EAAE,qBAAqB,CAAC;IAClC,eAAe,EAAE,0BAA0B,CAAC;IAC5C,UAAU,EAAE,cAAc,CAAC;IAC3B,kBAAkB,EAAE,cAAc,CAAC;CACpC;AAED,KAAK,WAAW,GAAG,YAAY,GAAG,cAAc,CAAC;AAEjD,MAAM,MAAM,sBAAsB,GAAG,MAAM,mBAAmB,CAAC;AAE/D,MAAM,MAAM,eAAe,GAAG,MAAM,YAAY,CAAC;AACjD,MAAM,MAAM,mBAAmB,CAAC,IAAI,SAAS,eAAe,IAAI,CAC9D,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,KACtB,IAAI,CAAC;AAEV,MAAM,MAAM,iBAAiB,GAAG,MAAM,cAAc,CAAC;AACrD,MAAM,MAAM,qBAAqB,CAAC,IAAI,SAAS,iBAAiB,IAAI,CAClE,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,KACxB,IAAI,CAAC;AAEV,MAAM,MAAM,cAAc,GAAG,MAAM,WAAW,CAAC;AAC/C,MAAM,MAAM,kBAAkB,CAAC,IAAI,SAAS,cAAc,IAAI,CAC5D,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,KACrB,IAAI,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSytemVolume.d.ts","sourceRoot":"","sources":["../../../src/hooks/useSytemVolume.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,UAAU,eAAe,
|
|
1
|
+
{"version":3,"file":"useSytemVolume.d.ts","sourceRoot":"","sources":["../../../src/hooks/useSytemVolume.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,UAAU,eAAe,WAmBtC"}
|
|
@@ -2,13 +2,14 @@ import type { TurboModule } from 'react-native';
|
|
|
2
2
|
import { PermissionStatus } from '../system/types';
|
|
3
3
|
interface Spec extends TurboModule {
|
|
4
4
|
install(): boolean;
|
|
5
|
+
getDevicePreferredSampleRate(): number;
|
|
6
|
+
setAudioSessionActivity(enabled: boolean): Promise<boolean>;
|
|
7
|
+
setAudioSessionOptions(category: string, mode: string, options: Array<string>): void;
|
|
5
8
|
setLockScreenInfo(info: {
|
|
6
9
|
[key: string]: string | boolean | number | undefined;
|
|
7
10
|
}): void;
|
|
8
11
|
resetLockScreenInfo(): void;
|
|
9
12
|
enableRemoteCommand(name: string, enabled: boolean): void;
|
|
10
|
-
setAudioSessionOptions(category: string, mode: string, options: Array<string>): void;
|
|
11
|
-
getDevicePreferredSampleRate(): number;
|
|
12
13
|
observeAudioInterruptions(enabled: boolean): void;
|
|
13
14
|
observeVolumeChanges(enabled: boolean): void;
|
|
14
15
|
requestRecordingPermissions(): Promise<PermissionStatus>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeAudioAPIModule.d.ts","sourceRoot":"","sources":["../../../src/specs/NativeAudioAPIModule.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,UAAU,IAAK,SAAQ,WAAW;IAChC,OAAO,IAAI,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"NativeAudioAPIModule.d.ts","sourceRoot":"","sources":["../../../src/specs/NativeAudioAPIModule.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,UAAU,IAAK,SAAQ,WAAW;IAChC,OAAO,IAAI,OAAO,CAAC;IACnB,4BAA4B,IAAI,MAAM,CAAC;IAGvC,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5D,sBAAsB,CACpB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,GACrB,IAAI,CAAC;IAGR,iBAAiB,CAAC,IAAI,EAAE;QACtB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;KACtD,GAAG,IAAI,CAAC;IACT,mBAAmB,IAAI,IAAI,CAAC;IAG5B,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1D,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAClD,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAG7C,2BAA2B,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACzD,yBAAyB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACxD;AAED,QAAA,MAAM,oBAAoB,aAAkD,CAAC;AAE7E,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
import { SessionOptions, LockScreenInfo, PermissionStatus } from './types';
|
|
2
|
-
import { SystemEventName, SystemEventCallback } from '../events/types';
|
|
2
|
+
import { SystemEventName, SystemEventCallback, RemoteCommandEventName } from '../events/types';
|
|
3
3
|
import { AudioEventSubscription } from '../events';
|
|
4
4
|
declare class AudioManager {
|
|
5
5
|
private readonly audioEventEmitter;
|
|
6
6
|
constructor();
|
|
7
|
+
getDevicePreferredSampleRate(): number;
|
|
8
|
+
setAudioSessionActivity(enabled: boolean): Promise<boolean>;
|
|
9
|
+
setAudioSessionOptions(options: SessionOptions): void;
|
|
7
10
|
setLockScreenInfo(info: LockScreenInfo): void;
|
|
8
11
|
resetLockScreenInfo(): void;
|
|
9
|
-
setAudioSessionOptions(options: SessionOptions): void;
|
|
10
|
-
getDevicePreferredSampleRate(): number;
|
|
11
12
|
observeAudioInterruptions(enabled: boolean): void;
|
|
12
13
|
observeVolumeChanges(enabled: boolean): void;
|
|
13
|
-
|
|
14
|
+
enableRemoteCommand(name: RemoteCommandEventName, enabled: boolean): void;
|
|
15
|
+
addSystemEventListener<Name extends SystemEventName>(name: Name, callback: SystemEventCallback<Name>): AudioEventSubscription;
|
|
14
16
|
requestRecordingPermissions(): Promise<PermissionStatus>;
|
|
15
17
|
checkRecordingPermissions(): Promise<PermissionStatus>;
|
|
16
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioManager.d.ts","sourceRoot":"","sources":["../../../src/system/AudioManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,
|
|
1
|
+
{"version":3,"file":"AudioManager.d.ts","sourceRoot":"","sources":["../../../src/system/AudioManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAqB,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAYtE,cAAM,YAAY;IAChB,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;;IAKtD,4BAA4B,IAAI,MAAM;IAItC,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAI3D,sBAAsB,CAAC,OAAO,EAAE,cAAc;IAQ9C,iBAAiB,CAAC,IAAI,EAAE,cAAc;IAItC,mBAAmB;IAInB,yBAAyB,CAAC,OAAO,EAAE,OAAO;IAI1C,oBAAoB,CAAC,OAAO,EAAE,OAAO;IAIrC,mBAAmB,CAAC,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,OAAO;IAIlE,sBAAsB,CAAC,IAAI,SAAS,eAAe,EACjD,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,mBAAmB,CAAC,IAAI,CAAC,GAClC,sBAAsB;IAInB,2BAA2B,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAIxD,yBAAyB,IAAI,OAAO,CAAC,gBAAgB,CAAC;CAG7D;;AAED,wBAAkC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-audio-api",
|
|
3
|
-
"version": "0.6.1-rc.
|
|
3
|
+
"version": "0.6.1-rc.6",
|
|
4
4
|
"description": "react-native-audio-api provides system for controlling audio in React Native environment compatible with Web Audio API specification",
|
|
5
5
|
"bin": {
|
|
6
6
|
"setup-rn-audio-api-web": "./scripts/setup-rn-audio-api-web.js"
|
package/src/core/AudioNode.ts
CHANGED
|
@@ -39,7 +39,11 @@ export default class AudioNode {
|
|
|
39
39
|
return destination;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
public disconnect(destination?: AudioNode): void {
|
|
43
|
-
|
|
42
|
+
public disconnect(destination?: AudioNode | AudioParam): void {
|
|
43
|
+
if (destination instanceof AudioParam) {
|
|
44
|
+
this.node.disconnect(destination.audioParam);
|
|
45
|
+
} else {
|
|
46
|
+
this.node.disconnect(destination?.node);
|
|
47
|
+
}
|
|
44
48
|
}
|
|
45
49
|
}
|
package/src/events/types.ts
CHANGED
|
@@ -23,10 +23,18 @@ interface OnInterruptionEventType {
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
interface OnRouteChangeEventType {
|
|
26
|
-
reason:
|
|
26
|
+
reason:
|
|
27
|
+
| 'Unknown'
|
|
28
|
+
| 'Override'
|
|
29
|
+
| 'CategoryChange'
|
|
30
|
+
| 'WakeFromSleep'
|
|
31
|
+
| 'NewDeviceAvailable'
|
|
32
|
+
| 'OldDeviceUnavailable'
|
|
33
|
+
| 'ConfigurationChange'
|
|
34
|
+
| 'NoSuitableRouteForCategory';
|
|
27
35
|
}
|
|
28
36
|
|
|
29
|
-
interface
|
|
37
|
+
interface RemoteCommandEvents {
|
|
30
38
|
remotePlay: EventEmptyType;
|
|
31
39
|
remotePause: EventEmptyType;
|
|
32
40
|
remoteStop: EventEmptyType;
|
|
@@ -34,15 +42,18 @@ interface SystemEvents {
|
|
|
34
42
|
remoteChangePlaybackRate: EventTypeWithValue;
|
|
35
43
|
remoteNextTrack: EventEmptyType;
|
|
36
44
|
remotePreviousTrack: EventEmptyType;
|
|
37
|
-
remoteSkipForward:
|
|
38
|
-
remoteSkipBackward:
|
|
39
|
-
remoteSeekForward:
|
|
40
|
-
remoteSeekBackward:
|
|
45
|
+
remoteSkipForward: EventTypeWithValue;
|
|
46
|
+
remoteSkipBackward: EventTypeWithValue;
|
|
47
|
+
remoteSeekForward: EventEmptyType;
|
|
48
|
+
remoteSeekBackward: EventEmptyType;
|
|
41
49
|
remoteChangePlaybackPosition: EventTypeWithValue;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
type SystemEvents = RemoteCommandEvents & {
|
|
42
53
|
volumeChange: EventTypeWithValue;
|
|
43
54
|
interruption: OnInterruptionEventType;
|
|
44
55
|
routeChange: OnRouteChangeEventType;
|
|
45
|
-
}
|
|
56
|
+
};
|
|
46
57
|
|
|
47
58
|
export interface OnAudioReadyEventType {
|
|
48
59
|
buffer: AudioBuffer;
|
|
@@ -60,6 +71,8 @@ interface AudioAPIEvents {
|
|
|
60
71
|
|
|
61
72
|
type AudioEvents = SystemEvents & AudioAPIEvents;
|
|
62
73
|
|
|
74
|
+
export type RemoteCommandEventName = keyof RemoteCommandEvents;
|
|
75
|
+
|
|
63
76
|
export type SystemEventName = keyof SystemEvents;
|
|
64
77
|
export type SystemEventCallback<Name extends SystemEventName> = (
|
|
65
78
|
event: SystemEvents[Name]
|
|
@@ -6,9 +6,12 @@ export default function useSystemVolume() {
|
|
|
6
6
|
|
|
7
7
|
useEffect(() => {
|
|
8
8
|
AudioManager.observeVolumeChanges(true);
|
|
9
|
-
const listener = AudioManager.
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
const listener = AudioManager.addSystemEventListener(
|
|
10
|
+
'volumeChange',
|
|
11
|
+
(e) => {
|
|
12
|
+
setVolume(parseFloat(e.value.toFixed(2)));
|
|
13
|
+
}
|
|
14
|
+
);
|
|
12
15
|
return () => {
|
|
13
16
|
listener?.remove();
|
|
14
17
|
|
|
@@ -5,20 +5,28 @@ import { PermissionStatus } from '../system/types';
|
|
|
5
5
|
|
|
6
6
|
interface Spec extends TurboModule {
|
|
7
7
|
install(): boolean;
|
|
8
|
+
getDevicePreferredSampleRate(): number;
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}): void;
|
|
12
|
-
resetLockScreenInfo(): void;
|
|
13
|
-
enableRemoteCommand(name: string, enabled: boolean): void;
|
|
10
|
+
// AVAudioSession management
|
|
11
|
+
setAudioSessionActivity(enabled: boolean): Promise<boolean>;
|
|
14
12
|
setAudioSessionOptions(
|
|
15
13
|
category: string,
|
|
16
14
|
mode: string,
|
|
17
15
|
options: Array<string>
|
|
18
16
|
): void;
|
|
19
|
-
|
|
17
|
+
|
|
18
|
+
// Lock Screen Info
|
|
19
|
+
setLockScreenInfo(info: {
|
|
20
|
+
[key: string]: string | boolean | number | undefined;
|
|
21
|
+
}): void;
|
|
22
|
+
resetLockScreenInfo(): void;
|
|
23
|
+
|
|
24
|
+
// Remote commands, system events and interruptions
|
|
25
|
+
enableRemoteCommand(name: string, enabled: boolean): void;
|
|
20
26
|
observeAudioInterruptions(enabled: boolean): void;
|
|
21
27
|
observeVolumeChanges(enabled: boolean): void;
|
|
28
|
+
|
|
29
|
+
// Permissions
|
|
22
30
|
requestRecordingPermissions(): Promise<PermissionStatus>;
|
|
23
31
|
checkRecordingPermissions(): Promise<PermissionStatus>;
|
|
24
32
|
}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { SessionOptions, LockScreenInfo, PermissionStatus } from './types';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
SystemEventName,
|
|
4
|
+
SystemEventCallback,
|
|
5
|
+
RemoteCommandEventName,
|
|
6
|
+
} from '../events/types';
|
|
3
7
|
import { NativeAudioAPIModule } from '../specs';
|
|
4
8
|
import { AudioEventEmitter, AudioEventSubscription } from '../events';
|
|
5
9
|
|
|
@@ -19,12 +23,12 @@ class AudioManager {
|
|
|
19
23
|
this.audioEventEmitter = new AudioEventEmitter(global.AudioEventEmitter);
|
|
20
24
|
}
|
|
21
25
|
|
|
22
|
-
|
|
23
|
-
NativeAudioAPIModule!.
|
|
26
|
+
getDevicePreferredSampleRate(): number {
|
|
27
|
+
return NativeAudioAPIModule!.getDevicePreferredSampleRate();
|
|
24
28
|
}
|
|
25
29
|
|
|
26
|
-
|
|
27
|
-
NativeAudioAPIModule!.
|
|
30
|
+
setAudioSessionActivity(enabled: boolean): Promise<boolean> {
|
|
31
|
+
return NativeAudioAPIModule!.setAudioSessionActivity(enabled);
|
|
28
32
|
}
|
|
29
33
|
|
|
30
34
|
setAudioSessionOptions(options: SessionOptions) {
|
|
@@ -35,8 +39,12 @@ class AudioManager {
|
|
|
35
39
|
);
|
|
36
40
|
}
|
|
37
41
|
|
|
38
|
-
|
|
39
|
-
|
|
42
|
+
setLockScreenInfo(info: LockScreenInfo) {
|
|
43
|
+
NativeAudioAPIModule!.setLockScreenInfo(info);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
resetLockScreenInfo() {
|
|
47
|
+
NativeAudioAPIModule!.resetLockScreenInfo();
|
|
40
48
|
}
|
|
41
49
|
|
|
42
50
|
observeAudioInterruptions(enabled: boolean) {
|
|
@@ -47,17 +55,14 @@ class AudioManager {
|
|
|
47
55
|
NativeAudioAPIModule!.observeVolumeChanges(enabled);
|
|
48
56
|
}
|
|
49
57
|
|
|
50
|
-
|
|
51
|
-
name: Name,
|
|
52
|
-
callback?: SystemEventCallback<Name>,
|
|
53
|
-
enabled = true
|
|
54
|
-
): AudioEventSubscription | null {
|
|
58
|
+
enableRemoteCommand(name: RemoteCommandEventName, enabled: boolean) {
|
|
55
59
|
NativeAudioAPIModule!.enableRemoteCommand(name, enabled);
|
|
60
|
+
}
|
|
56
61
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
62
|
+
addSystemEventListener<Name extends SystemEventName>(
|
|
63
|
+
name: Name,
|
|
64
|
+
callback: SystemEventCallback<Name>
|
|
65
|
+
): AudioEventSubscription {
|
|
61
66
|
return this.audioEventEmitter.addAudioEventListener(name, callback);
|
|
62
67
|
}
|
|
63
68
|
|