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
@@ -1,17 +1,27 @@
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
- import { EventEmptyType } from '../events/types';
7
+ import { OscillatorOptions } from '../defaults';
8
+ import { TOscillatorOptions } from '../types';
9
9
 
10
10
  export default class OscillatorNode extends AudioScheduledSourceNode {
11
11
  readonly frequency: AudioParam;
12
12
  readonly detune: AudioParam;
13
13
 
14
- constructor(context: BaseAudioContext, node: IOscillatorNode) {
14
+ constructor(context: BaseAudioContext, options?: TOscillatorOptions) {
15
+ const finalOptions: TOscillatorOptions = {
16
+ ...OscillatorOptions,
17
+ ...options,
18
+ };
19
+
20
+ if (finalOptions.periodicWave) {
21
+ finalOptions.type = 'custom';
22
+ }
23
+
24
+ const node = context.context.createOscillator(finalOptions);
15
25
  super(context, node);
16
26
  this.frequency = new AudioParam(node.frequency, context);
17
27
  this.detune = new AudioParam(node.detune, context);
@@ -35,14 +45,4 @@ export default class OscillatorNode extends AudioScheduledSourceNode {
35
45
  public setPeriodicWave(wave: PeriodicWave): void {
36
46
  (this.node as IOscillatorNode).setPeriodicWave(wave.periodicWave);
37
47
  }
38
-
39
- public override get onEnded(): ((event: EventEmptyType) => void) | undefined {
40
- return super.onEnded as ((event: EventEmptyType) => void) | undefined;
41
- }
42
-
43
- public override set onEnded(
44
- callback: ((event: EventEmptyType) => void) | null
45
- ) {
46
- super.onEnded = callback;
47
- }
48
48
  }
@@ -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
+ }
@@ -1,3 +1,41 @@
1
1
  import AudioNode from './AudioNode';
2
+ import BaseAudioContext from './BaseAudioContext';
3
+ import { AudioWorkletRuntime } from '../types';
4
+ import AudioAPIModule from '../AudioAPIModule';
2
5
 
3
- export default class WorkletProcessingNode extends AudioNode {}
6
+ export default class WorkletProcessingNode extends AudioNode {
7
+ constructor(
8
+ context: BaseAudioContext,
9
+ runtime: AudioWorkletRuntime,
10
+ callback: (
11
+ inputData: Array<Float32Array>,
12
+ outputData: Array<Float32Array>,
13
+ framesToProcess: number,
14
+ currentTime: number
15
+ ) => void
16
+ ) {
17
+ const shareableWorklet =
18
+ AudioAPIModule.workletsModule!.makeShareableCloneRecursive(
19
+ (
20
+ inputBuffers: Array<ArrayBuffer>,
21
+ outputBuffers: Array<ArrayBuffer>,
22
+ framesToProcess: number,
23
+ currentTime: number
24
+ ) => {
25
+ 'worklet';
26
+ const inputData: Array<Float32Array> = inputBuffers.map(
27
+ (buffer) => new Float32Array(buffer, 0, framesToProcess)
28
+ );
29
+ const outputData: Array<Float32Array> = outputBuffers.map(
30
+ (buffer) => new Float32Array(buffer, 0, framesToProcess)
31
+ );
32
+ callback(inputData, outputData, framesToProcess, currentTime);
33
+ }
34
+ );
35
+ const node = context.context.createWorkletProcessingNode(
36
+ shareableWorklet,
37
+ runtime === 'UIRuntime'
38
+ );
39
+ super(context, node);
40
+ }
41
+ }
@@ -1,3 +1,38 @@
1
1
  import AudioScheduledSourceNode from './AudioScheduledSourceNode';
2
+ import BaseAudioContext from './BaseAudioContext';
3
+ import { AudioWorkletRuntime } from '../types';
4
+ import AudioAPIModule from '../AudioAPIModule';
2
5
 
3
- export default class WorkletSourceNode extends AudioScheduledSourceNode {}
6
+ export default class WorkletSourceNode extends AudioScheduledSourceNode {
7
+ constructor(
8
+ context: BaseAudioContext,
9
+ runtime: AudioWorkletRuntime,
10
+ callback: (
11
+ audioData: Array<Float32Array>,
12
+ framesToProcess: number,
13
+ currentTime: number,
14
+ startOffset: number
15
+ ) => void
16
+ ) {
17
+ const shareableWorklet =
18
+ AudioAPIModule.workletsModule!.makeShareableCloneRecursive(
19
+ (
20
+ audioBuffers: Array<ArrayBuffer>,
21
+ framesToProcess: number,
22
+ currentTime: number,
23
+ startOffset: number
24
+ ) => {
25
+ 'worklet';
26
+ const floatAudioData: Array<Float32Array> = audioBuffers.map(
27
+ (buffer) => new Float32Array(buffer)
28
+ );
29
+ callback(floatAudioData, framesToProcess, currentTime, startOffset);
30
+ }
31
+ );
32
+ const node = context.context.createWorkletSourceNode(
33
+ shareableWorklet,
34
+ runtime === 'UIRuntime'
35
+ );
36
+ super(context, node);
37
+ }
38
+ }
@@ -0,0 +1,100 @@
1
+ import {
2
+ TAudioNodeOptions,
3
+ TGainOptions,
4
+ TSteroPannerOptions,
5
+ TConvolverOptions,
6
+ TConstantSourceOptions,
7
+ TPeriodicWaveConstraints,
8
+ TAnalyserOptions,
9
+ TBiquadFilterOptions,
10
+ TOscillatorOptions,
11
+ TBaseAudioBufferSourceOptions,
12
+ TAudioBufferSourceOptions,
13
+ TAudioBufferOptions,
14
+ TDelayOptions,
15
+ TWaveShaperOptions,
16
+ } from './types';
17
+
18
+ export const AudioNodeOptions: TAudioNodeOptions = {
19
+ channelCount: 2,
20
+ channelCountMode: 'max',
21
+ channelInterpretation: 'speakers',
22
+ };
23
+
24
+ export const GainOptions: TGainOptions = {
25
+ ...AudioNodeOptions,
26
+ gain: 1,
27
+ };
28
+
29
+ export const SteroPannerOptions: TSteroPannerOptions = {
30
+ ...AudioNodeOptions,
31
+ channelCountMode: 'clamped-max',
32
+ pan: 0,
33
+ };
34
+
35
+ export const AnalyserOptions: TAnalyserOptions = {
36
+ ...AudioNodeOptions,
37
+ fftSize: 2048,
38
+ minDecibels: -100,
39
+ maxDecibels: -30,
40
+ smoothingTimeConstant: 0.8,
41
+ };
42
+
43
+ export const BiquadFilterOptions: TBiquadFilterOptions = {
44
+ ...AudioNodeOptions,
45
+ Q: 1,
46
+ detune: 0,
47
+ frequency: 350,
48
+ gain: 0,
49
+ type: 'lowpass',
50
+ };
51
+
52
+ export const ConvolverOptions: TConvolverOptions = {
53
+ ...AudioNodeOptions,
54
+ disableNormalization: false,
55
+ };
56
+
57
+ export const ConstantSourceOptions: TConstantSourceOptions = {
58
+ offset: 1,
59
+ };
60
+
61
+ export const PeriodicWaveConstraints: TPeriodicWaveConstraints = {
62
+ disableNormalization: false,
63
+ };
64
+
65
+ export const OscillatorOptions: TOscillatorOptions = {
66
+ ...AudioNodeOptions,
67
+ type: 'sine',
68
+ frequency: 440,
69
+ detune: 0,
70
+ };
71
+
72
+ export const BaseAudioBufferSourceOptions: TBaseAudioBufferSourceOptions = {
73
+ playbackRate: 1,
74
+ detune: 0,
75
+ pitchCorrection: false,
76
+ };
77
+
78
+ export const AudioBufferSourceOptions: TAudioBufferSourceOptions = {
79
+ ...BaseAudioBufferSourceOptions,
80
+ loop: false,
81
+ loopStart: 0,
82
+ loopEnd: 0,
83
+ };
84
+
85
+ export const AudioBufferOptions: TAudioBufferOptions = {
86
+ numberOfChannels: 1,
87
+ length: 0, // always overwritten by provided value, only placeholder
88
+ sampleRate: 44100, // always overwritten by provided value, only placeholder
89
+ };
90
+
91
+ export const DelayOptions: TDelayOptions = {
92
+ ...AudioNodeOptions,
93
+ maxDelayTime: 1.0,
94
+ delayTime: 0.0,
95
+ };
96
+
97
+ export const WaveShaperOptions: TWaveShaperOptions = {
98
+ ...AudioNodeOptions,
99
+ oversample: 'none',
100
+ };
@@ -46,12 +46,13 @@ interface RemoteCommandEvents {
46
46
  type SystemEvents = RemoteCommandEvents & {
47
47
  volumeChange: EventTypeWithValue;
48
48
  interruption: OnInterruptionEventType;
49
+ duck: EventEmptyType;
49
50
  routeChange: OnRouteChangeEventType;
50
51
  };
51
52
 
52
- export interface OnEndedEventType extends EventEmptyType {
53
- bufferId: string | undefined;
54
- isLast: boolean | undefined;
53
+ export interface OnBufferEndEventType {
54
+ bufferId: string;
55
+ isLastBufferInQueue: boolean;
55
56
  }
56
57
 
57
58
  /**
@@ -79,10 +80,11 @@ export interface OnAudioReadyEventType {
79
80
  }
80
81
 
81
82
  interface AudioAPIEvents {
82
- ended: OnEndedEventType;
83
+ ended: EventEmptyType;
83
84
  loopEnded: EventEmptyType;
84
85
  audioReady: OnAudioReadyEventType;
85
86
  positionChanged: EventTypeWithValue;
87
+ bufferEnded: OnBufferEndEventType;
86
88
  audioError: EventEmptyType; // to change
87
89
  systemStateChanged: EventEmptyType; // to change
88
90
  recorderError: OnRecorderErrorEventType;
package/src/interfaces.ts CHANGED
@@ -11,6 +11,20 @@ import type {
11
11
  OverSampleType,
12
12
  Result,
13
13
  WindowType,
14
+ TGainOptions,
15
+ TSteroPannerOptions,
16
+ TConvolverOptions,
17
+ TConstantSourceOptions,
18
+ TAnalyserOptions,
19
+ TBiquadFilterOptions,
20
+ TOscillatorOptions,
21
+ TBaseAudioBufferSourceOptions,
22
+ TAudioBufferSourceOptions,
23
+ TStreamerOptions,
24
+ TAudioBufferOptions,
25
+ TDelayOptions,
26
+ TIIRFilterOptions,
27
+ TWaveShaperOptions,
14
28
  } from './types';
15
29
 
16
30
  // IMPORTANT: use only IClass, because it is a part of contract between cpp host object and js layer
@@ -62,37 +76,35 @@ export interface IBaseAudioContext {
62
76
  shareableWorklet: ShareableWorkletCallback,
63
77
  shouldUseUiRuntime: boolean
64
78
  ): IWorkletProcessingNode;
65
- createOscillator(): IOscillatorNode;
66
- createConstantSource(): IConstantSourceNode;
67
- createGain(): IGainNode;
68
- createDelay(maxDelayTime: number): IDelayNode;
69
- createStereoPanner(): IStereoPannerNode;
70
- createBiquadFilter: () => IBiquadFilterNode;
71
- createIIRFilter: (
72
- feedforward: number[],
73
- feedback: number[]
74
- ) => IIIRFilterNode;
75
- createBufferSource: (pitchCorrection: boolean) => IAudioBufferSourceNode;
79
+ createOscillator(oscillatorOptions: TOscillatorOptions): IOscillatorNode;
80
+ createConstantSource(
81
+ constantSourceOptions: TConstantSourceOptions
82
+ ): IConstantSourceNode;
83
+ createGain(gainOptions: TGainOptions): IGainNode;
84
+ createStereoPanner(
85
+ stereoPannerOptions: TSteroPannerOptions
86
+ ): IStereoPannerNode;
87
+ createBiquadFilter: (
88
+ biquadFilterOptions: TBiquadFilterOptions
89
+ ) => IBiquadFilterNode;
90
+ createBufferSource: (
91
+ audioBufferSourceOptions: TAudioBufferSourceOptions
92
+ ) => IAudioBufferSourceNode;
93
+ createDelay(delayOptions: TDelayOptions): IDelayNode;
94
+ createIIRFilter: (IIRFilterOptions: TIIRFilterOptions) => IIIRFilterNode;
76
95
  createBufferQueueSource: (
77
- pitchCorrection: boolean
96
+ audioBufferQueueSourceOptions: TBaseAudioBufferSourceOptions
78
97
  ) => IAudioBufferQueueSourceNode;
79
- createBuffer: (
80
- channels: number,
81
- length: number,
82
- sampleRate: number
83
- ) => IAudioBuffer;
98
+ createBuffer: (audioBufferOptions: TAudioBufferOptions) => IAudioBuffer;
84
99
  createPeriodicWave: (
85
100
  real: Float32Array,
86
101
  imag: Float32Array,
87
102
  disableNormalization: boolean
88
103
  ) => IPeriodicWave;
89
- createAnalyser: () => IAnalyserNode;
90
- createConvolver: (
91
- buffer: IAudioBuffer | undefined,
92
- disableNormalization: boolean
93
- ) => IConvolverNode;
94
- createStreamer: () => IStreamerNode | null; // null when FFmpeg is not enabled
95
- createWaveShaper: () => IWaveShaperNode;
104
+ createAnalyser: (analyserOptions: TAnalyserOptions) => IAnalyserNode;
105
+ createConvolver: (convolverOptions: TConvolverOptions) => IConvolverNode;
106
+ createStreamer: (streamerOptions?: TStreamerOptions) => IStreamerNode | null; // null when FFmpeg is not enabled
107
+ createWaveShaper: (waveShaperOptions?: TWaveShaperOptions) => IWaveShaperNode;
96
108
  }
97
109
 
98
110
  export interface IAudioContext extends IBaseAudioContext {
@@ -186,6 +198,7 @@ export interface IOscillatorNode extends IAudioScheduledSourceNode {
186
198
  }
187
199
 
188
200
  export interface IStreamerNode extends IAudioNode {
201
+ readonly streamPath: string;
189
202
  initialize(streamPath: string): boolean;
190
203
  }
191
204
 
@@ -216,6 +229,9 @@ export interface IAudioBufferQueueSourceNode
216
229
  enqueueBuffer: (audioBuffer: IAudioBuffer) => string;
217
230
  start: (when?: number, offset?: number) => void;
218
231
  pause: () => void;
232
+
233
+ // passing subscriptionId(uint_64 in cpp, string in js) to the cpp
234
+ onBufferEnded: string;
219
235
  }
220
236
 
221
237
  export interface IConvolverNode extends IAudioNode {
@@ -0,0 +1,66 @@
1
+ import { IndexSizeError, NotSupportedError } from './errors';
2
+ import {
3
+ OptionsValidator,
4
+ TAnalyserOptions,
5
+ TConvolverOptions,
6
+ TOscillatorOptions,
7
+ TPeriodicWaveOptions,
8
+ } from './types';
9
+
10
+ export const AnalyserOptionsValidator: OptionsValidator<TAnalyserOptions> = {
11
+ validate(options: TAnalyserOptions): void {
12
+ const allowedFFTSize: number[] = [
13
+ 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768,
14
+ ];
15
+ if (options.fftSize && !allowedFFTSize.includes(options.fftSize)) {
16
+ throw new IndexSizeError(
17
+ `fftSize must be one of the following values: ${allowedFFTSize.join(
18
+ ', '
19
+ )}`
20
+ );
21
+ }
22
+ },
23
+ };
24
+
25
+ export const ConvolverOptionsValidator: OptionsValidator<TConvolverOptions> = {
26
+ validate(options: TConvolverOptions): void {
27
+ if (options.buffer) {
28
+ const numberOfChannels = options.buffer.numberOfChannels;
29
+ if (
30
+ numberOfChannels !== 1 &&
31
+ numberOfChannels !== 2 &&
32
+ numberOfChannels !== 4
33
+ ) {
34
+ throw new NotSupportedError(
35
+ `The number of channels provided (${numberOfChannels}) in impulse response for ConvolverNode buffer must be 1 or 2 or 4.`
36
+ );
37
+ }
38
+ }
39
+ },
40
+ };
41
+
42
+ export const OscillatorOptionsValidator: OptionsValidator<TOscillatorOptions> =
43
+ {
44
+ validate(options: TOscillatorOptions): void {
45
+ if (options.type === 'custom' && !options.periodicWave) {
46
+ throw new NotSupportedError(
47
+ "'type' cannot be set to 'custom' without providing a 'periodicWave'."
48
+ );
49
+ }
50
+ },
51
+ };
52
+
53
+ export const PeriodicWaveOptionsValidator: OptionsValidator<TPeriodicWaveOptions> =
54
+ {
55
+ validate(options: TPeriodicWaveOptions): void {
56
+ if (
57
+ options.real &&
58
+ options.imag &&
59
+ options.real.length !== options.imag.length
60
+ ) {
61
+ throw new NotSupportedError(
62
+ "'real' and 'imag' arrays must have the same length"
63
+ );
64
+ }
65
+ },
66
+ };
@@ -6,6 +6,11 @@ import { AudioDevicesInfo, PermissionStatus } from '../system/types';
6
6
  type OptionsMap = { [key: string]: string | boolean | number | undefined };
7
7
  type NotificationOpResponse = { success: boolean; error?: string };
8
8
  type NotificationType = 'playback' | 'recording' | 'simple';
9
+ type AudioFocusType =
10
+ | 'gain'
11
+ | 'gainTransient'
12
+ | 'gainTransientExclusive'
13
+ | 'gainTransientMayDuck';
9
14
 
10
15
  interface Spec extends TurboModule {
11
16
  install(): boolean;
@@ -22,7 +27,7 @@ interface Spec extends TurboModule {
22
27
  disableSessionManagement(): void;
23
28
 
24
29
  // Remote commands, system events and interruptions
25
- observeAudioInterruptions(enabled: boolean): void;
30
+ observeAudioInterruptions(focusType: AudioFocusType, enabled: boolean): void;
26
31
  activelyReclaimSession(enabled: boolean): void;
27
32
  observeVolumeChanges(enabled: boolean): void;
28
33
 
@@ -1,5 +1,9 @@
1
1
  import { TurboModule } from 'react-native';
2
- import { AudioDevicesInfo, PermissionStatus } from '../system/types';
2
+ import {
3
+ AudioDevicesInfo,
4
+ AudioFocusType,
5
+ PermissionStatus,
6
+ } from '../system/types';
3
7
 
4
8
  // copy of spec from NativeAudioAPIModule.ts
5
9
  type OptionsMap = {
@@ -23,7 +27,7 @@ interface Spec extends TurboModule {
23
27
  disableSessionManagement(): void;
24
28
 
25
29
  // Remote commands, system events and interruptions
26
- observeAudioInterruptions(enabled: boolean): void;
30
+ observeAudioInterruptions(focusType: AudioFocusType, enabled: boolean): void;
27
31
  activelyReclaimSession(enabled: boolean): void;
28
32
  observeVolumeChanges(enabled: boolean): void;
29
33
 
@@ -7,6 +7,7 @@ import {
7
7
  IAudioManager,
8
8
  PermissionStatus,
9
9
  SessionOptions,
10
+ AudioFocusType,
10
11
  } from './types';
11
12
 
12
13
  class AudioManager implements IAudioManager {
@@ -43,8 +44,13 @@ class AudioManager implements IAudioManager {
43
44
  NativeAudioAPIModule.disableSessionManagement();
44
45
  }
45
46
 
46
- observeAudioInterruptions(enabled: boolean) {
47
- NativeAudioAPIModule.observeAudioInterruptions(enabled);
47
+ observeAudioInterruptions(param: AudioFocusType | boolean | null) {
48
+ if (typeof param === 'string') {
49
+ NativeAudioAPIModule.observeAudioInterruptions(param, true);
50
+ } else {
51
+ // audiofocusgain as default value if not provided
52
+ NativeAudioAPIModule.observeAudioInterruptions('gain', param === true);
53
+ }
48
54
  }
49
55
 
50
56
  /**