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,19 +1,10 @@
1
- import AudioAPIModule from '../AudioAPIModule';
2
1
  import {
3
2
  InvalidAccessError,
4
3
  InvalidStateError,
5
4
  NotSupportedError,
6
5
  } from '../errors';
7
6
  import { IBaseAudioContext } from '../interfaces';
8
- import {
9
- AudioBufferBaseSourceNodeOptions,
10
- AudioWorkletRuntime,
11
- ContextState,
12
- ConvolverNodeOptions,
13
- DecodeDataInput,
14
- IIRFilterNodeOptions,
15
- PeriodicWaveConstraints,
16
- } from '../types';
7
+ import { AudioWorkletRuntime, ContextState, DecodeDataInput } from '../types';
17
8
  import { assertWorkletsEnabled } from '../utils';
18
9
  import AnalyserNode from './AnalyserNode';
19
10
  import AudioBuffer from './AudioBuffer';
@@ -96,26 +87,12 @@ export default class BaseAudioContext {
96
87
  }
97
88
 
98
89
  assertWorkletsEnabled();
99
-
100
- const shareableWorklet =
101
- AudioAPIModule.workletsModule!.makeShareableCloneRecursive(
102
- (audioBuffers: Array<ArrayBuffer>, channelCount: number) => {
103
- 'worklet';
104
- const floatAudioData: Array<Float32Array> = audioBuffers.map(
105
- (buffer) => new Float32Array(buffer)
106
- );
107
- callback(floatAudioData, channelCount);
108
- }
109
- );
110
-
111
90
  return new WorkletNode(
112
91
  this,
113
- this.context.createWorkletNode(
114
- shareableWorklet,
115
- workletRuntime === 'UIRuntime',
116
- bufferLength,
117
- inputChannelCount
118
- )
92
+ workletRuntime,
93
+ callback,
94
+ bufferLength,
95
+ inputChannelCount
119
96
  );
120
97
  }
121
98
 
@@ -129,33 +106,7 @@ export default class BaseAudioContext {
129
106
  workletRuntime: AudioWorkletRuntime = 'AudioRuntime'
130
107
  ): WorkletProcessingNode {
131
108
  assertWorkletsEnabled();
132
-
133
- const shareableWorklet =
134
- AudioAPIModule.workletsModule!.makeShareableCloneRecursive(
135
- (
136
- inputBuffers: Array<ArrayBuffer>,
137
- outputBuffers: Array<ArrayBuffer>,
138
- framesToProcess: number,
139
- currentTime: number
140
- ) => {
141
- 'worklet';
142
- const inputData: Array<Float32Array> = inputBuffers.map(
143
- (buffer) => new Float32Array(buffer, 0, framesToProcess)
144
- );
145
- const outputData: Array<Float32Array> = outputBuffers.map(
146
- (buffer) => new Float32Array(buffer, 0, framesToProcess)
147
- );
148
- callback(inputData, outputData, framesToProcess, currentTime);
149
- }
150
- );
151
-
152
- return new WorkletProcessingNode(
153
- this,
154
- this.context.createWorkletProcessingNode(
155
- shareableWorklet,
156
- workletRuntime === 'UIRuntime'
157
- )
158
- );
109
+ return new WorkletProcessingNode(this, workletRuntime, callback);
159
110
  }
160
111
 
161
112
  createWorkletSourceNode(
@@ -168,71 +119,56 @@ export default class BaseAudioContext {
168
119
  workletRuntime: AudioWorkletRuntime = 'AudioRuntime'
169
120
  ): WorkletSourceNode {
170
121
  assertWorkletsEnabled();
171
- const shareableWorklet =
172
- AudioAPIModule.workletsModule!.makeShareableCloneRecursive(
173
- (
174
- audioBuffers: Array<ArrayBuffer>,
175
- framesToProcess: number,
176
- currentTime: number,
177
- startOffset: number
178
- ) => {
179
- 'worklet';
180
- const floatAudioData: Array<Float32Array> = audioBuffers.map(
181
- (buffer) => new Float32Array(buffer)
182
- );
183
- callback(floatAudioData, framesToProcess, currentTime, startOffset);
184
- }
185
- );
186
-
187
- return new WorkletSourceNode(
188
- this,
189
- this.context.createWorkletSourceNode(
190
- shareableWorklet,
191
- workletRuntime === 'UIRuntime'
192
- )
193
- );
122
+ return new WorkletSourceNode(this, workletRuntime, callback);
194
123
  }
195
124
 
196
125
  createRecorderAdapter(): RecorderAdapterNode {
197
- return new RecorderAdapterNode(this, this.context.createRecorderAdapter());
126
+ return new RecorderAdapterNode(this);
198
127
  }
199
128
 
200
129
  createOscillator(): OscillatorNode {
201
- return new OscillatorNode(this, this.context.createOscillator());
130
+ return new OscillatorNode(this);
202
131
  }
203
132
 
204
133
  createStreamer(): StreamerNode {
205
- const streamer = this.context.createStreamer();
206
- if (!streamer) {
207
- throw new NotSupportedError('StreamerNode requires FFmpeg build');
208
- }
209
- return new StreamerNode(this, streamer);
134
+ return new StreamerNode(this);
210
135
  }
211
136
 
212
137
  createConstantSource(): ConstantSourceNode {
213
- return new ConstantSourceNode(this, this.context.createConstantSource());
138
+ return new ConstantSourceNode(this);
214
139
  }
215
140
 
216
141
  createGain(): GainNode {
217
- return new GainNode(this, this.context.createGain());
142
+ return new GainNode(this);
218
143
  }
219
144
 
220
145
  createDelay(maxDelayTime?: number): DelayNode {
221
- const maxTime = maxDelayTime ?? 1.0;
222
- return new DelayNode(this, this.context.createDelay(maxTime));
146
+ if (maxDelayTime !== undefined) {
147
+ return new DelayNode(this, { maxDelayTime });
148
+ } else {
149
+ return new DelayNode(this);
150
+ }
223
151
  }
224
152
 
225
153
  createStereoPanner(): StereoPannerNode {
226
- return new StereoPannerNode(this, this.context.createStereoPanner());
154
+ return new StereoPannerNode(this);
227
155
  }
228
156
 
229
157
  createBiquadFilter(): BiquadFilterNode {
230
- return new BiquadFilterNode(this, this.context.createBiquadFilter());
158
+ return new BiquadFilterNode(this);
159
+ }
160
+
161
+ createBufferSource(options: {
162
+ pitchCorrection?: boolean;
163
+ }): AudioBufferSourceNode {
164
+ if (options.pitchCorrection !== undefined) {
165
+ return new AudioBufferSourceNode(this, options);
166
+ } else {
167
+ return new AudioBufferSourceNode(this);
168
+ }
231
169
  }
232
170
 
233
- createIIRFilter(options: IIRFilterNodeOptions): IIRFilterNode {
234
- const feedforward = options.feedforward;
235
- const feedback = options.feedback;
171
+ createIIRFilter(feedforward: number[], feedback: number[]): IIRFilterNode {
236
172
  if (feedforward.length < 1 || feedforward.length > 20) {
237
173
  throw new NotSupportedError(
238
174
  `The provided feedforward array has length (${feedforward.length}) outside the range [1, 20]`
@@ -256,42 +192,27 @@ export default class BaseAudioContext {
256
192
  );
257
193
  }
258
194
 
259
- return new IIRFilterNode(
260
- this,
261
- this.context.createIIRFilter(feedforward, feedback)
262
- );
195
+ return new IIRFilterNode(this, { feedforward, feedback });
263
196
  }
264
197
 
265
- createBufferSource(
266
- options?: AudioBufferBaseSourceNodeOptions
267
- ): AudioBufferSourceNode {
268
- const pitchCorrection = options?.pitchCorrection ?? false;
269
-
270
- return new AudioBufferSourceNode(
271
- this,
272
- this.context.createBufferSource(pitchCorrection)
273
- );
274
- }
275
-
276
- createBufferQueueSource(
277
- options?: AudioBufferBaseSourceNodeOptions
278
- ): AudioBufferQueueSourceNode {
279
- const pitchCorrection = options?.pitchCorrection ?? false;
280
-
281
- return new AudioBufferQueueSourceNode(
282
- this,
283
- this.context.createBufferQueueSource(pitchCorrection)
284
- );
198
+ createBufferQueueSource(options: {
199
+ pitchCorrection?: boolean;
200
+ }): AudioBufferQueueSourceNode {
201
+ if (options.pitchCorrection !== undefined) {
202
+ return new AudioBufferQueueSourceNode(this, options);
203
+ } else {
204
+ return new AudioBufferQueueSourceNode(this);
205
+ }
285
206
  }
286
207
 
287
208
  createBuffer(
288
- numOfChannels: number,
209
+ numberOfChannels: number,
289
210
  length: number,
290
211
  sampleRate: number
291
212
  ): AudioBuffer {
292
- if (numOfChannels < 1 || numOfChannels >= 32) {
213
+ if (numberOfChannels < 1 || numberOfChannels >= 32) {
293
214
  throw new NotSupportedError(
294
- `The number of channels provided (${numOfChannels}) is outside the range [1, 32]`
215
+ `The number of channels provided (${numberOfChannels}) is outside the range [1, 32]`
295
216
  );
296
217
  }
297
218
 
@@ -307,9 +228,7 @@ export default class BaseAudioContext {
307
228
  );
308
229
  }
309
230
 
310
- return new AudioBuffer(
311
- this.context.createBuffer(numOfChannels, length, sampleRate)
312
- );
231
+ return new AudioBuffer(this, { numberOfChannels, length, sampleRate });
313
232
  }
314
233
 
315
234
  createPeriodicWave(
@@ -322,40 +241,18 @@ export default class BaseAudioContext {
322
241
  `The lengths of the real (${real.length}) and imaginary (${imag.length}) arrays must match.`
323
242
  );
324
243
  }
325
-
326
- const disableNormalization = constraints?.disableNormalization ?? false;
327
-
328
- return new PeriodicWave(
329
- this.context.createPeriodicWave(real, imag, disableNormalization)
330
- );
244
+ return new PeriodicWave(this, { real, imag, ...constraints });
331
245
  }
332
246
 
333
247
  createAnalyser(): AnalyserNode {
334
- return new AnalyserNode(this, this.context.createAnalyser());
248
+ return new AnalyserNode(this);
335
249
  }
336
250
 
337
- createConvolver(options?: ConvolverNodeOptions): ConvolverNode {
338
- if (options?.buffer) {
339
- const numberOfChannels = options.buffer.numberOfChannels;
340
- if (
341
- numberOfChannels !== 1 &&
342
- numberOfChannels !== 2 &&
343
- numberOfChannels !== 4
344
- ) {
345
- throw new NotSupportedError(
346
- `The number of channels provided (${numberOfChannels}) in impulse response for ConvolverNode buffer must be 1 or 2 or 4.`
347
- );
348
- }
349
- }
350
- const buffer = options?.buffer ?? null;
351
- const disableNormalization = options?.disableNormalization ?? false;
352
- return new ConvolverNode(
353
- this,
354
- this.context.createConvolver(buffer?.buffer, disableNormalization)
355
- );
251
+ createConvolver(): ConvolverNode {
252
+ return new ConvolverNode(this);
356
253
  }
357
254
 
358
255
  createWaveShaper(): WaveShaperNode {
359
- return new WaveShaperNode(this, this.context.createWaveShaper());
256
+ return new WaveShaperNode(this);
360
257
  }
361
258
  }
@@ -3,7 +3,8 @@ import { IBiquadFilterNode } from '../interfaces';
3
3
  import AudioNode from './AudioNode';
4
4
  import AudioParam from './AudioParam';
5
5
  import BaseAudioContext from './BaseAudioContext';
6
- import { BiquadFilterType } from '../types';
6
+ import { BiquadFilterOptions } from '../defaults';
7
+ import { TBiquadFilterOptions } from '../types';
7
8
 
8
9
  export default class BiquadFilterNode extends AudioNode {
9
10
  readonly frequency: AudioParam;
@@ -11,7 +12,13 @@ export default class BiquadFilterNode extends AudioNode {
11
12
  readonly Q: AudioParam;
12
13
  readonly gain: AudioParam;
13
14
 
14
- constructor(context: BaseAudioContext, biquadFilter: IBiquadFilterNode) {
15
+ constructor(context: BaseAudioContext, options?: TBiquadFilterOptions) {
16
+ const finalOptions: TBiquadFilterOptions = {
17
+ ...BiquadFilterOptions,
18
+ ...options,
19
+ };
20
+ const biquadFilter: IBiquadFilterNode =
21
+ context.context.createBiquadFilter(finalOptions);
15
22
  super(context, biquadFilter);
16
23
  this.frequency = new AudioParam(biquadFilter.frequency, context);
17
24
  this.detune = new AudioParam(biquadFilter.detune, context);
@@ -1,4 +1,6 @@
1
1
  import { IConstantSourceNode } from '../interfaces';
2
+ import { ConstantSourceOptions } from '../defaults';
3
+ import { TConstantSourceOptions } from '../types';
2
4
  import AudioParam from './AudioParam';
3
5
  import AudioScheduledSourceNode from './AudioScheduledSourceNode';
4
6
  import BaseAudioContext from './BaseAudioContext';
@@ -6,7 +8,13 @@ import BaseAudioContext from './BaseAudioContext';
6
8
  export default class ConstantSourceNode extends AudioScheduledSourceNode {
7
9
  readonly offset: AudioParam;
8
10
 
9
- constructor(context: BaseAudioContext, node: IConstantSourceNode) {
11
+ constructor(context: BaseAudioContext, options?: TConstantSourceOptions) {
12
+ const finalOptions: TConstantSourceOptions = {
13
+ ...ConstantSourceOptions,
14
+ ...options,
15
+ };
16
+ const node: IConstantSourceNode =
17
+ context.context.createConstantSource(finalOptions);
10
18
  super(context, node);
11
19
  this.offset = new AudioParam(node.offset, context);
12
20
  }
@@ -1,12 +1,20 @@
1
1
  import { IConvolverNode } from '../interfaces';
2
+ import { ConvolverOptions } from '../defaults';
3
+ import { TConvolverOptions } from '../types';
2
4
  import BaseAudioContext from './BaseAudioContext';
3
5
  import AudioNode from './AudioNode';
4
6
  import AudioBuffer from './AudioBuffer';
5
7
 
6
8
  export default class ConvolverNode extends AudioNode {
7
- constructor(context: BaseAudioContext, node: IConvolverNode) {
8
- super(context, node);
9
- this.normalize = node.normalize;
9
+ constructor(context: BaseAudioContext, options?: TConvolverOptions) {
10
+ const finalOptions: TConvolverOptions = {
11
+ ...ConvolverOptions,
12
+ ...options,
13
+ };
14
+ const convolverNode: IConvolverNode =
15
+ context.context.createConvolver(finalOptions);
16
+ super(context, convolverNode);
17
+ this.normalize = convolverNode.normalize;
10
18
  }
11
19
 
12
20
  public get buffer(): AudioBuffer | null {
@@ -1,12 +1,15 @@
1
- import { IDelayNode } from '../interfaces';
2
1
  import AudioNode from './AudioNode';
3
2
  import AudioParam from './AudioParam';
4
3
  import BaseAudioContext from './BaseAudioContext';
4
+ import { TDelayOptions } from '../types';
5
+ import { DelayOptions } from '../defaults';
5
6
 
6
7
  export default class DelayNode extends AudioNode {
7
8
  readonly delayTime: AudioParam;
8
9
 
9
- constructor(context: BaseAudioContext, delay: IDelayNode) {
10
+ constructor(context: BaseAudioContext, options?: TDelayOptions) {
11
+ const finalOptions = { ...DelayOptions, ...options };
12
+ const delay = context.context.createDelay(finalOptions);
10
13
  super(context, delay);
11
14
  this.delayTime = new AudioParam(delay.delayTime, context);
12
15
  }
@@ -1,4 +1,6 @@
1
1
  import { IGainNode } from '../interfaces';
2
+ import { GainOptions } from '../defaults';
3
+ import { TGainOptions } from '../types';
2
4
  import AudioNode from './AudioNode';
3
5
  import AudioParam from './AudioParam';
4
6
  import BaseAudioContext from './BaseAudioContext';
@@ -6,8 +8,13 @@ import BaseAudioContext from './BaseAudioContext';
6
8
  export default class GainNode extends AudioNode {
7
9
  readonly gain: AudioParam;
8
10
 
9
- constructor(context: BaseAudioContext, gain: IGainNode) {
10
- super(context, gain);
11
- this.gain = new AudioParam(gain.gain, context);
11
+ constructor(context: BaseAudioContext, options?: TGainOptions) {
12
+ const finalOptions: TGainOptions = {
13
+ ...GainOptions,
14
+ ...options,
15
+ };
16
+ const gainNode: IGainNode = context.context.createGain(finalOptions);
17
+ super(context, gainNode);
18
+ this.gain = new AudioParam(gainNode.gain, context);
12
19
  }
13
20
  }
@@ -1,8 +1,20 @@
1
1
  import { NotSupportedError } from '../errors';
2
2
  import { IIIRFilterNode } from '../interfaces';
3
3
  import AudioNode from './AudioNode';
4
+ import { TIIRFilterOptions } from '../types';
5
+ import { AudioNodeOptions } from '../defaults';
6
+ import BaseAudioContext from './BaseAudioContext';
4
7
 
5
8
  export default class IIRFilterNode extends AudioNode {
9
+ constructor(context: BaseAudioContext, options: TIIRFilterOptions) {
10
+ const finalOptions: TIIRFilterOptions = {
11
+ ...AudioNodeOptions,
12
+ ...options,
13
+ };
14
+ const iirFilterNode = context.context.createIIRFilter(finalOptions);
15
+ super(context, iirFilterNode);
16
+ }
17
+
6
18
  public getFrequencyResponse(
7
19
  frequencyArray: Float32Array,
8
20
  magResponseOutput: Float32Array,
@@ -1,17 +1,28 @@
1
1
  import { IOscillatorNode } from '../interfaces';
2
- import { OscillatorType } from '../types';
3
2
  import AudioScheduledSourceNode from './AudioScheduledSourceNode';
4
3
  import AudioParam from './AudioParam';
5
4
  import BaseAudioContext from './BaseAudioContext';
6
5
  import PeriodicWave from './PeriodicWave';
7
6
  import { InvalidStateError } from '../errors';
8
7
  import { EventEmptyType } from '../events/types';
8
+ import { OscillatorOptions } from '../defaults';
9
+ import { TOscillatorOptions } from '../types';
9
10
 
10
11
  export default class OscillatorNode extends AudioScheduledSourceNode {
11
12
  readonly frequency: AudioParam;
12
13
  readonly detune: AudioParam;
13
14
 
14
- constructor(context: BaseAudioContext, node: IOscillatorNode) {
15
+ constructor(context: BaseAudioContext, options?: TOscillatorOptions) {
16
+ const finalOptions: TOscillatorOptions = {
17
+ ...OscillatorOptions,
18
+ ...options,
19
+ };
20
+
21
+ if (finalOptions.periodicWave) {
22
+ finalOptions.type = 'custom';
23
+ }
24
+
25
+ const node = context.context.createOscillator(finalOptions);
15
26
  super(context, node);
16
27
  this.frequency = new AudioParam(node.frequency, context);
17
28
  this.detune = new AudioParam(node.detune, context);
@@ -1,10 +1,44 @@
1
1
  import { IPeriodicWave } from '../interfaces';
2
+ import BaseAudioContext from './BaseAudioContext';
3
+ import { TPeriodicWaveOptions } from '../types';
4
+ import { PeriodicWaveConstraints } from '../defaults';
5
+ import { PeriodicWaveOptionsValidator } from '../options-validators';
6
+
7
+ export function generateRealAndImag(
8
+ options?: TPeriodicWaveOptions
9
+ ): TPeriodicWaveOptions {
10
+ let real: Float32Array | undefined;
11
+ let imag: Float32Array | undefined;
12
+ if (!options || (!options.real && !options.imag)) {
13
+ real = new Float32Array(2);
14
+ imag = new Float32Array(2);
15
+ imag[1] = 1;
16
+ } else {
17
+ real = options.real;
18
+ imag = options.imag;
19
+ PeriodicWaveOptionsValidator.validate(options);
20
+ if (real && !imag) {
21
+ imag = new Float32Array(real.length);
22
+ } else if (!real && imag) {
23
+ real = new Float32Array(imag.length);
24
+ }
25
+ }
26
+ const norm: boolean = options?.disableNormalization
27
+ ? options.disableNormalization
28
+ : PeriodicWaveConstraints.disableNormalization!;
29
+ return { real, imag, disableNormalization: norm };
30
+ }
2
31
 
3
32
  export default class PeriodicWave {
4
33
  /** @internal */
5
34
  public readonly periodicWave: IPeriodicWave;
6
35
 
7
- constructor(periodicWave: IPeriodicWave) {
8
- this.periodicWave = periodicWave;
36
+ constructor(context: BaseAudioContext, options?: TPeriodicWaveOptions) {
37
+ const finalOptions = generateRealAndImag(options);
38
+ this.periodicWave = context.context.createPeriodicWave(
39
+ finalOptions.real!,
40
+ finalOptions.imag!,
41
+ finalOptions.disableNormalization!
42
+ );
9
43
  }
10
44
  }
@@ -1,10 +1,15 @@
1
1
  import { IRecorderAdapterNode } from '../interfaces';
2
2
  import AudioNode from './AudioNode';
3
+ import BaseAudioContext from './BaseAudioContext';
3
4
 
4
5
  export default class RecorderAdapterNode extends AudioNode {
5
6
  /** @internal */
6
7
  public wasConnected: boolean = false;
7
8
 
9
+ constructor(context: BaseAudioContext) {
10
+ super(context, context.context.createRecorderAdapter());
11
+ }
12
+
8
13
  /** @internal */
9
14
  public getNode(): IRecorderAdapterNode {
10
15
  return this.node as IRecorderAdapterNode;
@@ -1,4 +1,6 @@
1
1
  import { IStereoPannerNode } from '../interfaces';
2
+ import { SteroPannerOptions } from '../defaults';
3
+ import { TSteroPannerOptions } from '../types';
2
4
  import AudioNode from './AudioNode';
3
5
  import AudioParam from './AudioParam';
4
6
  import BaseAudioContext from './BaseAudioContext';
@@ -6,7 +8,13 @@ import BaseAudioContext from './BaseAudioContext';
6
8
  export default class StereoPannerNode extends AudioNode {
7
9
  readonly pan: AudioParam;
8
10
 
9
- constructor(context: BaseAudioContext, pan: IStereoPannerNode) {
11
+ constructor(context: BaseAudioContext, options?: TSteroPannerOptions) {
12
+ const finalOptions: TSteroPannerOptions = {
13
+ ...SteroPannerOptions,
14
+ ...options,
15
+ };
16
+ const pan: IStereoPannerNode =
17
+ context.context.createStereoPanner(finalOptions);
10
18
  super(context, pan);
11
19
  this.pan = new AudioParam(pan.pan, context);
12
20
  }
@@ -1,8 +1,36 @@
1
1
  import { IStreamerNode } from '../interfaces';
2
2
  import AudioScheduledSourceNode from './AudioScheduledSourceNode';
3
+ import { TStreamerOptions } from '../types';
4
+ import { InvalidStateError, NotSupportedError } from '../errors';
5
+ import BaseAudioContext from './BaseAudioContext';
3
6
 
4
7
  export default class StreamerNode extends AudioScheduledSourceNode {
8
+ private hasBeenSetup: boolean = false;
9
+ constructor(context: BaseAudioContext, options?: TStreamerOptions) {
10
+ const node = context.context.createStreamer(options);
11
+ if (!node) {
12
+ throw new NotSupportedError('StreamerNode requires FFmpeg build');
13
+ }
14
+ super(context, node);
15
+ if (options?.streamPath) {
16
+ if (this.initialize(options.streamPath)) {
17
+ this.hasBeenSetup = true;
18
+ }
19
+ }
20
+ }
21
+
5
22
  public initialize(streamPath: string): boolean {
6
- return (this.node as IStreamerNode).initialize(streamPath);
23
+ if (this.hasBeenSetup) {
24
+ throw new InvalidStateError('Node is already setup');
25
+ }
26
+ const res = (this.node as IStreamerNode).initialize(streamPath);
27
+ if (res) {
28
+ this.hasBeenSetup = true;
29
+ }
30
+ return res;
31
+ }
32
+
33
+ public get streamPath(): string {
34
+ return (this.node as IStreamerNode).streamPath;
7
35
  }
8
36
  }
@@ -1,10 +1,27 @@
1
1
  import AudioNode from './AudioNode';
2
+ import BaseAudioContext from './BaseAudioContext';
2
3
  import { InvalidStateError } from '../errors';
3
4
  import { IWaveShaperNode } from '../interfaces';
5
+ import { WaveShaperOptions } from '../defaults';
6
+ import { TWaveShaperOptions } from '../types';
4
7
 
5
8
  export default class WaveShaperNode extends AudioNode {
6
9
  private isCurveSet: boolean = false;
7
10
 
11
+ constructor(context: BaseAudioContext, options?: TWaveShaperOptions) {
12
+ const finalOptions: TWaveShaperOptions = {
13
+ ...WaveShaperOptions,
14
+ ...options,
15
+ };
16
+
17
+ const node = context.context.createWaveShaper(finalOptions);
18
+ super(context, node);
19
+
20
+ if (finalOptions.curve) {
21
+ this.isCurveSet = true;
22
+ }
23
+ }
24
+
8
25
  get curve(): Float32Array | null {
9
26
  if (!this.isCurveSet) {
10
27
  return null;
@@ -1,3 +1,32 @@
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 WorkletNode extends AudioNode {}
6
+ export default class WorkletNode extends AudioNode {
7
+ constructor(
8
+ context: BaseAudioContext,
9
+ runtime: AudioWorkletRuntime,
10
+ callback: (audioData: Array<Float32Array>, channelCount: number) => void,
11
+ bufferLength: number,
12
+ inputChannelCount: number
13
+ ) {
14
+ const shareableWorklet =
15
+ AudioAPIModule.workletsModule!.makeShareableCloneRecursive(
16
+ (audioBuffers: Array<ArrayBuffer>, channelCount: number) => {
17
+ 'worklet';
18
+ const floatAudioData: Array<Float32Array> = audioBuffers.map(
19
+ (buffer) => new Float32Array(buffer)
20
+ );
21
+ callback(floatAudioData, channelCount);
22
+ }
23
+ );
24
+ const node = context.context.createWorkletNode(
25
+ shareableWorklet,
26
+ runtime === 'UIRuntime',
27
+ bufferLength,
28
+ inputChannelCount
29
+ );
30
+ super(context, node);
31
+ }
32
+ }