react-native-audio-api 0.4.9 → 0.4.10-rc.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 (59) hide show
  1. package/common/cpp/HostObjects/AudioContextHostObject.h +13 -3
  2. package/common/cpp/core/AudioBufferSourceNode.cpp +12 -0
  3. package/common/cpp/core/AudioBufferSourceNode.h +2 -0
  4. package/lib/module/core/AudioContext.js +8 -4
  5. package/lib/module/core/AudioContext.js.map +1 -1
  6. package/lib/module/core/AudioNode.js +1 -0
  7. package/lib/module/core/AudioNode.js.map +1 -1
  8. package/lib/module/core/AudioParam.js +24 -8
  9. package/lib/module/core/AudioParam.js.map +1 -1
  10. package/lib/module/core/BaseAudioContext.js +6 -13
  11. package/lib/module/core/BaseAudioContext.js.map +1 -1
  12. package/lib/module/errors/NotSupportedError.js +10 -0
  13. package/lib/module/errors/NotSupportedError.js.map +1 -0
  14. package/lib/module/errors/index.js +1 -0
  15. package/lib/module/errors/index.js.map +1 -1
  16. package/lib/module/index.js +1 -1
  17. package/lib/module/index.js.map +1 -1
  18. package/lib/module/web-core/AudioContext.js +10 -7
  19. package/lib/module/web-core/AudioContext.js.map +1 -1
  20. package/lib/module/web-core/AudioNode.js +1 -0
  21. package/lib/module/web-core/AudioNode.js.map +1 -1
  22. package/lib/module/web-core/AudioParam.js +24 -8
  23. package/lib/module/web-core/AudioParam.js.map +1 -1
  24. package/lib/typescript/core/AudioContext.d.ts +3 -2
  25. package/lib/typescript/core/AudioContext.d.ts.map +1 -1
  26. package/lib/typescript/core/AudioNode.d.ts +1 -1
  27. package/lib/typescript/core/AudioNode.d.ts.map +1 -1
  28. package/lib/typescript/core/AudioParam.d.ts +7 -7
  29. package/lib/typescript/core/AudioParam.d.ts.map +1 -1
  30. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
  31. package/lib/typescript/errors/NotSupportedError.d.ts +5 -0
  32. package/lib/typescript/errors/NotSupportedError.d.ts.map +1 -0
  33. package/lib/typescript/errors/index.d.ts +1 -0
  34. package/lib/typescript/errors/index.d.ts.map +1 -1
  35. package/lib/typescript/index.d.ts +1 -1
  36. package/lib/typescript/index.d.ts.map +1 -1
  37. package/lib/typescript/interfaces.d.ts +1 -1
  38. package/lib/typescript/interfaces.d.ts.map +1 -1
  39. package/lib/typescript/types.d.ts +4 -1
  40. package/lib/typescript/types.d.ts.map +1 -1
  41. package/lib/typescript/web-core/AudioContext.d.ts +3 -3
  42. package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
  43. package/lib/typescript/web-core/AudioNode.d.ts +1 -1
  44. package/lib/typescript/web-core/AudioNode.d.ts.map +1 -1
  45. package/lib/typescript/web-core/AudioParam.d.ts +7 -7
  46. package/lib/typescript/web-core/AudioParam.d.ts.map +1 -1
  47. package/package.json +1 -1
  48. package/src/core/AudioContext.ts +12 -4
  49. package/src/core/AudioNode.ts +3 -1
  50. package/src/core/AudioParam.ts +48 -15
  51. package/src/core/BaseAudioContext.ts +9 -16
  52. package/src/errors/NotSupportedError.tsx +8 -0
  53. package/src/errors/index.ts +1 -0
  54. package/src/index.ts +1 -0
  55. package/src/interfaces.ts +1 -1
  56. package/src/types.ts +5 -1
  57. package/src/web-core/AudioContext.tsx +20 -10
  58. package/src/web-core/AudioNode.tsx +3 -1
  59. package/src/web-core/AudioParam.tsx +48 -15
@@ -12,5 +12,5 @@ export { default as GainNode } from './core/GainNode';
12
12
  export { default as OscillatorNode } from './core/OscillatorNode';
13
13
  export { default as StereoPannerNode } from './core/StereoPannerNode';
14
14
  export { OscillatorType, BiquadFilterType, ChannelCountMode, ChannelInterpretation, ContextState, WindowType, PeriodicWaveConstraints, } from './types';
15
- export { IndexSizeError, InvalidAccessError, InvalidStateError, RangeError, } from './errors';
15
+ export { IndexSizeError, InvalidAccessError, InvalidStateError, RangeError, NotSupportedError, } from './errors';
16
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAMA,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,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,GACX,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAMA,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,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"}
@@ -15,7 +15,7 @@ export interface IBaseAudioContext {
15
15
  decodeAudioDataSource: (sourcePath: string) => Promise<IAudioBuffer>;
16
16
  }
17
17
  export interface IAudioContext extends IBaseAudioContext {
18
- close(): void;
18
+ close(): Promise<undefined>;
19
19
  }
20
20
  export interface IAudioNode {
21
21
  readonly context: BaseAudioContext;
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/interfaces.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/interfaces.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,13 @@
1
1
  export type ChannelCountMode = 'max' | 'clamped-max' | 'explicit';
2
2
  export type ChannelInterpretation = 'speakers' | 'discrete';
3
3
  export type BiquadFilterType = 'lowpass' | 'highpass' | 'bandpass' | 'lowshelf' | 'highshelf' | 'peaking' | 'notch' | 'allpass';
4
- export type ContextState = 'running' | 'closed';
4
+ export type ContextState = 'running' | 'closed' | `suspended`;
5
5
  export type OscillatorType = 'sine' | 'square' | 'sawtooth' | 'triangle' | 'custom';
6
6
  export interface PeriodicWaveConstraints {
7
7
  disableNormalization: boolean;
8
8
  }
9
+ export interface AudioContextOptions {
10
+ sampleRate: number;
11
+ }
9
12
  export type WindowType = 'blackman' | 'hann';
10
13
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,aAAa,GAAG,UAAU,CAAC;AAElE,MAAM,MAAM,qBAAqB,GAAG,UAAU,GAAG,UAAU,CAAC;AAE5D,MAAM,MAAM,gBAAgB,GACxB,SAAS,GACT,UAAU,GACV,UAAU,GACV,UAAU,GACV,WAAW,GACX,SAAS,GACT,OAAO,GACP,SAAS,CAAC;AAEd,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEhD,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,QAAQ,GACR,UAAU,GACV,UAAU,GACV,QAAQ,CAAC;AAEb,MAAM,WAAW,uBAAuB;IACtC,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,aAAa,GAAG,UAAU,CAAC;AAElE,MAAM,MAAM,qBAAqB,GAAG,UAAU,GAAG,UAAU,CAAC;AAE5D,MAAM,MAAM,gBAAgB,GACxB,SAAS,GACT,UAAU,GACV,UAAU,GACV,UAAU,GACV,WAAW,GACX,SAAS,GACT,OAAO,GACP,SAAS,CAAC;AAEd,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE9D,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,QAAQ,GACR,UAAU,GACV,UAAU,GACV,QAAQ,CAAC;AAEb,MAAM,WAAW,uBAAuB;IACtC,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC"}
@@ -1,4 +1,4 @@
1
- import { ContextState, PeriodicWaveConstraints } from '../types';
1
+ import { ContextState, PeriodicWaveConstraints, AudioContextOptions } from '../types';
2
2
  import BaseAudioContext from './BaseAudioContext';
3
3
  import AnalyserNode from './AnalyserNode';
4
4
  import AudioDestinationNode from './AudioDestinationNode';
@@ -13,7 +13,7 @@ export default class AudioContext implements BaseAudioContext {
13
13
  readonly context: globalThis.AudioContext;
14
14
  readonly destination: AudioDestinationNode;
15
15
  readonly sampleRate: number;
16
- constructor(_sampleRate?: number);
16
+ constructor(options?: AudioContextOptions);
17
17
  get currentTime(): number;
18
18
  get state(): ContextState;
19
19
  createOscillator(): OscillatorNode;
@@ -25,6 +25,6 @@ export default class AudioContext implements BaseAudioContext {
25
25
  createPeriodicWave(real: number[], imag: number[], constraints?: PeriodicWaveConstraints): PeriodicWave;
26
26
  createAnalyser(): AnalyserNode;
27
27
  decodeAudioDataSource(source: string): Promise<AudioBuffer>;
28
- close(): Promise<void>;
28
+ close(): Promise<undefined>;
29
29
  }
30
30
  //# sourceMappingURL=AudioContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AudioContext.d.ts","sourceRoot":"","sources":["../../../src/web-core/AudioContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAEjE,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAC1D,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,qBAAqB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAElD,MAAM,CAAC,OAAO,OAAO,YAAa,YAAW,gBAAgB;IAC3D,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,YAAY,CAAC;IAE1C,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAEhB,WAAW,CAAC,EAAE,MAAM;IAOhC,IAAW,WAAW,IAAI,MAAM,CAE/B;IAED,IAAW,KAAK,IAAI,YAAY,CAE/B;IAED,gBAAgB,IAAI,cAAc;IAIlC,UAAU,IAAI,QAAQ;IAItB,kBAAkB,IAAI,gBAAgB;IAItC,kBAAkB,IAAI,gBAAgB;IAItC,kBAAkB,IAAI,qBAAqB;IAI3C,YAAY,CACV,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,WAAW;IAwBd,kBAAkB,CAChB,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE,MAAM,EAAE,EACd,WAAW,CAAC,EAAE,uBAAuB,GACpC,YAAY;IAYf,cAAc,IAAI,YAAY;IAIxB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAQ3D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
1
+ {"version":3,"file":"AudioContext.d.ts","sourceRoot":"","sources":["../../../src/web-core/AudioContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,mBAAmB,EACpB,MAAM,UAAU,CAAC;AAElB,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAC1D,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,qBAAqB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAElD,MAAM,CAAC,OAAO,OAAO,YAAa,YAAW,gBAAgB;IAC3D,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,YAAY,CAAC;IAE1C,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAEhB,OAAO,CAAC,EAAE,mBAAmB;IAazC,IAAW,WAAW,IAAI,MAAM,CAE/B;IAED,IAAW,KAAK,IAAI,YAAY,CAE/B;IAED,gBAAgB,IAAI,cAAc;IAIlC,UAAU,IAAI,QAAQ;IAItB,kBAAkB,IAAI,gBAAgB;IAItC,kBAAkB,IAAI,gBAAgB;IAItC,kBAAkB,IAAI,qBAAqB;IAI3C,YAAY,CACV,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,WAAW;IAwBd,kBAAkB,CAChB,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE,MAAM,EAAE,EACd,WAAW,CAAC,EAAE,uBAAuB,GACpC,YAAY;IAYf,cAAc,IAAI,YAAY;IAIxB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAQ3D,KAAK,IAAI,OAAO,CAAC,SAAS,CAAC;CAGlC"}
@@ -9,7 +9,7 @@ export default class AudioNode {
9
9
  readonly channelInterpretation: ChannelInterpretation;
10
10
  protected readonly node: globalThis.AudioNode;
11
11
  constructor(context: BaseAudioContext, node: globalThis.AudioNode);
12
- connect(destination: AudioNode): void;
12
+ connect(destination: AudioNode): AudioNode;
13
13
  disconnect(destination?: AudioNode): void;
14
14
  }
15
15
  //# sourceMappingURL=AudioNode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AudioNode.d.ts","sourceRoot":"","sources":["../../../src/web-core/AudioNode.tsx"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEnE,MAAM,CAAC,OAAO,OAAO,SAAS;IAC5B,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IAEtD,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC;gBAElC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,UAAU,CAAC,SAAS;IAU1D,OAAO,CAAC,WAAW,EAAE,SAAS,GAAG,IAAI;IAQrC,UAAU,CAAC,WAAW,CAAC,EAAE,SAAS,GAAG,IAAI;CAQjD"}
1
+ {"version":3,"file":"AudioNode.d.ts","sourceRoot":"","sources":["../../../src/web-core/AudioNode.tsx"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEnE,MAAM,CAAC,OAAO,OAAO,SAAS;IAC5B,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IAEtD,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC;gBAElC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,UAAU,CAAC,SAAS;IAU1D,OAAO,CAAC,WAAW,EAAE,SAAS,GAAG,SAAS;IAU1C,UAAU,CAAC,WAAW,CAAC,EAAE,SAAS,GAAG,IAAI;CAQjD"}
@@ -6,12 +6,12 @@ export default class AudioParam {
6
6
  constructor(param: globalThis.AudioParam);
7
7
  get value(): number;
8
8
  set value(value: number);
9
- setValueAtTime(value: number, startTime: number): void;
10
- linearRampToValueAtTime(value: number, endTime: number): void;
11
- exponentialRampToValueAtTime(value: number, endTime: number): void;
12
- setTargetAtTime(target: number, startTime: number, timeConstant: number): void;
13
- setValueCurveAtTime(values: number[], startTime: number, duration: number): void;
14
- cancelScheduledValues(cancelTime: number): void;
15
- cancelAndHoldAtTime(cancelTime: number): void;
9
+ setValueAtTime(value: number, startTime: number): AudioParam;
10
+ linearRampToValueAtTime(value: number, endTime: number): AudioParam;
11
+ exponentialRampToValueAtTime(value: number, endTime: number): AudioParam;
12
+ setTargetAtTime(target: number, startTime: number, timeConstant: number): AudioParam;
13
+ setValueCurveAtTime(values: number[], startTime: number, duration: number): AudioParam;
14
+ cancelScheduledValues(cancelTime: number): AudioParam;
15
+ cancelAndHoldAtTime(cancelTime: number): AudioParam;
16
16
  }
17
17
  //# sourceMappingURL=AudioParam.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AudioParam.d.ts","sourceRoot":"","sources":["../../../src/web-core/AudioParam.tsx"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,UAAU;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwB;gBAElC,KAAK,EAAE,UAAU,CAAC,UAAU;IAOxC,IAAW,KAAK,IAAI,MAAM,CAEzB;IAED,IAAW,KAAK,CAAC,KAAK,EAAE,MAAM,EAE7B;IAEM,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAUtD,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAU7D,4BAA4B,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAUlE,eAAe,CACpB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACnB,IAAI;IAUA,mBAAmB,CACxB,MAAM,EAAE,MAAM,EAAE,EAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,IAAI;IAcA,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAU/C,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;CASrD"}
1
+ {"version":3,"file":"AudioParam.d.ts","sourceRoot":"","sources":["../../../src/web-core/AudioParam.tsx"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,UAAU;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwB;gBAElC,KAAK,EAAE,UAAU,CAAC,UAAU;IAOxC,IAAW,KAAK,IAAI,MAAM,CAEzB;IAED,IAAW,KAAK,CAAC,KAAK,EAAE,MAAM,EAE7B;IAEM,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU;IAY5D,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU;IAYnE,4BAA4B,CACjC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GACd,UAAU;IAYN,eAAe,CACpB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACnB,UAAU;IAkBN,mBAAmB,CACxB,MAAM,EAAE,MAAM,EAAE,EAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,UAAU;IA0BN,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU;IAYrD,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU;CAW3D"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-audio-api",
3
- "version": "0.4.9",
3
+ "version": "0.4.10-rc.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
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -1,12 +1,20 @@
1
1
  import { IAudioContext } from '../interfaces';
2
2
  import BaseAudioContext from './BaseAudioContext';
3
+ import { AudioContextOptions } from '../types';
4
+ import { NotSupportedError } from '../errors';
3
5
 
4
6
  export default class AudioContext extends BaseAudioContext {
5
- constructor(sampleRate?: number) {
6
- super(global.__AudioAPIInstaller.createAudioContext(sampleRate));
7
+ constructor(options?: AudioContextOptions) {
8
+ if (options && (options.sampleRate < 8000 || options.sampleRate > 96000)) {
9
+ throw new NotSupportedError(
10
+ `The provided sampleRate is not supported: ${options.sampleRate}`
11
+ );
12
+ }
13
+
14
+ super(global.__AudioAPIInstaller.createAudioContext(options?.sampleRate));
7
15
  }
8
16
 
9
- close(): void {
10
- (this.context as IAudioContext).close();
17
+ async close(): Promise<undefined> {
18
+ await (this.context as IAudioContext).close();
11
19
  }
12
20
  }
@@ -22,7 +22,7 @@ export default class AudioNode {
22
22
  this.channelInterpretation = this.node.channelInterpretation;
23
23
  }
24
24
 
25
- public connect(destination: AudioNode): void {
25
+ public connect(destination: AudioNode): AudioNode {
26
26
  if (this.context !== destination.context) {
27
27
  throw new InvalidAccessError(
28
28
  'The AudioNodes are from different BaseAudioContexts'
@@ -30,6 +30,8 @@ export default class AudioNode {
30
30
  }
31
31
 
32
32
  this.node.connect(destination.node);
33
+
34
+ return destination;
33
35
  }
34
36
 
35
37
  public disconnect(destination?: AudioNode): void {
@@ -1,5 +1,5 @@
1
1
  import { IAudioParam } from '../interfaces';
2
- import { RangeError } from '../errors';
2
+ import { RangeError, InvalidStateError } from '../errors';
3
3
 
4
4
  export default class AudioParam {
5
5
  readonly defaultValue: number;
@@ -23,81 +23,114 @@ export default class AudioParam {
23
23
  this.audioParam.value = value;
24
24
  }
25
25
 
26
- public setValueAtTime(value: number, startTime: number): void {
26
+ public setValueAtTime(value: number, startTime: number): AudioParam {
27
27
  if (startTime < 0) {
28
28
  throw new RangeError(
29
- `Time must be a finite non-negative number: ${startTime}`
29
+ `startTime must be a finite non-negative number: ${startTime}`
30
30
  );
31
31
  }
32
32
 
33
33
  this.audioParam.setValueAtTime(value, startTime);
34
+
35
+ return this;
34
36
  }
35
37
 
36
- public linearRampToValueAtTime(value: number, endTime: number): void {
38
+ public linearRampToValueAtTime(value: number, endTime: number): AudioParam {
37
39
  if (endTime < 0) {
38
40
  throw new RangeError(
39
- `Time must be a finite non-negative number: ${endTime}`
41
+ `endTime must be a finite non-negative number: ${endTime}`
40
42
  );
41
43
  }
42
44
 
43
45
  this.audioParam.linearRampToValueAtTime(value, endTime);
46
+
47
+ return this;
44
48
  }
45
49
 
46
- public exponentialRampToValueAtTime(value: number, endTime: number): void {
50
+ public exponentialRampToValueAtTime(
51
+ value: number,
52
+ endTime: number
53
+ ): AudioParam {
47
54
  if (endTime < 0) {
48
55
  throw new RangeError(
49
- `Time must be a finite non-negative number: ${endTime}`
56
+ `endTime must be a finite non-negative number: ${endTime}`
50
57
  );
51
58
  }
52
59
 
53
60
  this.audioParam.exponentialRampToValueAtTime(value, endTime);
61
+
62
+ return this;
54
63
  }
55
64
 
56
65
  public setTargetAtTime(
57
66
  target: number,
58
67
  startTime: number,
59
68
  timeConstant: number
60
- ): void {
69
+ ): AudioParam {
61
70
  if (startTime < 0) {
62
71
  throw new RangeError(
63
- `Time must be a finite non-negative number: ${startTime}`
72
+ `startTime must be a finite non-negative number: ${startTime}`
73
+ );
74
+ }
75
+
76
+ if (timeConstant < 0) {
77
+ throw new RangeError(
78
+ `timeConstant must be a finite non-negative number: ${startTime}`
64
79
  );
65
80
  }
66
81
 
67
82
  this.audioParam.setTargetAtTime(target, startTime, timeConstant);
83
+
84
+ return this;
68
85
  }
69
86
 
70
87
  public setValueCurveAtTime(
71
88
  values: number[],
72
89
  startTime: number,
73
90
  duration: number
74
- ): void {
91
+ ): AudioParam {
75
92
  if (startTime < 0) {
76
93
  throw new RangeError(
77
- `Time must be a finite non-negative number: ${startTime}`
94
+ `startTime must be a finite non-negative number: ${startTime}`
78
95
  );
79
96
  }
80
97
 
98
+ if (duration < 0) {
99
+ throw new RangeError(
100
+ `duration must be a finite non-negative number: ${startTime}`
101
+ );
102
+ }
103
+
104
+ if (values.length < 2) {
105
+ throw new InvalidStateError(`values must contain at least two values`);
106
+ }
107
+
81
108
  this.audioParam.setValueCurveAtTime(values, startTime, duration);
109
+
110
+ return this;
82
111
  }
83
112
 
84
- public cancelScheduledValues(cancelTime: number): void {
113
+ public cancelScheduledValues(cancelTime: number): AudioParam {
85
114
  if (cancelTime < 0) {
86
115
  throw new RangeError(
87
- `Time must be a finite non-negative number: ${cancelTime}`
116
+ `cancelTime must be a finite non-negative number: ${cancelTime}`
88
117
  );
89
118
  }
90
119
 
91
120
  this.audioParam.cancelScheduledValues(cancelTime);
121
+
122
+ return this;
92
123
  }
93
124
 
94
- public cancelAndHoldAtTime(cancelTime: number): void {
125
+ public cancelAndHoldAtTime(cancelTime: number): AudioParam {
95
126
  if (cancelTime < 0) {
96
127
  throw new RangeError(
97
- `Time must be a finite non-negative number: ${cancelTime}`
128
+ `cancelTime must be a finite non-negative number: ${cancelTime}`
98
129
  );
99
130
  }
100
131
 
101
132
  this.audioParam.cancelAndHoldAtTime(cancelTime);
133
+
134
+ return this;
102
135
  }
103
136
  }
@@ -9,7 +9,7 @@ import AudioBufferSourceNode from './AudioBufferSourceNode';
9
9
  import AudioBuffer from './AudioBuffer';
10
10
  import PeriodicWave from './PeriodicWave';
11
11
  import AnalyserNode from './AnalyserNode';
12
- import { InvalidAccessError } from '../errors';
12
+ import { InvalidAccessError, NotSupportedError } from '../errors';
13
13
 
14
14
  export default class BaseAudioContext {
15
15
  readonly destination: AudioDestinationNode;
@@ -56,20 +56,20 @@ export default class BaseAudioContext {
56
56
  sampleRate: number
57
57
  ): AudioBuffer {
58
58
  if (numOfChannels < 1 || numOfChannels >= 32) {
59
- throw new RangeError(
59
+ throw new NotSupportedError(
60
60
  `The number of channels provided (${numOfChannels}) is outside the range [1, 32]`
61
61
  );
62
62
  }
63
63
 
64
64
  if (length <= 0) {
65
- throw new RangeError(
65
+ throw new NotSupportedError(
66
66
  `The number of frames provided (${length}) is less than or equal to the minimum bound (0)`
67
67
  );
68
68
  }
69
69
 
70
- if (sampleRate <= 0) {
71
- throw new RangeError(
72
- `The sample rate provided (${sampleRate}) is outside the range [3000, 768000]`
70
+ if (sampleRate < 8000 || sampleRate > 96000) {
71
+ throw new NotSupportedError(
72
+ `The sample rate provided (${sampleRate}) is outside the range [8000, 96000]`
73
73
  );
74
74
  }
75
75
 
@@ -106,15 +106,8 @@ export default class BaseAudioContext {
106
106
  sourcePath = sourcePath.replace('file://', '');
107
107
  }
108
108
 
109
- try {
110
- const buffer = await this.context.decodeAudioDataSource(sourcePath);
111
- return new AudioBuffer(buffer);
112
- } catch (error) {
113
- // Handle error gracefully, for example log it or throw it further with a custom message
114
- console.error('Error decoding audio data source:', error);
115
- throw new Error(
116
- `Failed to decode audio data from source: ${sourcePath}.`
117
- );
118
- }
109
+ return new AudioBuffer(
110
+ await this.context.decodeAudioDataSource(sourcePath)
111
+ );
119
112
  }
120
113
  }
@@ -0,0 +1,8 @@
1
+ class NotSupportedError extends Error {
2
+ constructor(message: string) {
3
+ super(message);
4
+ this.name = 'NotSupportedError';
5
+ }
6
+ }
7
+
8
+ export default NotSupportedError;
@@ -2,3 +2,4 @@ export { default as IndexSizeError } from './IndexSizeError';
2
2
  export { default as InvalidAccessError } from './InvalidAccessError';
3
3
  export { default as InvalidStateError } from './InvalidStateError';
4
4
  export { default as RangeError } from './RangeError';
5
+ export { default as NotSupportedError } from './NotSupportedError';
package/src/index.ts CHANGED
@@ -33,4 +33,5 @@ export {
33
33
  InvalidAccessError,
34
34
  InvalidStateError,
35
35
  RangeError,
36
+ NotSupportedError,
36
37
  } from './errors';
package/src/interfaces.ts CHANGED
@@ -33,7 +33,7 @@ export interface IBaseAudioContext {
33
33
  }
34
34
 
35
35
  export interface IAudioContext extends IBaseAudioContext {
36
- close(): void;
36
+ close(): Promise<undefined>;
37
37
  }
38
38
 
39
39
  export interface IAudioNode {
package/src/types.ts CHANGED
@@ -12,7 +12,7 @@ export type BiquadFilterType =
12
12
  | 'notch'
13
13
  | 'allpass';
14
14
 
15
- export type ContextState = 'running' | 'closed';
15
+ export type ContextState = 'running' | 'closed' | `suspended`;
16
16
 
17
17
  export type OscillatorType =
18
18
  | 'sine'
@@ -25,4 +25,8 @@ export interface PeriodicWaveConstraints {
25
25
  disableNormalization: boolean;
26
26
  }
27
27
 
28
+ export interface AudioContextOptions {
29
+ sampleRate: number;
30
+ }
31
+
28
32
  export type WindowType = 'blackman' | 'hann';
@@ -1,5 +1,9 @@
1
- import { ContextState, PeriodicWaveConstraints } from '../types';
2
- import { RangeError, InvalidAccessError } from '../errors';
1
+ import {
2
+ ContextState,
3
+ PeriodicWaveConstraints,
4
+ AudioContextOptions,
5
+ } from '../types';
6
+ import { InvalidAccessError, NotSupportedError } from '../errors';
3
7
  import BaseAudioContext from './BaseAudioContext';
4
8
  import AnalyserNode from './AnalyserNode';
5
9
  import AudioDestinationNode from './AudioDestinationNode';
@@ -17,8 +21,14 @@ export default class AudioContext implements BaseAudioContext {
17
21
  readonly destination: AudioDestinationNode;
18
22
  readonly sampleRate: number;
19
23
 
20
- constructor(_sampleRate?: number) {
21
- this.context = new window.AudioContext();
24
+ constructor(options?: AudioContextOptions) {
25
+ if (options && (options.sampleRate < 8000 || options.sampleRate > 96000)) {
26
+ throw new NotSupportedError(
27
+ `The provided sampleRate is not supported: ${options.sampleRate}`
28
+ );
29
+ }
30
+
31
+ this.context = new window.AudioContext(options);
22
32
 
23
33
  this.sampleRate = this.context.sampleRate;
24
34
  this.destination = new AudioDestinationNode(this, this.context.destination);
@@ -58,20 +68,20 @@ export default class AudioContext implements BaseAudioContext {
58
68
  sampleRate: number
59
69
  ): AudioBuffer {
60
70
  if (numOfChannels < 1 || numOfChannels >= 32) {
61
- throw new RangeError(
71
+ throw new NotSupportedError(
62
72
  `The number of channels provided (${numOfChannels}) is outside the range [1, 32]`
63
73
  );
64
74
  }
65
75
 
66
76
  if (length <= 0) {
67
- throw new RangeError(
77
+ throw new NotSupportedError(
68
78
  `The number of frames provided (${length}) is less than or equal to the minimum bound (0)`
69
79
  );
70
80
  }
71
81
 
72
- if (sampleRate <= 0) {
73
- throw new RangeError(
74
- `The sample rate provided (${sampleRate}) is outside the range [3000, 768000]`
82
+ if (sampleRate < 8000 || sampleRate > 96000) {
83
+ throw new NotSupportedError(
84
+ `The sample rate provided (${sampleRate}) is outside the range [8000, 96000]`
75
85
  );
76
86
  }
77
87
 
@@ -108,7 +118,7 @@ export default class AudioContext implements BaseAudioContext {
108
118
  return new AudioBuffer(await this.context.decodeAudioData(arrayBuffer));
109
119
  }
110
120
 
111
- async close(): Promise<void> {
121
+ async close(): Promise<undefined> {
112
122
  await this.context.close();
113
123
  }
114
124
  }
@@ -21,12 +21,14 @@ export default class AudioNode {
21
21
  this.channelInterpretation = this.node.channelInterpretation;
22
22
  }
23
23
 
24
- public connect(destination: AudioNode): void {
24
+ public connect(destination: AudioNode): AudioNode {
25
25
  if (this.context !== destination.context) {
26
26
  throw new Error('The AudioNodes are from different BaseAudioContexts');
27
27
  }
28
28
 
29
29
  this.node.connect(destination.node);
30
+
31
+ return destination;
30
32
  }
31
33
 
32
34
  public disconnect(destination?: AudioNode): void {