react-native-audio-api 0.6.1-rc.4 → 0.6.1-rc.5
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/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/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/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/events/types.d.ts +9 -6
- 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/events/types.ts +11 -6
- 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
|
}
|
|
@@ -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
|
}
|
|
@@ -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":[]}
|
|
@@ -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":[]}
|
|
@@ -20,7 +20,7 @@ interface OnInterruptionEventType {
|
|
|
20
20
|
interface OnRouteChangeEventType {
|
|
21
21
|
reason: string;
|
|
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,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,
|
|
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,EAAE,MAAM,CAAC;CAChB;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.5",
|
|
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/events/types.ts
CHANGED
|
@@ -26,7 +26,7 @@ interface OnRouteChangeEventType {
|
|
|
26
26
|
reason: string;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
interface
|
|
29
|
+
interface RemoteCommandEvents {
|
|
30
30
|
remotePlay: EventEmptyType;
|
|
31
31
|
remotePause: EventEmptyType;
|
|
32
32
|
remoteStop: EventEmptyType;
|
|
@@ -34,15 +34,18 @@ interface SystemEvents {
|
|
|
34
34
|
remoteChangePlaybackRate: EventTypeWithValue;
|
|
35
35
|
remoteNextTrack: EventEmptyType;
|
|
36
36
|
remotePreviousTrack: EventEmptyType;
|
|
37
|
-
remoteSkipForward:
|
|
38
|
-
remoteSkipBackward:
|
|
39
|
-
remoteSeekForward:
|
|
40
|
-
remoteSeekBackward:
|
|
37
|
+
remoteSkipForward: EventTypeWithValue;
|
|
38
|
+
remoteSkipBackward: EventTypeWithValue;
|
|
39
|
+
remoteSeekForward: EventEmptyType;
|
|
40
|
+
remoteSeekBackward: EventEmptyType;
|
|
41
41
|
remoteChangePlaybackPosition: EventTypeWithValue;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
type SystemEvents = RemoteCommandEvents & {
|
|
42
45
|
volumeChange: EventTypeWithValue;
|
|
43
46
|
interruption: OnInterruptionEventType;
|
|
44
47
|
routeChange: OnRouteChangeEventType;
|
|
45
|
-
}
|
|
48
|
+
};
|
|
46
49
|
|
|
47
50
|
export interface OnAudioReadyEventType {
|
|
48
51
|
buffer: AudioBuffer;
|
|
@@ -60,6 +63,8 @@ interface AudioAPIEvents {
|
|
|
60
63
|
|
|
61
64
|
type AudioEvents = SystemEvents & AudioAPIEvents;
|
|
62
65
|
|
|
66
|
+
export type RemoteCommandEventName = keyof RemoteCommandEvents;
|
|
67
|
+
|
|
63
68
|
export type SystemEventName = keyof SystemEvents;
|
|
64
69
|
export type SystemEventCallback<Name extends SystemEventName> = (
|
|
65
70
|
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
|
|