react-native-audio-api 0.8.3-nightly-e918179-20251003 → 0.8.3-nightly-ea268f4-20251004

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 (158) hide show
  1. package/common/cpp/audioapi/AudioAPIModuleInstaller.h +31 -14
  2. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +74 -4
  3. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +3 -0
  4. package/common/cpp/audioapi/HostObjects/WorkletProcessingNodeHostObject.h +18 -0
  5. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.cpp +20 -1
  6. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.h +3 -0
  7. package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.cpp +19 -0
  8. package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.h +21 -0
  9. package/common/cpp/audioapi/HostObjects/sources/WorkletSourceNodeHostObject.h +18 -0
  10. package/common/cpp/audioapi/core/AudioContext.cpp +2 -2
  11. package/common/cpp/audioapi/core/AudioContext.h +2 -2
  12. package/common/cpp/audioapi/core/AudioParam.cpp +2 -2
  13. package/common/cpp/audioapi/core/BaseAudioContext.cpp +32 -3
  14. package/common/cpp/audioapi/core/BaseAudioContext.h +9 -4
  15. package/common/cpp/audioapi/core/OfflineAudioContext.cpp +2 -2
  16. package/common/cpp/audioapi/core/OfflineAudioContext.h +2 -2
  17. package/common/cpp/audioapi/core/effects/WorkletNode.cpp +4 -3
  18. package/common/cpp/audioapi/core/effects/WorkletNode.h +4 -3
  19. package/common/cpp/audioapi/core/effects/WorkletProcessingNode.cpp +89 -0
  20. package/common/cpp/audioapi/core/effects/WorkletProcessingNode.h +52 -0
  21. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +1 -6
  22. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +30 -0
  23. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +6 -0
  24. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +1 -6
  25. package/common/cpp/audioapi/core/sources/ConstantSourceNode.cpp +51 -0
  26. package/common/cpp/audioapi/core/sources/ConstantSourceNode.h +26 -0
  27. package/common/cpp/audioapi/core/sources/WorkletSourceNode.cpp +82 -0
  28. package/common/cpp/audioapi/core/sources/WorkletSourceNode.h +47 -0
  29. package/common/cpp/audioapi/core/utils/AudioParamEventQueue.cpp +12 -6
  30. package/common/cpp/audioapi/core/utils/Constants.h +5 -0
  31. package/common/cpp/audioapi/core/utils/worklets/SafeIncludes.h +7 -0
  32. package/common/cpp/audioapi/core/utils/worklets/{UiWorkletsRunner.cpp → WorkletsRunner.cpp} +2 -2
  33. package/common/cpp/audioapi/core/utils/worklets/{UiWorkletsRunner.h → WorkletsRunner.h} +2 -2
  34. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +2 -1
  35. package/common/cpp/audioapi/jsi/JsiPromise.cpp +23 -27
  36. package/common/cpp/audioapi/jsi/JsiPromise.h +10 -1
  37. package/common/cpp/audioapi/utils/ThreadPool.hpp +104 -0
  38. package/common/cpp/test/AudioParamTest.cpp +204 -0
  39. package/common/cpp/test/CMakeLists.txt +3 -0
  40. package/common/cpp/test/GainTest.cpp +2 -1
  41. package/common/cpp/test/OscillatorTest.cpp +2 -1
  42. package/ios/audioapi/ios/core/IOSAudioRecorder.h +2 -1
  43. package/lib/commonjs/api.js +27 -0
  44. package/lib/commonjs/api.js.map +1 -1
  45. package/lib/commonjs/api.web.js +8 -0
  46. package/lib/commonjs/api.web.js.map +1 -1
  47. package/lib/commonjs/core/AudioBufferBaseSourceNode.js +7 -7
  48. package/lib/commonjs/core/AudioBufferBaseSourceNode.js.map +1 -1
  49. package/lib/commonjs/core/AudioBufferQueueSourceNode.js +1 -6
  50. package/lib/commonjs/core/AudioBufferQueueSourceNode.js.map +1 -1
  51. package/lib/commonjs/core/AudioBufferSourceNode.js +15 -0
  52. package/lib/commonjs/core/AudioBufferSourceNode.js.map +1 -1
  53. package/lib/commonjs/core/AudioContext.js +10 -1
  54. package/lib/commonjs/core/AudioContext.js.map +1 -1
  55. package/lib/commonjs/core/BaseAudioContext.js +35 -2
  56. package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
  57. package/lib/commonjs/core/ConstantSourceNode.js +17 -0
  58. package/lib/commonjs/core/ConstantSourceNode.js.map +1 -0
  59. package/lib/commonjs/core/OfflineAudioContext.js +11 -2
  60. package/lib/commonjs/core/OfflineAudioContext.js.map +1 -1
  61. package/lib/commonjs/core/WorkletProcessingNode.js +11 -0
  62. package/lib/commonjs/core/WorkletProcessingNode.js.map +1 -0
  63. package/lib/commonjs/core/WorkletSourceNode.js +11 -0
  64. package/lib/commonjs/core/WorkletSourceNode.js.map +1 -0
  65. package/lib/commonjs/utils/index.js.map +1 -1
  66. package/lib/commonjs/web-core/AudioContext.js +4 -0
  67. package/lib/commonjs/web-core/AudioContext.js.map +1 -1
  68. package/lib/commonjs/web-core/ConstantSourceNode.js +17 -0
  69. package/lib/commonjs/web-core/ConstantSourceNode.js.map +1 -0
  70. package/lib/commonjs/web-core/OfflineAudioContext.js +4 -0
  71. package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
  72. package/lib/module/api.js +4 -1
  73. package/lib/module/api.js.map +1 -1
  74. package/lib/module/api.web.js +1 -0
  75. package/lib/module/api.web.js.map +1 -1
  76. package/lib/module/core/AudioBufferBaseSourceNode.js +7 -7
  77. package/lib/module/core/AudioBufferBaseSourceNode.js.map +1 -1
  78. package/lib/module/core/AudioBufferQueueSourceNode.js +1 -6
  79. package/lib/module/core/AudioBufferQueueSourceNode.js.map +1 -1
  80. package/lib/module/core/AudioBufferSourceNode.js +15 -0
  81. package/lib/module/core/AudioBufferSourceNode.js.map +1 -1
  82. package/lib/module/core/AudioContext.js +10 -1
  83. package/lib/module/core/AudioContext.js.map +1 -1
  84. package/lib/module/core/BaseAudioContext.js +35 -2
  85. package/lib/module/core/BaseAudioContext.js.map +1 -1
  86. package/lib/module/core/ConstantSourceNode.js +11 -0
  87. package/lib/module/core/ConstantSourceNode.js.map +1 -0
  88. package/lib/module/core/OfflineAudioContext.js +11 -2
  89. package/lib/module/core/OfflineAudioContext.js.map +1 -1
  90. package/lib/module/core/WorkletProcessingNode.js +5 -0
  91. package/lib/module/core/WorkletProcessingNode.js.map +1 -0
  92. package/lib/module/core/WorkletSourceNode.js +5 -0
  93. package/lib/module/core/WorkletSourceNode.js.map +1 -0
  94. package/lib/module/utils/index.js.map +1 -1
  95. package/lib/module/web-core/AudioContext.js +4 -0
  96. package/lib/module/web-core/AudioContext.js.map +1 -1
  97. package/lib/module/web-core/ConstantSourceNode.js +11 -0
  98. package/lib/module/web-core/ConstantSourceNode.js.map +1 -0
  99. package/lib/module/web-core/OfflineAudioContext.js +4 -0
  100. package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
  101. package/lib/typescript/api.d.ts +6 -3
  102. package/lib/typescript/api.d.ts.map +1 -1
  103. package/lib/typescript/api.web.d.ts +1 -0
  104. package/lib/typescript/api.web.d.ts.map +1 -1
  105. package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts +2 -2
  106. package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts.map +1 -1
  107. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts +1 -1
  108. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts.map +1 -1
  109. package/lib/typescript/core/AudioBufferSourceNode.d.ts +4 -0
  110. package/lib/typescript/core/AudioBufferSourceNode.d.ts.map +1 -1
  111. package/lib/typescript/core/AudioContext.d.ts +1 -0
  112. package/lib/typescript/core/AudioContext.d.ts.map +1 -1
  113. package/lib/typescript/core/BaseAudioContext.d.ts +8 -2
  114. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
  115. package/lib/typescript/core/ConstantSourceNode.d.ts +9 -0
  116. package/lib/typescript/core/ConstantSourceNode.d.ts.map +1 -0
  117. package/lib/typescript/core/OfflineAudioContext.d.ts +1 -0
  118. package/lib/typescript/core/OfflineAudioContext.d.ts.map +1 -1
  119. package/lib/typescript/core/WorkletProcessingNode.d.ts +4 -0
  120. package/lib/typescript/core/WorkletProcessingNode.d.ts.map +1 -0
  121. package/lib/typescript/core/WorkletSourceNode.d.ts +4 -0
  122. package/lib/typescript/core/WorkletSourceNode.d.ts.map +1 -0
  123. package/lib/typescript/events/types.d.ts +1 -0
  124. package/lib/typescript/events/types.d.ts.map +1 -1
  125. package/lib/typescript/interfaces.d.ts +16 -2
  126. package/lib/typescript/interfaces.d.ts.map +1 -1
  127. package/lib/typescript/types.d.ts +1 -0
  128. package/lib/typescript/types.d.ts.map +1 -1
  129. package/lib/typescript/utils/index.d.ts +1 -0
  130. package/lib/typescript/utils/index.d.ts.map +1 -1
  131. package/lib/typescript/web-core/AudioContext.d.ts +2 -0
  132. package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
  133. package/lib/typescript/web-core/BaseAudioContext.d.ts +2 -0
  134. package/lib/typescript/web-core/BaseAudioContext.d.ts.map +1 -1
  135. package/lib/typescript/web-core/ConstantSourceNode.d.ts +8 -0
  136. package/lib/typescript/web-core/ConstantSourceNode.d.ts.map +1 -0
  137. package/lib/typescript/web-core/OfflineAudioContext.d.ts +2 -0
  138. package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
  139. package/package.json +1 -1
  140. package/src/api.ts +10 -2
  141. package/src/api.web.ts +1 -0
  142. package/src/core/AudioBufferBaseSourceNode.ts +9 -9
  143. package/src/core/AudioBufferQueueSourceNode.ts +1 -9
  144. package/src/core/AudioBufferSourceNode.ts +28 -0
  145. package/src/core/AudioContext.ts +12 -1
  146. package/src/core/BaseAudioContext.ts +90 -1
  147. package/src/core/ConstantSourceNode.ts +13 -0
  148. package/src/core/OfflineAudioContext.ts +18 -2
  149. package/src/core/WorkletProcessingNode.ts +3 -0
  150. package/src/core/WorkletSourceNode.ts +3 -0
  151. package/src/events/types.ts +1 -0
  152. package/src/interfaces.ts +42 -2
  153. package/src/types.ts +2 -0
  154. package/src/utils/index.ts +3 -0
  155. package/src/web-core/AudioContext.tsx +5 -0
  156. package/src/web-core/BaseAudioContext.tsx +2 -0
  157. package/src/web-core/ConstantSourceNode.tsx +12 -0
  158. package/src/web-core/OfflineAudioContext.tsx +5 -0
package/src/interfaces.ts CHANGED
@@ -8,11 +8,30 @@ import {
8
8
  WindowType,
9
9
  } from './types';
10
10
 
11
- export type ShareableWorkletCallback = (
12
- audioBuffers: Array<ArrayBuffer>,
11
+ export type WorkletNodeCallback = (
12
+ audioData: Array<ArrayBuffer>,
13
13
  channelCount: number
14
14
  ) => void;
15
15
 
16
+ export type WorkletSourceNodeCallback = (
17
+ audioData: Array<ArrayBuffer>,
18
+ framesToProcess: number,
19
+ currentTime: number,
20
+ startOffset: number
21
+ ) => void;
22
+
23
+ export type WorkletProcessingNodeCallback = (
24
+ inputData: Array<ArrayBuffer>,
25
+ outputData: Array<ArrayBuffer>,
26
+ framesToProcess: number,
27
+ currentTime: number
28
+ ) => void;
29
+
30
+ export type ShareableWorkletCallback =
31
+ | WorkletNodeCallback
32
+ | WorkletSourceNodeCallback
33
+ | WorkletProcessingNodeCallback;
34
+
16
35
  export interface IBaseAudioContext {
17
36
  readonly destination: IAudioDestinationNode;
18
37
  readonly state: ContextState;
@@ -20,12 +39,22 @@ export interface IBaseAudioContext {
20
39
  readonly currentTime: number;
21
40
 
22
41
  createRecorderAdapter(): IRecorderAdapterNode;
42
+ createWorkletSourceNode(
43
+ shareableWorklet: ShareableWorkletCallback,
44
+ shouldUseUiRuntime: boolean
45
+ ): IWorkletSourceNode;
23
46
  createWorkletNode(
24
47
  shareableWorklet: ShareableWorkletCallback,
48
+ shouldUseUiRuntime: boolean,
25
49
  bufferLength: number,
26
50
  inputChannelCount: number
27
51
  ): IWorkletNode;
52
+ createWorkletProcessingNode(
53
+ shareableWorklet: ShareableWorkletCallback,
54
+ shouldUseUiRuntime: boolean
55
+ ): IWorkletProcessingNode;
28
56
  createOscillator(): IOscillatorNode;
57
+ createConstantSource(): IConstantSourceNode;
29
58
  createGain(): IGainNode;
30
59
  createStereoPanner(): IStereoPannerNode;
31
60
  createBiquadFilter: () => IBiquadFilterNode;
@@ -131,6 +160,10 @@ export interface IStreamerNode extends IAudioNode {
131
160
  initialize(streamPath: string): boolean;
132
161
  }
133
162
 
163
+ export interface IConstantSourceNode extends IAudioScheduledSourceNode {
164
+ readonly offset: IAudioParam;
165
+ }
166
+
134
167
  export interface IAudioBufferSourceNode extends IAudioBufferBaseSourceNode {
135
168
  buffer: IAudioBuffer | null;
136
169
  loop: boolean;
@@ -140,6 +173,9 @@ export interface IAudioBufferSourceNode extends IAudioBufferBaseSourceNode {
140
173
 
141
174
  start: (when?: number, offset?: number, duration?: number) => void;
142
175
  setBuffer: (audioBuffer: IAudioBuffer | null) => void;
176
+
177
+ // passing subscriptionId(uint_64 in cpp, string in js) to the cpp
178
+ onLoopEnded: string;
143
179
  }
144
180
 
145
181
  export interface IAudioBufferQueueSourceNode
@@ -214,6 +250,10 @@ export interface IRecorderAdapterNode extends IAudioNode {}
214
250
 
215
251
  export interface IWorkletNode extends IAudioNode {}
216
252
 
253
+ export interface IWorkletSourceNode extends IAudioScheduledSourceNode {}
254
+
255
+ export interface IWorkletProcessingNode extends IAudioNode {}
256
+
217
257
  export interface IAudioRecorder {
218
258
  start: () => void;
219
259
  stop: () => void;
package/src/types.ts CHANGED
@@ -14,6 +14,8 @@ export type BiquadFilterType =
14
14
 
15
15
  export type ContextState = 'running' | 'closed' | `suspended`;
16
16
 
17
+ export type AudioWorkletRuntime = 'AudioRuntime' | 'UIRuntime';
18
+
17
19
  export type OscillatorType =
18
20
  | 'sine'
19
21
  | 'square'
@@ -4,6 +4,9 @@ interface SimplifiedWorkletModule {
4
4
  makeShareableCloneRecursive: (
5
5
  workletCallback: ShareableWorkletCallback
6
6
  ) => ShareableWorkletCallback;
7
+
8
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
9
+ createWorkletRuntime: (options?: any) => any;
7
10
  }
8
11
 
9
12
  export function clamp(value: number, min: number, max: number): number {
@@ -17,6 +17,7 @@ import PeriodicWave from './PeriodicWave';
17
17
  import StereoPannerNode from './StereoPannerNode';
18
18
 
19
19
  import { globalWasmPromise, globalTag } from './custom/LoadCustomWasm';
20
+ import ConstantSourceNode from './ConstantSourceNode';
20
21
 
21
22
  export default class AudioContext implements BaseAudioContext {
22
23
  readonly context: globalThis.AudioContext;
@@ -53,6 +54,10 @@ export default class AudioContext implements BaseAudioContext {
53
54
  return new OscillatorNode(this, this.context.createOscillator());
54
55
  }
55
56
 
57
+ createConstantSource(): ConstantSourceNode {
58
+ return new ConstantSourceNode(this, this.context.createConstantSource());
59
+ }
60
+
56
61
  createGain(): GainNode {
57
62
  return new GainNode(this, this.context.createGain());
58
63
  }
@@ -8,6 +8,7 @@ import GainNode from './GainNode';
8
8
  import OscillatorNode from './OscillatorNode';
9
9
  import PeriodicWave from './PeriodicWave';
10
10
  import StereoPannerNode from './StereoPannerNode';
11
+ import ConstantSourceNode from './ConstantSourceNode';
11
12
 
12
13
  export default interface BaseAudioContext {
13
14
  readonly context: globalThis.BaseAudioContext;
@@ -18,6 +19,7 @@ export default interface BaseAudioContext {
18
19
  get currentTime(): number;
19
20
  get state(): ContextState;
20
21
  createOscillator(): OscillatorNode;
22
+ createConstantSource(): ConstantSourceNode;
21
23
  createGain(): GainNode;
22
24
  createStereoPanner(): StereoPannerNode;
23
25
  createBiquadFilter(): BiquadFilterNode;
@@ -0,0 +1,12 @@
1
+ import AudioParam from './AudioParam';
2
+ import AudioScheduledSourceNode from './AudioScheduledSourceNode';
3
+ import BaseAudioContext from './BaseAudioContext';
4
+
5
+ export default class ConstantSourceNode extends AudioScheduledSourceNode {
6
+ readonly offset: AudioParam;
7
+
8
+ constructor(context: BaseAudioContext, node: globalThis.ConstantSourceNode) {
9
+ super(context, node);
10
+ this.offset = new AudioParam(node.offset, context);
11
+ }
12
+ }
@@ -15,6 +15,7 @@ import GainNode from './GainNode';
15
15
  import OscillatorNode from './OscillatorNode';
16
16
  import PeriodicWave from './PeriodicWave';
17
17
  import StereoPannerNode from './StereoPannerNode';
18
+ import ConstantSourceNode from './ConstantSourceNode';
18
19
 
19
20
  import { globalWasmPromise, globalTag } from './custom/LoadCustomWasm';
20
21
 
@@ -59,6 +60,10 @@ export default class OfflineAudioContext implements BaseAudioContext {
59
60
  return new OscillatorNode(this, this.context.createOscillator());
60
61
  }
61
62
 
63
+ createConstantSource(): ConstantSourceNode {
64
+ return new ConstantSourceNode(this, this.context.createConstantSource());
65
+ }
66
+
62
67
  createGain(): GainNode {
63
68
  return new GainNode(this, this.context.createGain());
64
69
  }