react-native-audio-api 0.11.0 → 0.11.2

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 (66) 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 +9 -6
  4. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +1 -1
  5. package/android/src/main/cpp/audioapi/android/core/utils/AndroidFileWriterBackend.h +1 -1
  6. package/android/src/main/cpp/audioapi/android/core/utils/FileOptions.cpp +7 -3
  7. package/android/src/main/cpp/audioapi/android/core/utils/FileOptions.h +1 -1
  8. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.cpp +4 -2
  9. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.h +1 -1
  10. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.cpp +5 -4
  11. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.h +2 -2
  12. package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +2 -0
  13. package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.cpp +6 -0
  14. package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.h +1 -0
  15. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +6 -0
  16. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +2 -0
  17. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.cpp +2 -1
  18. package/common/cpp/audioapi/core/inputs/AudioRecorder.h +1 -1
  19. package/ios/audioapi/ios/AudioAPIModule.mm +22 -1
  20. package/ios/audioapi/ios/core/IOSAudioRecorder.h +1 -1
  21. package/ios/audioapi/ios/core/IOSAudioRecorder.mm +5 -4
  22. package/ios/audioapi/ios/core/utils/FileOptions.h +3 -1
  23. package/ios/audioapi/ios/core/utils/FileOptions.mm +9 -3
  24. package/ios/audioapi/ios/core/utils/IOSFileWriter.h +2 -1
  25. package/ios/audioapi/ios/core/utils/IOSFileWriter.mm +5 -2
  26. package/ios/audioapi/ios/system/AudioEngine.mm +4 -2
  27. package/ios/audioapi/ios/system/AudioSessionManager.h +1 -1
  28. package/ios/audioapi/ios/system/AudioSessionManager.mm +4 -11
  29. package/lib/commonjs/core/AudioRecorder.js +3 -3
  30. package/lib/commonjs/core/AudioRecorder.js.map +1 -1
  31. package/lib/commonjs/plugin/withAudioAPI.js +6 -1
  32. package/lib/commonjs/plugin/withAudioAPI.js.map +1 -1
  33. package/lib/commonjs/system/AudioManager.js +8 -2
  34. package/lib/commonjs/system/AudioManager.js.map +1 -1
  35. package/lib/commonjs/system/errors.js +79 -0
  36. package/lib/commonjs/system/errors.js.map +1 -0
  37. package/lib/module/core/AudioRecorder.js +3 -4
  38. package/lib/module/core/AudioRecorder.js.map +1 -1
  39. package/lib/module/plugin/withAudioAPI.js +7 -2
  40. package/lib/module/plugin/withAudioAPI.js.map +1 -1
  41. package/lib/module/system/AudioManager.js +8 -2
  42. package/lib/module/system/AudioManager.js.map +1 -1
  43. package/lib/module/system/errors.js +73 -0
  44. package/lib/module/system/errors.js.map +1 -0
  45. package/lib/typescript/core/AudioRecorder.d.ts +2 -2
  46. package/lib/typescript/core/AudioRecorder.d.ts.map +1 -1
  47. package/lib/typescript/interfaces.d.ts +1 -1
  48. package/lib/typescript/interfaces.d.ts.map +1 -1
  49. package/lib/typescript/plugin/withAudioAPI.d.ts.map +1 -1
  50. package/lib/typescript/system/AudioManager.d.ts +2 -2
  51. package/lib/typescript/system/AudioManager.d.ts.map +1 -1
  52. package/lib/typescript/system/errors.d.ts +12 -0
  53. package/lib/typescript/system/errors.d.ts.map +1 -0
  54. package/lib/typescript/system/types.d.ts +1 -1
  55. package/lib/typescript/system/types.d.ts.map +1 -1
  56. package/lib/typescript/types.d.ts +3 -0
  57. package/lib/typescript/types.d.ts.map +1 -1
  58. package/package.json +1 -1
  59. package/scripts/rnaa_utils.rb +50 -0
  60. package/src/core/AudioRecorder.ts +4 -3
  61. package/src/interfaces.ts +1 -1
  62. package/src/plugin/withAudioAPI.ts +12 -4
  63. package/src/system/AudioManager.ts +15 -7
  64. package/src/system/errors.ts +111 -0
  65. package/src/system/types.ts +1 -1
  66. package/src/types.ts +4 -0
@@ -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"}
@@ -111,4 +111,7 @@ export interface IIRFilterNodeOptions {
111
111
  feedback: number[];
112
112
  }
113
113
  export type DecodeDataInput = number | string | ArrayBuffer;
114
+ export interface AudioRecorderStartOptions {
115
+ fileNameOverride?: string;
116
+ }
114
117
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
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.2",
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,3 +1,4 @@
1
+ import { AudioApiError } from '../errors';
1
2
  import { AudioEventEmitter, AudioEventSubscription } from '../events';
2
3
  import {
3
4
  OnAudioReadyEventType,
@@ -7,6 +8,7 @@ import { IAudioRecorder } from '../interfaces';
7
8
  import {
8
9
  AudioRecorderCallbackOptions,
9
10
  AudioRecorderFileOptions,
11
+ AudioRecorderStartOptions,
10
12
  FileDirectory,
11
13
  FileFormat,
12
14
  FileInfo,
@@ -15,7 +17,6 @@ import {
15
17
  import FilePreset from '../utils/filePresets';
16
18
  import AudioBuffer from './AudioBuffer';
17
19
  import RecorderAdapterNode from './RecorderAdapterNode';
18
- import { AudioApiError } from '../errors';
19
20
 
20
21
  // Enforces default options, making sure that all properties are defined
21
22
  // for the contract with native code.
@@ -73,13 +74,13 @@ export default class AudioRecorder {
73
74
  }
74
75
 
75
76
  /** Starts the audio recording process with configured output options */
76
- start(): Result<{ path: string }> {
77
+ start(options?: AudioRecorderStartOptions): Result<{ path: string }> {
77
78
  if (!this.isFileOutputEnabled) {
78
79
  this.recorder.start();
79
80
  return { status: 'success', path: '' };
80
81
  }
81
82
 
82
- return this.recorder.start();
83
+ return this.recorder.start(options?.fileNameOverride);
83
84
  }
84
85
 
85
86
  /** Stops the audio recording process and releases internal resources */
package/src/interfaces.ts CHANGED
@@ -304,7 +304,7 @@ export interface IAudioRecorderCallbackOptions
304
304
 
305
305
  export interface IAudioRecorder {
306
306
  // default recorder methods
307
- start: () => Result<{ path: string }>;
307
+ start: (fileNameOverride?: string) => Result<{ path: string }>;
308
308
  stop: () => Result<FileInfo>;
309
309
  isRecording: () => boolean;
310
310
  isPaused: () => boolean;
@@ -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'
package/src/types.ts CHANGED
@@ -151,3 +151,7 @@ export interface IIRFilterNodeOptions {
151
151
  }
152
152
 
153
153
  export type DecodeDataInput = number | string | ArrayBuffer;
154
+
155
+ export interface AudioRecorderStartOptions {
156
+ fileNameOverride?: string;
157
+ }