react-native-audio-api 0.11.0 โ†’ 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/README.md +14 -0
  2. package/RNAudioAPI.podspec +65 -40
  3. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.cpp +1 -1
  4. package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +2 -0
  5. package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.cpp +6 -0
  6. package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.h +1 -0
  7. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +6 -0
  8. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +2 -0
  9. package/ios/audioapi/ios/AudioAPIModule.mm +22 -1
  10. package/ios/audioapi/ios/system/AudioEngine.mm +4 -2
  11. package/ios/audioapi/ios/system/AudioSessionManager.h +1 -1
  12. package/ios/audioapi/ios/system/AudioSessionManager.mm +4 -11
  13. package/lib/commonjs/plugin/withAudioAPI.js +6 -1
  14. package/lib/commonjs/plugin/withAudioAPI.js.map +1 -1
  15. package/lib/commonjs/system/AudioManager.js +8 -2
  16. package/lib/commonjs/system/AudioManager.js.map +1 -1
  17. package/lib/commonjs/system/errors.js +79 -0
  18. package/lib/commonjs/system/errors.js.map +1 -0
  19. package/lib/module/plugin/withAudioAPI.js +7 -2
  20. package/lib/module/plugin/withAudioAPI.js.map +1 -1
  21. package/lib/module/system/AudioManager.js +8 -2
  22. package/lib/module/system/AudioManager.js.map +1 -1
  23. package/lib/module/system/errors.js +73 -0
  24. package/lib/module/system/errors.js.map +1 -0
  25. package/lib/typescript/plugin/withAudioAPI.d.ts.map +1 -1
  26. package/lib/typescript/system/AudioManager.d.ts +2 -2
  27. package/lib/typescript/system/AudioManager.d.ts.map +1 -1
  28. package/lib/typescript/system/errors.d.ts +12 -0
  29. package/lib/typescript/system/errors.d.ts.map +1 -0
  30. package/lib/typescript/system/types.d.ts +1 -1
  31. package/lib/typescript/system/types.d.ts.map +1 -1
  32. package/package.json +1 -1
  33. package/scripts/rnaa_utils.rb +50 -0
  34. package/src/plugin/withAudioAPI.ts +12 -4
  35. package/src/system/AudioManager.ts +15 -7
  36. package/src/system/errors.ts +111 -0
  37. package/src/system/types.ts +1 -1
package/README.md CHANGED
@@ -36,6 +36,20 @@ check out the [Getting Started](https://docs.swmansion.com/react-native-audio-ap
36
36
  - **Noise Cancellation ๐Ÿฆ‡**<br />
37
37
  System-based active noise and echo cancellation support
38
38
 
39
+ ### <a href="https://github.com/software-mansion/react-native-audio-api/releases/tag/0.11.0"><img src="https://img.shields.io/badge/Released_in-0.11.0-green" /></a>
40
+
41
+ - **Recording to file ๐Ÿ“ผ**<br />
42
+ Fully customizable recording to a file. Choose a file format, quality and other parameters. Fully integrated with the audio graph.
43
+
44
+ - **Playback and recording notification system ๐Ÿ””**<br />
45
+ Control playback and recording from the notification center / lock screen and create custom notification layouts.
46
+
47
+ - **Wave Shaper Node ๐ŸŽธ**<br />
48
+ Create custom nonlinear distortion effects. No need to buy guitar pedals anymore!
49
+
50
+ - **IIR Filter Node ๐Ÿงช**<br />
51
+ Implement custom digital filters using feedforward and feedback coefficients.
52
+
39
53
  ### <a href="https://github.com/software-mansion/react-native-audio-api/releases/tag/0.10.0"><img src="https://img.shields.io/badge/Released_in-0.10.0-green" /></a>
40
54
 
41
55
  - **Decoding and utility modules ๐Ÿ”ง**<br />
@@ -2,15 +2,18 @@ require "json"
2
2
  require_relative './scripts/rnaa_utils'
3
3
 
4
4
  package_json = JSON.parse(File.read(File.join(__dir__, "package.json")))
5
+ $audio_api_config = find_audio_api_config()
5
6
 
6
7
  $new_arch_enabled = ENV['RCT_NEW_ARCH_ENABLED'] == '1'
7
8
  $RN_AUDIO_API_FFMPEG_DISABLED = ENV['DISABLE_AUDIOAPI_FFMPEG'].nil? ? false : ENV['DISABLE_AUDIOAPI_FFMPEG'] == '1' # false by default
8
9
 
9
- folly_flags = "-DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32"
10
10
  fabric_flags = $new_arch_enabled ? '-DRCT_NEW_ARCH_ENABLED' : ''
11
11
  version_flag = "-DAUDIOAPI_VERSION=#{package_json['version']}"
12
+ ios_min_version = '14.0'
13
+
14
+ worklets_enabled = $audio_api_config[:worklets_enabled]
15
+ worklets_preprocessor_flag = worklets_enabled ? '-DRN_AUDIO_API_ENABLE_WORKLETS=1' : ''
12
16
 
13
- worklets_preprocessor_flag = check_if_worklets_enabled() ? '-DRN_AUDIO_API_ENABLE_WORKLETS=1' : ''
14
17
  ffmpeg_flag = $RN_AUDIO_API_FFMPEG_DISABLED ? '-DRN_AUDIO_API_FFMPEG_DISABLED=1' : ''
15
18
  skip_ffmpeg_argument = $RN_AUDIO_API_FFMPEG_DISABLED ? 'skipffmpeg' : ''
16
19
 
@@ -22,7 +25,7 @@ Pod::Spec.new do |s|
22
25
  s.license = package_json["license"]
23
26
  s.authors = package_json["author"]
24
27
 
25
- s.platforms = { :ios => min_ios_version_supported }
28
+ s.platforms = { :ios => ios_min_version }
26
29
  s.source = { :git => "https://github.com/software-mansion/react-native-audio-api.git", :tag => "#{s.version}" }
27
30
 
28
31
  s.subspec "audioapi" do |ss|
@@ -45,9 +48,11 @@ Pod::Spec.new do |s|
45
48
  end
46
49
  end
47
50
 
48
- s.ios.frameworks = 'CoreFoundation', 'CoreAudio', 'AudioToolbox', 'Accelerate', 'MediaPlayer', 'AVFoundation'
51
+ if worklets_enabled
52
+ s.dependency 'RNWorklets'
53
+ end
49
54
 
50
- s.compiler_flags = "#{folly_flags}"
55
+ s.ios.frameworks = 'Accelerate', 'AVFoundation', 'MediaPlayer'
51
56
 
52
57
  s.prepare_command = <<-CMD
53
58
  chmod +x scripts/download-prebuilt-binaries.sh
@@ -67,41 +72,61 @@ Pod::Spec.new do |s|
67
72
  'common/cpp/audioapi/external/ffmpeg_ios/libavutil.xcframework',
68
73
  'common/cpp/audioapi/external/ffmpeg_ios/libswresample.xcframework'
69
74
  ]
70
- s.pod_target_xcconfig = {
71
- "USE_HEADERMAP" => "YES",
72
- "CLANG_CXX_LANGUAGE_STANDARD" => "c++20",
73
- "GCC_PREPROCESSOR_DEFINITIONS" => '$(inherited) HAVE_ACCELERATE=1',
74
- "HEADER_SEARCH_PATHS" => %W[
75
- $(PODS_TARGET_SRCROOT)/common/cpp
76
- $(PODS_TARGET_SRCROOT)/ios
77
- $(PODS_ROOT)/Headers/Public/RNWorklets
78
- $(PODS_ROOT)/Headers/Private/React-Core
79
- $(PODS_TARGET_SRCROOT)/#{external_dir_relative}/include
80
- $(PODS_TARGET_SRCROOT)/#{external_dir_relative}/include/opus
81
- $(PODS_TARGET_SRCROOT)/#{external_dir_relative}/include/vorbis
82
- ].concat($RN_AUDIO_API_FFMPEG_DISABLED ? [] : ["$(PODS_TARGET_SRCROOT)/#{external_dir_relative}/ffmpeg_include"]).join(" "),
83
- 'OTHER_CFLAGS' => "$(inherited) #{folly_flags} #{fabric_flags} #{version_flag} #{worklets_preprocessor_flag} #{ffmpeg_flag}",
84
- 'OTHER_CPLUSPLUSFLAGS' => "$(inherited) #{folly_flags} #{fabric_flags} #{version_flag} #{worklets_preprocessor_flag} #{ffmpeg_flag}",
85
- }
86
-
87
- s.user_target_xcconfig = {
88
- 'OTHER_LDFLAGS' => %W[
89
- $(inherited)
90
- -force_load #{lib_dir}/libopusfile.a
91
- -force_load #{lib_dir}/libopus.a
92
- -force_load #{lib_dir}/libogg.a
93
- -force_load #{lib_dir}/libvorbis.a
94
- -force_load #{lib_dir}/libvorbisenc.a
95
- -force_load #{lib_dir}/libvorbisfile.a
96
- -force_load #{lib_dir}/libssl.a
97
- -force_load #{lib_dir}/libcrypto.a
98
- ].join(" "),
99
- 'HEADER_SEARCH_PATHS' => %W[
100
- $(inherited)
101
- $(PODS_ROOT)/Headers/Public/RNAudioAPI
102
- $(PODS_TARGET_SRCROOT)/common/cpp
103
- ].join(' ')
104
- }
75
+
76
+ s.pod_target_xcconfig = {
77
+ "USE_HEADERMAP" => "YES",
78
+ "DEFINES_MODULE" => "YES",
79
+ "HEADER_SEARCH_PATHS" => [
80
+ '"$(PODS_TARGET_SRCROOT)/ReactCommon"',
81
+ '"$(PODS_TARGET_SRCROOT)"',
82
+ '"$(PODS_ROOT)/RCT-Folly"',
83
+ '"$(PODS_ROOT)/boost"',
84
+ '"$(PODS_ROOT)/boost-for-react-native"',
85
+ '"$(PODS_ROOT)/DoubleConversion"',
86
+ '"$(PODS_ROOT)/Headers/Private/React-Core"',
87
+ '"$(PODS_ROOT)/Headers/Private/Yoga"',
88
+ "\"$(PODS_TARGET_SRCROOT)/#{external_dir_relative}/include\"",
89
+ "\"$(PODS_TARGET_SRCROOT)/#{external_dir_relative}/include/opus\"",
90
+ "\"$(PODS_TARGET_SRCROOT)/#{external_dir_relative}/include/vorbis\"",
91
+ ]
92
+ .concat($RN_AUDIO_API_FFMPEG_DISABLED ? [] : ["\"$(PODS_TARGET_SRCROOT)/#{external_dir_relative}/ffmpeg_include\""])
93
+ .concat(worklets_enabled ? ['"$(PODS_ROOT)/Headers/Public/RNWorklets"'] : [])
94
+ .join(' '),
95
+ "CLANG_CXX_LANGUAGE_STANDARD" => "c++20",
96
+ "GCC_PREPROCESSOR_DEFINITIONS" => '$(inherited) HAVE_ACCELERATE=1',
97
+ 'OTHER_CFLAGS' => "$(inherited) #{fabric_flags} #{version_flag} #{worklets_preprocessor_flag} #{ffmpeg_flag}",
98
+ }
99
+
100
+ s.xcconfig = {
101
+ "HEADER_SEARCH_PATHS" => [
102
+ '"$(PODS_ROOT)/boost"',
103
+ '"$(PODS_ROOT)/boost-for-react-native"',
104
+ '"$(PODS_ROOT)/glog"',
105
+ '"$(PODS_ROOT)/RCT-Folly"',
106
+ '"$(PODS_ROOT)/Headers/Public/React-hermes"',
107
+ '"$(PODS_ROOT)/Headers/Public/hermes-engine"',
108
+ "\"$(PODS_ROOT)/#{$audio_api_config[:react_native_common_dir]}\"",
109
+ "\"$(PODS_ROOT)/#{$audio_api_config[:dynamic_frameworks_audio_api_dir]}/ios\"",
110
+ "\"$(PODS_ROOT)/#{$audio_api_config[:dynamic_frameworks_audio_api_dir]}/common/cpp\"",
111
+ ]
112
+ .concat(worklets_enabled ? [
113
+ '"$(PODS_ROOT)/Headers/Public/RNWorklets"',
114
+ "\"$(PODS_ROOT)/#{$audio_api_config[:dynamic_frameworks_worklets_dir]}/apple\"",
115
+ "\"$(PODS_ROOT)/#{$audio_api_config[:dynamic_frameworks_worklets_dir]}/Common/cpp\""
116
+ ] : [])
117
+ .join(' '),
118
+ 'OTHER_LDFLAGS' => %W[
119
+ $(inherited)
120
+ -force_load #{lib_dir}/libopusfile.a
121
+ -force_load #{lib_dir}/libopus.a
122
+ -force_load #{lib_dir}/libogg.a
123
+ -force_load #{lib_dir}/libvorbis.a
124
+ -force_load #{lib_dir}/libvorbisenc.a
125
+ -force_load #{lib_dir}/libvorbisfile.a
126
+ -force_load #{lib_dir}/libssl.a
127
+ -force_load #{lib_dir}/libcrypto.a
128
+ ].join(" "),
129
+ }
105
130
  # Use install_modules_dependencies helper to install the dependencies if React Native version >=0.71.0.
106
131
  # See https://github.com/facebook/react-native/blob/febf6b7f33fdb4904669f99d795eba4c0f95d7bf/scripts/cocoapods/new_architecture.rb#L79.
107
132
  install_modules_dependencies(s)
@@ -164,7 +164,7 @@ Result<std::tuple<std::string, double, double>, std::string> AndroidAudioRecorde
164
164
  double outputFileSize = 0.0;
165
165
  double outputDuration = 0.0;
166
166
 
167
- if (!isRecording()) {
167
+ if (isIdle()) {
168
168
  return Result<std::tuple<std::string, double, double>, std::string>::Err(
169
169
  "Recorder is not in recording state.");
170
170
  }
@@ -1,5 +1,6 @@
1
1
  package com.swmansion.audioapi
2
2
 
3
+ import androidx.annotation.RequiresPermission
3
4
  import com.facebook.jni.HybridData
4
5
  import com.facebook.react.bridge.Arguments
5
6
  import com.facebook.react.bridge.LifecycleEventListener
@@ -149,6 +150,7 @@ class AudioAPIModule(
149
150
  }
150
151
 
151
152
  // Notification system methods
153
+ @RequiresPermission(android.Manifest.permission.POST_NOTIFICATIONS)
152
154
  override fun showNotification(
153
155
  type: String?,
154
156
  key: String?,
@@ -19,6 +19,12 @@ AudioNodeHostObject::AudioNodeHostObject(const std::shared_ptr<AudioNode> &node)
19
19
  JSI_EXPORT_FUNCTION(AudioNodeHostObject, disconnect));
20
20
  }
21
21
 
22
+ // Explicitly define destructor here, as they to exist in order to act as a
23
+ // "key function" for the audio classes - this allow for RTTI to work
24
+ // properly across dynamic library boundaries (i.e. dynamic_cast that is used by
25
+ // isHostObject method), android specific issue
26
+ AudioNodeHostObject::~AudioNodeHostObject() = default;
27
+
22
28
  JSI_PROPERTY_GETTER_IMPL(AudioNodeHostObject, numberOfInputs) {
23
29
  return {node_->getNumberOfInputs()};
24
30
  }
@@ -14,6 +14,7 @@ class AudioNode;
14
14
  class AudioNodeHostObject : public JsiHostObject {
15
15
  public:
16
16
  explicit AudioNodeHostObject(const std::shared_ptr<AudioNode> &node);
17
+ ~AudioNodeHostObject() override;
17
18
 
18
19
  JSI_PROPERTY_GETTER_DECL(numberOfInputs);
19
20
  JSI_PROPERTY_GETTER_DECL(numberOfOutputs);
@@ -62,6 +62,12 @@ BaseAudioContextHostObject::BaseAudioContextHostObject(
62
62
  JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createWaveShaper));
63
63
  }
64
64
 
65
+ // Explicitly define destructors here, as they to exist in order to act as a
66
+ // "key function" for the audio classes - this allow for RTTI to work
67
+ // properly across dynamic library boundaries (i.e. dynamic_cast that is used by
68
+ // isHostObject method), android specific issue
69
+ BaseAudioContextHostObject::~BaseAudioContextHostObject() = default;
70
+
65
71
  JSI_PROPERTY_GETTER_IMPL(BaseAudioContextHostObject, destination) {
66
72
  auto destination = std::make_shared<AudioDestinationNodeHostObject>(context_->getDestination());
67
73
  return jsi::Object::createFromHostObject(runtime, destination);
@@ -21,6 +21,8 @@ class BaseAudioContextHostObject : public JsiHostObject {
21
21
  jsi::Runtime *runtime,
22
22
  const std::shared_ptr<react::CallInvoker> &callInvoker);
23
23
 
24
+ ~BaseAudioContextHostObject() override;
25
+
24
26
  JSI_PROPERTY_GETTER_DECL(destination);
25
27
  JSI_PROPERTY_GETTER_DECL(state);
26
28
  JSI_PROPERTY_GETTER_DECL(sampleRate);
@@ -123,7 +123,28 @@ RCT_EXPORT_METHOD(
123
123
  resolve reject : (RCTPromiseRejectBlock)reject)
124
124
  {
125
125
  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
126
- auto success = [self.audioSessionManager setActive:enabled];
126
+ NSError *error = nil;
127
+
128
+ auto success = [self.audioSessionManager setActive:enabled error:&error];
129
+
130
+ if (!success) {
131
+ NSDictionary *meta = @{
132
+ @"nativeCode" : @(error.code),
133
+ @"nativeDomain" : error.domain ?: @"",
134
+ @"nativeDesc" : error.description ?: @"",
135
+ };
136
+
137
+ NSError *jsError =
138
+ [NSError errorWithDomain:@"AudioAPIModule"
139
+ code:error.code
140
+ userInfo:@{
141
+ NSLocalizedDescriptionKey : @"Failed to set audio session active state",
142
+ @"meta" : meta,
143
+ }];
144
+
145
+ reject(@"E_AUDIO_SESSION", @"Failed to set audio session active state", jsError);
146
+ return;
147
+ }
127
148
 
128
149
  resolve(@(success));
129
150
  });
@@ -38,7 +38,7 @@ static AudioEngine *_sharedInstance = nil;
38
38
  self.sourceFormats = nil;
39
39
  self.inputNode = nil;
40
40
 
41
- [self.sessionManager setActive:false];
41
+ [self.sessionManager setActive:false error:nil];
42
42
  self.sessionManager = nil;
43
43
  }
44
44
 
@@ -182,7 +182,9 @@ static AudioEngine *_sharedInstance = nil;
182
182
  return true;
183
183
  }
184
184
 
185
- if (![self.sessionManager setActive:true]) {
185
+ if (![self.sessionManager setActive:true error:&error]) {
186
+ // TODO: return user facing error
187
+ NSLog(@"Error while activating audio session: %@", [error debugDescription]);
186
188
  return false;
187
189
  }
188
190
 
@@ -28,7 +28,7 @@
28
28
  options:(NSArray *)options
29
29
  allowHaptics:(BOOL)allowHaptics;
30
30
 
31
- - (bool)setActive:(bool)active;
31
+ - (bool)setActive:(bool)active error:(NSError **)error;
32
32
  - (void)markInactive;
33
33
  - (void)disableSessionManagement;
34
34
 
@@ -109,15 +109,14 @@ static AudioSessionManager *_sharedInstance = nil;
109
109
  }
110
110
  }
111
111
 
112
- - (bool)setActive:(bool)active
112
+ - (bool)setActive:(bool)active error:(NSError **)error
113
113
  {
114
+ bool success = false;
115
+
114
116
  if (!self.shouldManageSession) {
115
117
  return true;
116
118
  }
117
119
 
118
- NSError *error = nil;
119
- bool success = false;
120
-
121
120
  if (self.isActive == active) {
122
121
  return true;
123
122
  }
@@ -130,18 +129,12 @@ static AudioSessionManager *_sharedInstance = nil;
130
129
  }
131
130
  }
132
131
 
133
- success = [self.audioSession setActive:active error:&error];
132
+ success = [self.audioSession setActive:active error:error];
134
133
 
135
134
  if (success) {
136
135
  self.isActive = active;
137
136
  }
138
137
 
139
- if (error != nil) {
140
- NSLog(@"[AudioSessionManager] setting session as %@ failed", active ? @"ACTIVE" : @"INACTIVE");
141
- } else {
142
- NSLog(@"[AudioSessionManager] session is %@", active ? @"ACTIVE" : @"INACTIVE");
143
- }
144
-
145
138
  return success;
146
139
  }
147
140
 
@@ -44,7 +44,7 @@ const withForegroundService = (config, {
44
44
  const SFTypes = androidFSTypes.join('|');
45
45
  const serviceElement = {
46
46
  $: {
47
- 'android:name': 'com.swmansion.audioapi.system.MediaNotificationManager$AudioForegroundService',
47
+ 'android:name': 'com.swmansion.audioapi.system.CentralizedForegroundService',
48
48
  'android:stopWithTask': 'true',
49
49
  'android:foregroundServiceType': SFTypes
50
50
  },
@@ -53,6 +53,11 @@ const withForegroundService = (config, {
53
53
  if (!mainApplication.service) {
54
54
  mainApplication.service = [];
55
55
  }
56
+ const existingServiceIndex = mainApplication.service.findIndex(service => service.$['android:name'].includes(serviceElement.$['android:name']));
57
+ if (existingServiceIndex !== -1) {
58
+ mainApplication.service[existingServiceIndex] = serviceElement;
59
+ return mod;
60
+ }
56
61
  mainApplication.service.push(serviceElement);
57
62
  return mod;
58
63
  });
@@ -1 +1 @@
1
- {"version":3,"names":["_configPlugins","require","pkg","withDefaultOptions","options","iosBackgroundMode","androidPermissions","androidForegroundService","androidFSTypes","disableFFmpeg","withBackgroundAudio","config","withInfoPlist","iosConfig","modResults","UIBackgroundModes","Array","from","Set","withIosMicrophonePermission","iosMicrophonePermission","NSMicrophoneUsageDescription","withAndroidPermissions","AndroidConfig","Permissions","withPermissions","withForegroundService","withAndroidManifest","mod","manifest","mainApplication","Manifest","getMainApplicationOrThrow","SFTypes","join","serviceElement","$","intentFilter","service","push","withFFmpegConfig","iosConf","withPodfile","contents","ffmpegRegex","podfileString","search","endsWith","replace","finalConf","withGradleProperties","gradleProperties","existingIndex","findIndex","prop","type","key","splice","value","withAudioAPI","optionsIn","undefined","_default","exports","default","createRunOncePlugin","name","version"],"sourceRoot":"../../../src","sources":["plugin/withAudioAPI.ts"],"mappings":";;;;;;AAAA,IAAAA,cAAA,GAAAC,OAAA;AASA,MAAMC,GAAG,GAAGD,OAAO,CAAC,qCAAqC,CAAC;AAW1D,MAAME,kBAAkB,GAAIC,OAAyB,IAAc;EACjE,OAAO;IACLC,iBAAiB,EAAE,IAAI;IACvBC,kBAAkB,EAAE,CAClB,uCAAuC,EACvC,sDAAsD,CACvD;IACDC,wBAAwB,EAAE,IAAI;IAC9BC,cAAc,EAAE,CAAC,eAAe,CAAC;IACjCC,aAAa,EAAE,KAAK;IACpB,GAAGL;EACL,CAAC;AACH,CAAC;AAED,MAAMM,mBAAiC,GAAIC,MAAM,IAAK;EACpD,OAAO,IAAAC,4BAAa,EAACD,MAAM,EAAGE,SAAS,IAAK;IAC1CA,SAAS,CAACC,UAAU,CAACC,iBAAiB,GAAG,CACvC,GAAGC,KAAK,CAACC,IAAI,CACX,IAAIC,GAAG,CAAC,CAAC,IAAIL,SAAS,CAACC,UAAU,CAACC,iBAAiB,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,CACtE,CAAC,CACF;IAED,OAAOF,SAAS;EAClB,CAAC,CAAC;AACJ,CAAC;AAED,MAAMM,2BAAkD,GAAGA,CACzDR,MAAM,EACN;EAAES;AAAwB,CAAC,KACxB;EACH,OAAO,IAAAR,4BAAa,EAACD,MAAM,EAAGE,SAAS,IAAK;IAC1CA,SAAS,CAACC,UAAU,CAACO,4BAA4B,GAAGD,uBAAuB;IAC3E,OAAOP,SAAS;EAClB,CAAC,CAAC;AACJ,CAAC;AAED,MAAMS,sBAA6C,GAAGA,CACpDX,MAAM,EACN;EAAEL;AAA4B,CAAC,KAC5B;EACH,OAAOiB,4BAAa,CAACC,WAAW,CAACC,eAAe,CAACd,MAAM,EAAEL,kBAAkB,CAAC;AAC9E,CAAC;AAED,MAAMoB,qBAA4C,GAAGA,CACnDf,MAAM,EACN;EAAEH;AAAwB,CAAC,KACxB;EACH,OAAO,IAAAmB,kCAAmB,EAAChB,MAAM,EAAGiB,GAAG,IAAK;IAC1C,MAAMC,QAAQ,GAAGD,GAAG,CAACd,UAAU;IAC/B,MAAMgB,eAAe,GACnBP,4BAAa,CAACQ,QAAQ,CAACC,yBAAyB,CAACH,QAAQ,CAAC;IAE5D,MAAMI,OAAO,GAAGzB,cAAc,CAAC0B,IAAI,CAAC,GAAG,CAAC;IAExC,MAAMC,cAAc,GAAG;MACrBC,CAAC,EAAE;QACD,cAAc,EACZ,+EAA+E;QACjF,sBAAsB,EAAE,MAAM;QAC9B,+BAA+B,EAAEH;MACnC,CAAC;MACDI,YAAY,EAAE;IAChB,CAAC;IAED,IAAI,CAACP,eAAe,CAACQ,OAAO,EAAE;MAC5BR,eAAe,CAACQ,OAAO,GAAG,EAAE;IAC9B;IAEAR,eAAe,CAACQ,OAAO,CAACC,IAAI,CAACJ,cAAc,CAAC;IAE5C,OAAOP,GAAG;EACZ,CAAC,CAAC;AACJ,CAAC;AAED,MAAMY,gBAAuC,GAAGA,CAAC7B,MAAM,EAAEP,OAAO,KAAK;EACnE,MAAMqC,OAAO,GAAG,IAAAC,0BAAW,EAAC/B,MAAM,EAAGiB,GAAG,IAAK;IAC3C,IAAIe,QAAQ,GAAGf,GAAG,CAACd,UAAU,CAAC6B,QAAQ;IACtC,MAAMC,WAAW,GAAG,0CAA0C;IAC9D,MAAMC,aAAa,GAAGzC,OAAO,CAACK,aAAa,GACvC,sCAAsC,GACtC,EAAE;IACN;IACA,IAAIkC,QAAQ,CAACG,MAAM,CAACF,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE;MACvC,IAAIxC,OAAO,CAACK,aAAa,EAAE;QACzB,IAAIkC,QAAQ,CAACI,QAAQ,CAAC,IAAI,CAAC,EAAE;UAC3BJ,QAAQ,GAAG,GAAGA,QAAQ,GAAGE,aAAa,EAAE;QAC1C,CAAC,MAAM;UACLF,QAAQ,GAAG,GAAGA,QAAQ,KAAKE,aAAa,EAAE;QAC5C;QACAjB,GAAG,CAACd,UAAU,CAAC6B,QAAQ,GAAGA,QAAQ;MACpC;IACF,CAAC,MAAM;MACL;MACAA,QAAQ,GAAGA,QAAQ,CAACK,OAAO,CAACJ,WAAW,EAAEC,aAAa,CAAC;IACzD;IAEAjB,GAAG,CAACd,UAAU,CAAC6B,QAAQ,GAAGA,QAAQ;IAClC,OAAOf,GAAG;EACZ,CAAC,CAAC;EAEF,MAAMqB,SAAS,GAAG,IAAAC,mCAAoB,EAACT,OAAO,EAAGb,GAAG,IAAK;IACvD,MAAMuB,gBAAgB,GAAGvB,GAAG,CAACd,UAAU;IAEvC,MAAMsC,aAAa,GAAGD,gBAAgB,CAACE,SAAS,CAC7CC,IAAI,IAAKA,IAAI,CAACC,IAAI,KAAK,UAAU,IAAID,IAAI,CAACE,GAAG,KAAK,uBACrD,CAAC;IACD,IAAIJ,aAAa,KAAK,CAAC,CAAC,EAAE;MACxBD,gBAAgB,CAACM,MAAM,CAACL,aAAa,EAAE,CAAC,CAAC;IAC3C,CAAC,MAAM,IAAI,CAAChD,OAAO,CAACK,aAAa,EAAE;MACjC;MACA,OAAOmB,GAAG;IACZ;IAEA,IAAIxB,OAAO,CAACK,aAAa,EAAE;MACzB0C,gBAAgB,CAACZ,IAAI,CAAC;QACpBgB,IAAI,EAAE,UAAU;QAChBC,GAAG,EAAE,uBAAuB;QAC5BE,KAAK,EAAEtD,OAAO,CAACK,aAAa,GAAG,MAAM,GAAG;MAC1C,CAAC,CAAC;IACJ;IAEA,OAAOmB,GAAG;EACZ,CAAC,CAAC;EAEF,OAAOqB,SAAS;AAClB,CAAC;AAED,MAAMU,YAAmC,GAAGA,CAAChD,MAAM,EAAEiD,SAAS,KAAK;EACjE,MAAMxD,OAAO,GAAGD,kBAAkB,CAACyD,SAAS,IAAI,CAAC,CAAC,CAAC;EAEnD,IAAIxD,OAAO,CAACC,iBAAiB,EAAE;IAC7BM,MAAM,GAAGD,mBAAmB,CAACC,MAAM,CAAC;EACtC;EAEAA,MAAM,GAAGW,sBAAsB,CAACX,MAAM,EAAEP,OAAO,CAAC;EAEhD,IAAIA,OAAO,CAACG,wBAAwB,EAAE;IACpCI,MAAM,GAAGe,qBAAqB,CAACf,MAAM,EAAEP,OAAO,CAAC;EACjD;EAEA,IAAIA,OAAO,CAACgB,uBAAuB,EAAE;IACnCT,MAAM,GAAGQ,2BAA2B,CAACR,MAAM,EAAEP,OAAO,CAAC;EACvD;EAEA,IAAIA,OAAO,CAACK,aAAa,KAAKoD,SAAS,EAAE;IACvClD,MAAM,GAAG6B,gBAAgB,CAAC7B,MAAM,EAAEP,OAAO,CAAC;EAC5C;EAEA,OAAOO,MAAM;AACf,CAAC;AAAC,IAAAmD,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEa,IAAAC,kCAAmB,EAACN,YAAY,EAAEzD,GAAG,CAACgE,IAAI,EAAEhE,GAAG,CAACiE,OAAO,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_configPlugins","require","pkg","withDefaultOptions","options","iosBackgroundMode","androidPermissions","androidForegroundService","androidFSTypes","disableFFmpeg","withBackgroundAudio","config","withInfoPlist","iosConfig","modResults","UIBackgroundModes","Array","from","Set","withIosMicrophonePermission","iosMicrophonePermission","NSMicrophoneUsageDescription","withAndroidPermissions","AndroidConfig","Permissions","withPermissions","withForegroundService","withAndroidManifest","mod","manifest","mainApplication","Manifest","getMainApplicationOrThrow","SFTypes","join","serviceElement","$","intentFilter","service","existingServiceIndex","findIndex","includes","push","withFFmpegConfig","iosConf","withPodfile","contents","ffmpegRegex","podfileString","search","endsWith","replace","finalConf","withGradleProperties","gradleProperties","existingIndex","prop","type","key","splice","value","withAudioAPI","optionsIn","undefined","_default","exports","default","createRunOncePlugin","name","version"],"sourceRoot":"../../../src","sources":["plugin/withAudioAPI.ts"],"mappings":";;;;;;AAAA,IAAAA,cAAA,GAAAC,OAAA;AASA,MAAMC,GAAG,GAAGD,OAAO,CAAC,qCAAqC,CAAC;AAW1D,MAAME,kBAAkB,GAAIC,OAAyB,IAAc;EACjE,OAAO;IACLC,iBAAiB,EAAE,IAAI;IACvBC,kBAAkB,EAAE,CAClB,uCAAuC,EACvC,sDAAsD,CACvD;IACDC,wBAAwB,EAAE,IAAI;IAC9BC,cAAc,EAAE,CAAC,eAAe,CAAC;IACjCC,aAAa,EAAE,KAAK;IACpB,GAAGL;EACL,CAAC;AACH,CAAC;AAED,MAAMM,mBAAiC,GAAIC,MAAM,IAAK;EACpD,OAAO,IAAAC,4BAAa,EAACD,MAAM,EAAGE,SAAS,IAAK;IAC1CA,SAAS,CAACC,UAAU,CAACC,iBAAiB,GAAG,CACvC,GAAGC,KAAK,CAACC,IAAI,CACX,IAAIC,GAAG,CAAC,CAAC,IAAIL,SAAS,CAACC,UAAU,CAACC,iBAAiB,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,CACtE,CAAC,CACF;IAED,OAAOF,SAAS;EAClB,CAAC,CAAC;AACJ,CAAC;AAED,MAAMM,2BAAkD,GAAGA,CACzDR,MAAM,EACN;EAAES;AAAwB,CAAC,KACxB;EACH,OAAO,IAAAR,4BAAa,EAACD,MAAM,EAAGE,SAAS,IAAK;IAC1CA,SAAS,CAACC,UAAU,CAACO,4BAA4B,GAAGD,uBAAuB;IAC3E,OAAOP,SAAS;EAClB,CAAC,CAAC;AACJ,CAAC;AAED,MAAMS,sBAA6C,GAAGA,CACpDX,MAAM,EACN;EAAEL;AAA4B,CAAC,KAC5B;EACH,OAAOiB,4BAAa,CAACC,WAAW,CAACC,eAAe,CAACd,MAAM,EAAEL,kBAAkB,CAAC;AAC9E,CAAC;AAED,MAAMoB,qBAA4C,GAAGA,CACnDf,MAAM,EACN;EAAEH;AAAwB,CAAC,KACxB;EACH,OAAO,IAAAmB,kCAAmB,EAAChB,MAAM,EAAGiB,GAAG,IAAK;IAC1C,MAAMC,QAAQ,GAAGD,GAAG,CAACd,UAAU;IAC/B,MAAMgB,eAAe,GACnBP,4BAAa,CAACQ,QAAQ,CAACC,yBAAyB,CAACH,QAAQ,CAAC;IAE5D,MAAMI,OAAO,GAAGzB,cAAc,CAAC0B,IAAI,CAAC,GAAG,CAAC;IAExC,MAAMC,cAAc,GAAG;MACrBC,CAAC,EAAE;QACD,cAAc,EACZ,4DAA4D;QAC9D,sBAAsB,EAAE,MAAM;QAC9B,+BAA+B,EAAEH;MACnC,CAAC;MACDI,YAAY,EAAE;IAChB,CAAC;IAED,IAAI,CAACP,eAAe,CAACQ,OAAO,EAAE;MAC5BR,eAAe,CAACQ,OAAO,GAAG,EAAE;IAC9B;IAEA,MAAMC,oBAAoB,GAAGT,eAAe,CAACQ,OAAO,CAACE,SAAS,CAAEF,OAAO,IACrEA,OAAO,CAACF,CAAC,CAAC,cAAc,CAAC,CAACK,QAAQ,CAACN,cAAc,CAACC,CAAC,CAAC,cAAc,CAAC,CACrE,CAAC;IAED,IAAIG,oBAAoB,KAAK,CAAC,CAAC,EAAE;MAC/BT,eAAe,CAACQ,OAAO,CAACC,oBAAoB,CAAC,GAAGJ,cAAc;MAC9D,OAAOP,GAAG;IACZ;IAEAE,eAAe,CAACQ,OAAO,CAACI,IAAI,CAACP,cAAc,CAAC;IAC5C,OAAOP,GAAG;EACZ,CAAC,CAAC;AACJ,CAAC;AAED,MAAMe,gBAAuC,GAAGA,CAAChC,MAAM,EAAEP,OAAO,KAAK;EACnE,MAAMwC,OAAO,GAAG,IAAAC,0BAAW,EAAClC,MAAM,EAAGiB,GAAG,IAAK;IAC3C,IAAIkB,QAAQ,GAAGlB,GAAG,CAACd,UAAU,CAACgC,QAAQ;IACtC,MAAMC,WAAW,GAAG,0CAA0C;IAC9D,MAAMC,aAAa,GAAG5C,OAAO,CAACK,aAAa,GACvC,sCAAsC,GACtC,EAAE;IACN;IACA,IAAIqC,QAAQ,CAACG,MAAM,CAACF,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE;MACvC,IAAI3C,OAAO,CAACK,aAAa,EAAE;QACzB,IAAIqC,QAAQ,CAACI,QAAQ,CAAC,IAAI,CAAC,EAAE;UAC3BJ,QAAQ,GAAG,GAAGA,QAAQ,GAAGE,aAAa,EAAE;QAC1C,CAAC,MAAM;UACLF,QAAQ,GAAG,GAAGA,QAAQ,KAAKE,aAAa,EAAE;QAC5C;QACApB,GAAG,CAACd,UAAU,CAACgC,QAAQ,GAAGA,QAAQ;MACpC;IACF,CAAC,MAAM;MACL;MACAA,QAAQ,GAAGA,QAAQ,CAACK,OAAO,CAACJ,WAAW,EAAEC,aAAa,CAAC;IACzD;IAEApB,GAAG,CAACd,UAAU,CAACgC,QAAQ,GAAGA,QAAQ;IAClC,OAAOlB,GAAG;EACZ,CAAC,CAAC;EAEF,MAAMwB,SAAS,GAAG,IAAAC,mCAAoB,EAACT,OAAO,EAAGhB,GAAG,IAAK;IACvD,MAAM0B,gBAAgB,GAAG1B,GAAG,CAACd,UAAU;IAEvC,MAAMyC,aAAa,GAAGD,gBAAgB,CAACd,SAAS,CAC7CgB,IAAI,IAAKA,IAAI,CAACC,IAAI,KAAK,UAAU,IAAID,IAAI,CAACE,GAAG,KAAK,uBACrD,CAAC;IACD,IAAIH,aAAa,KAAK,CAAC,CAAC,EAAE;MACxBD,gBAAgB,CAACK,MAAM,CAACJ,aAAa,EAAE,CAAC,CAAC;IAC3C,CAAC,MAAM,IAAI,CAACnD,OAAO,CAACK,aAAa,EAAE;MACjC;MACA,OAAOmB,GAAG;IACZ;IAEA,IAAIxB,OAAO,CAACK,aAAa,EAAE;MACzB6C,gBAAgB,CAACZ,IAAI,CAAC;QACpBe,IAAI,EAAE,UAAU;QAChBC,GAAG,EAAE,uBAAuB;QAC5BE,KAAK,EAAExD,OAAO,CAACK,aAAa,GAAG,MAAM,GAAG;MAC1C,CAAC,CAAC;IACJ;IAEA,OAAOmB,GAAG;EACZ,CAAC,CAAC;EAEF,OAAOwB,SAAS;AAClB,CAAC;AAED,MAAMS,YAAmC,GAAGA,CAAClD,MAAM,EAAEmD,SAAS,KAAK;EACjE,MAAM1D,OAAO,GAAGD,kBAAkB,CAAC2D,SAAS,IAAI,CAAC,CAAC,CAAC;EAEnD,IAAI1D,OAAO,CAACC,iBAAiB,EAAE;IAC7BM,MAAM,GAAGD,mBAAmB,CAACC,MAAM,CAAC;EACtC;EAEAA,MAAM,GAAGW,sBAAsB,CAACX,MAAM,EAAEP,OAAO,CAAC;EAEhD,IAAIA,OAAO,CAACG,wBAAwB,EAAE;IACpCI,MAAM,GAAGe,qBAAqB,CAACf,MAAM,EAAEP,OAAO,CAAC;EACjD;EAEA,IAAIA,OAAO,CAACgB,uBAAuB,EAAE;IACnCT,MAAM,GAAGQ,2BAA2B,CAACR,MAAM,EAAEP,OAAO,CAAC;EACvD;EAEA,IAAIA,OAAO,CAACK,aAAa,KAAKsD,SAAS,EAAE;IACvCpD,MAAM,GAAGgC,gBAAgB,CAAChC,MAAM,EAAEP,OAAO,CAAC;EAC5C;EAEA,OAAOO,MAAM;AACf,CAAC;AAAC,IAAAqD,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEa,IAAAC,kCAAmB,EAACN,YAAY,EAAE3D,GAAG,CAACkE,IAAI,EAAElE,GAAG,CAACmE,OAAO,CAAC","ignoreList":[]}
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _events = require("../events");
8
8
  var _specs = require("../specs");
9
+ var _errors = require("./errors");
9
10
  class AudioManager {
10
11
  constructor() {
11
12
  this.audioEventEmitter = new _events.AudioEventEmitter(global.AudioEventEmitter);
@@ -13,8 +14,13 @@ class AudioManager {
13
14
  getDevicePreferredSampleRate() {
14
15
  return _specs.NativeAudioAPIModule.getDevicePreferredSampleRate();
15
16
  }
16
- setAudioSessionActivity(enabled) {
17
- return _specs.NativeAudioAPIModule.setAudioSessionActivity(enabled);
17
+ async setAudioSessionActivity(enabled) {
18
+ try {
19
+ const success = await _specs.NativeAudioAPIModule.setAudioSessionActivity(enabled);
20
+ return success;
21
+ } catch (error) {
22
+ throw (0, _errors.parseNativeError)(error);
23
+ }
18
24
  }
19
25
  setAudioSessionOptions(options) {
20
26
  _specs.NativeAudioAPIModule.setAudioSessionOptions(options.iosCategory ?? '', options.iosMode ?? '', options.iosOptions ?? [], options.iosAllowHaptics ?? false);
@@ -1 +1 @@
1
- {"version":3,"names":["_events","require","_specs","AudioManager","constructor","audioEventEmitter","AudioEventEmitter","global","getDevicePreferredSampleRate","NativeAudioAPIModule","setAudioSessionActivity","enabled","setAudioSessionOptions","options","iosCategory","iosMode","iosOptions","iosAllowHaptics","disableSessionManagement","observeAudioInterruptions","activelyReclaimSession","observeVolumeChanges","addSystemEventListener","name","callback","addAudioEventListener","requestRecordingPermissions","checkRecordingPermissions","requestNotificationPermissions","checkNotificationPermissions","getDevicesInfo","_default","exports","default"],"sourceRoot":"../../../src","sources":["system/AudioManager.ts"],"mappings":";;;;;;AAOA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAEA,MAAME,YAAY,CAA0B;EAE1CC,WAAWA,CAAA,EAAG;IACZ,IAAI,CAACC,iBAAiB,GAAG,IAAIC,yBAAiB,CAACC,MAAM,CAACD,iBAAiB,CAAC;EAC1E;EAEAE,4BAA4BA,CAAA,EAAW;IACrC,OAAOC,2BAAoB,CAACD,4BAA4B,CAAC,CAAC;EAC5D;EAEAE,uBAAuBA,CAACC,OAAgB,EAAoB;IAC1D,OAAOF,2BAAoB,CAACC,uBAAuB,CAACC,OAAO,CAAC;EAC9D;EAEAC,sBAAsBA,CAACC,OAAuB,EAAE;IAC9CJ,2BAAoB,CAACG,sBAAsB,CACzCC,OAAO,CAACC,WAAW,IAAI,EAAE,EACzBD,OAAO,CAACE,OAAO,IAAI,EAAE,EACrBF,OAAO,CAACG,UAAU,IAAI,EAAE,EACxBH,OAAO,CAACI,eAAe,IAAI,KAC7B,CAAC;EACH;EAEAC,wBAAwBA,CAAA,EAAG;IACzBT,2BAAoB,CAACS,wBAAwB,CAAC,CAAC;EACjD;EAEAC,yBAAyBA,CAACR,OAAgB,EAAE;IAC1CF,2BAAoB,CAACU,yBAAyB,CAACR,OAAO,CAAC;EACzD;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACES,sBAAsBA,CAACT,OAAgB,EAAE;IACvCF,2BAAoB,CAACW,sBAAsB,CAACT,OAAO,CAAC;EACtD;EAEAU,oBAAoBA,CAACV,OAAgB,EAAE;IACrCF,2BAAoB,CAACY,oBAAoB,CAACV,OAAO,CAAC;EACpD;EAEAW,sBAAsBA,CACpBC,IAAU,EACVC,QAAmC,EACX;IACxB,OAAO,IAAI,CAACnB,iBAAiB,CAACoB,qBAAqB,CAACF,IAAI,EAAEC,QAAQ,CAAC;EACrE;EAEA,MAAME,2BAA2BA,CAAA,EAA8B;IAC7D,OAAOjB,2BAAoB,CAACiB,2BAA2B,CAAC,CAAC;EAC3D;EAEA,MAAMC,yBAAyBA,CAAA,EAA8B;IAC3D,OAAOlB,2BAAoB,CAACkB,yBAAyB,CAAC,CAAC;EACzD;EAEA,MAAMC,8BAA8BA,CAAA,EAA8B;IAChE,OAAOnB,2BAAoB,CAACmB,8BAA8B,CAAC,CAAC;EAC9D;EAEA,MAAMC,4BAA4BA,CAAA,EAA8B;IAC9D,OAAOpB,2BAAoB,CAACoB,4BAA4B,CAAC,CAAC;EAC5D;EAEA,MAAMC,cAAcA,CAAA,EAA8B;IAChD,OAAOrB,2BAAoB,CAACqB,cAAc,CAAC,CAAC;EAC9C;AACF;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEc,IAAI9B,YAAY,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_events","require","_specs","_errors","AudioManager","constructor","audioEventEmitter","AudioEventEmitter","global","getDevicePreferredSampleRate","NativeAudioAPIModule","setAudioSessionActivity","enabled","success","error","parseNativeError","setAudioSessionOptions","options","iosCategory","iosMode","iosOptions","iosAllowHaptics","disableSessionManagement","observeAudioInterruptions","activelyReclaimSession","observeVolumeChanges","addSystemEventListener","name","callback","addAudioEventListener","requestRecordingPermissions","checkRecordingPermissions","requestNotificationPermissions","checkNotificationPermissions","getDevicesInfo","_default","exports","default"],"sourceRoot":"../../../src","sources":["system/AudioManager.ts"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AAQA,MAAMG,YAAY,CAA0B;EAE1CC,WAAWA,CAAA,EAAG;IACZ,IAAI,CAACC,iBAAiB,GAAG,IAAIC,yBAAiB,CAACC,MAAM,CAACD,iBAAiB,CAAC;EAC1E;EAEAE,4BAA4BA,CAAA,EAAW;IACrC,OAAOC,2BAAoB,CAACD,4BAA4B,CAAC,CAAC;EAC5D;EAEA,MAAME,uBAAuBA,CAACC,OAAgB,EAAoB;IAChE,IAAI;MACF,MAAMC,OAAO,GACX,MAAMH,2BAAoB,CAACC,uBAAuB,CAACC,OAAO,CAAC;MAE7D,OAAOC,OAAO;IAChB,CAAC,CAAC,OAAOC,KAAK,EAAE;MACd,MAAM,IAAAC,wBAAgB,EAACD,KAAK,CAAC;IAC/B;EACF;EAEAE,sBAAsBA,CAACC,OAAuB,EAAE;IAC9CP,2BAAoB,CAACM,sBAAsB,CACzCC,OAAO,CAACC,WAAW,IAAI,EAAE,EACzBD,OAAO,CAACE,OAAO,IAAI,EAAE,EACrBF,OAAO,CAACG,UAAU,IAAI,EAAE,EACxBH,OAAO,CAACI,eAAe,IAAI,KAC7B,CAAC;EACH;EAEAC,wBAAwBA,CAAA,EAAG;IACzBZ,2BAAoB,CAACY,wBAAwB,CAAC,CAAC;EACjD;EAEAC,yBAAyBA,CAACX,OAAgB,EAAE;IAC1CF,2BAAoB,CAACa,yBAAyB,CAACX,OAAO,CAAC;EACzD;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEY,sBAAsBA,CAACZ,OAAgB,EAAE;IACvCF,2BAAoB,CAACc,sBAAsB,CAACZ,OAAO,CAAC;EACtD;EAEAa,oBAAoBA,CAACb,OAAgB,EAAE;IACrCF,2BAAoB,CAACe,oBAAoB,CAACb,OAAO,CAAC;EACpD;EAEAc,sBAAsBA,CACpBC,IAAU,EACVC,QAAmC,EACX;IACxB,OAAO,IAAI,CAACtB,iBAAiB,CAACuB,qBAAqB,CAACF,IAAI,EAAEC,QAAQ,CAAC;EACrE;EAEA,MAAME,2BAA2BA,CAAA,EAA8B;IAC7D,OAAOpB,2BAAoB,CAACoB,2BAA2B,CAAC,CAAC;EAC3D;EAEA,MAAMC,yBAAyBA,CAAA,EAA8B;IAC3D,OAAOrB,2BAAoB,CAACqB,yBAAyB,CAAC,CAAC;EACzD;EAEA,MAAMC,8BAA8BA,CAAA,EAA8B;IAChE,OAAOtB,2BAAoB,CAACsB,8BAA8B,CAAC,CAAC;EAC9D;EAEA,MAAMC,4BAA4BA,CAAA,EAA8B;IAC9D,OAAOvB,2BAAoB,CAACuB,4BAA4B,CAAC,CAAC;EAC5D;EAEA,MAAMC,cAAcA,CAAA,EAA8B;IAChD,OAAOxB,2BAAoB,CAACwB,cAAc,CAAC,CAAC;EAC9C;AACF;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEc,IAAIjC,YAAY,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.SessionActivationError = void 0;
7
+ exports.parseNativeError = parseNativeError;
8
+ var _errors = require("../errors");
9
+ function parseNativeCode(code) {
10
+ switch (code) {
11
+ case 0:
12
+ return 'NoError';
13
+ case -50:
14
+ return 'BadParam';
15
+ case 1836282486:
16
+ return 'MediaServicesFailed';
17
+ case 560030580:
18
+ return 'IsBusy';
19
+ case 560161140:
20
+ return 'IncompatibleCategory';
21
+ case 560557684:
22
+ return 'CannotInterruptOthers';
23
+ case 1701737535:
24
+ return 'MissingEntitlement';
25
+ case 1936290409:
26
+ return 'SiriIsRecording';
27
+ case 561015905:
28
+ return 'CannotStartPlaying';
29
+ case 561145187:
30
+ return 'CannotStartRecording';
31
+ case 561017449:
32
+ return 'InsufficientPriority';
33
+ case 561145203:
34
+ return 'ResourceNotAvailable';
35
+ case 2003329396:
36
+ return 'Unspecified';
37
+ case 561210739:
38
+ return 'ExpiredSession';
39
+ case 1768841571:
40
+ return 'SessionNotActive';
41
+ default:
42
+ return 'NoError';
43
+ }
44
+ }
45
+ class SessionActivationError extends _errors.AudioApiError {
46
+ constructor(nativeErrorInfo) {
47
+ if (!nativeErrorInfo) {
48
+ super('Failed to activate audio session with unknown error');
49
+ this.name = 'SessionActivationError';
50
+ return;
51
+ }
52
+ const codeName = parseNativeCode(nativeErrorInfo.nativeCode);
53
+ super(`[${codeName}] Failed to activate audio session, code: ${nativeErrorInfo.nativeCode}`);
54
+ this.name = 'SessionActivationError';
55
+ this.nativeErrorInfo = nativeErrorInfo;
56
+ }
57
+ }
58
+ exports.SessionActivationError = SessionActivationError;
59
+ function parseNativeError(error) {
60
+ const errorMeta = error?.userInfo?.meta ?? error?.nativeError?.userInfo?.meta ?? error?.details?.meta;
61
+ console.log('Parsed error meta:', errorMeta);
62
+ if (!errorMeta || typeof errorMeta !== 'object') {
63
+ return new SessionActivationError();
64
+ }
65
+ const {
66
+ nativeCode,
67
+ nativeDesc,
68
+ nativeDomain
69
+ } = errorMeta;
70
+ if (isNaN(nativeCode) || !nativeDesc || !nativeDomain) {
71
+ return new SessionActivationError();
72
+ }
73
+ return new SessionActivationError({
74
+ nativeCode,
75
+ nativeDesc,
76
+ nativeDomain
77
+ });
78
+ }
79
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_errors","require","parseNativeCode","code","SessionActivationError","AudioApiError","constructor","nativeErrorInfo","name","codeName","nativeCode","exports","parseNativeError","error","errorMeta","userInfo","meta","nativeError","details","console","log","nativeDesc","nativeDomain","isNaN"],"sourceRoot":"../../../src","sources":["system/errors.ts"],"mappings":";;;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AA4BA,SAASC,eAAeA,CAACC,IAAY,EAAU;EAC7C,QAAQA,IAAI;IACV,KAAK,CAAC;MACJ,OAAO,SAAS;IAClB,KAAK,CAAC,EAAE;MACN,OAAO,UAAU;IACnB,KAAK,UAAU;MACb,OAAO,qBAAqB;IAC9B,KAAK,SAAS;MACZ,OAAO,QAAQ;IACjB,KAAK,SAAS;MACZ,OAAO,sBAAsB;IAC/B,KAAK,SAAS;MACZ,OAAO,uBAAuB;IAChC,KAAK,UAAU;MACb,OAAO,oBAAoB;IAC7B,KAAK,UAAU;MACb,OAAO,iBAAiB;IAC1B,KAAK,SAAS;MACZ,OAAO,oBAAoB;IAC7B,KAAK,SAAS;MACZ,OAAO,sBAAsB;IAC/B,KAAK,SAAS;MACZ,OAAO,sBAAsB;IAC/B,KAAK,SAAS;MACZ,OAAO,sBAAsB;IAC/B,KAAK,UAAU;MACb,OAAO,aAAa;IACtB,KAAK,SAAS;MACZ,OAAO,gBAAgB;IACzB,KAAK,UAAU;MACb,OAAO,kBAAkB;IAC3B;MACE,OAAO,SAAS;EACpB;AACF;AAEO,MAAMC,sBAAsB,SAASC,qBAAa,CAAC;EAGxDC,WAAWA,CAACC,eAA+C,EAAE;IAC3D,IAAI,CAACA,eAAe,EAAE;MACpB,KAAK,CAAC,qDAAqD,CAAC;MAC5D,IAAI,CAACC,IAAI,GAAG,wBAAwB;MACpC;IACF;IAEA,MAAMC,QAAQ,GAAGP,eAAe,CAACK,eAAe,CAACG,UAAU,CAAC;IAE5D,KAAK,CACH,IAAID,QAAQ,6CAA6CF,eAAe,CAACG,UAAU,EACrF,CAAC;IAED,IAAI,CAACF,IAAI,GAAG,wBAAwB;IACpC,IAAI,CAACD,eAAe,GAAGA,eAAe;EACxC;AACF;AAACI,OAAA,CAAAP,sBAAA,GAAAA,sBAAA;AAEM,SAASQ,gBAAgBA,CAACC,KAAc,EAA0B;EACvE,MAAMC,SAAS,GACZD,KAAK,EAAwBE,QAAQ,EAAEC,IAAI,IAC3CH,KAAK,EAA2BI,WAAW,EAAEF,QAAQ,EAAEC,IAAI,IAC3DH,KAAK,EAAuBK,OAAO,EAAEF,IAAI;EAE5CG,OAAO,CAACC,GAAG,CAAC,oBAAoB,EAAEN,SAAS,CAAC;EAE5C,IAAI,CAACA,SAAS,IAAI,OAAOA,SAAS,KAAK,QAAQ,EAAE;IAC/C,OAAO,IAAIV,sBAAsB,CAAC,CAAC;EACrC;EAEA,MAAM;IAAEM,UAAU;IAAEW,UAAU;IAAEC;EAAa,CAAC,GAC5CR,SAAqD;EAEvD,IAAIS,KAAK,CAACb,UAAU,CAAC,IAAI,CAACW,UAAU,IAAI,CAACC,YAAY,EAAE;IACrD,OAAO,IAAIlB,sBAAsB,CAAC,CAAC;EACrC;EAEA,OAAO,IAAIA,sBAAsB,CAAC;IAChCM,UAAU;IACVW,UAAU;IACVC;EACF,CAAC,CAAC;AACJ","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import { AndroidConfig, createRunOncePlugin, withInfoPlist, withAndroidManifest, withGradleProperties, withPodfile } from '@expo/config-plugins';
3
+ import { AndroidConfig, createRunOncePlugin, withAndroidManifest, withGradleProperties, withInfoPlist, withPodfile } from '@expo/config-plugins';
4
4
  const pkg = require('react-native-audio-api/package.json');
5
5
  const withDefaultOptions = options => {
6
6
  return {
@@ -40,7 +40,7 @@ const withForegroundService = (config, {
40
40
  const SFTypes = androidFSTypes.join('|');
41
41
  const serviceElement = {
42
42
  $: {
43
- 'android:name': 'com.swmansion.audioapi.system.MediaNotificationManager$AudioForegroundService',
43
+ 'android:name': 'com.swmansion.audioapi.system.CentralizedForegroundService',
44
44
  'android:stopWithTask': 'true',
45
45
  'android:foregroundServiceType': SFTypes
46
46
  },
@@ -49,6 +49,11 @@ const withForegroundService = (config, {
49
49
  if (!mainApplication.service) {
50
50
  mainApplication.service = [];
51
51
  }
52
+ const existingServiceIndex = mainApplication.service.findIndex(service => service.$['android:name'].includes(serviceElement.$['android:name']));
53
+ if (existingServiceIndex !== -1) {
54
+ mainApplication.service[existingServiceIndex] = serviceElement;
55
+ return mod;
56
+ }
52
57
  mainApplication.service.push(serviceElement);
53
58
  return mod;
54
59
  });
@@ -1 +1 @@
1
- {"version":3,"names":["AndroidConfig","createRunOncePlugin","withInfoPlist","withAndroidManifest","withGradleProperties","withPodfile","pkg","require","withDefaultOptions","options","iosBackgroundMode","androidPermissions","androidForegroundService","androidFSTypes","disableFFmpeg","withBackgroundAudio","config","iosConfig","modResults","UIBackgroundModes","Array","from","Set","withIosMicrophonePermission","iosMicrophonePermission","NSMicrophoneUsageDescription","withAndroidPermissions","Permissions","withPermissions","withForegroundService","mod","manifest","mainApplication","Manifest","getMainApplicationOrThrow","SFTypes","join","serviceElement","$","intentFilter","service","push","withFFmpegConfig","iosConf","contents","ffmpegRegex","podfileString","search","endsWith","replace","finalConf","gradleProperties","existingIndex","findIndex","prop","type","key","splice","value","withAudioAPI","optionsIn","undefined","name","version"],"sourceRoot":"../../../src","sources":["plugin/withAudioAPI.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["AndroidConfig","createRunOncePlugin","withAndroidManifest","withGradleProperties","withInfoPlist","withPodfile","pkg","require","withDefaultOptions","options","iosBackgroundMode","androidPermissions","androidForegroundService","androidFSTypes","disableFFmpeg","withBackgroundAudio","config","iosConfig","modResults","UIBackgroundModes","Array","from","Set","withIosMicrophonePermission","iosMicrophonePermission","NSMicrophoneUsageDescription","withAndroidPermissions","Permissions","withPermissions","withForegroundService","mod","manifest","mainApplication","Manifest","getMainApplicationOrThrow","SFTypes","join","serviceElement","$","intentFilter","service","existingServiceIndex","findIndex","includes","push","withFFmpegConfig","iosConf","contents","ffmpegRegex","podfileString","search","endsWith","replace","finalConf","gradleProperties","existingIndex","prop","type","key","splice","value","withAudioAPI","optionsIn","undefined","name","version"],"sourceRoot":"../../../src","sources":["plugin/withAudioAPI.ts"],"mappings":";;AAAA,SACEA,aAAa,EAEbC,mBAAmB,EACnBC,mBAAmB,EACnBC,oBAAoB,EACpBC,aAAa,EACbC,WAAW,QACN,sBAAsB;AAC7B,MAAMC,GAAG,GAAGC,OAAO,CAAC,qCAAqC,CAAC;AAW1D,MAAMC,kBAAkB,GAAIC,OAAyB,IAAc;EACjE,OAAO;IACLC,iBAAiB,EAAE,IAAI;IACvBC,kBAAkB,EAAE,CAClB,uCAAuC,EACvC,sDAAsD,CACvD;IACDC,wBAAwB,EAAE,IAAI;IAC9BC,cAAc,EAAE,CAAC,eAAe,CAAC;IACjCC,aAAa,EAAE,KAAK;IACpB,GAAGL;EACL,CAAC;AACH,CAAC;AAED,MAAMM,mBAAiC,GAAIC,MAAM,IAAK;EACpD,OAAOZ,aAAa,CAACY,MAAM,EAAGC,SAAS,IAAK;IAC1CA,SAAS,CAACC,UAAU,CAACC,iBAAiB,GAAG,CACvC,GAAGC,KAAK,CAACC,IAAI,CACX,IAAIC,GAAG,CAAC,CAAC,IAAIL,SAAS,CAACC,UAAU,CAACC,iBAAiB,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,CACtE,CAAC,CACF;IAED,OAAOF,SAAS;EAClB,CAAC,CAAC;AACJ,CAAC;AAED,MAAMM,2BAAkD,GAAGA,CACzDP,MAAM,EACN;EAAEQ;AAAwB,CAAC,KACxB;EACH,OAAOpB,aAAa,CAACY,MAAM,EAAGC,SAAS,IAAK;IAC1CA,SAAS,CAACC,UAAU,CAACO,4BAA4B,GAAGD,uBAAuB;IAC3E,OAAOP,SAAS;EAClB,CAAC,CAAC;AACJ,CAAC;AAED,MAAMS,sBAA6C,GAAGA,CACpDV,MAAM,EACN;EAAEL;AAA4B,CAAC,KAC5B;EACH,OAAOX,aAAa,CAAC2B,WAAW,CAACC,eAAe,CAACZ,MAAM,EAAEL,kBAAkB,CAAC;AAC9E,CAAC;AAED,MAAMkB,qBAA4C,GAAGA,CACnDb,MAAM,EACN;EAAEH;AAAwB,CAAC,KACxB;EACH,OAAOX,mBAAmB,CAACc,MAAM,EAAGc,GAAG,IAAK;IAC1C,MAAMC,QAAQ,GAAGD,GAAG,CAACZ,UAAU;IAC/B,MAAMc,eAAe,GACnBhC,aAAa,CAACiC,QAAQ,CAACC,yBAAyB,CAACH,QAAQ,CAAC;IAE5D,MAAMI,OAAO,GAAGtB,cAAc,CAACuB,IAAI,CAAC,GAAG,CAAC;IAExC,MAAMC,cAAc,GAAG;MACrBC,CAAC,EAAE;QACD,cAAc,EACZ,4DAA4D;QAC9D,sBAAsB,EAAE,MAAM;QAC9B,+BAA+B,EAAEH;MACnC,CAAC;MACDI,YAAY,EAAE;IAChB,CAAC;IAED,IAAI,CAACP,eAAe,CAACQ,OAAO,EAAE;MAC5BR,eAAe,CAACQ,OAAO,GAAG,EAAE;IAC9B;IAEA,MAAMC,oBAAoB,GAAGT,eAAe,CAACQ,OAAO,CAACE,SAAS,CAAEF,OAAO,IACrEA,OAAO,CAACF,CAAC,CAAC,cAAc,CAAC,CAACK,QAAQ,CAACN,cAAc,CAACC,CAAC,CAAC,cAAc,CAAC,CACrE,CAAC;IAED,IAAIG,oBAAoB,KAAK,CAAC,CAAC,EAAE;MAC/BT,eAAe,CAACQ,OAAO,CAACC,oBAAoB,CAAC,GAAGJ,cAAc;MAC9D,OAAOP,GAAG;IACZ;IAEAE,eAAe,CAACQ,OAAO,CAACI,IAAI,CAACP,cAAc,CAAC;IAC5C,OAAOP,GAAG;EACZ,CAAC,CAAC;AACJ,CAAC;AAED,MAAMe,gBAAuC,GAAGA,CAAC7B,MAAM,EAAEP,OAAO,KAAK;EACnE,MAAMqC,OAAO,GAAGzC,WAAW,CAACW,MAAM,EAAGc,GAAG,IAAK;IAC3C,IAAIiB,QAAQ,GAAGjB,GAAG,CAACZ,UAAU,CAAC6B,QAAQ;IACtC,MAAMC,WAAW,GAAG,0CAA0C;IAC9D,MAAMC,aAAa,GAAGxC,OAAO,CAACK,aAAa,GACvC,sCAAsC,GACtC,EAAE;IACN;IACA,IAAIiC,QAAQ,CAACG,MAAM,CAACF,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE;MACvC,IAAIvC,OAAO,CAACK,aAAa,EAAE;QACzB,IAAIiC,QAAQ,CAACI,QAAQ,CAAC,IAAI,CAAC,EAAE;UAC3BJ,QAAQ,GAAG,GAAGA,QAAQ,GAAGE,aAAa,EAAE;QAC1C,CAAC,MAAM;UACLF,QAAQ,GAAG,GAAGA,QAAQ,KAAKE,aAAa,EAAE;QAC5C;QACAnB,GAAG,CAACZ,UAAU,CAAC6B,QAAQ,GAAGA,QAAQ;MACpC;IACF,CAAC,MAAM;MACL;MACAA,QAAQ,GAAGA,QAAQ,CAACK,OAAO,CAACJ,WAAW,EAAEC,aAAa,CAAC;IACzD;IAEAnB,GAAG,CAACZ,UAAU,CAAC6B,QAAQ,GAAGA,QAAQ;IAClC,OAAOjB,GAAG;EACZ,CAAC,CAAC;EAEF,MAAMuB,SAAS,GAAGlD,oBAAoB,CAAC2C,OAAO,EAAGhB,GAAG,IAAK;IACvD,MAAMwB,gBAAgB,GAAGxB,GAAG,CAACZ,UAAU;IAEvC,MAAMqC,aAAa,GAAGD,gBAAgB,CAACZ,SAAS,CAC7Cc,IAAI,IAAKA,IAAI,CAACC,IAAI,KAAK,UAAU,IAAID,IAAI,CAACE,GAAG,KAAK,uBACrD,CAAC;IACD,IAAIH,aAAa,KAAK,CAAC,CAAC,EAAE;MACxBD,gBAAgB,CAACK,MAAM,CAACJ,aAAa,EAAE,CAAC,CAAC;IAC3C,CAAC,MAAM,IAAI,CAAC9C,OAAO,CAACK,aAAa,EAAE;MACjC;MACA,OAAOgB,GAAG;IACZ;IAEA,IAAIrB,OAAO,CAACK,aAAa,EAAE;MACzBwC,gBAAgB,CAACV,IAAI,CAAC;QACpBa,IAAI,EAAE,UAAU;QAChBC,GAAG,EAAE,uBAAuB;QAC5BE,KAAK,EAAEnD,OAAO,CAACK,aAAa,GAAG,MAAM,GAAG;MAC1C,CAAC,CAAC;IACJ;IAEA,OAAOgB,GAAG;EACZ,CAAC,CAAC;EAEF,OAAOuB,SAAS;AAClB,CAAC;AAED,MAAMQ,YAAmC,GAAGA,CAAC7C,MAAM,EAAE8C,SAAS,KAAK;EACjE,MAAMrD,OAAO,GAAGD,kBAAkB,CAACsD,SAAS,IAAI,CAAC,CAAC,CAAC;EAEnD,IAAIrD,OAAO,CAACC,iBAAiB,EAAE;IAC7BM,MAAM,GAAGD,mBAAmB,CAACC,MAAM,CAAC;EACtC;EAEAA,MAAM,GAAGU,sBAAsB,CAACV,MAAM,EAAEP,OAAO,CAAC;EAEhD,IAAIA,OAAO,CAACG,wBAAwB,EAAE;IACpCI,MAAM,GAAGa,qBAAqB,CAACb,MAAM,EAAEP,OAAO,CAAC;EACjD;EAEA,IAAIA,OAAO,CAACe,uBAAuB,EAAE;IACnCR,MAAM,GAAGO,2BAA2B,CAACP,MAAM,EAAEP,OAAO,CAAC;EACvD;EAEA,IAAIA,OAAO,CAACK,aAAa,KAAKiD,SAAS,EAAE;IACvC/C,MAAM,GAAG6B,gBAAgB,CAAC7B,MAAM,EAAEP,OAAO,CAAC;EAC5C;EAEA,OAAOO,MAAM;AACf,CAAC;AAED,eAAef,mBAAmB,CAAC4D,YAAY,EAAEvD,GAAG,CAAC0D,IAAI,EAAE1D,GAAG,CAAC2D,OAAO,CAAC","ignoreList":[]}
@@ -2,6 +2,7 @@
2
2
 
3
3
  import { AudioEventEmitter } from "../events/index.js";
4
4
  import { NativeAudioAPIModule } from "../specs/index.js";
5
+ import { parseNativeError } from "./errors.js";
5
6
  class AudioManager {
6
7
  constructor() {
7
8
  this.audioEventEmitter = new AudioEventEmitter(global.AudioEventEmitter);
@@ -9,8 +10,13 @@ class AudioManager {
9
10
  getDevicePreferredSampleRate() {
10
11
  return NativeAudioAPIModule.getDevicePreferredSampleRate();
11
12
  }
12
- setAudioSessionActivity(enabled) {
13
- return NativeAudioAPIModule.setAudioSessionActivity(enabled);
13
+ async setAudioSessionActivity(enabled) {
14
+ try {
15
+ const success = await NativeAudioAPIModule.setAudioSessionActivity(enabled);
16
+ return success;
17
+ } catch (error) {
18
+ throw parseNativeError(error);
19
+ }
14
20
  }
15
21
  setAudioSessionOptions(options) {
16
22
  NativeAudioAPIModule.setAudioSessionOptions(options.iosCategory ?? '', options.iosMode ?? '', options.iosOptions ?? [], options.iosAllowHaptics ?? false);
@@ -1 +1 @@
1
- {"version":3,"names":["AudioEventEmitter","NativeAudioAPIModule","AudioManager","constructor","audioEventEmitter","global","getDevicePreferredSampleRate","setAudioSessionActivity","enabled","setAudioSessionOptions","options","iosCategory","iosMode","iosOptions","iosAllowHaptics","disableSessionManagement","observeAudioInterruptions","activelyReclaimSession","observeVolumeChanges","addSystemEventListener","name","callback","addAudioEventListener","requestRecordingPermissions","checkRecordingPermissions","requestNotificationPermissions","checkNotificationPermissions","getDevicesInfo"],"sourceRoot":"../../../src","sources":["system/AudioManager.ts"],"mappings":";;AAOA,SAASA,iBAAiB,QAAgC,oBAAW;AACrE,SAASC,oBAAoB,QAAQ,mBAAU;AAE/C,MAAMC,YAAY,CAA0B;EAE1CC,WAAWA,CAAA,EAAG;IACZ,IAAI,CAACC,iBAAiB,GAAG,IAAIJ,iBAAiB,CAACK,MAAM,CAACL,iBAAiB,CAAC;EAC1E;EAEAM,4BAA4BA,CAAA,EAAW;IACrC,OAAOL,oBAAoB,CAACK,4BAA4B,CAAC,CAAC;EAC5D;EAEAC,uBAAuBA,CAACC,OAAgB,EAAoB;IAC1D,OAAOP,oBAAoB,CAACM,uBAAuB,CAACC,OAAO,CAAC;EAC9D;EAEAC,sBAAsBA,CAACC,OAAuB,EAAE;IAC9CT,oBAAoB,CAACQ,sBAAsB,CACzCC,OAAO,CAACC,WAAW,IAAI,EAAE,EACzBD,OAAO,CAACE,OAAO,IAAI,EAAE,EACrBF,OAAO,CAACG,UAAU,IAAI,EAAE,EACxBH,OAAO,CAACI,eAAe,IAAI,KAC7B,CAAC;EACH;EAEAC,wBAAwBA,CAAA,EAAG;IACzBd,oBAAoB,CAACc,wBAAwB,CAAC,CAAC;EACjD;EAEAC,yBAAyBA,CAACR,OAAgB,EAAE;IAC1CP,oBAAoB,CAACe,yBAAyB,CAACR,OAAO,CAAC;EACzD;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACES,sBAAsBA,CAACT,OAAgB,EAAE;IACvCP,oBAAoB,CAACgB,sBAAsB,CAACT,OAAO,CAAC;EACtD;EAEAU,oBAAoBA,CAACV,OAAgB,EAAE;IACrCP,oBAAoB,CAACiB,oBAAoB,CAACV,OAAO,CAAC;EACpD;EAEAW,sBAAsBA,CACpBC,IAAU,EACVC,QAAmC,EACX;IACxB,OAAO,IAAI,CAACjB,iBAAiB,CAACkB,qBAAqB,CAACF,IAAI,EAAEC,QAAQ,CAAC;EACrE;EAEA,MAAME,2BAA2BA,CAAA,EAA8B;IAC7D,OAAOtB,oBAAoB,CAACsB,2BAA2B,CAAC,CAAC;EAC3D;EAEA,MAAMC,yBAAyBA,CAAA,EAA8B;IAC3D,OAAOvB,oBAAoB,CAACuB,yBAAyB,CAAC,CAAC;EACzD;EAEA,MAAMC,8BAA8BA,CAAA,EAA8B;IAChE,OAAOxB,oBAAoB,CAACwB,8BAA8B,CAAC,CAAC;EAC9D;EAEA,MAAMC,4BAA4BA,CAAA,EAA8B;IAC9D,OAAOzB,oBAAoB,CAACyB,4BAA4B,CAAC,CAAC;EAC5D;EAEA,MAAMC,cAAcA,CAAA,EAA8B;IAChD,OAAO1B,oBAAoB,CAAC0B,cAAc,CAAC,CAAC;EAC9C;AACF;AAEA,eAAe,IAAIzB,YAAY,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["AudioEventEmitter","NativeAudioAPIModule","parseNativeError","AudioManager","constructor","audioEventEmitter","global","getDevicePreferredSampleRate","setAudioSessionActivity","enabled","success","error","setAudioSessionOptions","options","iosCategory","iosMode","iosOptions","iosAllowHaptics","disableSessionManagement","observeAudioInterruptions","activelyReclaimSession","observeVolumeChanges","addSystemEventListener","name","callback","addAudioEventListener","requestRecordingPermissions","checkRecordingPermissions","requestNotificationPermissions","checkNotificationPermissions","getDevicesInfo"],"sourceRoot":"../../../src","sources":["system/AudioManager.ts"],"mappings":";;AAAA,SAASA,iBAAiB,QAAgC,oBAAW;AAErE,SAASC,oBAAoB,QAAQ,mBAAU;AAC/C,SAASC,gBAAgB,QAAQ,aAAU;AAQ3C,MAAMC,YAAY,CAA0B;EAE1CC,WAAWA,CAAA,EAAG;IACZ,IAAI,CAACC,iBAAiB,GAAG,IAAIL,iBAAiB,CAACM,MAAM,CAACN,iBAAiB,CAAC;EAC1E;EAEAO,4BAA4BA,CAAA,EAAW;IACrC,OAAON,oBAAoB,CAACM,4BAA4B,CAAC,CAAC;EAC5D;EAEA,MAAMC,uBAAuBA,CAACC,OAAgB,EAAoB;IAChE,IAAI;MACF,MAAMC,OAAO,GACX,MAAMT,oBAAoB,CAACO,uBAAuB,CAACC,OAAO,CAAC;MAE7D,OAAOC,OAAO;IAChB,CAAC,CAAC,OAAOC,KAAK,EAAE;MACd,MAAMT,gBAAgB,CAACS,KAAK,CAAC;IAC/B;EACF;EAEAC,sBAAsBA,CAACC,OAAuB,EAAE;IAC9CZ,oBAAoB,CAACW,sBAAsB,CACzCC,OAAO,CAACC,WAAW,IAAI,EAAE,EACzBD,OAAO,CAACE,OAAO,IAAI,EAAE,EACrBF,OAAO,CAACG,UAAU,IAAI,EAAE,EACxBH,OAAO,CAACI,eAAe,IAAI,KAC7B,CAAC;EACH;EAEAC,wBAAwBA,CAAA,EAAG;IACzBjB,oBAAoB,CAACiB,wBAAwB,CAAC,CAAC;EACjD;EAEAC,yBAAyBA,CAACV,OAAgB,EAAE;IAC1CR,oBAAoB,CAACkB,yBAAyB,CAACV,OAAO,CAAC;EACzD;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEW,sBAAsBA,CAACX,OAAgB,EAAE;IACvCR,oBAAoB,CAACmB,sBAAsB,CAACX,OAAO,CAAC;EACtD;EAEAY,oBAAoBA,CAACZ,OAAgB,EAAE;IACrCR,oBAAoB,CAACoB,oBAAoB,CAACZ,OAAO,CAAC;EACpD;EAEAa,sBAAsBA,CACpBC,IAAU,EACVC,QAAmC,EACX;IACxB,OAAO,IAAI,CAACnB,iBAAiB,CAACoB,qBAAqB,CAACF,IAAI,EAAEC,QAAQ,CAAC;EACrE;EAEA,MAAME,2BAA2BA,CAAA,EAA8B;IAC7D,OAAOzB,oBAAoB,CAACyB,2BAA2B,CAAC,CAAC;EAC3D;EAEA,MAAMC,yBAAyBA,CAAA,EAA8B;IAC3D,OAAO1B,oBAAoB,CAAC0B,yBAAyB,CAAC,CAAC;EACzD;EAEA,MAAMC,8BAA8BA,CAAA,EAA8B;IAChE,OAAO3B,oBAAoB,CAAC2B,8BAA8B,CAAC,CAAC;EAC9D;EAEA,MAAMC,4BAA4BA,CAAA,EAA8B;IAC9D,OAAO5B,oBAAoB,CAAC4B,4BAA4B,CAAC,CAAC;EAC5D;EAEA,MAAMC,cAAcA,CAAA,EAA8B;IAChD,OAAO7B,oBAAoB,CAAC6B,cAAc,CAAC,CAAC;EAC9C;AACF;AAEA,eAAe,IAAI3B,YAAY,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+
3
+ import { AudioApiError } from "../errors/index.js";
4
+ function parseNativeCode(code) {
5
+ switch (code) {
6
+ case 0:
7
+ return 'NoError';
8
+ case -50:
9
+ return 'BadParam';
10
+ case 1836282486:
11
+ return 'MediaServicesFailed';
12
+ case 560030580:
13
+ return 'IsBusy';
14
+ case 560161140:
15
+ return 'IncompatibleCategory';
16
+ case 560557684:
17
+ return 'CannotInterruptOthers';
18
+ case 1701737535:
19
+ return 'MissingEntitlement';
20
+ case 1936290409:
21
+ return 'SiriIsRecording';
22
+ case 561015905:
23
+ return 'CannotStartPlaying';
24
+ case 561145187:
25
+ return 'CannotStartRecording';
26
+ case 561017449:
27
+ return 'InsufficientPriority';
28
+ case 561145203:
29
+ return 'ResourceNotAvailable';
30
+ case 2003329396:
31
+ return 'Unspecified';
32
+ case 561210739:
33
+ return 'ExpiredSession';
34
+ case 1768841571:
35
+ return 'SessionNotActive';
36
+ default:
37
+ return 'NoError';
38
+ }
39
+ }
40
+ export class SessionActivationError extends AudioApiError {
41
+ constructor(nativeErrorInfo) {
42
+ if (!nativeErrorInfo) {
43
+ super('Failed to activate audio session with unknown error');
44
+ this.name = 'SessionActivationError';
45
+ return;
46
+ }
47
+ const codeName = parseNativeCode(nativeErrorInfo.nativeCode);
48
+ super(`[${codeName}] Failed to activate audio session, code: ${nativeErrorInfo.nativeCode}`);
49
+ this.name = 'SessionActivationError';
50
+ this.nativeErrorInfo = nativeErrorInfo;
51
+ }
52
+ }
53
+ export function parseNativeError(error) {
54
+ const errorMeta = error?.userInfo?.meta ?? error?.nativeError?.userInfo?.meta ?? error?.details?.meta;
55
+ console.log('Parsed error meta:', errorMeta);
56
+ if (!errorMeta || typeof errorMeta !== 'object') {
57
+ return new SessionActivationError();
58
+ }
59
+ const {
60
+ nativeCode,
61
+ nativeDesc,
62
+ nativeDomain
63
+ } = errorMeta;
64
+ if (isNaN(nativeCode) || !nativeDesc || !nativeDomain) {
65
+ return new SessionActivationError();
66
+ }
67
+ return new SessionActivationError({
68
+ nativeCode,
69
+ nativeDesc,
70
+ nativeDomain
71
+ });
72
+ }
73
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["AudioApiError","parseNativeCode","code","SessionActivationError","constructor","nativeErrorInfo","name","codeName","nativeCode","parseNativeError","error","errorMeta","userInfo","meta","nativeError","details","console","log","nativeDesc","nativeDomain","isNaN"],"sourceRoot":"../../../src","sources":["system/errors.ts"],"mappings":";;AAAA,SAASA,aAAa,QAAQ,oBAAW;AA4BzC,SAASC,eAAeA,CAACC,IAAY,EAAU;EAC7C,QAAQA,IAAI;IACV,KAAK,CAAC;MACJ,OAAO,SAAS;IAClB,KAAK,CAAC,EAAE;MACN,OAAO,UAAU;IACnB,KAAK,UAAU;MACb,OAAO,qBAAqB;IAC9B,KAAK,SAAS;MACZ,OAAO,QAAQ;IACjB,KAAK,SAAS;MACZ,OAAO,sBAAsB;IAC/B,KAAK,SAAS;MACZ,OAAO,uBAAuB;IAChC,KAAK,UAAU;MACb,OAAO,oBAAoB;IAC7B,KAAK,UAAU;MACb,OAAO,iBAAiB;IAC1B,KAAK,SAAS;MACZ,OAAO,oBAAoB;IAC7B,KAAK,SAAS;MACZ,OAAO,sBAAsB;IAC/B,KAAK,SAAS;MACZ,OAAO,sBAAsB;IAC/B,KAAK,SAAS;MACZ,OAAO,sBAAsB;IAC/B,KAAK,UAAU;MACb,OAAO,aAAa;IACtB,KAAK,SAAS;MACZ,OAAO,gBAAgB;IACzB,KAAK,UAAU;MACb,OAAO,kBAAkB;IAC3B;MACE,OAAO,SAAS;EACpB;AACF;AAEA,OAAO,MAAMC,sBAAsB,SAASH,aAAa,CAAC;EAGxDI,WAAWA,CAACC,eAA+C,EAAE;IAC3D,IAAI,CAACA,eAAe,EAAE;MACpB,KAAK,CAAC,qDAAqD,CAAC;MAC5D,IAAI,CAACC,IAAI,GAAG,wBAAwB;MACpC;IACF;IAEA,MAAMC,QAAQ,GAAGN,eAAe,CAACI,eAAe,CAACG,UAAU,CAAC;IAE5D,KAAK,CACH,IAAID,QAAQ,6CAA6CF,eAAe,CAACG,UAAU,EACrF,CAAC;IAED,IAAI,CAACF,IAAI,GAAG,wBAAwB;IACpC,IAAI,CAACD,eAAe,GAAGA,eAAe;EACxC;AACF;AAEA,OAAO,SAASI,gBAAgBA,CAACC,KAAc,EAA0B;EACvE,MAAMC,SAAS,GACZD,KAAK,EAAwBE,QAAQ,EAAEC,IAAI,IAC3CH,KAAK,EAA2BI,WAAW,EAAEF,QAAQ,EAAEC,IAAI,IAC3DH,KAAK,EAAuBK,OAAO,EAAEF,IAAI;EAE5CG,OAAO,CAACC,GAAG,CAAC,oBAAoB,EAAEN,SAAS,CAAC;EAE5C,IAAI,CAACA,SAAS,IAAI,OAAOA,SAAS,KAAK,QAAQ,EAAE;IAC/C,OAAO,IAAIR,sBAAsB,CAAC,CAAC;EACrC;EAEA,MAAM;IAAEK,UAAU;IAAEU,UAAU;IAAEC;EAAa,CAAC,GAC5CR,SAAqD;EAEvD,IAAIS,KAAK,CAACZ,UAAU,CAAC,IAAI,CAACU,UAAU,IAAI,CAACC,YAAY,EAAE;IACrD,OAAO,IAAIhB,sBAAsB,CAAC,CAAC;EACrC;EAEA,OAAO,IAAIA,sBAAsB,CAAC;IAChCK,UAAU;IACVU,UAAU;IACVC;EACF,CAAC,CAAC;AACJ","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"withAudioAPI.d.ts","sourceRoot":"","sources":["../../../src/plugin/withAudioAPI.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,YAAY,EAKb,MAAM,sBAAsB,CAAC;AAG9B,UAAU,OAAO;IACf,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,wBAAwB,EAAE,OAAO,CAAC;IAClC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;CACxB;;AAyJD,wBAAwE"}
1
+ {"version":3,"file":"withAudioAPI.d.ts","sourceRoot":"","sources":["../../../src/plugin/withAudioAPI.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,YAAY,EAMb,MAAM,sBAAsB,CAAC;AAG9B,UAAU,OAAO;IACf,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,wBAAwB,EAAE,OAAO,CAAC;IAClC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;CACxB;;AAiKD,wBAAwE"}
@@ -1,6 +1,6 @@
1
- import { SessionOptions, PermissionStatus, AudioDevicesInfo, IAudioManager } from './types';
2
- import { SystemEventName, SystemEventCallback } from '../events/types';
3
1
  import { AudioEventSubscription } from '../events';
2
+ import { SystemEventCallback, SystemEventName } from '../events/types';
3
+ import { AudioDevicesInfo, IAudioManager, PermissionStatus, SessionOptions } from './types';
4
4
  declare class AudioManager implements IAudioManager {
5
5
  private readonly audioEventEmitter;
6
6
  constructor();
@@ -1 +1 @@
1
- {"version":3,"file":"AudioManager.d.ts","sourceRoot":"","sources":["../../../src/system/AudioManager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAqB,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAGtE,cAAM,YAAa,YAAW,aAAa;IACzC,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;IAS9C,wBAAwB;IAIxB,yBAAyB,CAAC,OAAO,EAAE,OAAO;IAI1C;;;;;;;;;;;;OAYG;IACH,sBAAsB,CAAC,OAAO,EAAE,OAAO;IAIvC,oBAAoB,CAAC,OAAO,EAAE,OAAO;IAIrC,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;IAItD,8BAA8B,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAI3D,4BAA4B,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAIzD,cAAc,IAAI,OAAO,CAAC,gBAAgB,CAAC;CAGlD;;AAED,wBAAkC"}
1
+ {"version":3,"file":"AudioManager.d.ts","sourceRoot":"","sources":["../../../src/system/AudioManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGvE,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,cAAc,EACf,MAAM,SAAS,CAAC;AAEjB,cAAM,YAAa,YAAW,aAAa;IACzC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;;IAKtD,4BAA4B,IAAI,MAAM;IAIhC,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAWjE,sBAAsB,CAAC,OAAO,EAAE,cAAc;IAS9C,wBAAwB;IAIxB,yBAAyB,CAAC,OAAO,EAAE,OAAO;IAI1C;;;;;;;;;;;;OAYG;IACH,sBAAsB,CAAC,OAAO,EAAE,OAAO;IAIvC,oBAAoB,CAAC,OAAO,EAAE,OAAO;IAIrC,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;IAItD,8BAA8B,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAI3D,4BAA4B,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAIzD,cAAc,IAAI,OAAO,CAAC,gBAAgB,CAAC;CAGlD;;AAED,wBAAkC"}
@@ -0,0 +1,12 @@
1
+ import { AudioApiError } from '../errors';
2
+ export interface NativeActivationErrorMetadata {
3
+ nativeDesc: string;
4
+ nativeCode: number;
5
+ nativeDomain: string;
6
+ }
7
+ export declare class SessionActivationError extends AudioApiError {
8
+ nativeErrorInfo?: NativeActivationErrorMetadata;
9
+ constructor(nativeErrorInfo?: NativeActivationErrorMetadata);
10
+ }
11
+ export declare function parseNativeError(error: unknown): SessionActivationError;
12
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/system/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,WAAW,6BAA6B;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AA2DD,qBAAa,sBAAuB,SAAQ,aAAa;IACvD,eAAe,CAAC,EAAE,6BAA6B,CAAC;gBAEpC,eAAe,CAAC,EAAE,6BAA6B;CAgB5D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,sBAAsB,CAwBvE"}
@@ -1,5 +1,5 @@
1
- import type { SystemEventName, SystemEventCallback } from '../events/types';
2
1
  import type { AudioEventSubscription } from '../events';
2
+ import type { SystemEventCallback, SystemEventName } from '../events/types';
3
3
  export type IOSCategory = 'record' | 'ambient' | 'playback' | 'multiRoute' | 'soloAmbient' | 'playAndRecord';
4
4
  export type IOSMode = 'default' | 'gameChat' | 'videoChat' | 'voiceChat' | 'measurement' | 'voicePrompt' | 'spokenAudio' | 'moviePlayback' | 'videoRecording';
5
5
  export type IOSOption = 'duckOthers' | 'allowAirPlay' | 'mixWithOthers' | 'allowBluetooth' | 'defaultToSpeaker' | 'allowBluetoothA2DP' | 'overrideMutedMicrophoneInterruption' | 'interruptSpokenAudioAndMixWithOthers';
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/system/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAExD,MAAM,MAAM,WAAW,GACnB,QAAQ,GACR,SAAS,GACT,UAAU,GACV,YAAY,GACZ,aAAa,GACb,eAAe,CAAC;AAEpB,MAAM,MAAM,OAAO,GACf,SAAS,GACT,UAAU,GACV,WAAW,GACX,WAAW,GACX,aAAa,GACb,aAAa,GACb,aAAa,GACb,eAAe,GACf,gBAAgB,CAAC;AAErB,MAAM,MAAM,SAAS,GACjB,YAAY,GACZ,cAAc,GACd,eAAe,GACf,gBAAgB,GAChB,kBAAkB,GAClB,oBAAoB,GACpB,qCAAqC,GACrC,sCAAsC,CAAC;AAE3C,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAAG,QAAQ,GAAG,SAAS,CAAC;AAErE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,eAAe,GAAG,eAAe,EAAE,CAAC;AAEhD,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,eAAe,CAAC;IACjC,gBAAgB,EAAE,eAAe,CAAC;IAClC,aAAa,EAAE,eAAe,CAAC;IAC/B,cAAc,EAAE,eAAe,CAAC;CACjC;AAED,MAAM,WAAW,aAAa;IAC5B,4BAA4B,IAAI,MAAM,CAAC;IACvC,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5D,sBAAsB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;IACtD,wBAAwB,IAAI,IAAI,CAAC;IACjC,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAClD,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/C,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7C,sBAAsB,CAAC,IAAI,SAAS,eAAe,EACjD,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,mBAAmB,CAAC,IAAI,CAAC,GAClC,sBAAsB,GAAG,SAAS,CAAC;IACtC,2BAA2B,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACzD,yBAAyB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACvD,8BAA8B,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC5D,4BAA4B,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC1D,cAAc,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC7C"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/system/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE5E,MAAM,MAAM,WAAW,GACnB,QAAQ,GACR,SAAS,GACT,UAAU,GACV,YAAY,GACZ,aAAa,GACb,eAAe,CAAC;AAEpB,MAAM,MAAM,OAAO,GACf,SAAS,GACT,UAAU,GACV,WAAW,GACX,WAAW,GACX,aAAa,GACb,aAAa,GACb,aAAa,GACb,eAAe,GACf,gBAAgB,CAAC;AAErB,MAAM,MAAM,SAAS,GACjB,YAAY,GACZ,cAAc,GACd,eAAe,GACf,gBAAgB,GAChB,kBAAkB,GAClB,oBAAoB,GACpB,qCAAqC,GACrC,sCAAsC,CAAC;AAE3C,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAAG,QAAQ,GAAG,SAAS,CAAC;AAErE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,eAAe,GAAG,eAAe,EAAE,CAAC;AAEhD,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,eAAe,CAAC;IACjC,gBAAgB,EAAE,eAAe,CAAC;IAClC,aAAa,EAAE,eAAe,CAAC;IAC/B,cAAc,EAAE,eAAe,CAAC;CACjC;AAED,MAAM,WAAW,aAAa;IAC5B,4BAA4B,IAAI,MAAM,CAAC;IACvC,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5D,sBAAsB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;IACtD,wBAAwB,IAAI,IAAI,CAAC;IACjC,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAClD,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/C,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7C,sBAAsB,CAAC,IAAI,SAAS,eAAe,EACjD,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,mBAAmB,CAAC,IAAI,CAAC,GAClC,sBAAsB,GAAG,SAAS,CAAC;IACtC,2BAA2B,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACzD,yBAAyB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACvD,8BAA8B,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC5D,4BAA4B,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC1D,cAAc,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC7C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-audio-api",
3
- "version": "0.11.0",
3
+ "version": "0.11.1",
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"
@@ -6,3 +6,53 @@ def check_if_worklets_enabled()
6
6
  end
7
7
  true
8
8
  end
9
+
10
+ def try_to_parse_react_native_package_json(node_modules_dir)
11
+ react_native_package_json_path = File.join(node_modules_dir, 'react-native/package.json')
12
+ if !File.exist?(react_native_package_json_path)
13
+ return nil
14
+ end
15
+ return JSON.parse(File.read(react_native_package_json_path))
16
+ end
17
+
18
+ def find_audio_api_config()
19
+ result = {
20
+ :worklets_enabled => nil,
21
+ :react_native_common_dir => nil,
22
+ :dynamic_frameworks_audio_api_dir => nil,
23
+ :dynamic_frameworks_worklets_dir => nil
24
+ }
25
+
26
+ result[:worklets_enabled] = check_if_worklets_enabled()
27
+
28
+ react_native_node_modules_dir = File.join(File.dirname(`cd "#{Pod::Config.instance.installation_root.to_s}" && node --print "require.resolve('react-native/package.json')"`), '..')
29
+ react_native_json = try_to_parse_react_native_package_json(react_native_node_modules_dir)
30
+
31
+ if react_native_json == nil
32
+ # user configuration, just in case
33
+ node_modules_dir = ENV["REACT_NATIVE_NODE_MODULES_DIR"]
34
+ react_native_json = try_to_parse_react_native_package_json(node_modules_dir)
35
+ end
36
+
37
+ if react_native_json == nil
38
+ raise '[AudioAPI] Unable to recognize your `react-native` version. Please set environmental variable with `react-native` location: `export REACT_NATIVE_NODE_MODULES_DIR="<path to react-native>" && pod install`.'
39
+ end
40
+
41
+ pods_root = Pod::Config.instance.project_pods_root
42
+ react_native_common_dir_absolute = File.join(react_native_node_modules_dir, 'react-native', 'ReactCommon')
43
+ react_native_common_dir_relative = Pathname.new(react_native_common_dir_absolute).relative_path_from(pods_root).to_s
44
+ result[:react_native_common_dir] = react_native_common_dir_relative
45
+
46
+ react_native_audio_api_dir_absolute = File.join(__dir__, '..')
47
+ react_native_audio_api_dir_relative = Pathname.new(react_native_audio_api_dir_absolute).relative_path_from(pods_root).to_s
48
+ result[:dynamic_frameworks_audio_api_dir] = react_native_audio_api_dir_relative
49
+
50
+ if result[:worklets_enabled] == true
51
+ react_native_worklets_node_modules_dir = File.join(File.dirname(`cd "#{Pod::Config.instance.installation_root.to_s}" && node --print "require.resolve('react-native-worklets/package.json')"`), '..')
52
+ react_native_worklets_dir_absolute = File.join(react_native_worklets_node_modules_dir, 'react-native-worklets')
53
+ react_native_worklets_dir_relative = Pathname.new(react_native_worklets_dir_absolute).relative_path_from(pods_root).to_s
54
+ result[:dynamic_frameworks_worklets_dir] = react_native_worklets_dir_relative
55
+ end
56
+
57
+ return result
58
+ end
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  AndroidConfig,
3
- createRunOncePlugin,
4
3
  ConfigPlugin,
5
- withInfoPlist,
4
+ createRunOncePlugin,
6
5
  withAndroidManifest,
7
6
  withGradleProperties,
7
+ withInfoPlist,
8
8
  withPodfile,
9
9
  } from '@expo/config-plugins';
10
10
  const pkg = require('react-native-audio-api/package.json');
@@ -75,7 +75,7 @@ const withForegroundService: ConfigPlugin<Options> = (
75
75
  const serviceElement = {
76
76
  $: {
77
77
  'android:name':
78
- 'com.swmansion.audioapi.system.MediaNotificationManager$AudioForegroundService',
78
+ 'com.swmansion.audioapi.system.CentralizedForegroundService',
79
79
  'android:stopWithTask': 'true',
80
80
  'android:foregroundServiceType': SFTypes,
81
81
  },
@@ -86,8 +86,16 @@ const withForegroundService: ConfigPlugin<Options> = (
86
86
  mainApplication.service = [];
87
87
  }
88
88
 
89
- mainApplication.service.push(serviceElement);
89
+ const existingServiceIndex = mainApplication.service.findIndex((service) =>
90
+ service.$['android:name'].includes(serviceElement.$['android:name'])
91
+ );
90
92
 
93
+ if (existingServiceIndex !== -1) {
94
+ mainApplication.service[existingServiceIndex] = serviceElement;
95
+ return mod;
96
+ }
97
+
98
+ mainApplication.service.push(serviceElement);
91
99
  return mod;
92
100
  });
93
101
  };
@@ -1,12 +1,13 @@
1
+ import { AudioEventEmitter, AudioEventSubscription } from '../events';
2
+ import { SystemEventCallback, SystemEventName } from '../events/types';
3
+ import { NativeAudioAPIModule } from '../specs';
4
+ import { parseNativeError } from './errors';
1
5
  import {
2
- SessionOptions,
3
- PermissionStatus,
4
6
  AudioDevicesInfo,
5
7
  IAudioManager,
8
+ PermissionStatus,
9
+ SessionOptions,
6
10
  } from './types';
7
- import { SystemEventName, SystemEventCallback } from '../events/types';
8
- import { AudioEventEmitter, AudioEventSubscription } from '../events';
9
- import { NativeAudioAPIModule } from '../specs';
10
11
 
11
12
  class AudioManager implements IAudioManager {
12
13
  private readonly audioEventEmitter: AudioEventEmitter;
@@ -18,8 +19,15 @@ class AudioManager implements IAudioManager {
18
19
  return NativeAudioAPIModule.getDevicePreferredSampleRate();
19
20
  }
20
21
 
21
- setAudioSessionActivity(enabled: boolean): Promise<boolean> {
22
- return NativeAudioAPIModule.setAudioSessionActivity(enabled);
22
+ async setAudioSessionActivity(enabled: boolean): Promise<boolean> {
23
+ try {
24
+ const success =
25
+ await NativeAudioAPIModule.setAudioSessionActivity(enabled);
26
+
27
+ return success;
28
+ } catch (error) {
29
+ throw parseNativeError(error);
30
+ }
23
31
  }
24
32
 
25
33
  setAudioSessionOptions(options: SessionOptions) {
@@ -0,0 +1,111 @@
1
+ import { AudioApiError } from '../errors';
2
+
3
+ export interface NativeActivationErrorMetadata {
4
+ nativeDesc: string;
5
+ nativeCode: number;
6
+ nativeDomain: string;
7
+ }
8
+
9
+ interface ErrorWithUserInfo {
10
+ userInfo?: {
11
+ meta?: Record<string, unknown>;
12
+ };
13
+ }
14
+
15
+ interface ErrorWithNativeError {
16
+ nativeError?: {
17
+ userInfo: {
18
+ meta?: Record<string, unknown>;
19
+ };
20
+ };
21
+ }
22
+
23
+ interface ErrorWithDetails {
24
+ details?: {
25
+ meta?: Record<string, unknown>;
26
+ };
27
+ }
28
+
29
+ function parseNativeCode(code: number): string {
30
+ switch (code) {
31
+ case 0:
32
+ return 'NoError';
33
+ case -50:
34
+ return 'BadParam';
35
+ case 1836282486:
36
+ return 'MediaServicesFailed';
37
+ case 560030580:
38
+ return 'IsBusy';
39
+ case 560161140:
40
+ return 'IncompatibleCategory';
41
+ case 560557684:
42
+ return 'CannotInterruptOthers';
43
+ case 1701737535:
44
+ return 'MissingEntitlement';
45
+ case 1936290409:
46
+ return 'SiriIsRecording';
47
+ case 561015905:
48
+ return 'CannotStartPlaying';
49
+ case 561145187:
50
+ return 'CannotStartRecording';
51
+ case 561017449:
52
+ return 'InsufficientPriority';
53
+ case 561145203:
54
+ return 'ResourceNotAvailable';
55
+ case 2003329396:
56
+ return 'Unspecified';
57
+ case 561210739:
58
+ return 'ExpiredSession';
59
+ case 1768841571:
60
+ return 'SessionNotActive';
61
+ default:
62
+ return 'NoError';
63
+ }
64
+ }
65
+
66
+ export class SessionActivationError extends AudioApiError {
67
+ nativeErrorInfo?: NativeActivationErrorMetadata;
68
+
69
+ constructor(nativeErrorInfo?: NativeActivationErrorMetadata) {
70
+ if (!nativeErrorInfo) {
71
+ super('Failed to activate audio session with unknown error');
72
+ this.name = 'SessionActivationError';
73
+ return;
74
+ }
75
+
76
+ const codeName = parseNativeCode(nativeErrorInfo.nativeCode);
77
+
78
+ super(
79
+ `[${codeName}] Failed to activate audio session, code: ${nativeErrorInfo.nativeCode}`
80
+ );
81
+
82
+ this.name = 'SessionActivationError';
83
+ this.nativeErrorInfo = nativeErrorInfo;
84
+ }
85
+ }
86
+
87
+ export function parseNativeError(error: unknown): SessionActivationError {
88
+ const errorMeta =
89
+ (error as ErrorWithUserInfo)?.userInfo?.meta ??
90
+ (error as ErrorWithNativeError)?.nativeError?.userInfo?.meta ??
91
+ (error as ErrorWithDetails)?.details?.meta;
92
+
93
+ console.log('Parsed error meta:', errorMeta);
94
+
95
+ if (!errorMeta || typeof errorMeta !== 'object') {
96
+ return new SessionActivationError();
97
+ }
98
+
99
+ const { nativeCode, nativeDesc, nativeDomain } =
100
+ errorMeta as unknown as NativeActivationErrorMetadata;
101
+
102
+ if (isNaN(nativeCode) || !nativeDesc || !nativeDomain) {
103
+ return new SessionActivationError();
104
+ }
105
+
106
+ return new SessionActivationError({
107
+ nativeCode,
108
+ nativeDesc,
109
+ nativeDomain,
110
+ });
111
+ }
@@ -1,5 +1,5 @@
1
- import type { SystemEventName, SystemEventCallback } from '../events/types';
2
1
  import type { AudioEventSubscription } from '../events';
2
+ import type { SystemEventCallback, SystemEventName } from '../events/types';
3
3
 
4
4
  export type IOSCategory =
5
5
  | 'record'