react-native-audio-api 0.12.0-nightly-0d1a19d-20260120 → 0.12.0-nightly-6993a06-20260122

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 (379) hide show
  1. package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +16 -2
  2. package/android/src/main/java/com/swmansion/audioapi/system/AudioFocusListener.kt +7 -3
  3. package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionManager.kt +6 -6
  4. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +52 -49
  5. package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.cpp +18 -0
  6. package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.h +4 -0
  7. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.cpp +6 -0
  8. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.h +1 -0
  9. package/common/cpp/audioapi/HostObjects/utils/NodeOptions.h +111 -0
  10. package/common/cpp/audioapi/HostObjects/utils/NodeOptionsParser.h +262 -0
  11. package/common/cpp/audioapi/core/AudioNode.cpp +13 -6
  12. package/common/cpp/audioapi/core/AudioNode.h +2 -0
  13. package/common/cpp/audioapi/core/BaseAudioContext.cpp +42 -44
  14. package/common/cpp/audioapi/core/BaseAudioContext.h +32 -21
  15. package/common/cpp/audioapi/core/analysis/AnalyserNode.cpp +8 -6
  16. package/common/cpp/audioapi/core/analysis/AnalyserNode.h +2 -1
  17. package/common/cpp/audioapi/core/effects/BiquadFilterNode.cpp +7 -8
  18. package/common/cpp/audioapi/core/effects/BiquadFilterNode.h +4 -1
  19. package/common/cpp/audioapi/core/effects/ConvolverNode.cpp +5 -9
  20. package/common/cpp/audioapi/core/effects/ConvolverNode.h +2 -2
  21. package/common/cpp/audioapi/core/effects/DelayNode.cpp +5 -4
  22. package/common/cpp/audioapi/core/effects/DelayNode.h +2 -1
  23. package/common/cpp/audioapi/core/effects/GainNode.cpp +4 -3
  24. package/common/cpp/audioapi/core/effects/GainNode.h +2 -1
  25. package/common/cpp/audioapi/core/effects/IIRFilterNode.cpp +6 -6
  26. package/common/cpp/audioapi/core/effects/IIRFilterNode.h +3 -2
  27. package/common/cpp/audioapi/core/effects/StereoPannerNode.cpp +3 -3
  28. package/common/cpp/audioapi/core/effects/StereoPannerNode.h +4 -1
  29. package/common/cpp/audioapi/core/effects/WaveShaperNode.cpp +4 -3
  30. package/common/cpp/audioapi/core/effects/WaveShaperNode.h +4 -1
  31. package/common/cpp/audioapi/core/sources/AudioBuffer.cpp +3 -2
  32. package/common/cpp/audioapi/core/sources/AudioBuffer.h +2 -1
  33. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +16 -22
  34. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +2 -1
  35. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +38 -20
  36. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +9 -1
  37. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +10 -8
  38. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +5 -2
  39. package/common/cpp/audioapi/core/sources/ConstantSourceNode.cpp +5 -8
  40. package/common/cpp/audioapi/core/sources/ConstantSourceNode.h +4 -1
  41. package/common/cpp/audioapi/core/sources/OscillatorNode.cpp +21 -16
  42. package/common/cpp/audioapi/core/sources/OscillatorNode.h +4 -1
  43. package/common/cpp/audioapi/core/sources/StreamerNode.cpp +4 -2
  44. package/common/cpp/audioapi/core/sources/StreamerNode.h +11 -1
  45. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +8 -2
  46. package/common/cpp/test/src/ConstantSourceTest.cpp +3 -2
  47. package/common/cpp/test/src/DelayTest.cpp +12 -5
  48. package/common/cpp/test/src/GainTest.cpp +3 -2
  49. package/common/cpp/test/src/IIRFilterTest.cpp +3 -2
  50. package/common/cpp/test/src/OscillatorTest.cpp +2 -1
  51. package/common/cpp/test/src/StereoPannerTest.cpp +3 -2
  52. package/common/cpp/test/src/biquad/BiquadFilterTest.cpp +10 -9
  53. package/common/cpp/test/src/core/effects/WaveShaperNodeTest.cpp +4 -3
  54. package/ios/audioapi/ios/AudioAPIModule.h +2 -2
  55. package/ios/audioapi/ios/AudioAPIModule.mm +3 -3
  56. package/ios/audioapi/ios/system/AudioEngine.mm +3 -1
  57. package/ios/audioapi/ios/system/AudioSessionManager.h +1 -0
  58. package/ios/audioapi/ios/system/{NotificationManager.h → SystemNotificationManager.h} +1 -1
  59. package/ios/audioapi/ios/system/{NotificationManager.mm → SystemNotificationManager.mm} +9 -4
  60. package/lib/commonjs/api.js +11 -3
  61. package/lib/commonjs/api.js.map +1 -1
  62. package/lib/commonjs/api.web.js +4 -10
  63. package/lib/commonjs/api.web.js.map +1 -1
  64. package/lib/commonjs/core/AnalyserNode.js +11 -0
  65. package/lib/commonjs/core/AnalyserNode.js.map +1 -1
  66. package/lib/commonjs/core/AudioBuffer.js +20 -6
  67. package/lib/commonjs/core/AudioBuffer.js.map +1 -1
  68. package/lib/commonjs/core/AudioBufferQueueSourceNode.js +24 -0
  69. package/lib/commonjs/core/AudioBufferQueueSourceNode.js.map +1 -1
  70. package/lib/commonjs/core/AudioBufferSourceNode.js +9 -6
  71. package/lib/commonjs/core/AudioBufferSourceNode.js.map +1 -1
  72. package/lib/commonjs/core/AudioScheduledSourceNode.js.map +1 -1
  73. package/lib/commonjs/core/BaseAudioContext.js +52 -65
  74. package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
  75. package/lib/commonjs/core/BiquadFilterNode.js +7 -1
  76. package/lib/commonjs/core/BiquadFilterNode.js.map +1 -1
  77. package/lib/commonjs/core/ConstantSourceNode.js +7 -1
  78. package/lib/commonjs/core/ConstantSourceNode.js.map +1 -1
  79. package/lib/commonjs/core/ConvolverNode.js +9 -3
  80. package/lib/commonjs/core/ConvolverNode.js.map +1 -1
  81. package/lib/commonjs/core/DelayNode.js +7 -1
  82. package/lib/commonjs/core/DelayNode.js.map +1 -1
  83. package/lib/commonjs/core/GainNode.js +9 -3
  84. package/lib/commonjs/core/GainNode.js.map +1 -1
  85. package/lib/commonjs/core/IIRFilterNode.js +9 -0
  86. package/lib/commonjs/core/IIRFilterNode.js.map +1 -1
  87. package/lib/commonjs/core/OscillatorNode.js +10 -7
  88. package/lib/commonjs/core/OscillatorNode.js.map +1 -1
  89. package/lib/commonjs/core/PeriodicWave.js +30 -2
  90. package/lib/commonjs/core/PeriodicWave.js.map +1 -1
  91. package/lib/commonjs/core/RecorderAdapterNode.js +3 -0
  92. package/lib/commonjs/core/RecorderAdapterNode.js.map +1 -1
  93. package/lib/commonjs/core/StereoPannerNode.js +7 -1
  94. package/lib/commonjs/core/StereoPannerNode.js.map +1 -1
  95. package/lib/commonjs/core/StreamerNode.js +25 -1
  96. package/lib/commonjs/core/StreamerNode.js.map +1 -1
  97. package/lib/commonjs/core/WaveShaperNode.js +12 -0
  98. package/lib/commonjs/core/WaveShaperNode.js.map +1 -1
  99. package/lib/commonjs/core/WorkletNode.js +13 -1
  100. package/lib/commonjs/core/WorkletNode.js.map +1 -1
  101. package/lib/commonjs/core/WorkletProcessingNode.js +14 -1
  102. package/lib/commonjs/core/WorkletProcessingNode.js.map +1 -1
  103. package/lib/commonjs/core/WorkletSourceNode.js +13 -1
  104. package/lib/commonjs/core/WorkletSourceNode.js.map +1 -1
  105. package/lib/commonjs/defaults.js +78 -0
  106. package/lib/commonjs/defaults.js.map +1 -0
  107. package/lib/commonjs/options-validators.js +40 -0
  108. package/lib/commonjs/options-validators.js.map +1 -0
  109. package/lib/commonjs/specs/NativeAudioAPIModule.js.map +1 -1
  110. package/lib/commonjs/specs/NativeAudioAPIModule.web.js.map +1 -1
  111. package/lib/commonjs/system/AudioManager.js +7 -2
  112. package/lib/commonjs/system/AudioManager.js.map +1 -1
  113. package/lib/commonjs/types.js.map +1 -1
  114. package/lib/commonjs/web-core/AnalyserNode.js +2 -1
  115. package/lib/commonjs/web-core/AnalyserNode.js.map +1 -1
  116. package/lib/commonjs/web-core/AudioBuffer.js +14 -6
  117. package/lib/commonjs/web-core/AudioBuffer.js.map +1 -1
  118. package/lib/commonjs/web-core/AudioBufferSourceNode.js +276 -89
  119. package/lib/commonjs/web-core/AudioBufferSourceNode.js.map +1 -1
  120. package/lib/commonjs/web-core/AudioContext.js +33 -32
  121. package/lib/commonjs/web-core/AudioContext.js.map +1 -1
  122. package/lib/commonjs/web-core/AudioNode.js +4 -0
  123. package/lib/commonjs/web-core/AudioNode.js.map +1 -1
  124. package/lib/commonjs/web-core/AudioScheduledSourceNode.js +4 -2
  125. package/lib/commonjs/web-core/AudioScheduledSourceNode.js.map +1 -1
  126. package/lib/commonjs/web-core/BiquadFilterNode.js +2 -1
  127. package/lib/commonjs/web-core/BiquadFilterNode.js.map +1 -1
  128. package/lib/commonjs/web-core/ConstantSourceNode.js +2 -1
  129. package/lib/commonjs/web-core/ConstantSourceNode.js.map +1 -1
  130. package/lib/commonjs/web-core/ConvolverNode.js +3 -5
  131. package/lib/commonjs/web-core/ConvolverNode.js.map +1 -1
  132. package/lib/commonjs/web-core/DelayNode.js +7 -1
  133. package/lib/commonjs/web-core/DelayNode.js.map +1 -1
  134. package/lib/commonjs/web-core/GainNode.js +2 -1
  135. package/lib/commonjs/web-core/GainNode.js.map +1 -1
  136. package/lib/commonjs/web-core/IIRFilterNode.js +12 -0
  137. package/lib/commonjs/web-core/IIRFilterNode.js.map +1 -1
  138. package/lib/commonjs/web-core/OfflineAudioContext.js +33 -32
  139. package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
  140. package/lib/commonjs/web-core/OscillatorNode.js +2 -1
  141. package/lib/commonjs/web-core/OscillatorNode.js.map +1 -1
  142. package/lib/commonjs/web-core/PeriodicWave.js +6 -1
  143. package/lib/commonjs/web-core/PeriodicWave.js.map +1 -1
  144. package/lib/commonjs/web-core/StereoPannerNode.js +2 -1
  145. package/lib/commonjs/web-core/StereoPannerNode.js.map +1 -1
  146. package/lib/module/api.js +2 -1
  147. package/lib/module/api.js.map +1 -1
  148. package/lib/module/api.web.js +2 -1
  149. package/lib/module/api.web.js.map +1 -1
  150. package/lib/module/core/AnalyserNode.js +11 -0
  151. package/lib/module/core/AnalyserNode.js.map +1 -1
  152. package/lib/module/core/AudioBuffer.js +19 -6
  153. package/lib/module/core/AudioBuffer.js.map +1 -1
  154. package/lib/module/core/AudioBufferQueueSourceNode.js +24 -0
  155. package/lib/module/core/AudioBufferQueueSourceNode.js.map +1 -1
  156. package/lib/module/core/AudioBufferSourceNode.js +9 -6
  157. package/lib/module/core/AudioBufferSourceNode.js.map +1 -1
  158. package/lib/module/core/AudioScheduledSourceNode.js.map +1 -1
  159. package/lib/module/core/BaseAudioContext.js +52 -65
  160. package/lib/module/core/BaseAudioContext.js.map +1 -1
  161. package/lib/module/core/BiquadFilterNode.js +7 -1
  162. package/lib/module/core/BiquadFilterNode.js.map +1 -1
  163. package/lib/module/core/ConstantSourceNode.js +7 -1
  164. package/lib/module/core/ConstantSourceNode.js.map +1 -1
  165. package/lib/module/core/ConvolverNode.js +9 -3
  166. package/lib/module/core/ConvolverNode.js.map +1 -1
  167. package/lib/module/core/DelayNode.js +7 -1
  168. package/lib/module/core/DelayNode.js.map +1 -1
  169. package/lib/module/core/GainNode.js +9 -3
  170. package/lib/module/core/GainNode.js.map +1 -1
  171. package/lib/module/core/IIRFilterNode.js +9 -0
  172. package/lib/module/core/IIRFilterNode.js.map +1 -1
  173. package/lib/module/core/OscillatorNode.js +10 -7
  174. package/lib/module/core/OscillatorNode.js.map +1 -1
  175. package/lib/module/core/PeriodicWave.js +29 -2
  176. package/lib/module/core/PeriodicWave.js.map +1 -1
  177. package/lib/module/core/RecorderAdapterNode.js +3 -0
  178. package/lib/module/core/RecorderAdapterNode.js.map +1 -1
  179. package/lib/module/core/StereoPannerNode.js +7 -1
  180. package/lib/module/core/StereoPannerNode.js.map +1 -1
  181. package/lib/module/core/StreamerNode.js +25 -1
  182. package/lib/module/core/StreamerNode.js.map +1 -1
  183. package/lib/module/core/WaveShaperNode.js +12 -0
  184. package/lib/module/core/WaveShaperNode.js.map +1 -1
  185. package/lib/module/core/WorkletNode.js +13 -1
  186. package/lib/module/core/WorkletNode.js.map +1 -1
  187. package/lib/module/core/WorkletProcessingNode.js +14 -1
  188. package/lib/module/core/WorkletProcessingNode.js.map +1 -1
  189. package/lib/module/core/WorkletSourceNode.js +13 -1
  190. package/lib/module/core/WorkletSourceNode.js.map +1 -1
  191. package/lib/module/defaults.js +74 -0
  192. package/lib/module/defaults.js.map +1 -0
  193. package/lib/module/options-validators.js +36 -0
  194. package/lib/module/options-validators.js.map +1 -0
  195. package/lib/module/specs/NativeAudioAPIModule.js.map +1 -1
  196. package/lib/module/specs/NativeAudioAPIModule.web.js.map +1 -1
  197. package/lib/module/system/AudioManager.js +7 -2
  198. package/lib/module/system/AudioManager.js.map +1 -1
  199. package/lib/module/types.js.map +1 -1
  200. package/lib/module/web-core/AnalyserNode.js +2 -1
  201. package/lib/module/web-core/AnalyserNode.js.map +1 -1
  202. package/lib/module/web-core/AudioBuffer.js +13 -6
  203. package/lib/module/web-core/AudioBuffer.js.map +1 -1
  204. package/lib/module/web-core/AudioBufferSourceNode.js +277 -90
  205. package/lib/module/web-core/AudioBufferSourceNode.js.map +1 -1
  206. package/lib/module/web-core/AudioContext.js +33 -32
  207. package/lib/module/web-core/AudioContext.js.map +1 -1
  208. package/lib/module/web-core/AudioNode.js +4 -0
  209. package/lib/module/web-core/AudioNode.js.map +1 -1
  210. package/lib/module/web-core/AudioScheduledSourceNode.js +4 -2
  211. package/lib/module/web-core/AudioScheduledSourceNode.js.map +1 -1
  212. package/lib/module/web-core/BiquadFilterNode.js +2 -1
  213. package/lib/module/web-core/BiquadFilterNode.js.map +1 -1
  214. package/lib/module/web-core/ConstantSourceNode.js +2 -1
  215. package/lib/module/web-core/ConstantSourceNode.js.map +1 -1
  216. package/lib/module/web-core/ConvolverNode.js +3 -5
  217. package/lib/module/web-core/ConvolverNode.js.map +1 -1
  218. package/lib/module/web-core/DelayNode.js +7 -1
  219. package/lib/module/web-core/DelayNode.js.map +1 -1
  220. package/lib/module/web-core/GainNode.js +2 -1
  221. package/lib/module/web-core/GainNode.js.map +1 -1
  222. package/lib/module/web-core/IIRFilterNode.js +12 -0
  223. package/lib/module/web-core/IIRFilterNode.js.map +1 -1
  224. package/lib/module/web-core/OfflineAudioContext.js +33 -32
  225. package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
  226. package/lib/module/web-core/OscillatorNode.js +2 -1
  227. package/lib/module/web-core/OscillatorNode.js.map +1 -1
  228. package/lib/module/web-core/PeriodicWave.js +6 -1
  229. package/lib/module/web-core/PeriodicWave.js.map +1 -1
  230. package/lib/module/web-core/StereoPannerNode.js +2 -1
  231. package/lib/module/web-core/StereoPannerNode.js.map +1 -1
  232. package/lib/typescript/api.d.ts +2 -1
  233. package/lib/typescript/api.d.ts.map +1 -1
  234. package/lib/typescript/api.web.d.ts +2 -1
  235. package/lib/typescript/api.web.d.ts.map +1 -1
  236. package/lib/typescript/core/AnalyserNode.d.ts +3 -1
  237. package/lib/typescript/core/AnalyserNode.d.ts.map +1 -1
  238. package/lib/typescript/core/AudioBuffer.d.ts +3 -0
  239. package/lib/typescript/core/AudioBuffer.d.ts.map +1 -1
  240. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts +8 -0
  241. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts.map +1 -1
  242. package/lib/typescript/core/AudioBufferSourceNode.d.ts +3 -2
  243. package/lib/typescript/core/AudioBufferSourceNode.d.ts.map +1 -1
  244. package/lib/typescript/core/AudioScheduledSourceNode.d.ts +3 -3
  245. package/lib/typescript/core/AudioScheduledSourceNode.d.ts.map +1 -1
  246. package/lib/typescript/core/BaseAudioContext.d.ts +10 -6
  247. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
  248. package/lib/typescript/core/BiquadFilterNode.d.ts +2 -3
  249. package/lib/typescript/core/BiquadFilterNode.d.ts.map +1 -1
  250. package/lib/typescript/core/ConstantSourceNode.d.ts +2 -2
  251. package/lib/typescript/core/ConstantSourceNode.d.ts.map +1 -1
  252. package/lib/typescript/core/ConvolverNode.d.ts +2 -2
  253. package/lib/typescript/core/ConvolverNode.d.ts.map +1 -1
  254. package/lib/typescript/core/DelayNode.d.ts +2 -2
  255. package/lib/typescript/core/DelayNode.d.ts.map +1 -1
  256. package/lib/typescript/core/GainNode.d.ts +2 -2
  257. package/lib/typescript/core/GainNode.d.ts.map +1 -1
  258. package/lib/typescript/core/IIRFilterNode.d.ts +3 -0
  259. package/lib/typescript/core/IIRFilterNode.d.ts.map +1 -1
  260. package/lib/typescript/core/OscillatorNode.d.ts +2 -6
  261. package/lib/typescript/core/OscillatorNode.d.ts.map +1 -1
  262. package/lib/typescript/core/PeriodicWave.d.ts +4 -1
  263. package/lib/typescript/core/PeriodicWave.d.ts.map +1 -1
  264. package/lib/typescript/core/RecorderAdapterNode.d.ts +2 -0
  265. package/lib/typescript/core/RecorderAdapterNode.d.ts.map +1 -1
  266. package/lib/typescript/core/StereoPannerNode.d.ts +2 -2
  267. package/lib/typescript/core/StereoPannerNode.d.ts.map +1 -1
  268. package/lib/typescript/core/StreamerNode.d.ts +5 -0
  269. package/lib/typescript/core/StreamerNode.d.ts.map +1 -1
  270. package/lib/typescript/core/WaveShaperNode.d.ts +3 -0
  271. package/lib/typescript/core/WaveShaperNode.d.ts.map +1 -1
  272. package/lib/typescript/core/WorkletNode.d.ts +3 -0
  273. package/lib/typescript/core/WorkletNode.d.ts.map +1 -1
  274. package/lib/typescript/core/WorkletProcessingNode.d.ts +3 -0
  275. package/lib/typescript/core/WorkletProcessingNode.d.ts.map +1 -1
  276. package/lib/typescript/core/WorkletSourceNode.d.ts +3 -0
  277. package/lib/typescript/core/WorkletSourceNode.d.ts.map +1 -1
  278. package/lib/typescript/defaults.d.ts +16 -0
  279. package/lib/typescript/defaults.d.ts.map +1 -0
  280. package/lib/typescript/events/types.d.ts +6 -4
  281. package/lib/typescript/events/types.d.ts.map +1 -1
  282. package/lib/typescript/interfaces.d.ts +17 -15
  283. package/lib/typescript/interfaces.d.ts.map +1 -1
  284. package/lib/typescript/options-validators.d.ts +6 -0
  285. package/lib/typescript/options-validators.d.ts.map +1 -0
  286. package/lib/typescript/specs/NativeAudioAPIModule.d.ts +2 -1
  287. package/lib/typescript/specs/NativeAudioAPIModule.d.ts.map +1 -1
  288. package/lib/typescript/specs/NativeAudioAPIModule.web.d.ts +2 -2
  289. package/lib/typescript/specs/NativeAudioAPIModule.web.d.ts.map +1 -1
  290. package/lib/typescript/system/AudioManager.d.ts +2 -2
  291. package/lib/typescript/system/AudioManager.d.ts.map +1 -1
  292. package/lib/typescript/system/types.d.ts +2 -1
  293. package/lib/typescript/system/types.d.ts.map +1 -1
  294. package/lib/typescript/types.d.ts +80 -11
  295. package/lib/typescript/types.d.ts.map +1 -1
  296. package/lib/typescript/web-core/AnalyserNode.d.ts +2 -2
  297. package/lib/typescript/web-core/AnalyserNode.d.ts.map +1 -1
  298. package/lib/typescript/web-core/AudioBuffer.d.ts +3 -0
  299. package/lib/typescript/web-core/AudioBuffer.d.ts.map +1 -1
  300. package/lib/typescript/web-core/AudioBufferSourceNode.d.ts +24 -15
  301. package/lib/typescript/web-core/AudioBufferSourceNode.d.ts.map +1 -1
  302. package/lib/typescript/web-core/AudioContext.d.ts +5 -6
  303. package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
  304. package/lib/typescript/web-core/AudioNode.d.ts +2 -2
  305. package/lib/typescript/web-core/AudioNode.d.ts.map +1 -1
  306. package/lib/typescript/web-core/AudioScheduledSourceNode.d.ts +2 -0
  307. package/lib/typescript/web-core/AudioScheduledSourceNode.d.ts.map +1 -1
  308. package/lib/typescript/web-core/BaseAudioContext.d.ts +3 -3
  309. package/lib/typescript/web-core/BaseAudioContext.d.ts.map +1 -1
  310. package/lib/typescript/web-core/BiquadFilterNode.d.ts +2 -2
  311. package/lib/typescript/web-core/BiquadFilterNode.d.ts.map +1 -1
  312. package/lib/typescript/web-core/ConstantSourceNode.d.ts +2 -1
  313. package/lib/typescript/web-core/ConstantSourceNode.d.ts.map +1 -1
  314. package/lib/typescript/web-core/ConvolverNode.d.ts +2 -1
  315. package/lib/typescript/web-core/ConvolverNode.d.ts.map +1 -1
  316. package/lib/typescript/web-core/DelayNode.d.ts +2 -1
  317. package/lib/typescript/web-core/DelayNode.d.ts.map +1 -1
  318. package/lib/typescript/web-core/GainNode.d.ts +2 -1
  319. package/lib/typescript/web-core/GainNode.d.ts.map +1 -1
  320. package/lib/typescript/web-core/IIRFilterNode.d.ts +3 -0
  321. package/lib/typescript/web-core/IIRFilterNode.d.ts.map +1 -1
  322. package/lib/typescript/web-core/OfflineAudioContext.d.ts +5 -6
  323. package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
  324. package/lib/typescript/web-core/OscillatorNode.d.ts +2 -2
  325. package/lib/typescript/web-core/OscillatorNode.d.ts.map +1 -1
  326. package/lib/typescript/web-core/PeriodicWave.d.ts +3 -1
  327. package/lib/typescript/web-core/PeriodicWave.d.ts.map +1 -1
  328. package/lib/typescript/web-core/StereoPannerNode.d.ts +2 -1
  329. package/lib/typescript/web-core/StereoPannerNode.d.ts.map +1 -1
  330. package/package.json +1 -1
  331. package/src/api.ts +3 -1
  332. package/src/api.web.ts +1 -2
  333. package/src/core/AnalyserNode.ts +16 -1
  334. package/src/core/AudioBuffer.ts +26 -6
  335. package/src/core/AudioBufferQueueSourceNode.ts +46 -0
  336. package/src/core/AudioBufferSourceNode.ts +12 -10
  337. package/src/core/AudioScheduledSourceNode.ts +4 -4
  338. package/src/core/BaseAudioContext.ts +48 -151
  339. package/src/core/BiquadFilterNode.ts +9 -2
  340. package/src/core/ConstantSourceNode.ts +9 -1
  341. package/src/core/ConvolverNode.ts +11 -3
  342. package/src/core/DelayNode.ts +5 -2
  343. package/src/core/GainNode.ts +10 -3
  344. package/src/core/IIRFilterNode.ts +12 -0
  345. package/src/core/OscillatorNode.ts +13 -13
  346. package/src/core/PeriodicWave.ts +36 -2
  347. package/src/core/RecorderAdapterNode.ts +5 -0
  348. package/src/core/StereoPannerNode.ts +9 -1
  349. package/src/core/StreamerNode.ts +29 -1
  350. package/src/core/WaveShaperNode.ts +17 -0
  351. package/src/core/WorkletNode.ts +30 -1
  352. package/src/core/WorkletProcessingNode.ts +39 -1
  353. package/src/core/WorkletSourceNode.ts +36 -1
  354. package/src/defaults.ts +100 -0
  355. package/src/events/types.ts +6 -4
  356. package/src/interfaces.ts +40 -24
  357. package/src/options-validators.ts +66 -0
  358. package/src/specs/NativeAudioAPIModule.ts +6 -1
  359. package/src/specs/NativeAudioAPIModule.web.ts +6 -2
  360. package/src/system/AudioManager.ts +8 -2
  361. package/src/system/types.ts +7 -1
  362. package/src/types.ts +96 -12
  363. package/src/web-core/AnalyserNode.tsx +15 -6
  364. package/src/web-core/AudioBuffer.tsx +20 -6
  365. package/src/web-core/AudioBufferSourceNode.tsx +393 -148
  366. package/src/web-core/AudioContext.tsx +22 -72
  367. package/src/web-core/AudioNode.tsx +6 -2
  368. package/src/web-core/AudioScheduledSourceNode.tsx +6 -1
  369. package/src/web-core/BaseAudioContext.tsx +3 -7
  370. package/src/web-core/BiquadFilterNode.tsx +6 -2
  371. package/src/web-core/ConstantSourceNode.tsx +3 -1
  372. package/src/web-core/ConvolverNode.tsx +8 -8
  373. package/src/web-core/DelayNode.tsx +5 -1
  374. package/src/web-core/GainNode.tsx +3 -1
  375. package/src/web-core/IIRFilterNode.tsx +15 -0
  376. package/src/web-core/OfflineAudioContext.tsx +19 -67
  377. package/src/web-core/OscillatorNode.tsx +3 -2
  378. package/src/web-core/PeriodicWave.tsx +11 -1
  379. package/src/web-core/StereoPannerNode.tsx +9 -1
package/src/api.ts CHANGED
@@ -29,7 +29,7 @@ export { default as WorkletProcessingNode } from './core/WorkletProcessingNode';
29
29
  export { default as WorkletSourceNode } from './core/WorkletSourceNode';
30
30
 
31
31
  export { default as useSystemVolume } from './hooks/useSystemVolume';
32
- export { default as AudioManager } from './system';
32
+ export { default as PeriodicWave } from './core/PeriodicWave';
33
33
 
34
34
  export * from './errors';
35
35
  export * from './system/types';
@@ -40,6 +40,8 @@ export { default as FilePreset } from './utils/filePresets';
40
40
  export { PlaybackNotificationManager } from './system/notification';
41
41
  export { RecordingNotificationManager } from './system/notification';
42
42
 
43
+ export { default as AudioManager } from './system';
44
+
43
45
  export {
44
46
  NotificationManager,
45
47
  PlaybackControlName,
package/src/api.web.ts CHANGED
@@ -15,18 +15,17 @@ export { default as OscillatorNode } from './web-core/OscillatorNode';
15
15
  export { default as StereoPannerNode } from './web-core/StereoPannerNode';
16
16
  export { default as ConstantSourceNode } from './web-core/ConstantSourceNode';
17
17
  export { default as ConvolverNode } from './web-core/ConvolverNode';
18
+ export { default as PeriodicWave } from './web-core/PeriodicWave';
18
19
  export { default as WaveShaperNode } from './web-core/WaveShaperNode';
19
20
 
20
21
  export * from './web-core/custom';
21
22
 
22
23
  export {
23
24
  OscillatorType,
24
- BiquadFilterType,
25
25
  ChannelCountMode,
26
26
  ChannelInterpretation,
27
27
  ContextState,
28
28
  WindowType,
29
- PeriodicWaveConstraints,
30
29
  } from './types';
31
30
 
32
31
  export {
@@ -1,13 +1,28 @@
1
+ import BaseAudioContext from './BaseAudioContext';
2
+ import { AnalyserOptions } from '../defaults';
1
3
  import { IndexSizeError } from '../errors';
2
4
  import { IAnalyserNode } from '../interfaces';
3
- import { WindowType } from '../types';
5
+ import { WindowType, TAnalyserOptions } from '../types';
4
6
  import AudioNode from './AudioNode';
7
+ import { AnalyserOptionsValidator } from '../options-validators';
5
8
 
6
9
  export default class AnalyserNode extends AudioNode {
7
10
  private static allowedFFTSize: number[] = [
8
11
  32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768,
9
12
  ];
10
13
 
14
+ constructor(context: BaseAudioContext, options?: TAnalyserOptions) {
15
+ const finalOptions: TAnalyserOptions = {
16
+ ...AnalyserOptions,
17
+ ...options,
18
+ };
19
+
20
+ AnalyserOptionsValidator.validate(finalOptions);
21
+ const analyserNode: IAnalyserNode =
22
+ context.context.createAnalyser(finalOptions);
23
+ super(context, analyserNode);
24
+ }
25
+
11
26
  public get fftSize(): number {
12
27
  return (this.node as IAnalyserNode).fftSize;
13
28
  }
@@ -1,5 +1,8 @@
1
1
  import { IAudioBuffer } from '../interfaces';
2
2
  import { IndexSizeError } from '../errors';
3
+ import BaseAudioContext from './BaseAudioContext';
4
+ import { TAudioBufferOptions } from '../types';
5
+ import { AudioBufferOptions } from '../defaults';
3
6
 
4
7
  export default class AudioBuffer {
5
8
  readonly length: number;
@@ -9,12 +12,29 @@ export default class AudioBuffer {
9
12
  /** @internal */
10
13
  public readonly buffer: IAudioBuffer;
11
14
 
12
- constructor(buffer: IAudioBuffer) {
13
- this.buffer = buffer;
14
- this.length = buffer.length;
15
- this.duration = buffer.duration;
16
- this.sampleRate = buffer.sampleRate;
17
- this.numberOfChannels = buffer.numberOfChannels;
15
+ constructor(buffer: IAudioBuffer);
16
+ constructor(context: BaseAudioContext, options: TAudioBufferOptions);
17
+
18
+ constructor(
19
+ contextOrBuffer: BaseAudioContext | IAudioBuffer,
20
+ options?: TAudioBufferOptions
21
+ ) {
22
+ let buf: IAudioBuffer;
23
+ if (contextOrBuffer instanceof BaseAudioContext) {
24
+ const finalOptions = {
25
+ ...AudioBufferOptions,
26
+ ...options,
27
+ };
28
+ const context = contextOrBuffer;
29
+ buf = context.context.createBuffer(finalOptions);
30
+ } else {
31
+ buf = contextOrBuffer;
32
+ }
33
+ this.buffer = buf;
34
+ this.length = buf.length;
35
+ this.duration = buf.duration;
36
+ this.sampleRate = buf.sampleRate;
37
+ this.numberOfChannels = buf.numberOfChannels;
18
38
  }
19
39
 
20
40
  public getChannelData(channel: number): Float32Array {
@@ -2,8 +2,28 @@ import { IAudioBufferQueueSourceNode } from '../interfaces';
2
2
  import AudioBufferBaseSourceNode from './AudioBufferBaseSourceNode';
3
3
  import AudioBuffer from './AudioBuffer';
4
4
  import { RangeError } from '../errors';
5
+ import BaseAudioContext from './BaseAudioContext';
6
+ import { TBaseAudioBufferSourceOptions } from '../types';
7
+ import { BaseAudioBufferSourceOptions } from '../defaults';
8
+ import { AudioEventSubscription } from '../events';
9
+ import { OnBufferEndEventType } from '../events/types';
5
10
 
6
11
  export default class AudioBufferQueueSourceNode extends AudioBufferBaseSourceNode {
12
+ private onBufferEndedSubscription?: AudioEventSubscription;
13
+ private onBufferEndedCallback?: (event: OnBufferEndEventType) => void;
14
+
15
+ constructor(
16
+ context: BaseAudioContext,
17
+ options?: TBaseAudioBufferSourceOptions
18
+ ) {
19
+ const finalOptions: TBaseAudioBufferSourceOptions = {
20
+ ...BaseAudioBufferSourceOptions,
21
+ ...options,
22
+ };
23
+ const node = context.context.createBufferQueueSource(finalOptions);
24
+ super(context, node);
25
+ }
26
+
7
27
  public enqueueBuffer(buffer: AudioBuffer): string {
8
28
  return (this.node as IAudioBufferQueueSourceNode).enqueueBuffer(
9
29
  buffer.buffer
@@ -50,6 +70,32 @@ export default class AudioBufferQueueSourceNode extends AudioBufferBaseSourceNod
50
70
  (this.node as IAudioBufferQueueSourceNode).stop(when);
51
71
  }
52
72
 
73
+ public get onBufferEnded():
74
+ | ((event: OnBufferEndEventType) => void)
75
+ | undefined {
76
+ return this.onBufferEndedCallback;
77
+ }
78
+
79
+ public set onBufferEnded(
80
+ callback: ((event: OnBufferEndEventType) => void) | null
81
+ ) {
82
+ if (!callback) {
83
+ (this.node as IAudioBufferQueueSourceNode).onBufferEnded = '0';
84
+ this.onBufferEndedSubscription?.remove();
85
+ this.onBufferEndedSubscription = undefined;
86
+ this.onBufferEndedCallback = undefined;
87
+
88
+ return;
89
+ }
90
+
91
+ this.onBufferEndedCallback = callback;
92
+ this.onBufferEndedSubscription =
93
+ this.audioEventEmitter.addAudioEventListener('bufferEnded', callback);
94
+
95
+ (this.node as IAudioBufferQueueSourceNode).onBufferEnded =
96
+ this.onBufferEndedSubscription.subscriptionId;
97
+ }
98
+
53
99
  public pause(): void {
54
100
  (this.node as IAudioBufferQueueSourceNode).pause();
55
101
  }
@@ -4,11 +4,23 @@ import AudioBuffer from './AudioBuffer';
4
4
  import { InvalidStateError, RangeError } from '../errors';
5
5
  import { EventEmptyType } from '../events/types';
6
6
  import { AudioEventSubscription } from '../events';
7
+ import { TAudioBufferSourceOptions } from '../types';
8
+ import BaseAudioContext from './BaseAudioContext';
9
+ import { AudioBufferSourceOptions } from '../defaults';
7
10
 
8
11
  export default class AudioBufferSourceNode extends AudioBufferBaseSourceNode {
9
12
  private onLoopEndedSubscription?: AudioEventSubscription;
10
13
  private onLoopEndedCallback?: (event: EventEmptyType) => void;
11
14
 
15
+ constructor(context: BaseAudioContext, options?: TAudioBufferSourceOptions) {
16
+ const finalOptions: TAudioBufferSourceOptions = {
17
+ ...AudioBufferSourceOptions,
18
+ ...options,
19
+ };
20
+ const node = context.context.createBufferSource(finalOptions);
21
+ super(context, node);
22
+ }
23
+
12
24
  public get buffer(): AudioBuffer | null {
13
25
  const buffer = (this.node as IAudioBufferSourceNode).buffer;
14
26
  if (!buffer) {
@@ -85,16 +97,6 @@ export default class AudioBufferSourceNode extends AudioBufferBaseSourceNode {
85
97
  (this.node as IAudioBufferSourceNode).start(when, offset, duration);
86
98
  }
87
99
 
88
- public override get onEnded(): ((event: EventEmptyType) => void) | undefined {
89
- return super.onEnded as ((event: EventEmptyType) => void) | undefined;
90
- }
91
-
92
- public override set onEnded(
93
- callback: ((event: EventEmptyType) => void) | null
94
- ) {
95
- super.onEnded = callback;
96
- }
97
-
98
100
  public get onLoopEnded(): ((event: EventEmptyType) => void) | undefined {
99
101
  return this.onLoopEndedCallback;
100
102
  }
@@ -1,7 +1,7 @@
1
1
  import { IAudioScheduledSourceNode } from '../interfaces';
2
2
  import AudioNode from './AudioNode';
3
3
  import { InvalidStateError, RangeError } from '../errors';
4
- import { OnEndedEventType } from '../events/types';
4
+ import { EventEmptyType } from '../events/types';
5
5
  import { AudioEventEmitter, AudioEventSubscription } from '../events';
6
6
 
7
7
  export default class AudioScheduledSourceNode extends AudioNode {
@@ -11,7 +11,7 @@ export default class AudioScheduledSourceNode extends AudioNode {
11
11
  );
12
12
 
13
13
  private onEndedSubscription?: AudioEventSubscription;
14
- private onEndedCallback?: (event: OnEndedEventType) => void;
14
+ private onEndedCallback?: (event: EventEmptyType) => void;
15
15
 
16
16
  public start(when: number = 0): void {
17
17
  if (when < 0) {
@@ -44,11 +44,11 @@ export default class AudioScheduledSourceNode extends AudioNode {
44
44
  (this.node as IAudioScheduledSourceNode).stop(when);
45
45
  }
46
46
 
47
- public get onEnded(): ((event: OnEndedEventType) => void) | undefined {
47
+ public get onEnded(): ((event: EventEmptyType) => void) | undefined {
48
48
  return this.onEndedCallback;
49
49
  }
50
50
 
51
- public set onEnded(callback: ((event: OnEndedEventType) => void) | null) {
51
+ public set onEnded(callback: ((event: EventEmptyType) => void) | null) {
52
52
  if (!callback) {
53
53
  (this.node as IAudioScheduledSourceNode).onEnded = '0';
54
54
  this.onEndedSubscription?.remove();
@@ -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 !== 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 !== 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,