react-native-audio-api 0.12.0-nightly-0d1a19d-20260120 → 0.12.0-nightly-75589dc-20260121

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 (332) hide show
  1. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +52 -49
  2. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.cpp +6 -0
  3. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.h +1 -0
  4. package/common/cpp/audioapi/HostObjects/utils/NodeOptions.h +111 -0
  5. package/common/cpp/audioapi/HostObjects/utils/NodeOptionsParser.h +262 -0
  6. package/common/cpp/audioapi/core/AudioNode.cpp +13 -6
  7. package/common/cpp/audioapi/core/AudioNode.h +2 -0
  8. package/common/cpp/audioapi/core/BaseAudioContext.cpp +42 -44
  9. package/common/cpp/audioapi/core/BaseAudioContext.h +32 -21
  10. package/common/cpp/audioapi/core/analysis/AnalyserNode.cpp +8 -6
  11. package/common/cpp/audioapi/core/analysis/AnalyserNode.h +2 -1
  12. package/common/cpp/audioapi/core/effects/BiquadFilterNode.cpp +7 -8
  13. package/common/cpp/audioapi/core/effects/BiquadFilterNode.h +4 -1
  14. package/common/cpp/audioapi/core/effects/ConvolverNode.cpp +5 -9
  15. package/common/cpp/audioapi/core/effects/ConvolverNode.h +2 -2
  16. package/common/cpp/audioapi/core/effects/DelayNode.cpp +5 -4
  17. package/common/cpp/audioapi/core/effects/DelayNode.h +2 -1
  18. package/common/cpp/audioapi/core/effects/GainNode.cpp +4 -3
  19. package/common/cpp/audioapi/core/effects/GainNode.h +2 -1
  20. package/common/cpp/audioapi/core/effects/IIRFilterNode.cpp +6 -6
  21. package/common/cpp/audioapi/core/effects/IIRFilterNode.h +3 -2
  22. package/common/cpp/audioapi/core/effects/StereoPannerNode.cpp +3 -3
  23. package/common/cpp/audioapi/core/effects/StereoPannerNode.h +4 -1
  24. package/common/cpp/audioapi/core/effects/WaveShaperNode.cpp +4 -3
  25. package/common/cpp/audioapi/core/effects/WaveShaperNode.h +4 -1
  26. package/common/cpp/audioapi/core/sources/AudioBuffer.cpp +3 -2
  27. package/common/cpp/audioapi/core/sources/AudioBuffer.h +2 -1
  28. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +16 -22
  29. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +2 -1
  30. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +9 -6
  31. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +2 -1
  32. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +9 -7
  33. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +4 -1
  34. package/common/cpp/audioapi/core/sources/ConstantSourceNode.cpp +5 -8
  35. package/common/cpp/audioapi/core/sources/ConstantSourceNode.h +4 -1
  36. package/common/cpp/audioapi/core/sources/OscillatorNode.cpp +21 -16
  37. package/common/cpp/audioapi/core/sources/OscillatorNode.h +4 -1
  38. package/common/cpp/audioapi/core/sources/StreamerNode.cpp +4 -2
  39. package/common/cpp/audioapi/core/sources/StreamerNode.h +11 -1
  40. package/common/cpp/test/src/ConstantSourceTest.cpp +3 -2
  41. package/common/cpp/test/src/DelayTest.cpp +12 -5
  42. package/common/cpp/test/src/GainTest.cpp +3 -2
  43. package/common/cpp/test/src/IIRFilterTest.cpp +3 -2
  44. package/common/cpp/test/src/OscillatorTest.cpp +2 -1
  45. package/common/cpp/test/src/StereoPannerTest.cpp +3 -2
  46. package/common/cpp/test/src/biquad/BiquadFilterTest.cpp +10 -9
  47. package/common/cpp/test/src/core/effects/WaveShaperNodeTest.cpp +4 -3
  48. package/lib/commonjs/api.js +11 -3
  49. package/lib/commonjs/api.js.map +1 -1
  50. package/lib/commonjs/api.web.js +4 -10
  51. package/lib/commonjs/api.web.js.map +1 -1
  52. package/lib/commonjs/core/AnalyserNode.js +11 -0
  53. package/lib/commonjs/core/AnalyserNode.js.map +1 -1
  54. package/lib/commonjs/core/AudioBuffer.js +20 -6
  55. package/lib/commonjs/core/AudioBuffer.js.map +1 -1
  56. package/lib/commonjs/core/AudioBufferQueueSourceNode.js +9 -0
  57. package/lib/commonjs/core/AudioBufferQueueSourceNode.js.map +1 -1
  58. package/lib/commonjs/core/AudioBufferSourceNode.js +9 -0
  59. package/lib/commonjs/core/AudioBufferSourceNode.js.map +1 -1
  60. package/lib/commonjs/core/BaseAudioContext.js +52 -65
  61. package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
  62. package/lib/commonjs/core/BiquadFilterNode.js +7 -1
  63. package/lib/commonjs/core/BiquadFilterNode.js.map +1 -1
  64. package/lib/commonjs/core/ConstantSourceNode.js +7 -1
  65. package/lib/commonjs/core/ConstantSourceNode.js.map +1 -1
  66. package/lib/commonjs/core/ConvolverNode.js +9 -3
  67. package/lib/commonjs/core/ConvolverNode.js.map +1 -1
  68. package/lib/commonjs/core/DelayNode.js +7 -1
  69. package/lib/commonjs/core/DelayNode.js.map +1 -1
  70. package/lib/commonjs/core/GainNode.js +9 -3
  71. package/lib/commonjs/core/GainNode.js.map +1 -1
  72. package/lib/commonjs/core/IIRFilterNode.js +9 -0
  73. package/lib/commonjs/core/IIRFilterNode.js.map +1 -1
  74. package/lib/commonjs/core/OscillatorNode.js +10 -1
  75. package/lib/commonjs/core/OscillatorNode.js.map +1 -1
  76. package/lib/commonjs/core/PeriodicWave.js +30 -2
  77. package/lib/commonjs/core/PeriodicWave.js.map +1 -1
  78. package/lib/commonjs/core/RecorderAdapterNode.js +3 -0
  79. package/lib/commonjs/core/RecorderAdapterNode.js.map +1 -1
  80. package/lib/commonjs/core/StereoPannerNode.js +7 -1
  81. package/lib/commonjs/core/StereoPannerNode.js.map +1 -1
  82. package/lib/commonjs/core/StreamerNode.js +25 -1
  83. package/lib/commonjs/core/StreamerNode.js.map +1 -1
  84. package/lib/commonjs/core/WaveShaperNode.js +12 -0
  85. package/lib/commonjs/core/WaveShaperNode.js.map +1 -1
  86. package/lib/commonjs/core/WorkletNode.js +13 -1
  87. package/lib/commonjs/core/WorkletNode.js.map +1 -1
  88. package/lib/commonjs/core/WorkletProcessingNode.js +14 -1
  89. package/lib/commonjs/core/WorkletProcessingNode.js.map +1 -1
  90. package/lib/commonjs/core/WorkletSourceNode.js +13 -1
  91. package/lib/commonjs/core/WorkletSourceNode.js.map +1 -1
  92. package/lib/commonjs/defaults.js +78 -0
  93. package/lib/commonjs/defaults.js.map +1 -0
  94. package/lib/commonjs/options-validators.js +40 -0
  95. package/lib/commonjs/options-validators.js.map +1 -0
  96. package/lib/commonjs/types.js.map +1 -1
  97. package/lib/commonjs/web-core/AnalyserNode.js +2 -1
  98. package/lib/commonjs/web-core/AnalyserNode.js.map +1 -1
  99. package/lib/commonjs/web-core/AudioBuffer.js +14 -6
  100. package/lib/commonjs/web-core/AudioBuffer.js.map +1 -1
  101. package/lib/commonjs/web-core/AudioBufferSourceNode.js +276 -89
  102. package/lib/commonjs/web-core/AudioBufferSourceNode.js.map +1 -1
  103. package/lib/commonjs/web-core/AudioContext.js +33 -32
  104. package/lib/commonjs/web-core/AudioContext.js.map +1 -1
  105. package/lib/commonjs/web-core/AudioNode.js +4 -0
  106. package/lib/commonjs/web-core/AudioNode.js.map +1 -1
  107. package/lib/commonjs/web-core/BiquadFilterNode.js +2 -1
  108. package/lib/commonjs/web-core/BiquadFilterNode.js.map +1 -1
  109. package/lib/commonjs/web-core/ConstantSourceNode.js +2 -1
  110. package/lib/commonjs/web-core/ConstantSourceNode.js.map +1 -1
  111. package/lib/commonjs/web-core/ConvolverNode.js +3 -5
  112. package/lib/commonjs/web-core/ConvolverNode.js.map +1 -1
  113. package/lib/commonjs/web-core/DelayNode.js +7 -1
  114. package/lib/commonjs/web-core/DelayNode.js.map +1 -1
  115. package/lib/commonjs/web-core/GainNode.js +2 -1
  116. package/lib/commonjs/web-core/GainNode.js.map +1 -1
  117. package/lib/commonjs/web-core/IIRFilterNode.js +12 -0
  118. package/lib/commonjs/web-core/IIRFilterNode.js.map +1 -1
  119. package/lib/commonjs/web-core/OfflineAudioContext.js +33 -32
  120. package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
  121. package/lib/commonjs/web-core/OscillatorNode.js +2 -1
  122. package/lib/commonjs/web-core/OscillatorNode.js.map +1 -1
  123. package/lib/commonjs/web-core/PeriodicWave.js +6 -1
  124. package/lib/commonjs/web-core/PeriodicWave.js.map +1 -1
  125. package/lib/commonjs/web-core/StereoPannerNode.js +2 -1
  126. package/lib/commonjs/web-core/StereoPannerNode.js.map +1 -1
  127. package/lib/module/api.js +2 -1
  128. package/lib/module/api.js.map +1 -1
  129. package/lib/module/api.web.js +2 -1
  130. package/lib/module/api.web.js.map +1 -1
  131. package/lib/module/core/AnalyserNode.js +11 -0
  132. package/lib/module/core/AnalyserNode.js.map +1 -1
  133. package/lib/module/core/AudioBuffer.js +19 -6
  134. package/lib/module/core/AudioBuffer.js.map +1 -1
  135. package/lib/module/core/AudioBufferQueueSourceNode.js +9 -0
  136. package/lib/module/core/AudioBufferQueueSourceNode.js.map +1 -1
  137. package/lib/module/core/AudioBufferSourceNode.js +9 -0
  138. package/lib/module/core/AudioBufferSourceNode.js.map +1 -1
  139. package/lib/module/core/BaseAudioContext.js +52 -65
  140. package/lib/module/core/BaseAudioContext.js.map +1 -1
  141. package/lib/module/core/BiquadFilterNode.js +7 -1
  142. package/lib/module/core/BiquadFilterNode.js.map +1 -1
  143. package/lib/module/core/ConstantSourceNode.js +7 -1
  144. package/lib/module/core/ConstantSourceNode.js.map +1 -1
  145. package/lib/module/core/ConvolverNode.js +9 -3
  146. package/lib/module/core/ConvolverNode.js.map +1 -1
  147. package/lib/module/core/DelayNode.js +7 -1
  148. package/lib/module/core/DelayNode.js.map +1 -1
  149. package/lib/module/core/GainNode.js +9 -3
  150. package/lib/module/core/GainNode.js.map +1 -1
  151. package/lib/module/core/IIRFilterNode.js +9 -0
  152. package/lib/module/core/IIRFilterNode.js.map +1 -1
  153. package/lib/module/core/OscillatorNode.js +10 -1
  154. package/lib/module/core/OscillatorNode.js.map +1 -1
  155. package/lib/module/core/PeriodicWave.js +29 -2
  156. package/lib/module/core/PeriodicWave.js.map +1 -1
  157. package/lib/module/core/RecorderAdapterNode.js +3 -0
  158. package/lib/module/core/RecorderAdapterNode.js.map +1 -1
  159. package/lib/module/core/StereoPannerNode.js +7 -1
  160. package/lib/module/core/StereoPannerNode.js.map +1 -1
  161. package/lib/module/core/StreamerNode.js +25 -1
  162. package/lib/module/core/StreamerNode.js.map +1 -1
  163. package/lib/module/core/WaveShaperNode.js +12 -0
  164. package/lib/module/core/WaveShaperNode.js.map +1 -1
  165. package/lib/module/core/WorkletNode.js +13 -1
  166. package/lib/module/core/WorkletNode.js.map +1 -1
  167. package/lib/module/core/WorkletProcessingNode.js +14 -1
  168. package/lib/module/core/WorkletProcessingNode.js.map +1 -1
  169. package/lib/module/core/WorkletSourceNode.js +13 -1
  170. package/lib/module/core/WorkletSourceNode.js.map +1 -1
  171. package/lib/module/defaults.js +74 -0
  172. package/lib/module/defaults.js.map +1 -0
  173. package/lib/module/options-validators.js +36 -0
  174. package/lib/module/options-validators.js.map +1 -0
  175. package/lib/module/types.js.map +1 -1
  176. package/lib/module/web-core/AnalyserNode.js +2 -1
  177. package/lib/module/web-core/AnalyserNode.js.map +1 -1
  178. package/lib/module/web-core/AudioBuffer.js +13 -6
  179. package/lib/module/web-core/AudioBuffer.js.map +1 -1
  180. package/lib/module/web-core/AudioBufferSourceNode.js +277 -90
  181. package/lib/module/web-core/AudioBufferSourceNode.js.map +1 -1
  182. package/lib/module/web-core/AudioContext.js +33 -32
  183. package/lib/module/web-core/AudioContext.js.map +1 -1
  184. package/lib/module/web-core/AudioNode.js +4 -0
  185. package/lib/module/web-core/AudioNode.js.map +1 -1
  186. package/lib/module/web-core/BiquadFilterNode.js +2 -1
  187. package/lib/module/web-core/BiquadFilterNode.js.map +1 -1
  188. package/lib/module/web-core/ConstantSourceNode.js +2 -1
  189. package/lib/module/web-core/ConstantSourceNode.js.map +1 -1
  190. package/lib/module/web-core/ConvolverNode.js +3 -5
  191. package/lib/module/web-core/ConvolverNode.js.map +1 -1
  192. package/lib/module/web-core/DelayNode.js +7 -1
  193. package/lib/module/web-core/DelayNode.js.map +1 -1
  194. package/lib/module/web-core/GainNode.js +2 -1
  195. package/lib/module/web-core/GainNode.js.map +1 -1
  196. package/lib/module/web-core/IIRFilterNode.js +12 -0
  197. package/lib/module/web-core/IIRFilterNode.js.map +1 -1
  198. package/lib/module/web-core/OfflineAudioContext.js +33 -32
  199. package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
  200. package/lib/module/web-core/OscillatorNode.js +2 -1
  201. package/lib/module/web-core/OscillatorNode.js.map +1 -1
  202. package/lib/module/web-core/PeriodicWave.js +6 -1
  203. package/lib/module/web-core/PeriodicWave.js.map +1 -1
  204. package/lib/module/web-core/StereoPannerNode.js +2 -1
  205. package/lib/module/web-core/StereoPannerNode.js.map +1 -1
  206. package/lib/typescript/api.d.ts +2 -1
  207. package/lib/typescript/api.d.ts.map +1 -1
  208. package/lib/typescript/api.web.d.ts +2 -1
  209. package/lib/typescript/api.web.d.ts.map +1 -1
  210. package/lib/typescript/core/AnalyserNode.d.ts +3 -1
  211. package/lib/typescript/core/AnalyserNode.d.ts.map +1 -1
  212. package/lib/typescript/core/AudioBuffer.d.ts +3 -0
  213. package/lib/typescript/core/AudioBuffer.d.ts.map +1 -1
  214. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts +3 -0
  215. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts.map +1 -1
  216. package/lib/typescript/core/AudioBufferSourceNode.d.ts +3 -0
  217. package/lib/typescript/core/AudioBufferSourceNode.d.ts.map +1 -1
  218. package/lib/typescript/core/BaseAudioContext.d.ts +10 -6
  219. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
  220. package/lib/typescript/core/BiquadFilterNode.d.ts +2 -3
  221. package/lib/typescript/core/BiquadFilterNode.d.ts.map +1 -1
  222. package/lib/typescript/core/ConstantSourceNode.d.ts +2 -2
  223. package/lib/typescript/core/ConstantSourceNode.d.ts.map +1 -1
  224. package/lib/typescript/core/ConvolverNode.d.ts +2 -2
  225. package/lib/typescript/core/ConvolverNode.d.ts.map +1 -1
  226. package/lib/typescript/core/DelayNode.d.ts +2 -2
  227. package/lib/typescript/core/DelayNode.d.ts.map +1 -1
  228. package/lib/typescript/core/GainNode.d.ts +2 -2
  229. package/lib/typescript/core/GainNode.d.ts.map +1 -1
  230. package/lib/typescript/core/IIRFilterNode.d.ts +3 -0
  231. package/lib/typescript/core/IIRFilterNode.d.ts.map +1 -1
  232. package/lib/typescript/core/OscillatorNode.d.ts +2 -3
  233. package/lib/typescript/core/OscillatorNode.d.ts.map +1 -1
  234. package/lib/typescript/core/PeriodicWave.d.ts +4 -1
  235. package/lib/typescript/core/PeriodicWave.d.ts.map +1 -1
  236. package/lib/typescript/core/RecorderAdapterNode.d.ts +2 -0
  237. package/lib/typescript/core/RecorderAdapterNode.d.ts.map +1 -1
  238. package/lib/typescript/core/StereoPannerNode.d.ts +2 -2
  239. package/lib/typescript/core/StereoPannerNode.d.ts.map +1 -1
  240. package/lib/typescript/core/StreamerNode.d.ts +5 -0
  241. package/lib/typescript/core/StreamerNode.d.ts.map +1 -1
  242. package/lib/typescript/core/WaveShaperNode.d.ts +3 -0
  243. package/lib/typescript/core/WaveShaperNode.d.ts.map +1 -1
  244. package/lib/typescript/core/WorkletNode.d.ts +3 -0
  245. package/lib/typescript/core/WorkletNode.d.ts.map +1 -1
  246. package/lib/typescript/core/WorkletProcessingNode.d.ts +3 -0
  247. package/lib/typescript/core/WorkletProcessingNode.d.ts.map +1 -1
  248. package/lib/typescript/core/WorkletSourceNode.d.ts +3 -0
  249. package/lib/typescript/core/WorkletSourceNode.d.ts.map +1 -1
  250. package/lib/typescript/defaults.d.ts +16 -0
  251. package/lib/typescript/defaults.d.ts.map +1 -0
  252. package/lib/typescript/interfaces.d.ts +16 -15
  253. package/lib/typescript/interfaces.d.ts.map +1 -1
  254. package/lib/typescript/options-validators.d.ts +6 -0
  255. package/lib/typescript/options-validators.d.ts.map +1 -0
  256. package/lib/typescript/types.d.ts +80 -11
  257. package/lib/typescript/types.d.ts.map +1 -1
  258. package/lib/typescript/web-core/AnalyserNode.d.ts +2 -2
  259. package/lib/typescript/web-core/AnalyserNode.d.ts.map +1 -1
  260. package/lib/typescript/web-core/AudioBuffer.d.ts +3 -0
  261. package/lib/typescript/web-core/AudioBuffer.d.ts.map +1 -1
  262. package/lib/typescript/web-core/AudioBufferSourceNode.d.ts +24 -15
  263. package/lib/typescript/web-core/AudioBufferSourceNode.d.ts.map +1 -1
  264. package/lib/typescript/web-core/AudioContext.d.ts +5 -6
  265. package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
  266. package/lib/typescript/web-core/AudioNode.d.ts +2 -2
  267. package/lib/typescript/web-core/AudioNode.d.ts.map +1 -1
  268. package/lib/typescript/web-core/BaseAudioContext.d.ts +3 -3
  269. package/lib/typescript/web-core/BaseAudioContext.d.ts.map +1 -1
  270. package/lib/typescript/web-core/BiquadFilterNode.d.ts +2 -2
  271. package/lib/typescript/web-core/BiquadFilterNode.d.ts.map +1 -1
  272. package/lib/typescript/web-core/ConstantSourceNode.d.ts +2 -1
  273. package/lib/typescript/web-core/ConstantSourceNode.d.ts.map +1 -1
  274. package/lib/typescript/web-core/ConvolverNode.d.ts +2 -1
  275. package/lib/typescript/web-core/ConvolverNode.d.ts.map +1 -1
  276. package/lib/typescript/web-core/DelayNode.d.ts +2 -1
  277. package/lib/typescript/web-core/DelayNode.d.ts.map +1 -1
  278. package/lib/typescript/web-core/GainNode.d.ts +2 -1
  279. package/lib/typescript/web-core/GainNode.d.ts.map +1 -1
  280. package/lib/typescript/web-core/IIRFilterNode.d.ts +3 -0
  281. package/lib/typescript/web-core/IIRFilterNode.d.ts.map +1 -1
  282. package/lib/typescript/web-core/OfflineAudioContext.d.ts +5 -6
  283. package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
  284. package/lib/typescript/web-core/OscillatorNode.d.ts +2 -2
  285. package/lib/typescript/web-core/OscillatorNode.d.ts.map +1 -1
  286. package/lib/typescript/web-core/PeriodicWave.d.ts +3 -1
  287. package/lib/typescript/web-core/PeriodicWave.d.ts.map +1 -1
  288. package/lib/typescript/web-core/StereoPannerNode.d.ts +2 -1
  289. package/lib/typescript/web-core/StereoPannerNode.d.ts.map +1 -1
  290. package/package.json +1 -1
  291. package/src/api.ts +3 -1
  292. package/src/api.web.ts +1 -2
  293. package/src/core/AnalyserNode.ts +16 -1
  294. package/src/core/AudioBuffer.ts +26 -6
  295. package/src/core/AudioBufferQueueSourceNode.ts +15 -0
  296. package/src/core/AudioBufferSourceNode.ts +12 -0
  297. package/src/core/BaseAudioContext.ts +48 -151
  298. package/src/core/BiquadFilterNode.ts +9 -2
  299. package/src/core/ConstantSourceNode.ts +9 -1
  300. package/src/core/ConvolverNode.ts +11 -3
  301. package/src/core/DelayNode.ts +5 -2
  302. package/src/core/GainNode.ts +10 -3
  303. package/src/core/IIRFilterNode.ts +12 -0
  304. package/src/core/OscillatorNode.ts +13 -2
  305. package/src/core/PeriodicWave.ts +36 -2
  306. package/src/core/RecorderAdapterNode.ts +5 -0
  307. package/src/core/StereoPannerNode.ts +9 -1
  308. package/src/core/StreamerNode.ts +29 -1
  309. package/src/core/WaveShaperNode.ts +17 -0
  310. package/src/core/WorkletNode.ts +30 -1
  311. package/src/core/WorkletProcessingNode.ts +39 -1
  312. package/src/core/WorkletSourceNode.ts +36 -1
  313. package/src/defaults.ts +100 -0
  314. package/src/interfaces.ts +37 -24
  315. package/src/options-validators.ts +66 -0
  316. package/src/types.ts +96 -12
  317. package/src/web-core/AnalyserNode.tsx +15 -6
  318. package/src/web-core/AudioBuffer.tsx +20 -6
  319. package/src/web-core/AudioBufferSourceNode.tsx +393 -148
  320. package/src/web-core/AudioContext.tsx +22 -72
  321. package/src/web-core/AudioNode.tsx +6 -2
  322. package/src/web-core/BaseAudioContext.tsx +3 -7
  323. package/src/web-core/BiquadFilterNode.tsx +6 -2
  324. package/src/web-core/ConstantSourceNode.tsx +3 -1
  325. package/src/web-core/ConvolverNode.tsx +8 -8
  326. package/src/web-core/DelayNode.tsx +5 -1
  327. package/src/web-core/GainNode.tsx +3 -1
  328. package/src/web-core/IIRFilterNode.tsx +15 -0
  329. package/src/web-core/OfflineAudioContext.tsx +19 -67
  330. package/src/web-core/OscillatorNode.tsx +3 -2
  331. package/src/web-core/PeriodicWave.tsx +11 -1
  332. package/src/web-core/StereoPannerNode.tsx +9 -1
@@ -1,3 +1,41 @@
1
1
  import AudioNode from './AudioNode';
2
+ import BaseAudioContext from './BaseAudioContext';
3
+ import { AudioWorkletRuntime } from '../types';
4
+ import AudioAPIModule from '../AudioAPIModule';
2
5
 
3
- export default class WorkletProcessingNode extends AudioNode {}
6
+ export default class WorkletProcessingNode extends AudioNode {
7
+ constructor(
8
+ context: BaseAudioContext,
9
+ runtime: AudioWorkletRuntime,
10
+ callback: (
11
+ inputData: Array<Float32Array>,
12
+ outputData: Array<Float32Array>,
13
+ framesToProcess: number,
14
+ currentTime: number
15
+ ) => void
16
+ ) {
17
+ const shareableWorklet =
18
+ AudioAPIModule.workletsModule!.makeShareableCloneRecursive(
19
+ (
20
+ inputBuffers: Array<ArrayBuffer>,
21
+ outputBuffers: Array<ArrayBuffer>,
22
+ framesToProcess: number,
23
+ currentTime: number
24
+ ) => {
25
+ 'worklet';
26
+ const inputData: Array<Float32Array> = inputBuffers.map(
27
+ (buffer) => new Float32Array(buffer, 0, framesToProcess)
28
+ );
29
+ const outputData: Array<Float32Array> = outputBuffers.map(
30
+ (buffer) => new Float32Array(buffer, 0, framesToProcess)
31
+ );
32
+ callback(inputData, outputData, framesToProcess, currentTime);
33
+ }
34
+ );
35
+ const node = context.context.createWorkletProcessingNode(
36
+ shareableWorklet,
37
+ runtime === 'UIRuntime'
38
+ );
39
+ super(context, node);
40
+ }
41
+ }
@@ -1,3 +1,38 @@
1
1
  import AudioScheduledSourceNode from './AudioScheduledSourceNode';
2
+ import BaseAudioContext from './BaseAudioContext';
3
+ import { AudioWorkletRuntime } from '../types';
4
+ import AudioAPIModule from '../AudioAPIModule';
2
5
 
3
- export default class WorkletSourceNode extends AudioScheduledSourceNode {}
6
+ export default class WorkletSourceNode extends AudioScheduledSourceNode {
7
+ constructor(
8
+ context: BaseAudioContext,
9
+ runtime: AudioWorkletRuntime,
10
+ callback: (
11
+ audioData: Array<Float32Array>,
12
+ framesToProcess: number,
13
+ currentTime: number,
14
+ startOffset: number
15
+ ) => void
16
+ ) {
17
+ const shareableWorklet =
18
+ AudioAPIModule.workletsModule!.makeShareableCloneRecursive(
19
+ (
20
+ audioBuffers: Array<ArrayBuffer>,
21
+ framesToProcess: number,
22
+ currentTime: number,
23
+ startOffset: number
24
+ ) => {
25
+ 'worklet';
26
+ const floatAudioData: Array<Float32Array> = audioBuffers.map(
27
+ (buffer) => new Float32Array(buffer)
28
+ );
29
+ callback(floatAudioData, framesToProcess, currentTime, startOffset);
30
+ }
31
+ );
32
+ const node = context.context.createWorkletSourceNode(
33
+ shareableWorklet,
34
+ runtime === 'UIRuntime'
35
+ );
36
+ super(context, node);
37
+ }
38
+ }
@@ -0,0 +1,100 @@
1
+ import {
2
+ TAudioNodeOptions,
3
+ TGainOptions,
4
+ TSteroPannerOptions,
5
+ TConvolverOptions,
6
+ TConstantSourceOptions,
7
+ TPeriodicWaveConstraints,
8
+ TAnalyserOptions,
9
+ TBiquadFilterOptions,
10
+ TOscillatorOptions,
11
+ TBaseAudioBufferSourceOptions,
12
+ TAudioBufferSourceOptions,
13
+ TAudioBufferOptions,
14
+ TDelayOptions,
15
+ TWaveShaperOptions,
16
+ } from './types';
17
+
18
+ export const AudioNodeOptions: TAudioNodeOptions = {
19
+ channelCount: 2,
20
+ channelCountMode: 'max',
21
+ channelInterpretation: 'speakers',
22
+ };
23
+
24
+ export const GainOptions: TGainOptions = {
25
+ ...AudioNodeOptions,
26
+ gain: 1,
27
+ };
28
+
29
+ export const SteroPannerOptions: TSteroPannerOptions = {
30
+ ...AudioNodeOptions,
31
+ channelCountMode: 'clamped-max',
32
+ pan: 0,
33
+ };
34
+
35
+ export const AnalyserOptions: TAnalyserOptions = {
36
+ ...AudioNodeOptions,
37
+ fftSize: 2048,
38
+ minDecibels: -100,
39
+ maxDecibels: -30,
40
+ smoothingTimeConstant: 0.8,
41
+ };
42
+
43
+ export const BiquadFilterOptions: TBiquadFilterOptions = {
44
+ ...AudioNodeOptions,
45
+ Q: 1,
46
+ detune: 0,
47
+ frequency: 350,
48
+ gain: 0,
49
+ type: 'lowpass',
50
+ };
51
+
52
+ export const ConvolverOptions: TConvolverOptions = {
53
+ ...AudioNodeOptions,
54
+ disableNormalization: false,
55
+ };
56
+
57
+ export const ConstantSourceOptions: TConstantSourceOptions = {
58
+ offset: 1,
59
+ };
60
+
61
+ export const PeriodicWaveConstraints: TPeriodicWaveConstraints = {
62
+ disableNormalization: false,
63
+ };
64
+
65
+ export const OscillatorOptions: TOscillatorOptions = {
66
+ ...AudioNodeOptions,
67
+ type: 'sine',
68
+ frequency: 440,
69
+ detune: 0,
70
+ };
71
+
72
+ export const BaseAudioBufferSourceOptions: TBaseAudioBufferSourceOptions = {
73
+ playbackRate: 1,
74
+ detune: 0,
75
+ pitchCorrection: false,
76
+ };
77
+
78
+ export const AudioBufferSourceOptions: TAudioBufferSourceOptions = {
79
+ ...BaseAudioBufferSourceOptions,
80
+ loop: false,
81
+ loopStart: 0,
82
+ loopEnd: 0,
83
+ };
84
+
85
+ export const AudioBufferOptions: TAudioBufferOptions = {
86
+ numberOfChannels: 1,
87
+ length: 0, // always overwritten by provided value, only placeholder
88
+ sampleRate: 44100, // always overwritten by provided value, only placeholder
89
+ };
90
+
91
+ export const DelayOptions: TDelayOptions = {
92
+ ...AudioNodeOptions,
93
+ maxDelayTime: 1.0,
94
+ delayTime: 0.0,
95
+ };
96
+
97
+ export const WaveShaperOptions: TWaveShaperOptions = {
98
+ ...AudioNodeOptions,
99
+ oversample: 'none',
100
+ };
package/src/interfaces.ts CHANGED
@@ -11,6 +11,20 @@ import type {
11
11
  OverSampleType,
12
12
  Result,
13
13
  WindowType,
14
+ TGainOptions,
15
+ TSteroPannerOptions,
16
+ TConvolverOptions,
17
+ TConstantSourceOptions,
18
+ TAnalyserOptions,
19
+ TBiquadFilterOptions,
20
+ TOscillatorOptions,
21
+ TBaseAudioBufferSourceOptions,
22
+ TAudioBufferSourceOptions,
23
+ TStreamerOptions,
24
+ TAudioBufferOptions,
25
+ TDelayOptions,
26
+ TIIRFilterOptions,
27
+ TWaveShaperOptions,
14
28
  } from './types';
15
29
 
16
30
  // IMPORTANT: use only IClass, because it is a part of contract between cpp host object and js layer
@@ -62,37 +76,35 @@ export interface IBaseAudioContext {
62
76
  shareableWorklet: ShareableWorkletCallback,
63
77
  shouldUseUiRuntime: boolean
64
78
  ): IWorkletProcessingNode;
65
- createOscillator(): IOscillatorNode;
66
- createConstantSource(): IConstantSourceNode;
67
- createGain(): IGainNode;
68
- createDelay(maxDelayTime: number): IDelayNode;
69
- createStereoPanner(): IStereoPannerNode;
70
- createBiquadFilter: () => IBiquadFilterNode;
71
- createIIRFilter: (
72
- feedforward: number[],
73
- feedback: number[]
74
- ) => IIIRFilterNode;
75
- createBufferSource: (pitchCorrection: boolean) => IAudioBufferSourceNode;
79
+ createOscillator(oscillatorOptions: TOscillatorOptions): IOscillatorNode;
80
+ createConstantSource(
81
+ constantSourceOptions: TConstantSourceOptions
82
+ ): IConstantSourceNode;
83
+ createGain(gainOptions: TGainOptions): IGainNode;
84
+ createStereoPanner(
85
+ stereoPannerOptions: TSteroPannerOptions
86
+ ): IStereoPannerNode;
87
+ createBiquadFilter: (
88
+ biquadFilterOptions: TBiquadFilterOptions
89
+ ) => IBiquadFilterNode;
90
+ createBufferSource: (
91
+ audioBufferSourceOptions: TAudioBufferSourceOptions
92
+ ) => IAudioBufferSourceNode;
93
+ createDelay(delayOptions: TDelayOptions): IDelayNode;
94
+ createIIRFilter: (IIRFilterOptions: TIIRFilterOptions) => IIIRFilterNode;
76
95
  createBufferQueueSource: (
77
- pitchCorrection: boolean
96
+ audioBufferQueueSourceOptions: TBaseAudioBufferSourceOptions
78
97
  ) => IAudioBufferQueueSourceNode;
79
- createBuffer: (
80
- channels: number,
81
- length: number,
82
- sampleRate: number
83
- ) => IAudioBuffer;
98
+ createBuffer: (audioBufferOptions: TAudioBufferOptions) => IAudioBuffer;
84
99
  createPeriodicWave: (
85
100
  real: Float32Array,
86
101
  imag: Float32Array,
87
102
  disableNormalization: boolean
88
103
  ) => IPeriodicWave;
89
- createAnalyser: () => IAnalyserNode;
90
- createConvolver: (
91
- buffer: IAudioBuffer | undefined,
92
- disableNormalization: boolean
93
- ) => IConvolverNode;
94
- createStreamer: () => IStreamerNode | null; // null when FFmpeg is not enabled
95
- createWaveShaper: () => IWaveShaperNode;
104
+ createAnalyser: (analyserOptions: TAnalyserOptions) => IAnalyserNode;
105
+ createConvolver: (convolverOptions: TConvolverOptions) => IConvolverNode;
106
+ createStreamer: (streamerOptions?: TStreamerOptions) => IStreamerNode | null; // null when FFmpeg is not enabled
107
+ createWaveShaper: (waveShaperOptions?: TWaveShaperOptions) => IWaveShaperNode;
96
108
  }
97
109
 
98
110
  export interface IAudioContext extends IBaseAudioContext {
@@ -186,6 +198,7 @@ export interface IOscillatorNode extends IAudioScheduledSourceNode {
186
198
  }
187
199
 
188
200
  export interface IStreamerNode extends IAudioNode {
201
+ readonly streamPath: string;
189
202
  initialize(streamPath: string): boolean;
190
203
  }
191
204
 
@@ -0,0 +1,66 @@
1
+ import { IndexSizeError, NotSupportedError } from './errors';
2
+ import {
3
+ OptionsValidator,
4
+ TAnalyserOptions,
5
+ TConvolverOptions,
6
+ TOscillatorOptions,
7
+ TPeriodicWaveOptions,
8
+ } from './types';
9
+
10
+ export const AnalyserOptionsValidator: OptionsValidator<TAnalyserOptions> = {
11
+ validate(options: TAnalyserOptions): void {
12
+ const allowedFFTSize: number[] = [
13
+ 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768,
14
+ ];
15
+ if (options.fftSize && !allowedFFTSize.includes(options.fftSize)) {
16
+ throw new IndexSizeError(
17
+ `fftSize must be one of the following values: ${allowedFFTSize.join(
18
+ ', '
19
+ )}`
20
+ );
21
+ }
22
+ },
23
+ };
24
+
25
+ export const ConvolverOptionsValidator: OptionsValidator<TConvolverOptions> = {
26
+ validate(options: TConvolverOptions): void {
27
+ if (options.buffer) {
28
+ const numberOfChannels = options.buffer.numberOfChannels;
29
+ if (
30
+ numberOfChannels !== 1 &&
31
+ numberOfChannels !== 2 &&
32
+ numberOfChannels !== 4
33
+ ) {
34
+ throw new NotSupportedError(
35
+ `The number of channels provided (${numberOfChannels}) in impulse response for ConvolverNode buffer must be 1 or 2 or 4.`
36
+ );
37
+ }
38
+ }
39
+ },
40
+ };
41
+
42
+ export const OscillatorOptionsValidator: OptionsValidator<TOscillatorOptions> =
43
+ {
44
+ validate(options: TOscillatorOptions): void {
45
+ if (options.type === 'custom' && !options.periodicWave) {
46
+ throw new NotSupportedError(
47
+ "'type' cannot be set to 'custom' without providing a 'periodicWave'."
48
+ );
49
+ }
50
+ },
51
+ };
52
+
53
+ export const PeriodicWaveOptionsValidator: OptionsValidator<TPeriodicWaveOptions> =
54
+ {
55
+ validate(options: TPeriodicWaveOptions): void {
56
+ if (
57
+ options.real &&
58
+ options.imag &&
59
+ options.real.length !== options.imag.length
60
+ ) {
61
+ throw new NotSupportedError(
62
+ "'real' and 'imag' arrays must have the same length"
63
+ );
64
+ }
65
+ },
66
+ };
package/src/types.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import AudioBuffer from './core/AudioBuffer';
2
+ import PeriodicWave from './core/PeriodicWave';
2
3
 
3
4
  export type Result<T> =
4
5
  | ({ status: 'success' } & T)
@@ -29,10 +30,6 @@ export type OscillatorType =
29
30
  | 'triangle'
30
31
  | 'custom';
31
32
 
32
- export interface PeriodicWaveConstraints {
33
- disableNormalization: boolean;
34
- }
35
-
36
33
  export interface AudioContextOptions {
37
34
  sampleRate?: number;
38
35
  }
@@ -110,17 +107,99 @@ export interface FileInfo {
110
107
 
111
108
  export type WindowType = 'blackman' | 'hann';
112
109
 
113
- export interface AudioBufferBaseSourceNodeOptions {
114
- pitchCorrection: boolean;
110
+ export type ProcessorMode = 'processInPlace' | 'processThrough';
111
+
112
+ export interface TAudioNodeOptions {
113
+ channelCount?: number;
114
+ channelCountMode?: ChannelCountMode;
115
+ channelInterpretation?: ChannelInterpretation;
115
116
  }
116
117
 
117
- export type ProcessorMode = 'processInPlace' | 'processThrough';
118
+ export interface TGainOptions extends TAudioNodeOptions {
119
+ gain?: number;
120
+ }
121
+
122
+ export interface TSteroPannerOptions extends TAudioNodeOptions {
123
+ pan?: number;
124
+ }
125
+
126
+ export interface TAnalyserOptions extends TAudioNodeOptions {
127
+ fftSize?: number;
128
+ minDecibels?: number;
129
+ maxDecibels?: number;
130
+ smoothingTimeConstant?: number;
131
+ }
118
132
 
119
- export interface ConvolverNodeOptions {
120
- buffer?: AudioBuffer | null;
133
+ export interface OptionsValidator<T> {
134
+ validate(options: T): void;
135
+ }
136
+
137
+ export interface TBiquadFilterOptions extends TAudioNodeOptions {
138
+ type?: BiquadFilterType;
139
+ frequency?: number;
140
+ detune?: number;
141
+ Q?: number;
142
+ gain?: number;
143
+ }
144
+
145
+ export interface TOscillatorOptions {
146
+ type?: OscillatorType;
147
+ frequency?: number;
148
+ detune?: number;
149
+ periodicWave?: PeriodicWave;
150
+ }
151
+
152
+ export interface TBaseAudioBufferSourceOptions {
153
+ detune?: number;
154
+ playbackRate?: number;
155
+ pitchCorrection?: boolean;
156
+ }
157
+
158
+ export interface TAudioBufferSourceOptions
159
+ extends TBaseAudioBufferSourceOptions {
160
+ buffer?: AudioBuffer;
161
+ loop?: boolean;
162
+ loopStart?: number;
163
+ loopEnd?: number;
164
+ }
165
+
166
+ export interface TConvolverOptions extends TAudioNodeOptions {
167
+ buffer?: AudioBuffer;
121
168
  disableNormalization?: boolean;
122
169
  }
123
170
 
171
+ export interface TWebConvolverOptions {
172
+ buffer?: globalThis.AudioBuffer | null;
173
+ normalize?: boolean;
174
+ }
175
+
176
+ export interface TConstantSourceOptions {
177
+ offset?: number;
178
+ }
179
+
180
+ export interface TStreamerOptions {
181
+ streamPath?: string;
182
+ }
183
+
184
+ export interface TPeriodicWaveConstraints {
185
+ disableNormalization?: boolean;
186
+ }
187
+
188
+ export interface TPeriodicWaveOptions extends TPeriodicWaveConstraints {
189
+ real?: Float32Array;
190
+ imag?: Float32Array;
191
+ }
192
+
193
+ export interface TAudioBufferOptions {
194
+ numberOfChannels?: number;
195
+ length: number;
196
+ sampleRate: number;
197
+ }
198
+
199
+ export interface TIIRFilterOptions extends TAudioNodeOptions {
200
+ feedforward: number[];
201
+ feedback: number[];
202
+ }
124
203
  export type OverSampleType = 'none' | '2x' | '4x';
125
204
 
126
205
  export interface AudioRecorderCallbackOptions {
@@ -145,9 +224,14 @@ export interface AudioRecorderCallbackOptions {
145
224
  channelCount: number;
146
225
  }
147
226
 
148
- export interface IIRFilterNodeOptions {
149
- feedforward: number[];
150
- feedback: number[];
227
+ export interface TDelayOptions extends TAudioNodeOptions {
228
+ maxDelayTime?: number;
229
+ delayTime?: number;
230
+ }
231
+
232
+ export interface TWaveShaperOptions extends TAudioNodeOptions {
233
+ curve?: Float32Array;
234
+ oversample?: OverSampleType;
151
235
  }
152
236
 
153
237
  export type DecodeDataInput = number | string | ArrayBuffer;
@@ -1,5 +1,5 @@
1
1
  import AudioNode from './AudioNode';
2
- import { WindowType } from '../types';
2
+ import { WindowType, TAnalyserOptions } from '../types';
3
3
  import BaseAudioContext from './BaseAudioContext';
4
4
 
5
5
  export default class AnalyserNode extends AudioNode {
@@ -9,7 +9,8 @@ export default class AnalyserNode extends AudioNode {
9
9
  maxDecibels: number;
10
10
  smoothingTimeConstant: number;
11
11
 
12
- constructor(context: BaseAudioContext, node: globalThis.AnalyserNode) {
12
+ constructor(context: BaseAudioContext, analyserOptions?: TAnalyserOptions) {
13
+ const node = new globalThis.AnalyserNode(context.context, analyserOptions);
13
14
  super(context, node);
14
15
 
15
16
  this.fftSize = node.fftSize;
@@ -30,18 +31,26 @@ export default class AnalyserNode extends AudioNode {
30
31
  }
31
32
 
32
33
  public getByteFrequencyData(array: Uint8Array): void {
33
- (this.node as globalThis.AnalyserNode).getByteFrequencyData(array);
34
+ (this.node as globalThis.AnalyserNode).getByteFrequencyData(
35
+ array as Uint8Array<ArrayBuffer>
36
+ );
34
37
  }
35
38
 
36
39
  public getByteTimeDomainData(array: Uint8Array): void {
37
- (this.node as globalThis.AnalyserNode).getByteTimeDomainData(array);
40
+ (this.node as globalThis.AnalyserNode).getByteTimeDomainData(
41
+ array as Uint8Array<ArrayBuffer>
42
+ );
38
43
  }
39
44
 
40
45
  public getFloatFrequencyData(array: Float32Array): void {
41
- (this.node as globalThis.AnalyserNode).getFloatFrequencyData(array);
46
+ (this.node as globalThis.AnalyserNode).getFloatFrequencyData(
47
+ array as Float32Array<ArrayBuffer>
48
+ );
42
49
  }
43
50
 
44
51
  public getFloatTimeDomainData(array: Float32Array): void {
45
- (this.node as globalThis.AnalyserNode).getFloatTimeDomainData(array);
52
+ (this.node as globalThis.AnalyserNode).getFloatTimeDomainData(
53
+ array as Float32Array<ArrayBuffer>
54
+ );
46
55
  }
47
56
  }
@@ -1,4 +1,6 @@
1
1
  import { IndexSizeError } from '../errors';
2
+ import BaseAudioContext from './BaseAudioContext';
3
+ import { TAudioBufferOptions } from '../types';
2
4
 
3
5
  export default class AudioBuffer {
4
6
  readonly length: number;
@@ -9,12 +11,24 @@ export default class AudioBuffer {
9
11
  /** @internal */
10
12
  public readonly buffer: globalThis.AudioBuffer;
11
13
 
12
- constructor(buffer: globalThis.AudioBuffer) {
13
- this.buffer = buffer;
14
- this.length = buffer.length;
15
- this.duration = buffer.duration;
16
- this.sampleRate = buffer.sampleRate;
17
- this.numberOfChannels = buffer.numberOfChannels;
14
+ constructor(buffer: globalThis.AudioBuffer);
15
+ constructor(context: BaseAudioContext, options: TAudioBufferOptions);
16
+
17
+ constructor(
18
+ contextOrBuffer: BaseAudioContext | globalThis.AudioBuffer,
19
+ options?: TAudioBufferOptions
20
+ ) {
21
+ let buf: globalThis.AudioBuffer;
22
+ if (contextOrBuffer instanceof BaseAudioContext) {
23
+ buf = new globalThis.AudioBuffer(options!);
24
+ } else {
25
+ buf = contextOrBuffer as globalThis.AudioBuffer;
26
+ }
27
+ this.buffer = buf;
28
+ this.length = buf.length;
29
+ this.duration = buf.duration;
30
+ this.sampleRate = buf.sampleRate;
31
+ this.numberOfChannels = buf.numberOfChannels;
18
32
  }
19
33
 
20
34
  public getChannelData(channel: number): Float32Array {