react-native-audio-api 0.5.6 → 0.6.0-rc.0

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 (67) hide show
  1. package/RNAudioAPI.podspec +1 -1
  2. package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +0 -20
  3. package/android/src/main/cpp/audioapi/android/core/AudioPlayer.h +0 -2
  4. package/android/src/main/java/com/swmansion/audioapi/AudioAPIPackage.kt +13 -0
  5. package/android/src/main/java/com/swmansion/audioapi/AudioManagerModule.kt +59 -0
  6. package/android/src/oldarch/NativeAudioManagerModuleSpec.java +99 -0
  7. package/common/cpp/audioapi/AudioAPIModuleInstaller.h +2 -6
  8. package/common/cpp/audioapi/core/AudioContext.cpp +1 -12
  9. package/common/cpp/audioapi/core/AudioContext.h +0 -1
  10. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +1 -1
  11. package/common/cpp/audioapi/libs/signalsmith-stretch/fft-accelerate.h +326 -0
  12. package/common/cpp/audioapi/libs/signalsmith-stretch/fft.h +1257 -413
  13. package/common/cpp/audioapi/libs/signalsmith-stretch/signalsmith-stretch.h +398 -232
  14. package/common/cpp/audioapi/libs/signalsmith-stretch/stft.h +625 -0
  15. package/ios/audioapi/ios/AudioAPIModule.mm +2 -3
  16. package/ios/audioapi/ios/AudioManagerModule.h +18 -0
  17. package/ios/audioapi/ios/AudioManagerModule.mm +92 -0
  18. package/ios/audioapi/ios/core/AudioPlayer.h +4 -12
  19. package/ios/audioapi/ios/core/AudioPlayer.m +26 -108
  20. package/ios/audioapi/ios/core/IOSAudioPlayer.h +1 -3
  21. package/ios/audioapi/ios/core/IOSAudioPlayer.mm +4 -28
  22. package/ios/audioapi/ios/system/AudioEngine.h +23 -0
  23. package/ios/audioapi/ios/system/AudioEngine.mm +137 -0
  24. package/ios/audioapi/ios/system/AudioSessionManager.h +22 -0
  25. package/ios/audioapi/ios/system/AudioSessionManager.mm +183 -0
  26. package/ios/audioapi/ios/system/LockScreenManager.h +23 -0
  27. package/ios/audioapi/ios/system/LockScreenManager.mm +299 -0
  28. package/ios/audioapi/ios/system/NotificationManager.h +16 -0
  29. package/ios/audioapi/ios/system/NotificationManager.mm +151 -0
  30. package/lib/module/api.js +1 -0
  31. package/lib/module/api.js.map +1 -1
  32. package/lib/module/core/AudioContext.js +2 -1
  33. package/lib/module/core/AudioContext.js.map +1 -1
  34. package/lib/module/specs/NativeAudioManagerModule.js +31 -0
  35. package/lib/module/specs/NativeAudioManagerModule.js.map +1 -0
  36. package/lib/module/specs/index.js +6 -0
  37. package/lib/module/specs/index.js.map +1 -0
  38. package/lib/module/system/AudioManager.js +66 -0
  39. package/lib/module/system/AudioManager.js.map +1 -0
  40. package/lib/module/system/index.js +4 -0
  41. package/lib/module/system/index.js.map +1 -0
  42. package/lib/module/system/types.js +2 -0
  43. package/lib/module/system/types.js.map +1 -0
  44. package/lib/typescript/api.d.ts +1 -0
  45. package/lib/typescript/api.d.ts.map +1 -1
  46. package/lib/typescript/core/AudioContext.d.ts.map +1 -1
  47. package/lib/typescript/specs/NativeAudioManagerModule.d.ts +13 -0
  48. package/lib/typescript/specs/NativeAudioManagerModule.d.ts.map +1 -0
  49. package/lib/typescript/specs/index.d.ts +4 -0
  50. package/lib/typescript/specs/index.d.ts.map +1 -0
  51. package/lib/typescript/system/AudioManager.d.ts +12 -0
  52. package/lib/typescript/system/AudioManager.d.ts.map +1 -0
  53. package/lib/typescript/system/index.d.ts +2 -0
  54. package/lib/typescript/system/index.d.ts.map +1 -0
  55. package/lib/typescript/system/types.d.ts +28 -0
  56. package/lib/typescript/system/types.d.ts.map +1 -0
  57. package/package.json +2 -2
  58. package/src/api.ts +1 -0
  59. package/src/core/AudioContext.ts +6 -1
  60. package/src/specs/NativeAudioManagerModule.ts +51 -0
  61. package/src/specs/index.ts +6 -0
  62. package/src/system/AudioManager.ts +122 -0
  63. package/src/system/index.ts +1 -0
  64. package/src/system/types.ts +68 -0
  65. package/common/cpp/audioapi/libs/signalsmith-stretch/delay.h +0 -715
  66. package/common/cpp/audioapi/libs/signalsmith-stretch/perf.h +0 -82
  67. package/common/cpp/audioapi/libs/signalsmith-stretch/spectral.h +0 -493
@@ -1,13 +1,14 @@
1
1
  "use strict";
2
2
 
3
3
  import BaseAudioContext from "./BaseAudioContext.js";
4
+ import AudioManager from "../system/index.js";
4
5
  import { NotSupportedError } from "../errors/index.js";
5
6
  export default class AudioContext extends BaseAudioContext {
6
7
  constructor(options) {
7
8
  if (options && (options.sampleRate < 8000 || options.sampleRate > 96000)) {
8
9
  throw new NotSupportedError(`The provided sampleRate is not supported: ${options.sampleRate}`);
9
10
  }
10
- super(global.createAudioContext(options?.sampleRate));
11
+ super(global.createAudioContext(options?.sampleRate || AudioManager.getDevicePreferredSampleRate()));
11
12
  }
12
13
  async close() {
13
14
  await this.context.close();
@@ -1 +1 @@
1
- {"version":3,"names":["BaseAudioContext","NotSupportedError","AudioContext","constructor","options","sampleRate","global","createAudioContext","close","context","resume","suspend"],"sourceRoot":"../../../src","sources":["core/AudioContext.ts"],"mappings":";;AACA,OAAOA,gBAAgB,MAAM,uBAAoB;AAEjD,SAASC,iBAAiB,QAAQ,oBAAW;AAE7C,eAAe,MAAMC,YAAY,SAASF,gBAAgB,CAAC;EACzDG,WAAWA,CAACC,OAA6B,EAAE;IACzC,IAAIA,OAAO,KAAKA,OAAO,CAACC,UAAU,GAAG,IAAI,IAAID,OAAO,CAACC,UAAU,GAAG,KAAK,CAAC,EAAE;MACxE,MAAM,IAAIJ,iBAAiB,CACzB,6CAA6CG,OAAO,CAACC,UAAU,EACjE,CAAC;IACH;IAEA,KAAK,CAACC,MAAM,CAACC,kBAAkB,CAACH,OAAO,EAAEC,UAAU,CAAC,CAAC;EACvD;EAEA,MAAMG,KAAKA,CAAA,EAAuB;IAChC,MAAO,IAAI,CAACC,OAAO,CAAmBD,KAAK,CAAC,CAAC;EAC/C;EAEA,MAAME,MAAMA,CAAA,EAAuB;IACjC,MAAO,IAAI,CAACD,OAAO,CAAmBC,MAAM,CAAC,CAAC;EAChD;EAEA,MAAMC,OAAOA,CAAA,EAAuB;IAClC,MAAO,IAAI,CAACF,OAAO,CAAmBE,OAAO,CAAC,CAAC;EACjD;AACF","ignoreList":[]}
1
+ {"version":3,"names":["BaseAudioContext","AudioManager","NotSupportedError","AudioContext","constructor","options","sampleRate","global","createAudioContext","getDevicePreferredSampleRate","close","context","resume","suspend"],"sourceRoot":"../../../src","sources":["core/AudioContext.ts"],"mappings":";;AACA,OAAOA,gBAAgB,MAAM,uBAAoB;AACjD,OAAOC,YAAY,MAAM,oBAAW;AAEpC,SAASC,iBAAiB,QAAQ,oBAAW;AAE7C,eAAe,MAAMC,YAAY,SAASH,gBAAgB,CAAC;EACzDI,WAAWA,CAACC,OAA6B,EAAE;IACzC,IAAIA,OAAO,KAAKA,OAAO,CAACC,UAAU,GAAG,IAAI,IAAID,OAAO,CAACC,UAAU,GAAG,KAAK,CAAC,EAAE;MACxE,MAAM,IAAIJ,iBAAiB,CACzB,6CAA6CG,OAAO,CAACC,UAAU,EACjE,CAAC;IACH;IAEA,KAAK,CACHC,MAAM,CAACC,kBAAkB,CACvBH,OAAO,EAAEC,UAAU,IAAIL,YAAY,CAACQ,4BAA4B,CAAC,CACnE,CACF,CAAC;EACH;EAEA,MAAMC,KAAKA,CAAA,EAAuB;IAChC,MAAO,IAAI,CAACC,OAAO,CAAmBD,KAAK,CAAC,CAAC;EAC/C;EAEA,MAAME,MAAMA,CAAA,EAAuB;IACjC,MAAO,IAAI,CAACD,OAAO,CAAmBC,MAAM,CAAC,CAAC;EAChD;EAEA,MAAMC,OAAOA,CAAA,EAAuB;IAClC,MAAO,IAAI,CAACF,OAAO,CAAmBE,OAAO,CAAC,CAAC;EACjD;AACF","ignoreList":[]}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ import { NativeModules, DeviceEventEmitter, NativeEventEmitter, Platform } from 'react-native';
4
+ const NativeAudioManagerModule = NativeModules.AudioManagerModule;
5
+ const eventEmitter = Platform.select({
6
+ ios: new NativeEventEmitter(NativeModules.AudioManagerModule),
7
+ android: DeviceEventEmitter
8
+ });
9
+ if (!NativeAudioManagerModule || !eventEmitter) {
10
+ throw new Error(`Failed to install react-native-audio-api: The native module could not be found.`);
11
+ }
12
+ const AudioManagerModule = {
13
+ setLockScreenInfo(info) {
14
+ NativeAudioManagerModule.setLockScreenInfo(info);
15
+ },
16
+ resetLockScreenInfo() {
17
+ NativeAudioManagerModule.resetLockScreenInfo();
18
+ },
19
+ enableRemoteCommand(name, enabled) {
20
+ NativeAudioManagerModule.enableRemoteCommand(name, enabled);
21
+ },
22
+ // audio session
23
+ setAudioSessionOptions(category, mode, options, active) {
24
+ NativeAudioManagerModule.setAudioSessionOptions(category, mode, options, active);
25
+ },
26
+ getDevicePreferredSampleRate() {
27
+ return NativeAudioManagerModule.getDevicePreferredSampleRate();
28
+ }
29
+ };
30
+ export { eventEmitter, AudioManagerModule };
31
+ //# sourceMappingURL=NativeAudioManagerModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NativeModules","DeviceEventEmitter","NativeEventEmitter","Platform","NativeAudioManagerModule","AudioManagerModule","eventEmitter","select","ios","android","Error","setLockScreenInfo","info","resetLockScreenInfo","enableRemoteCommand","name","enabled","setAudioSessionOptions","category","mode","options","active","getDevicePreferredSampleRate"],"sourceRoot":"../../../src","sources":["specs/NativeAudioManagerModule.ts"],"mappings":";;AAAA,SACEA,aAAa,EACbC,kBAAkB,EAClBC,kBAAkB,EAClBC,QAAQ,QACH,cAAc;AAErB,MAAMC,wBAAwB,GAAGJ,aAAa,CAACK,kBAAkB;AACjE,MAAMC,YAAY,GAAGH,QAAQ,CAACI,MAAM,CAAC;EACnCC,GAAG,EAAE,IAAIN,kBAAkB,CAACF,aAAa,CAACK,kBAAkB,CAAC;EAC7DI,OAAO,EAAER;AACX,CAAC,CAAC;AAEF,IAAI,CAACG,wBAAwB,IAAI,CAACE,YAAY,EAAE;EAC9C,MAAM,IAAII,KAAK,CACb,iFACF,CAAC;AACH;AAEA,MAAML,kBAAkB,GAAG;EACzBM,iBAAiBA,CAACC,IAEjB,EAAQ;IACPR,wBAAwB,CAACO,iBAAiB,CAACC,IAAI,CAAC;EAClD,CAAC;EACDC,mBAAmBA,CAAA,EAAS;IAC1BT,wBAAwB,CAACS,mBAAmB,CAAC,CAAC;EAChD,CAAC;EACDC,mBAAmBA,CAACC,IAAY,EAAEC,OAAgB,EAAQ;IACxDZ,wBAAwB,CAACU,mBAAmB,CAACC,IAAI,EAAEC,OAAO,CAAC;EAC7D,CAAC;EACD;EACAC,sBAAsBA,CACpBC,QAAgB,EAChBC,IAAY,EACZC,OAAsB,EACtBC,MAAe,EACT;IACNjB,wBAAwB,CAACa,sBAAsB,CAC7CC,QAAQ,EACRC,IAAI,EACJC,OAAO,EACPC,MACF,CAAC;EACH,CAAC;EACDC,4BAA4BA,CAAA,EAAW;IACrC,OAAOlB,wBAAwB,CAACkB,4BAA4B,CAAC,CAAC;EAChE;AACF,CAAC;AAED,SAAShB,YAAY,EAAED,kBAAkB","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ import NativeAudioAPIModule from "./NativeAudioAPIModule.js";
4
+ import { AudioManagerModule, eventEmitter } from "./NativeAudioManagerModule.js";
5
+ export { NativeAudioAPIModule, AudioManagerModule, eventEmitter };
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NativeAudioAPIModule","AudioManagerModule","eventEmitter"],"sourceRoot":"../../../src","sources":["specs/index.ts"],"mappings":"AAAA,YAAY;;AAEZ,OAAOA,oBAAoB,MAAM,2BAAwB;AACzD,SAASC,kBAAkB,EAAEC,YAAY,QAAQ,+BAA4B;AAE7E,SAASF,oBAAoB,EAAEC,kBAAkB,EAAEC,YAAY","ignoreList":[]}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+
3
+ import { AudioManagerModule, eventEmitter } from "../specs/index.js";
4
+ class AudioManager {
5
+ setLockScreenInfo(info) {
6
+ AudioManagerModule.setLockScreenInfo(info);
7
+ }
8
+ resetLockScreenInfo() {
9
+ AudioManagerModule.resetLockScreenInfo();
10
+ }
11
+ setAudioSessionOptions(options) {
12
+ AudioManagerModule.setAudioSessionOptions(options.iosCategory ?? '', options.iosMode ?? '', options.iosOptions ?? [], options.active ?? true);
13
+ }
14
+ getDevicePreferredSampleRate() {
15
+ return AudioManagerModule.getDevicePreferredSampleRate();
16
+ }
17
+ enableRemoteCommand(name, enabled, callback) {
18
+ AudioManagerModule.enableRemoteCommand(name, enabled);
19
+ let subscription = null;
20
+ if (enabled && callback) {
21
+ switch (name) {
22
+ case 'play':
23
+ subscription = eventEmitter.addListener('onRemotePlay', callback);
24
+ break;
25
+ case 'pause':
26
+ subscription = eventEmitter.addListener('onRemotePause', callback);
27
+ break;
28
+ case 'stop':
29
+ subscription = eventEmitter.addListener('onRemoteStop', callback);
30
+ break;
31
+ case 'togglePlayPause':
32
+ subscription = eventEmitter.addListener('onRemoteTogglePlayPause', callback);
33
+ break;
34
+ case 'changePlaybackRate':
35
+ subscription = eventEmitter.addListener('onRemoteChangePlaybackRate', callback);
36
+ break;
37
+ case 'nextTrack':
38
+ subscription = eventEmitter.addListener('onRemoteNextTrack', callback);
39
+ break;
40
+ case 'previousTrack':
41
+ subscription = eventEmitter.addListener('onRemotePreviousTrack', callback);
42
+ break;
43
+ case 'skipForward':
44
+ subscription = eventEmitter.addListener('onRemoteSkipForward', callback);
45
+ break;
46
+ case 'skipBackward':
47
+ subscription = eventEmitter.addListener('onRemoteSkipBackward', callback);
48
+ break;
49
+ case 'seekForward':
50
+ subscription = eventEmitter.addListener('onRemoteSeekForward', callback);
51
+ break;
52
+ case 'seekBackward':
53
+ subscription = eventEmitter.addListener('onRemoteSeekBackward', callback);
54
+ break;
55
+ case 'changePlaybackPosition':
56
+ subscription = eventEmitter.addListener('onRemoteChangePlaybackPosition', callback);
57
+ break;
58
+ default:
59
+ console.error('Unsupported RemoteControl action:', name);
60
+ }
61
+ }
62
+ return subscription;
63
+ }
64
+ }
65
+ export default new AudioManager();
66
+ //# sourceMappingURL=AudioManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["AudioManagerModule","eventEmitter","AudioManager","setLockScreenInfo","info","resetLockScreenInfo","setAudioSessionOptions","options","iosCategory","iosMode","iosOptions","active","getDevicePreferredSampleRate","enableRemoteCommand","name","enabled","callback","subscription","addListener","console","error"],"sourceRoot":"../../../src","sources":["system/AudioManager.ts"],"mappings":";;AACA,SAASA,kBAAkB,EAAEC,YAAY,QAAQ,mBAAU;AAG3D,MAAMC,YAAY,CAAC;EACjBC,iBAAiBA,CAACC,IAAoB,EAAE;IACtCJ,kBAAkB,CAACG,iBAAiB,CAACC,IAAI,CAAC;EAC5C;EAEAC,mBAAmBA,CAAA,EAAG;IACpBL,kBAAkB,CAACK,mBAAmB,CAAC,CAAC;EAC1C;EAEAC,sBAAsBA,CAACC,OAAuB,EAAE;IAC9CP,kBAAkB,CAACM,sBAAsB,CACvCC,OAAO,CAACC,WAAW,IAAI,EAAE,EACzBD,OAAO,CAACE,OAAO,IAAI,EAAE,EACrBF,OAAO,CAACG,UAAU,IAAI,EAAE,EACxBH,OAAO,CAACI,MAAM,IAAI,IACpB,CAAC;EACH;EAEAC,4BAA4BA,CAAA,EAAW;IACrC,OAAOZ,kBAAkB,CAACY,4BAA4B,CAAC,CAAC;EAC1D;EAEAC,mBAAmBA,CACjBC,IAAmB,EACnBC,OAAgB,EAChBC,QAAmC,EACP;IAC5BhB,kBAAkB,CAACa,mBAAmB,CAACC,IAAI,EAAEC,OAAO,CAAC;IAErD,IAAIE,YAAY,GAAG,IAAI;IAEvB,IAAIF,OAAO,IAAIC,QAAQ,EAAE;MACvB,QAAQF,IAAI;QACV,KAAK,MAAM;UACTG,YAAY,GAAGhB,YAAY,CAAEiB,WAAW,CAAC,cAAc,EAAEF,QAAQ,CAAC;UAClE;QAEF,KAAK,OAAO;UACVC,YAAY,GAAGhB,YAAY,CAAEiB,WAAW,CAAC,eAAe,EAAEF,QAAQ,CAAC;UACnE;QAEF,KAAK,MAAM;UACTC,YAAY,GAAGhB,YAAY,CAAEiB,WAAW,CAAC,cAAc,EAAEF,QAAQ,CAAC;UAClE;QAEF,KAAK,iBAAiB;UACpBC,YAAY,GAAGhB,YAAY,CAAEiB,WAAW,CACtC,yBAAyB,EACzBF,QACF,CAAC;UACD;QAEF,KAAK,oBAAoB;UACvBC,YAAY,GAAGhB,YAAY,CAAEiB,WAAW,CACtC,4BAA4B,EAC5BF,QACF,CAAC;UACD;QAEF,KAAK,WAAW;UACdC,YAAY,GAAGhB,YAAY,CAAEiB,WAAW,CACtC,mBAAmB,EACnBF,QACF,CAAC;UACD;QAEF,KAAK,eAAe;UAClBC,YAAY,GAAGhB,YAAY,CAAEiB,WAAW,CACtC,uBAAuB,EACvBF,QACF,CAAC;UACD;QAEF,KAAK,aAAa;UAChBC,YAAY,GAAGhB,YAAY,CAAEiB,WAAW,CACtC,qBAAqB,EACrBF,QACF,CAAC;UACD;QAEF,KAAK,cAAc;UACjBC,YAAY,GAAGhB,YAAY,CAAEiB,WAAW,CACtC,sBAAsB,EACtBF,QACF,CAAC;UACD;QAEF,KAAK,aAAa;UAChBC,YAAY,GAAGhB,YAAY,CAAEiB,WAAW,CACtC,qBAAqB,EACrBF,QACF,CAAC;UACD;QAEF,KAAK,cAAc;UACjBC,YAAY,GAAGhB,YAAY,CAAEiB,WAAW,CACtC,sBAAsB,EACtBF,QACF,CAAC;UACD;QAEF,KAAK,wBAAwB;UAC3BC,YAAY,GAAGhB,YAAY,CAAEiB,WAAW,CACtC,gCAAgC,EAChCF,QACF,CAAC;UACD;QAEF;UACEG,OAAO,CAACC,KAAK,CAAC,mCAAmC,EAAEN,IAAI,CAAC;MAC5D;IACF;IAEA,OAAOG,YAAY;EACrB;AACF;AAEA,eAAe,IAAIf,YAAY,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export { default } from "./AudioManager.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["default"],"sourceRoot":"../../../src","sources":["system/index.ts"],"mappings":";;AAAA,SAASA,OAAO,QAAQ,mBAAgB","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["system/types.ts"],"mappings":"","ignoreList":[]}
@@ -17,6 +17,7 @@ export { default as BiquadFilterNode } from './core/BiquadFilterNode';
17
17
  export { default as GainNode } from './core/GainNode';
18
18
  export { default as OscillatorNode } from './core/OscillatorNode';
19
19
  export { default as StereoPannerNode } from './core/StereoPannerNode';
20
+ export { default as AudioManager } from './system';
20
21
  export { OscillatorType, BiquadFilterType, ChannelCountMode, ChannelInterpretation, ContextState, WindowType, PeriodicWaveConstraints, } from './types';
21
22
  export { IndexSizeError, InvalidAccessError, InvalidStateError, RangeError, NotSupportedError, } from './errors';
22
23
  //# sourceMappingURL=api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAGxE,OAAO,CAAC,MAAM,CAAC;IACb,IAAI,kBAAkB,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,KAAK,aAAa,CAAC;IAC/D,IAAI,yBAAyB,EAAE,CAC7B,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,KACf,oBAAoB,CAAC;CAC3B;AAgBD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEtE,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACZ,UAAU,EACV,uBAAuB,GACxB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,EACV,iBAAiB,GAClB,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAGxE,OAAO,CAAC,MAAM,CAAC;IACb,IAAI,kBAAkB,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,KAAK,aAAa,CAAC;IAC/D,IAAI,yBAAyB,EAAE,CAC7B,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,KACf,oBAAoB,CAAC;CAC3B;AAgBD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,UAAU,CAAC;AAEnD,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACZ,UAAU,EACV,uBAAuB,GACxB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,EACV,iBAAiB,GAClB,MAAM,UAAU,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"AudioContext.d.ts","sourceRoot":"","sources":["../../../src/core/AudioContext.ts"],"names":[],"mappings":"AACA,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAG/C,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,gBAAgB;gBAC5C,OAAO,CAAC,EAAE,mBAAmB;IAUnC,KAAK,IAAI,OAAO,CAAC,SAAS,CAAC;IAI3B,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC;IAI5B,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC;CAGpC"}
1
+ {"version":3,"file":"AudioContext.d.ts","sourceRoot":"","sources":["../../../src/core/AudioContext.ts"],"names":[],"mappings":"AACA,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAG/C,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,gBAAgB;gBAC5C,OAAO,CAAC,EAAE,mBAAmB;IAcnC,KAAK,IAAI,OAAO,CAAC,SAAS,CAAC;IAI3B,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC;IAI5B,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC;CAGpC"}
@@ -0,0 +1,13 @@
1
+ import { NativeEventEmitter } from 'react-native';
2
+ declare const eventEmitter: NativeEventEmitter | undefined;
3
+ declare const AudioManagerModule: {
4
+ setLockScreenInfo(info: {
5
+ [key: string]: string | number | boolean | undefined;
6
+ }): void;
7
+ resetLockScreenInfo(): void;
8
+ enableRemoteCommand(name: string, enabled: boolean): void;
9
+ setAudioSessionOptions(category: string, mode: string, options: Array<string>, active: boolean): void;
10
+ getDevicePreferredSampleRate(): number;
11
+ };
12
+ export { eventEmitter, AudioManagerModule };
13
+ //# sourceMappingURL=NativeAudioManagerModule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NativeAudioManagerModule.d.ts","sourceRoot":"","sources":["../../../src/specs/NativeAudioManagerModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,kBAAkB,EAEnB,MAAM,cAAc,CAAC;AAGtB,QAAA,MAAM,YAAY,gCAGhB,CAAC;AAQH,QAAA,MAAM,kBAAkB;;;QAGlB,IAAI;2BAGe,IAAI;8BAGD,MAAM,WAAW,OAAO,GAAG,IAAI;qCAK7C,MAAM,QACV,MAAM,WACH,MAAM,MAAM,CAAC,UACd,OAAO,GACd,IAAI;oCAQyB,MAAM;CAGvC,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,4 @@
1
+ import NativeAudioAPIModule from './NativeAudioAPIModule';
2
+ import { AudioManagerModule, eventEmitter } from './NativeAudioManagerModule';
3
+ export { NativeAudioAPIModule, AudioManagerModule, eventEmitter };
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/specs/index.ts"],"names":[],"mappings":"AAEA,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE9E,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { SessionOptions, LockScreenInfo, RemoteControl } from './types';
2
+ import { EmitterSubscription } from 'react-native';
3
+ declare class AudioManager {
4
+ setLockScreenInfo(info: LockScreenInfo): void;
5
+ resetLockScreenInfo(): void;
6
+ setAudioSessionOptions(options: SessionOptions): void;
7
+ getDevicePreferredSampleRate(): number;
8
+ enableRemoteCommand(name: RemoteControl, enabled: boolean, callback?: (value?: number) => void): EmitterSubscription | null;
9
+ }
10
+ declare const _default: AudioManager;
11
+ export default _default;
12
+ //# sourceMappingURL=AudioManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioManager.d.ts","sourceRoot":"","sources":["../../../src/system/AudioManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,cAAM,YAAY;IAChB,iBAAiB,CAAC,IAAI,EAAE,cAAc;IAItC,mBAAmB;IAInB,sBAAsB,CAAC,OAAO,EAAE,cAAc;IAS9C,4BAA4B,IAAI,MAAM;IAItC,mBAAmB,CACjB,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,OAAO,EAChB,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,GAClC,mBAAmB,GAAG,IAAI;CAyF9B;;AAED,wBAAkC"}
@@ -0,0 +1,2 @@
1
+ export { default } from './AudioManager';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/system/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,28 @@
1
+ export type IOSCategory = 'record' | 'ambient' | 'playback' | 'multiRoute' | 'soloAmbient' | 'playAndRecord';
2
+ export type IOSMode = 'default' | 'gameChat' | 'videoChat' | 'voiceChat' | 'measurement' | 'voicePrompt' | 'spokenAudio' | 'moviePlayback' | 'videoRecording';
3
+ export type IOSOption = 'duckOthers' | 'allowAirPlay' | 'mixWithOthers' | 'allowBluetooth' | 'defaultToSpeaker' | 'allowBluetoothA2DP' | 'overrideMutedMicrophoneInterruption' | 'interruptSpokenAudioAndMixWithOthers';
4
+ export interface SessionOptions {
5
+ iosMode?: IOSMode;
6
+ iosOptions?: IOSOption[];
7
+ iosCategory?: IOSCategory;
8
+ active?: boolean;
9
+ }
10
+ export type MediaState = 'state_playing' | 'state_paused' | 'state_stopped';
11
+ interface BaseLockScreenInfo {
12
+ [key: string]: string | boolean | number | undefined;
13
+ }
14
+ export interface LockScreenInfo extends BaseLockScreenInfo {
15
+ title?: string;
16
+ artwork?: string;
17
+ artist?: string;
18
+ album?: string;
19
+ genre?: string;
20
+ duration?: number;
21
+ isLiveStream?: boolean;
22
+ state?: MediaState;
23
+ speed?: number;
24
+ elapsedTime?: number;
25
+ }
26
+ export type RemoteControl = 'play' | 'pause' | 'stop' | 'togglePlayPause' | 'changePlaybackRate' | 'nextTrack' | 'previousTrack' | 'skipForward' | 'skipBackward' | 'seekForward' | 'seekBackward' | 'changePlaybackPosition';
27
+ export {};
28
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/system/types.ts"],"names":[],"mappings":"AAAA,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,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,UAAU,GAAG,eAAe,GAAG,cAAc,GAAG,eAAe,CAAC;AAE5E,UAAU,kBAAkB;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;CACtD;AAED,MAAM,WAAW,cAAe,SAAQ,kBAAkB;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,OAAO,GACP,MAAM,GACN,iBAAiB,GACjB,oBAAoB,GACpB,WAAW,GACX,eAAe,GACf,aAAa,GACb,cAAc,GACd,aAAa,GACb,cAAc,GACd,wBAAwB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-audio-api",
3
- "version": "0.5.6",
3
+ "version": "0.6.0-rc.0",
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"
@@ -48,7 +48,7 @@
48
48
  "format:js": "prettier --write --list-different src",
49
49
  "format:android:cpp": "find android/src/ -path android/src/main/cpp/audioapi/android/libs -iname \"*.h\" -o -iname \"*.cpp\" | xargs clang-format -i",
50
50
  "format:android:kotlin": "ktlint -F 'android/src/main/java/**/*.kt'",
51
- "format:ios": "find ios/ -iname \"*.h\" -o -iname \"*.m\" -o -iname \"*.mm\" -o -iname \"*.cpp\" | xargs clang-format -i",
51
+ "format:ios": "find ios/ \\( -iname \"*.h\" -o -iname \"*.m\" -o -iname \"*.mm\" -o -iname \"*.cpp\" \\) -not -path \"ios/audioapi/ios/*\" | xargs clang-format -i",
52
52
  "format:common": "find common/cpp/ -path 'common/cpp/audioapi/libs' -prune -iname \"*.h\" -o -iname \"*.cpp\" | xargs clang-format -i",
53
53
  "build": "bob build",
54
54
  "prepack": "cp ../../README.md ./README.md",
package/src/api.ts CHANGED
@@ -39,6 +39,7 @@ export { default as BiquadFilterNode } from './core/BiquadFilterNode';
39
39
  export { default as GainNode } from './core/GainNode';
40
40
  export { default as OscillatorNode } from './core/OscillatorNode';
41
41
  export { default as StereoPannerNode } from './core/StereoPannerNode';
42
+ export { default as AudioManager } from './system';
42
43
 
43
44
  export {
44
45
  OscillatorType,
@@ -1,5 +1,6 @@
1
1
  import { IAudioContext } from '../interfaces';
2
2
  import BaseAudioContext from './BaseAudioContext';
3
+ import AudioManager from '../system';
3
4
  import { AudioContextOptions } from '../types';
4
5
  import { NotSupportedError } from '../errors';
5
6
 
@@ -11,7 +12,11 @@ export default class AudioContext extends BaseAudioContext {
11
12
  );
12
13
  }
13
14
 
14
- super(global.createAudioContext(options?.sampleRate));
15
+ super(
16
+ global.createAudioContext(
17
+ options?.sampleRate || AudioManager.getDevicePreferredSampleRate()
18
+ )
19
+ );
15
20
  }
16
21
 
17
22
  async close(): Promise<undefined> {
@@ -0,0 +1,51 @@
1
+ import {
2
+ NativeModules,
3
+ DeviceEventEmitter,
4
+ NativeEventEmitter,
5
+ Platform,
6
+ } from 'react-native';
7
+
8
+ const NativeAudioManagerModule = NativeModules.AudioManagerModule;
9
+ const eventEmitter = Platform.select({
10
+ ios: new NativeEventEmitter(NativeModules.AudioManagerModule),
11
+ android: DeviceEventEmitter,
12
+ });
13
+
14
+ if (!NativeAudioManagerModule || !eventEmitter) {
15
+ throw new Error(
16
+ `Failed to install react-native-audio-api: The native module could not be found.`
17
+ );
18
+ }
19
+
20
+ const AudioManagerModule = {
21
+ setLockScreenInfo(info: {
22
+ [key: string]: string | boolean | number | undefined;
23
+ }): void {
24
+ NativeAudioManagerModule.setLockScreenInfo(info);
25
+ },
26
+ resetLockScreenInfo(): void {
27
+ NativeAudioManagerModule.resetLockScreenInfo();
28
+ },
29
+ enableRemoteCommand(name: string, enabled: boolean): void {
30
+ NativeAudioManagerModule.enableRemoteCommand(name, enabled);
31
+ },
32
+ // audio session
33
+ setAudioSessionOptions(
34
+ category: string,
35
+ mode: string,
36
+ options: Array<string>,
37
+ active: boolean
38
+ ): void {
39
+ NativeAudioManagerModule.setAudioSessionOptions(
40
+ category,
41
+ mode,
42
+ options,
43
+ active
44
+ );
45
+ },
46
+ getDevicePreferredSampleRate(): number {
47
+ return NativeAudioManagerModule.getDevicePreferredSampleRate();
48
+ },
49
+ };
50
+
51
+ export { eventEmitter, AudioManagerModule };
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ import NativeAudioAPIModule from './NativeAudioAPIModule';
4
+ import { AudioManagerModule, eventEmitter } from './NativeAudioManagerModule';
5
+
6
+ export { NativeAudioAPIModule, AudioManagerModule, eventEmitter };
@@ -0,0 +1,122 @@
1
+ import { SessionOptions, LockScreenInfo, RemoteControl } from './types';
2
+ import { AudioManagerModule, eventEmitter } from '../specs';
3
+ import { EmitterSubscription } from 'react-native';
4
+
5
+ class AudioManager {
6
+ setLockScreenInfo(info: LockScreenInfo) {
7
+ AudioManagerModule.setLockScreenInfo(info);
8
+ }
9
+
10
+ resetLockScreenInfo() {
11
+ AudioManagerModule.resetLockScreenInfo();
12
+ }
13
+
14
+ setAudioSessionOptions(options: SessionOptions) {
15
+ AudioManagerModule.setAudioSessionOptions(
16
+ options.iosCategory ?? '',
17
+ options.iosMode ?? '',
18
+ options.iosOptions ?? [],
19
+ options.active ?? true
20
+ );
21
+ }
22
+
23
+ getDevicePreferredSampleRate(): number {
24
+ return AudioManagerModule.getDevicePreferredSampleRate();
25
+ }
26
+
27
+ enableRemoteCommand(
28
+ name: RemoteControl,
29
+ enabled: boolean,
30
+ callback?: (value?: number) => void
31
+ ): EmitterSubscription | null {
32
+ AudioManagerModule.enableRemoteCommand(name, enabled);
33
+
34
+ let subscription = null;
35
+
36
+ if (enabled && callback) {
37
+ switch (name) {
38
+ case 'play':
39
+ subscription = eventEmitter!.addListener('onRemotePlay', callback);
40
+ break;
41
+
42
+ case 'pause':
43
+ subscription = eventEmitter!.addListener('onRemotePause', callback);
44
+ break;
45
+
46
+ case 'stop':
47
+ subscription = eventEmitter!.addListener('onRemoteStop', callback);
48
+ break;
49
+
50
+ case 'togglePlayPause':
51
+ subscription = eventEmitter!.addListener(
52
+ 'onRemoteTogglePlayPause',
53
+ callback
54
+ );
55
+ break;
56
+
57
+ case 'changePlaybackRate':
58
+ subscription = eventEmitter!.addListener(
59
+ 'onRemoteChangePlaybackRate',
60
+ callback
61
+ );
62
+ break;
63
+
64
+ case 'nextTrack':
65
+ subscription = eventEmitter!.addListener(
66
+ 'onRemoteNextTrack',
67
+ callback
68
+ );
69
+ break;
70
+
71
+ case 'previousTrack':
72
+ subscription = eventEmitter!.addListener(
73
+ 'onRemotePreviousTrack',
74
+ callback
75
+ );
76
+ break;
77
+
78
+ case 'skipForward':
79
+ subscription = eventEmitter!.addListener(
80
+ 'onRemoteSkipForward',
81
+ callback
82
+ );
83
+ break;
84
+
85
+ case 'skipBackward':
86
+ subscription = eventEmitter!.addListener(
87
+ 'onRemoteSkipBackward',
88
+ callback
89
+ );
90
+ break;
91
+
92
+ case 'seekForward':
93
+ subscription = eventEmitter!.addListener(
94
+ 'onRemoteSeekForward',
95
+ callback
96
+ );
97
+ break;
98
+
99
+ case 'seekBackward':
100
+ subscription = eventEmitter!.addListener(
101
+ 'onRemoteSeekBackward',
102
+ callback
103
+ );
104
+ break;
105
+
106
+ case 'changePlaybackPosition':
107
+ subscription = eventEmitter!.addListener(
108
+ 'onRemoteChangePlaybackPosition',
109
+ callback
110
+ );
111
+ break;
112
+
113
+ default:
114
+ console.error('Unsupported RemoteControl action:', name);
115
+ }
116
+ }
117
+
118
+ return subscription;
119
+ }
120
+ }
121
+
122
+ export default new AudioManager();
@@ -0,0 +1 @@
1
+ export { default } from './AudioManager';
@@ -0,0 +1,68 @@
1
+ export type IOSCategory =
2
+ | 'record'
3
+ | 'ambient'
4
+ | 'playback'
5
+ | 'multiRoute'
6
+ | 'soloAmbient'
7
+ | 'playAndRecord';
8
+
9
+ export type IOSMode =
10
+ | 'default'
11
+ | 'gameChat'
12
+ | 'videoChat'
13
+ | 'voiceChat'
14
+ | 'measurement'
15
+ | 'voicePrompt'
16
+ | 'spokenAudio'
17
+ | 'moviePlayback'
18
+ | 'videoRecording';
19
+
20
+ export type IOSOption =
21
+ | 'duckOthers'
22
+ | 'allowAirPlay'
23
+ | 'mixWithOthers'
24
+ | 'allowBluetooth'
25
+ | 'defaultToSpeaker'
26
+ | 'allowBluetoothA2DP'
27
+ | 'overrideMutedMicrophoneInterruption'
28
+ | 'interruptSpokenAudioAndMixWithOthers';
29
+
30
+ export interface SessionOptions {
31
+ iosMode?: IOSMode;
32
+ iosOptions?: IOSOption[];
33
+ iosCategory?: IOSCategory;
34
+ active?: boolean;
35
+ }
36
+
37
+ export type MediaState = 'state_playing' | 'state_paused' | 'state_stopped';
38
+
39
+ interface BaseLockScreenInfo {
40
+ [key: string]: string | boolean | number | undefined;
41
+ }
42
+
43
+ export interface LockScreenInfo extends BaseLockScreenInfo {
44
+ title?: string;
45
+ artwork?: string;
46
+ artist?: string;
47
+ album?: string;
48
+ genre?: string;
49
+ duration?: number;
50
+ isLiveStream?: boolean;
51
+ state?: MediaState;
52
+ speed?: number;
53
+ elapsedTime?: number;
54
+ }
55
+
56
+ export type RemoteControl =
57
+ | 'play'
58
+ | 'pause'
59
+ | 'stop'
60
+ | 'togglePlayPause'
61
+ | 'changePlaybackRate'
62
+ | 'nextTrack'
63
+ | 'previousTrack'
64
+ | 'skipForward'
65
+ | 'skipBackward'
66
+ | 'seekForward'
67
+ | 'seekBackward'
68
+ | 'changePlaybackPosition';