react-native-audio-api 0.10.0-nightly-d3a7f65-20251028 → 0.10.0-nightly-e16d7ff-20251030

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 (92) hide show
  1. package/RNAudioAPI.podspec +7 -6
  2. package/android/src/main/cpp/audioapi/CMakeLists.txt +6 -0
  3. package/android/src/main/java/com/swmansion/audioapi/system/MediaNotificationManager.kt +11 -0
  4. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +18 -0
  5. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +1 -0
  6. package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.cpp +47 -0
  7. package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.h +20 -0
  8. package/common/cpp/audioapi/core/AudioNode.h +3 -2
  9. package/common/cpp/audioapi/core/BaseAudioContext.cpp +10 -0
  10. package/common/cpp/audioapi/core/BaseAudioContext.h +2 -0
  11. package/common/cpp/audioapi/core/effects/ConvolverNode.cpp +210 -0
  12. package/common/cpp/audioapi/core/effects/ConvolverNode.h +55 -0
  13. package/common/cpp/audioapi/core/sources/StreamerNode.cpp +59 -58
  14. package/common/cpp/audioapi/core/sources/StreamerNode.h +37 -8
  15. package/common/cpp/audioapi/core/utils/AudioNodeManager.cpp +5 -0
  16. package/common/cpp/audioapi/dsp/AudioUtils.cpp +1 -1
  17. package/common/cpp/audioapi/dsp/Convolver.cpp +213 -0
  18. package/common/cpp/audioapi/dsp/Convolver.h +45 -0
  19. package/common/cpp/audioapi/dsp/FFT.cpp +0 -26
  20. package/common/cpp/audioapi/dsp/FFT.h +26 -2
  21. package/common/cpp/audioapi/utils/AlignedAllocator.hpp +50 -0
  22. package/common/cpp/audioapi/utils/AudioBus.cpp +28 -0
  23. package/common/cpp/audioapi/utils/AudioBus.h +3 -0
  24. package/common/cpp/test/CMakeLists.txt +16 -14
  25. package/lib/commonjs/api.js +7 -0
  26. package/lib/commonjs/api.js.map +1 -1
  27. package/lib/commonjs/api.web.js +8 -0
  28. package/lib/commonjs/api.web.js.map +1 -1
  29. package/lib/commonjs/core/BaseAudioContext.js +12 -0
  30. package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
  31. package/lib/commonjs/core/ConvolverNode.js +37 -0
  32. package/lib/commonjs/core/ConvolverNode.js.map +1 -0
  33. package/lib/commonjs/types.js +4 -0
  34. package/lib/commonjs/web-core/AudioContext.js +12 -0
  35. package/lib/commonjs/web-core/AudioContext.js.map +1 -1
  36. package/lib/commonjs/web-core/ConvolverNode.js +40 -0
  37. package/lib/commonjs/web-core/ConvolverNode.js.map +1 -0
  38. package/lib/commonjs/web-core/ConvolverNodeOptions.js +6 -0
  39. package/lib/commonjs/web-core/ConvolverNodeOptions.js.map +1 -0
  40. package/lib/commonjs/web-core/OfflineAudioContext.js +12 -0
  41. package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
  42. package/lib/module/api.js +1 -0
  43. package/lib/module/api.js.map +1 -1
  44. package/lib/module/api.web.js +1 -0
  45. package/lib/module/api.web.js.map +1 -1
  46. package/lib/module/core/BaseAudioContext.js +12 -0
  47. package/lib/module/core/BaseAudioContext.js.map +1 -1
  48. package/lib/module/core/ConvolverNode.js +31 -0
  49. package/lib/module/core/ConvolverNode.js.map +1 -0
  50. package/lib/module/types.js +2 -0
  51. package/lib/module/web-core/AudioContext.js +12 -0
  52. package/lib/module/web-core/AudioContext.js.map +1 -1
  53. package/lib/module/web-core/ConvolverNode.js +34 -0
  54. package/lib/module/web-core/ConvolverNode.js.map +1 -0
  55. package/lib/module/web-core/ConvolverNodeOptions.js +4 -0
  56. package/lib/module/web-core/ConvolverNodeOptions.js.map +1 -0
  57. package/lib/module/web-core/OfflineAudioContext.js +12 -0
  58. package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
  59. package/lib/typescript/api.d.ts +1 -0
  60. package/lib/typescript/api.d.ts.map +1 -1
  61. package/lib/typescript/api.web.d.ts +1 -0
  62. package/lib/typescript/api.web.d.ts.map +1 -1
  63. package/lib/typescript/core/BaseAudioContext.d.ts +3 -1
  64. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
  65. package/lib/typescript/core/ConvolverNode.d.ts +12 -0
  66. package/lib/typescript/core/ConvolverNode.d.ts.map +1 -0
  67. package/lib/typescript/interfaces.d.ts +5 -0
  68. package/lib/typescript/interfaces.d.ts.map +1 -1
  69. package/lib/typescript/types.d.ts +5 -0
  70. package/lib/typescript/types.d.ts.map +1 -1
  71. package/lib/typescript/web-core/AudioContext.d.ts +3 -0
  72. package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
  73. package/lib/typescript/web-core/BaseAudioContext.d.ts +2 -0
  74. package/lib/typescript/web-core/BaseAudioContext.d.ts.map +1 -1
  75. package/lib/typescript/web-core/ConvolverNode.d.ts +11 -0
  76. package/lib/typescript/web-core/ConvolverNode.d.ts.map +1 -0
  77. package/lib/typescript/web-core/ConvolverNodeOptions.d.ts +6 -0
  78. package/lib/typescript/web-core/ConvolverNodeOptions.d.ts.map +1 -0
  79. package/lib/typescript/web-core/OfflineAudioContext.d.ts +3 -0
  80. package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
  81. package/package.json +1 -1
  82. package/src/api.ts +1 -0
  83. package/src/api.web.ts +1 -0
  84. package/src/core/BaseAudioContext.ts +23 -0
  85. package/src/core/ConvolverNode.ts +35 -0
  86. package/src/interfaces.ts +11 -0
  87. package/src/types.ts +7 -0
  88. package/src/web-core/AudioContext.tsx +25 -0
  89. package/src/web-core/BaseAudioContext.tsx +2 -0
  90. package/src/web-core/ConvolverNode.tsx +43 -0
  91. package/src/web-core/ConvolverNodeOptions.tsx +6 -0
  92. package/src/web-core/OfflineAudioContext.tsx +25 -0
package/src/interfaces.ts CHANGED
@@ -8,6 +8,8 @@ import {
8
8
  WindowType,
9
9
  } from './types';
10
10
 
11
+ // IMPORTANT: use only IClass, because it is a part of contract between cpp host object and js layer
12
+
11
13
  export type WorkletNodeCallback = (
12
14
  audioData: Array<ArrayBuffer>,
13
15
  channelCount: number
@@ -75,6 +77,10 @@ export interface IBaseAudioContext {
75
77
  disableNormalization: boolean
76
78
  ) => IPeriodicWave;
77
79
  createAnalyser: () => IAnalyserNode;
80
+ createConvolver: (
81
+ buffer: IAudioBuffer | undefined,
82
+ disableNormalization: boolean
83
+ ) => IConvolverNode;
78
84
  createStreamer: () => IStreamerNode;
79
85
  }
80
86
 
@@ -184,6 +190,11 @@ export interface IAudioBufferQueueSourceNode
184
190
  pause: () => void;
185
191
  }
186
192
 
193
+ export interface IConvolverNode extends IAudioNode {
194
+ buffer: IAudioBuffer | null;
195
+ normalize: boolean;
196
+ }
197
+
187
198
  export interface IAudioBuffer {
188
199
  readonly length: number;
189
200
  readonly duration: number;
package/src/types.ts CHANGED
@@ -1,3 +1,5 @@
1
+ import AudioBuffer from './core/AudioBuffer';
2
+
1
3
  export type ChannelCountMode = 'max' | 'clamped-max' | 'explicit';
2
4
 
3
5
  export type ChannelInterpretation = 'speakers' | 'discrete';
@@ -50,3 +52,8 @@ export interface AudioBufferBaseSourceNodeOptions {
50
52
  }
51
53
 
52
54
  export type ProcessorMode = 'processInPlace' | 'processThrough';
55
+
56
+ export interface ConvolverNodeOptions {
57
+ buffer?: AudioBuffer | null;
58
+ disableNormalization?: boolean;
59
+ }
@@ -15,6 +15,8 @@ import GainNode from './GainNode';
15
15
  import OscillatorNode from './OscillatorNode';
16
16
  import PeriodicWave from './PeriodicWave';
17
17
  import StereoPannerNode from './StereoPannerNode';
18
+ import ConvolverNode from './ConvolverNode';
19
+ import { ConvolverNodeOptions } from './ConvolverNodeOptions';
18
20
 
19
21
  import { globalWasmPromise, globalTag } from './custom/LoadCustomWasm';
20
22
  import ConstantSourceNode from './ConstantSourceNode';
@@ -70,6 +72,29 @@ export default class AudioContext implements BaseAudioContext {
70
72
  return new BiquadFilterNode(this, this.context.createBiquadFilter());
71
73
  }
72
74
 
75
+ createConvolver(options?: ConvolverNodeOptions): ConvolverNode {
76
+ if (options?.buffer) {
77
+ const numberOfChannels = options.buffer.numberOfChannels;
78
+ if (
79
+ numberOfChannels !== 1 &&
80
+ numberOfChannels !== 2 &&
81
+ numberOfChannels !== 4
82
+ ) {
83
+ throw new NotSupportedError(
84
+ `The number of channels provided (${numberOfChannels}) in impulse response for ConvolverNode buffer must be 1 or 2 or 4.`
85
+ );
86
+ }
87
+ }
88
+ const buffer = options?.buffer ?? null;
89
+ const disableNormalization = options?.disableNormalization ?? false;
90
+ return new ConvolverNode(
91
+ this,
92
+ this.context.createConvolver(),
93
+ buffer,
94
+ disableNormalization
95
+ );
96
+ }
97
+
73
98
  async createBufferSource(
74
99
  options?: AudioBufferBaseSourceNodeOptions
75
100
  ): Promise<AudioBufferSourceNode> {
@@ -9,6 +9,7 @@ import OscillatorNode from './OscillatorNode';
9
9
  import PeriodicWave from './PeriodicWave';
10
10
  import StereoPannerNode from './StereoPannerNode';
11
11
  import ConstantSourceNode from './ConstantSourceNode';
12
+ import ConvolverNode from './ConvolverNode';
12
13
 
13
14
  export default interface BaseAudioContext {
14
15
  readonly context: globalThis.BaseAudioContext;
@@ -23,6 +24,7 @@ export default interface BaseAudioContext {
23
24
  createGain(): GainNode;
24
25
  createStereoPanner(): StereoPannerNode;
25
26
  createBiquadFilter(): BiquadFilterNode;
27
+ createConvolver(): ConvolverNode;
26
28
  createBufferSource(): Promise<AudioBufferSourceNode>;
27
29
  createBuffer(
28
30
  numOfChannels: number,
@@ -0,0 +1,43 @@
1
+ import BaseAudioContext from './BaseAudioContext';
2
+ import AudioNode from './AudioNode';
3
+ import AudioBuffer from './AudioBuffer';
4
+
5
+ export default class ConvolverNode extends AudioNode {
6
+ constructor(
7
+ context: BaseAudioContext,
8
+ node: globalThis.ConvolverNode,
9
+ buffer: AudioBuffer | null = null,
10
+ disableNormalization: boolean = false
11
+ ) {
12
+ super(context, node);
13
+
14
+ (this.node as globalThis.ConvolverNode).normalize = !disableNormalization;
15
+ if (buffer) {
16
+ (this.node as globalThis.ConvolverNode).buffer = buffer.buffer;
17
+ }
18
+ }
19
+
20
+ public get buffer(): AudioBuffer | null {
21
+ const buffer = (this.node as globalThis.ConvolverNode).buffer;
22
+ if (!buffer) {
23
+ return null;
24
+ }
25
+ return new AudioBuffer(buffer);
26
+ }
27
+
28
+ public set buffer(buffer: AudioBuffer | null) {
29
+ if (!buffer) {
30
+ (this.node as globalThis.ConvolverNode).buffer = null;
31
+ } else {
32
+ (this.node as globalThis.ConvolverNode).buffer = buffer.buffer;
33
+ }
34
+ }
35
+
36
+ public get normalize(): boolean {
37
+ return (this.node as globalThis.ConvolverNode).normalize;
38
+ }
39
+
40
+ public set normalize(value: boolean) {
41
+ (this.node as globalThis.ConvolverNode).normalize = value;
42
+ }
43
+ }
@@ -0,0 +1,6 @@
1
+ import AudioBuffer from './AudioBuffer';
2
+
3
+ export interface ConvolverNodeOptions {
4
+ buffer?: AudioBuffer | null;
5
+ disableNormalization?: boolean;
6
+ }
@@ -18,6 +18,8 @@ import StereoPannerNode from './StereoPannerNode';
18
18
  import ConstantSourceNode from './ConstantSourceNode';
19
19
 
20
20
  import { globalWasmPromise, globalTag } from './custom/LoadCustomWasm';
21
+ import ConvolverNode from './ConvolverNode';
22
+ import { ConvolverNodeOptions } from './ConvolverNodeOptions';
21
23
 
22
24
  export default class OfflineAudioContext implements BaseAudioContext {
23
25
  readonly context: globalThis.OfflineAudioContext;
@@ -76,6 +78,29 @@ export default class OfflineAudioContext implements BaseAudioContext {
76
78
  return new BiquadFilterNode(this, this.context.createBiquadFilter());
77
79
  }
78
80
 
81
+ createConvolver(options?: ConvolverNodeOptions): ConvolverNode {
82
+ if (options?.buffer) {
83
+ const numberOfChannels = options.buffer.numberOfChannels;
84
+ if (
85
+ numberOfChannels !== 1 &&
86
+ numberOfChannels !== 2 &&
87
+ numberOfChannels !== 4
88
+ ) {
89
+ throw new NotSupportedError(
90
+ `The number of channels provided (${numberOfChannels}) in impulse response for ConvolverNode buffer must be 1 or 2 or 4.`
91
+ );
92
+ }
93
+ }
94
+ const buffer = options?.buffer ?? null;
95
+ const disableNormalization = options?.disableNormalization ?? false;
96
+ return new ConvolverNode(
97
+ this,
98
+ this.context.createConvolver(),
99
+ buffer,
100
+ disableNormalization
101
+ );
102
+ }
103
+
79
104
  async createBufferSource(
80
105
  options?: AudioBufferBaseSourceNodeOptions
81
106
  ): Promise<AudioBufferSourceNode> {