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.
Files changed (43) hide show
  1. package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +3 -9
  2. package/android/src/main/cpp/audioapi/android/core/AudioPlayer.h +1 -2
  3. package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +17 -10
  4. package/android/src/oldarch/NativeAudioAPIModuleSpec.java +68 -64
  5. package/common/cpp/audioapi/HostObjects/AudioContextHostObject.h +4 -14
  6. package/common/cpp/audioapi/core/AudioContext.cpp +5 -5
  7. package/common/cpp/audioapi/core/BaseAudioContext.cpp +4 -0
  8. package/common/cpp/audioapi/core/BaseAudioContext.h +1 -0
  9. package/ios/audioapi/ios/AudioAPIModule.mm +22 -10
  10. package/ios/audioapi/ios/core/IOSAudioPlayer.h +1 -2
  11. package/ios/audioapi/ios/core/IOSAudioPlayer.mm +8 -13
  12. package/ios/audioapi/ios/system/AudioSessionManager.mm +1 -1
  13. package/ios/audioapi/ios/system/LockScreenManager.mm +13 -1
  14. package/ios/audioapi/ios/system/NotificationManager.mm +1 -1
  15. package/lib/commonjs/core/AudioNode.js +5 -1
  16. package/lib/commonjs/core/AudioNode.js.map +1 -1
  17. package/lib/commonjs/hooks/useSytemVolume.js +1 -1
  18. package/lib/commonjs/hooks/useSytemVolume.js.map +1 -1
  19. package/lib/commonjs/specs/NativeAudioAPIModule.js.map +1 -1
  20. package/lib/commonjs/system/AudioManager.js +12 -10
  21. package/lib/commonjs/system/AudioManager.js.map +1 -1
  22. package/lib/module/core/AudioNode.js +5 -1
  23. package/lib/module/core/AudioNode.js.map +1 -1
  24. package/lib/module/hooks/useSytemVolume.js +1 -1
  25. package/lib/module/hooks/useSytemVolume.js.map +1 -1
  26. package/lib/module/specs/NativeAudioAPIModule.js.map +1 -1
  27. package/lib/module/system/AudioManager.js +12 -10
  28. package/lib/module/system/AudioManager.js.map +1 -1
  29. package/lib/typescript/core/AudioNode.d.ts +1 -1
  30. package/lib/typescript/core/AudioNode.d.ts.map +1 -1
  31. package/lib/typescript/events/types.d.ts +10 -7
  32. package/lib/typescript/events/types.d.ts.map +1 -1
  33. package/lib/typescript/hooks/useSytemVolume.d.ts.map +1 -1
  34. package/lib/typescript/specs/NativeAudioAPIModule.d.ts +3 -2
  35. package/lib/typescript/specs/NativeAudioAPIModule.d.ts.map +1 -1
  36. package/lib/typescript/system/AudioManager.d.ts +6 -4
  37. package/lib/typescript/system/AudioManager.d.ts.map +1 -1
  38. package/package.json +1 -1
  39. package/src/core/AudioNode.ts +6 -2
  40. package/src/events/types.ts +20 -7
  41. package/src/hooks/useSytemVolume.ts +6 -3
  42. package/src/specs/NativeAudioAPIModule.ts +14 -6
  43. package/src/system/AudioManager.ts +21 -16
@@ -33,13 +33,13 @@ void AudioPlayer::start() {
33
33
  }
34
34
  }
35
35
 
36
- void AudioPlayer::resume() {
36
+ void AudioPlayer::stop() {
37
37
  if (mStream_) {
38
- mStream_->requestStart();
38
+ mStream_->requestPause();
39
39
  }
40
40
  }
41
41
 
42
- void AudioPlayer::stop() {
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,
@@ -19,9 +19,8 @@ class AudioPlayer : public AudioStreamDataCallback {
19
19
  float sampleRate);
20
20
 
21
21
  void start();
22
- void resume();
23
22
  void stop();
24
- void pause();
23
+ void cleanup();
25
24
 
26
25
  DataCallbackResult onAudioReady(
27
26
  AudioStream *oboeStream,
@@ -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
- 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
42
- @DoNotStrip
43
- public abstract void setLockScreenInfo(ReadableMap info);
44
-
45
- @ReactMethod
46
- @DoNotStrip
47
- public abstract void resetLockScreenInfo();
48
-
49
- @ReactMethod
50
- @DoNotStrip
51
- public abstract void enableRemoteCommand(String name, boolean enabled);
52
-
53
- @ReactMethod
54
- @DoNotStrip
55
- public abstract void setAudioSessionOptions(String category, String mode, ReadableArray options);
56
-
57
- @ReactMethod(isBlockingSynchronousMethod = true)
58
- @DoNotStrip
59
- public abstract double getDevicePreferredSampleRate();
60
-
61
- @ReactMethod
62
- @DoNotStrip
63
- public abstract void observeAudioInterruptions(boolean enabled);
64
-
65
- @ReactMethod
66
- @DoNotStrip
67
- public abstract void observeVolumeChanges(boolean enabled);
68
-
69
- @ReactMethod
70
- @DoNotStrip
71
- public abstract void requestRecordingPermissions(Promise promise);
72
-
73
- @ReactMethod
74
- @DoNotStrip
75
- public abstract void checkRecordingPermissions(Promise promise);
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
- if (!result) {
49
- promise->reject("Failed to resume audio context, because it is already closed.");
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
- if (!result) {
69
- promise->reject("Failed to resume audio context, because it is already closed.");
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_->resume();
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_->pause();
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
  }
@@ -62,6 +62,7 @@ class BaseAudioContext {
62
62
  AudioNodeManager *getNodeManager();
63
63
 
64
64
  [[nodiscard]] bool isRunning() const;
65
+ [[nodiscard]] bool isSuspended() const;
65
66
  [[nodiscard]] bool isClosed() const;
66
67
 
67
68
  protected:
@@ -80,19 +80,21 @@ RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(install)
80
80
  return @true;
81
81
  }
82
82
 
83
- RCT_EXPORT_METHOD(setLockScreenInfo : (NSDictionary *)info)
83
+ RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(getDevicePreferredSampleRate)
84
84
  {
85
- [self.lockScreenManager setLockScreenInfo:info];
85
+ return [self.audioSessionManager getDevicePreferredSampleRate];
86
86
  }
87
87
 
88
- RCT_EXPORT_METHOD(resetLockScreenInfo)
88
+ RCT_EXPORT_METHOD(
89
+ setAudioSessionActivity : (BOOL)enabled resolve : (RCTPromiseResolveBlock)resolve reject : (RCTPromiseRejectBlock)
90
+ reject)
89
91
  {
90
- [self.lockScreenManager resetLockScreenInfo];
91
- }
92
+ if ([self.audioSessionManager setActive:enabled]) {
93
+ resolve(@"true");
94
+ return;
95
+ }
92
96
 
93
- RCT_EXPORT_METHOD(enableRemoteCommand : (NSString *)name enabled : (BOOL)enabled)
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
- RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(getDevicePreferredSampleRate)
105
+ RCT_EXPORT_METHOD(setLockScreenInfo : (NSDictionary *)info)
104
106
  {
105
- return [self.audioSessionManager getDevicePreferredSampleRate];
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)
@@ -21,9 +21,8 @@ class IOSAudioPlayer {
21
21
  ~IOSAudioPlayer();
22
22
 
23
23
  void start();
24
- void resume();
25
24
  void stop();
26
- void pause();
25
+ void cleanup();
27
26
 
28
27
  protected:
29
28
  std::shared_ptr<AudioBus> audioBus_;
@@ -43,12 +43,7 @@ IOSAudioPlayer::IOSAudioPlayer(const std::function<void(std::shared_ptr<AudioBus
43
43
 
44
44
  IOSAudioPlayer::~IOSAudioPlayer()
45
45
  {
46
- stop();
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::pause()
65
+ void IOSAudioPlayer::cleanup()
76
66
  {
77
- isRunning_.store(false);
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 = AVAudioSessionCategoryOptionAllowAirPlay;
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
- [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
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
  }
@@ -149,7 +149,7 @@ static NSString *VolumeObservationContext = @"VolumeObservationContext";
149
149
  reasonStr = @"NoSuitableRouteForCategory";
150
150
  break;
151
151
  default:
152
- reasonStr = @"DoubleUnknown";
152
+ reasonStr = @"Unknown";
153
153
  break;
154
154
  }
155
155
 
@@ -29,7 +29,11 @@ class AudioNode {
29
29
  return destination;
30
30
  }
31
31
  disconnect(destination) {
32
- this.node.disconnect(destination?.node);
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,WAAuB,EAAQ;IAC/C,IAAI,CAACP,IAAI,CAACW,UAAU,CAACJ,WAAW,EAAEP,IAAI,CAAC;EACzC;AACF;AAACY,OAAA,CAAAhB,OAAA,GAAAC,SAAA","ignoreList":[]}
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.enableSystemEvent('volumeChange', e => {
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","enableSystemEvent","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,iBAAiB,CAAC,cAAc,EAAGX,CAAC,IAAK;MACrEK,SAAS,CAACO,UAAU,CAACZ,CAAC,CAACa,KAAK,CAACC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC;IACF,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
+ {"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;AAwBA,MAAMF,oBAAoB,GAAAF,OAAA,CAAAE,oBAAA,GAAGG,gCAAmB,CAACC,GAAG,CAAO,gBAAgB,CAAC","ignoreList":[]}
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
- setLockScreenInfo(info) {
20
- _specs.NativeAudioAPIModule.setLockScreenInfo(info);
19
+ getDevicePreferredSampleRate() {
20
+ return _specs.NativeAudioAPIModule.getDevicePreferredSampleRate();
21
21
  }
22
- resetLockScreenInfo() {
23
- _specs.NativeAudioAPIModule.resetLockScreenInfo();
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
- getDevicePreferredSampleRate() {
29
- return _specs.NativeAudioAPIModule.getDevicePreferredSampleRate();
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
- enableSystemEvent(name, callback, enabled = true) {
40
+ enableRemoteCommand(name, enabled) {
38
41
  _specs.NativeAudioAPIModule.enableRemoteCommand(name, enabled);
39
- if (!enabled || !callback) {
40
- return null;
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","setLockScreenInfo","info","resetLockScreenInfo","setAudioSessionOptions","options","iosCategory","iosMode","iosOptions","getDevicePreferredSampleRate","observeAudioInterruptions","enabled","observeVolumeChanges","enableSystemEvent","name","callback","enableRemoteCommand","addAudioEventListener","requestRecordingPermissions","checkRecordingPermissions","_default","exports","default"],"sourceRoot":"../../../src","sources":["system/AudioManager.ts"],"mappings":";;;;;;AAEA,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,iBAAiBA,CAACC,IAAoB,EAAE;IACtCP,2BAAoB,CAAEM,iBAAiB,CAACC,IAAI,CAAC;EAC/C;EAEAC,mBAAmBA,CAAA,EAAG;IACpBR,2BAAoB,CAAEQ,mBAAmB,CAAC,CAAC;EAC7C;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,4BAA4BA,CAAA,EAAW;IACrC,OAAOd,2BAAoB,CAAEc,4BAA4B,CAAC,CAAC;EAC7D;EAEAC,yBAAyBA,CAACC,OAAgB,EAAE;IAC1ChB,2BAAoB,CAAEe,yBAAyB,CAACC,OAAO,CAAC;EAC1D;EAEAC,oBAAoBA,CAACD,OAAgB,EAAE;IACrChB,2BAAoB,CAAEiB,oBAAoB,CAACD,OAAO,CAAC;EACrD;EAEAE,iBAAiBA,CACfC,IAAU,EACVC,QAAoC,EACpCJ,OAAO,GAAG,IAAI,EACiB;IAC/BhB,2BAAoB,CAAEqB,mBAAmB,CAACF,IAAI,EAAEH,OAAO,CAAC;IAExD,IAAI,CAACA,OAAO,IAAI,CAACI,QAAQ,EAAE;MACzB,OAAO,IAAI;IACb;IAEA,OAAO,IAAI,CAACf,iBAAiB,CAACiB,qBAAqB,CAACH,IAAI,EAAEC,QAAQ,CAAC;EACrE;EAEA,MAAMG,2BAA2BA,CAAA,EAA8B;IAC7D,OAAOvB,2BAAoB,CAAEuB,2BAA2B,CAAC,CAAC;EAC5D;EAEA,MAAMC,yBAAyBA,CAAA,EAA8B;IAC3D,OAAOxB,2BAAoB,CAAEwB,yBAAyB,CAAC,CAAC;EAC1D;AACF;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEc,IAAIxB,YAAY,CAAC,CAAC","ignoreList":[]}
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
- this.node.disconnect(destination?.node);
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,WAAuB,EAAQ;IAC/C,IAAI,CAACP,IAAI,CAACS,UAAU,CAACF,WAAW,EAAEP,IAAI,CAAC;EACzC;AACF","ignoreList":[]}
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.enableSystemEvent('volumeChange', e => {
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","enableSystemEvent","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,iBAAiB,CAAC,cAAc,EAAGC,CAAC,IAAK;MACrEJ,SAAS,CAACK,UAAU,CAACD,CAAC,CAACE,KAAK,CAACC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC;IACF,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
+ {"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;AAwBlD,MAAMC,oBAAoB,GAAGD,mBAAmB,CAACE,GAAG,CAAO,gBAAgB,CAAC;AAE5E,SAASD,oBAAoB","ignoreList":[]}
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
- setLockScreenInfo(info) {
16
- NativeAudioAPIModule.setLockScreenInfo(info);
15
+ getDevicePreferredSampleRate() {
16
+ return NativeAudioAPIModule.getDevicePreferredSampleRate();
17
17
  }
18
- resetLockScreenInfo() {
19
- NativeAudioAPIModule.resetLockScreenInfo();
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
- getDevicePreferredSampleRate() {
25
- return NativeAudioAPIModule.getDevicePreferredSampleRate();
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
- enableSystemEvent(name, callback, enabled = true) {
36
+ enableRemoteCommand(name, enabled) {
34
37
  NativeAudioAPIModule.enableRemoteCommand(name, enabled);
35
- if (!enabled || !callback) {
36
- return null;
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","setLockScreenInfo","info","resetLockScreenInfo","setAudioSessionOptions","options","iosCategory","iosMode","iosOptions","getDevicePreferredSampleRate","observeAudioInterruptions","enabled","observeVolumeChanges","enableSystemEvent","name","callback","enableRemoteCommand","addAudioEventListener","requestRecordingPermissions","checkRecordingPermissions"],"sourceRoot":"../../../src","sources":["system/AudioManager.ts"],"mappings":";;AAEA,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,iBAAiBA,CAACC,IAAoB,EAAE;IACtCT,oBAAoB,CAAEQ,iBAAiB,CAACC,IAAI,CAAC;EAC/C;EAEAC,mBAAmBA,CAAA,EAAG;IACpBV,oBAAoB,CAAEU,mBAAmB,CAAC,CAAC;EAC7C;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,4BAA4BA,CAAA,EAAW;IACrC,OAAOhB,oBAAoB,CAAEgB,4BAA4B,CAAC,CAAC;EAC7D;EAEAC,yBAAyBA,CAACC,OAAgB,EAAE;IAC1ClB,oBAAoB,CAAEiB,yBAAyB,CAACC,OAAO,CAAC;EAC1D;EAEAC,oBAAoBA,CAACD,OAAgB,EAAE;IACrClB,oBAAoB,CAAEmB,oBAAoB,CAACD,OAAO,CAAC;EACrD;EAEAE,iBAAiBA,CACfC,IAAU,EACVC,QAAoC,EACpCJ,OAAO,GAAG,IAAI,EACiB;IAC/BlB,oBAAoB,CAAEuB,mBAAmB,CAACF,IAAI,EAAEH,OAAO,CAAC;IAExD,IAAI,CAACA,OAAO,IAAI,CAACI,QAAQ,EAAE;MACzB,OAAO,IAAI;IACb;IAEA,OAAO,IAAI,CAACf,iBAAiB,CAACiB,qBAAqB,CAACH,IAAI,EAAEC,QAAQ,CAAC;EACrE;EAEA,MAAMG,2BAA2BA,CAAA,EAA8B;IAC7D,OAAOzB,oBAAoB,CAAEyB,2BAA2B,CAAC,CAAC;EAC5D;EAEA,MAAMC,yBAAyBA,CAAA,EAA8B;IAC3D,OAAO1B,oBAAoB,CAAE0B,yBAAyB,CAAC,CAAC;EAC1D;AACF;AAEA,eAAe,IAAIrB,YAAY,CAAC,CAAC","ignoreList":[]}
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;CAGjD"}
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: string;
21
+ reason: 'Unknown' | 'Override' | 'CategoryChange' | 'WakeFromSleep' | 'NewDeviceAvailable' | 'OldDeviceUnavailable' | 'ConfigurationChange' | 'NoSuitableRouteForCategory';
22
22
  }
23
- interface SystemEvents {
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: EventEmptyType;
32
- remoteSkipBackward: EventEmptyType;
33
- remoteSeekForward: EventTypeWithValue;
34
- remoteSeekBackward: EventTypeWithValue;
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,YAAY;IACpB,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,cAAc,CAAC;IAClC,kBAAkB,EAAE,cAAc,CAAC;IACnC,iBAAiB,EAAE,kBAAkB,CAAC;IACtC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,4BAA4B,EAAE,kBAAkB,CAAC;IACjD,YAAY,EAAE,kBAAkB,CAAC;IACjC,YAAY,EAAE,uBAAuB,CAAC;IACtC,WAAW,EAAE,sBAAsB,CAAC;CACrC;AAED,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,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
+ {"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,WAgBtC"}
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;IAEnB,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;IAC5B,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1D,sBAAsB,CACpB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,GACrB,IAAI,CAAC;IACR,4BAA4B,IAAI,MAAM,CAAC;IACvC,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAClD,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7C,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
+ {"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
- enableSystemEvent<Name extends SystemEventName>(name: Name, callback?: SystemEventCallback<Name>, enabled?: boolean): AudioEventSubscription | null;
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,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEvE,OAAO,EAAqB,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAYtE,cAAM,YAAY;IAChB,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;;IAKtD,iBAAiB,CAAC,IAAI,EAAE,cAAc;IAItC,mBAAmB;IAInB,sBAAsB,CAAC,OAAO,EAAE,cAAc;IAQ9C,4BAA4B,IAAI,MAAM;IAItC,yBAAyB,CAAC,OAAO,EAAE,OAAO;IAI1C,oBAAoB,CAAC,OAAO,EAAE,OAAO;IAIrC,iBAAiB,CAAC,IAAI,SAAS,eAAe,EAC5C,IAAI,EAAE,IAAI,EACV,QAAQ,CAAC,EAAE,mBAAmB,CAAC,IAAI,CAAC,EACpC,OAAO,UAAO,GACb,sBAAsB,GAAG,IAAI;IAU1B,2BAA2B,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAIxD,yBAAyB,IAAI,OAAO,CAAC,gBAAgB,CAAC;CAG7D;;AAED,wBAAkC"}
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.4",
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"
@@ -39,7 +39,11 @@ export default class AudioNode {
39
39
  return destination;
40
40
  }
41
41
 
42
- public disconnect(destination?: AudioNode): void {
43
- this.node.disconnect(destination?.node);
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
  }
@@ -23,10 +23,18 @@ interface OnInterruptionEventType {
23
23
  }
24
24
 
25
25
  interface OnRouteChangeEventType {
26
- reason: string;
26
+ reason:
27
+ | 'Unknown'
28
+ | 'Override'
29
+ | 'CategoryChange'
30
+ | 'WakeFromSleep'
31
+ | 'NewDeviceAvailable'
32
+ | 'OldDeviceUnavailable'
33
+ | 'ConfigurationChange'
34
+ | 'NoSuitableRouteForCategory';
27
35
  }
28
36
 
29
- interface SystemEvents {
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: EventEmptyType;
38
- remoteSkipBackward: EventEmptyType;
39
- remoteSeekForward: EventTypeWithValue;
40
- remoteSeekBackward: EventTypeWithValue;
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.enableSystemEvent('volumeChange', (e) => {
10
- setVolume(parseFloat(e.value.toFixed(2)));
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
- setLockScreenInfo(info: {
10
- [key: string]: string | boolean | number | undefined;
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
- getDevicePreferredSampleRate(): number;
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 { SystemEventName, SystemEventCallback } from '../events/types';
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
- setLockScreenInfo(info: LockScreenInfo) {
23
- NativeAudioAPIModule!.setLockScreenInfo(info);
26
+ getDevicePreferredSampleRate(): number {
27
+ return NativeAudioAPIModule!.getDevicePreferredSampleRate();
24
28
  }
25
29
 
26
- resetLockScreenInfo() {
27
- NativeAudioAPIModule!.resetLockScreenInfo();
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
- getDevicePreferredSampleRate(): number {
39
- return NativeAudioAPIModule!.getDevicePreferredSampleRate();
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
- enableSystemEvent<Name extends SystemEventName>(
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
- if (!enabled || !callback) {
58
- return null;
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