react-native-audio-api 0.8.3 → 0.9.0-nightly-7ecb495-20251008

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 (323) hide show
  1. package/README.md +40 -39
  2. package/RNAudioAPI.podspec +17 -12
  3. package/android/build.gradle +44 -4
  4. package/android/src/main/cpp/audioapi/CMakeLists.txt +65 -0
  5. package/android/src/main/cpp/audioapi/android/AudioAPIModule.cpp +29 -1
  6. package/android/src/main/cpp/audioapi/android/AudioAPIModule.h +14 -0
  7. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.cpp +7 -1
  8. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +6 -1
  9. package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +1 -1
  10. package/android/src/main/cpp/audioapi/android/core/NativeAudioRecorder.hpp +36 -0
  11. package/android/src/main/cpp/audioapi/android/core/{AudioDecoder.cpp → utils/AudioDecoder.cpp} +79 -75
  12. package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +11 -1
  13. package/android/src/main/java/com/swmansion/audioapi/core/NativeAudioRecorder.kt +24 -0
  14. package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionManager.kt +15 -2
  15. package/common/cpp/audioapi/AudioAPIModuleInstaller.h +154 -38
  16. package/common/cpp/audioapi/HostObjects/AudioContextHostObject.cpp +57 -0
  17. package/common/cpp/audioapi/HostObjects/AudioContextHostObject.h +6 -46
  18. package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.cpp +70 -6
  19. package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.h +10 -66
  20. package/common/cpp/audioapi/HostObjects/AudioParamHostObject.cpp +105 -0
  21. package/common/cpp/audioapi/HostObjects/AudioParamHostObject.h +17 -91
  22. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +262 -6
  23. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +26 -241
  24. package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.cpp +70 -0
  25. package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.h +6 -50
  26. package/common/cpp/audioapi/HostObjects/WorkletNodeHostObject.h +18 -0
  27. package/common/cpp/audioapi/HostObjects/WorkletProcessingNodeHostObject.h +18 -0
  28. package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.cpp +148 -0
  29. package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.h +37 -0
  30. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp +92 -0
  31. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.h +29 -0
  32. package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.cpp +20 -0
  33. package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.h +19 -0
  34. package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.cpp +21 -0
  35. package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.h +21 -0
  36. package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.cpp +41 -0
  37. package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.h +28 -0
  38. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.cpp +69 -0
  39. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +33 -0
  40. package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.cpp +73 -0
  41. package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.h +29 -0
  42. package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.cpp +94 -0
  43. package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.h +46 -0
  44. package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.cpp +60 -0
  45. package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.h +25 -0
  46. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.cpp +152 -0
  47. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.h +37 -0
  48. package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.cpp +52 -0
  49. package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.h +25 -0
  50. package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.cpp +19 -0
  51. package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.h +21 -0
  52. package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.cpp +55 -0
  53. package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.h +27 -0
  54. package/common/cpp/audioapi/HostObjects/{RecorderAdapterNodeHostObject.h → sources/RecorderAdapterNodeHostObject.h} +1 -2
  55. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.cpp +22 -0
  56. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.h +28 -0
  57. package/common/cpp/audioapi/HostObjects/sources/WorkletSourceNodeHostObject.h +18 -0
  58. package/common/cpp/audioapi/HostObjects/utils/AudioDecoderHostObject.cpp +133 -0
  59. package/common/cpp/audioapi/HostObjects/utils/AudioDecoderHostObject.h +28 -0
  60. package/common/cpp/audioapi/HostObjects/utils/AudioStretcherHostObject.cpp +58 -0
  61. package/common/cpp/audioapi/HostObjects/utils/AudioStretcherHostObject.h +26 -0
  62. package/common/cpp/audioapi/core/AudioContext.cpp +3 -4
  63. package/common/cpp/audioapi/core/AudioContext.h +2 -1
  64. package/common/cpp/audioapi/core/AudioNode.cpp +3 -3
  65. package/common/cpp/audioapi/core/AudioNode.h +2 -2
  66. package/common/cpp/audioapi/core/AudioParam.cpp +2 -2
  67. package/common/cpp/audioapi/core/AudioParam.h +1 -1
  68. package/common/cpp/audioapi/core/BaseAudioContext.cpp +47 -38
  69. package/common/cpp/audioapi/core/BaseAudioContext.h +17 -16
  70. package/common/cpp/audioapi/core/OfflineAudioContext.cpp +4 -5
  71. package/common/cpp/audioapi/core/OfflineAudioContext.h +2 -1
  72. package/common/cpp/audioapi/core/analysis/AnalyserNode.cpp +3 -1
  73. package/common/cpp/audioapi/core/analysis/AnalyserNode.h +1 -1
  74. package/common/cpp/audioapi/core/destinations/AudioDestinationNode.h +1 -1
  75. package/common/cpp/audioapi/core/effects/BiquadFilterNode.cpp +3 -1
  76. package/common/cpp/audioapi/core/effects/BiquadFilterNode.h +1 -1
  77. package/common/cpp/audioapi/core/effects/GainNode.cpp +3 -1
  78. package/common/cpp/audioapi/core/effects/GainNode.h +1 -1
  79. package/common/cpp/audioapi/core/effects/PeriodicWave.cpp +1 -1
  80. package/common/cpp/audioapi/core/effects/StereoPannerNode.cpp +18 -13
  81. package/common/cpp/audioapi/core/effects/StereoPannerNode.h +1 -1
  82. package/common/cpp/audioapi/core/effects/WorkletNode.cpp +89 -0
  83. package/common/cpp/audioapi/core/effects/WorkletNode.h +65 -0
  84. package/common/cpp/audioapi/core/effects/WorkletProcessingNode.cpp +91 -0
  85. package/common/cpp/audioapi/core/effects/WorkletProcessingNode.h +52 -0
  86. package/common/cpp/audioapi/core/inputs/AudioRecorder.cpp +1 -1
  87. package/common/cpp/audioapi/core/inputs/AudioRecorder.h +2 -2
  88. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +47 -10
  89. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +18 -3
  90. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +98 -14
  91. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +9 -3
  92. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +37 -44
  93. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +7 -9
  94. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +1 -6
  95. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +1 -1
  96. package/common/cpp/audioapi/core/sources/ConstantSourceNode.cpp +53 -0
  97. package/common/cpp/audioapi/core/sources/ConstantSourceNode.h +26 -0
  98. package/common/cpp/audioapi/core/sources/OscillatorNode.cpp +7 -2
  99. package/common/cpp/audioapi/core/sources/OscillatorNode.h +1 -1
  100. package/common/cpp/audioapi/core/sources/RecorderAdapterNode.cpp +3 -1
  101. package/common/cpp/audioapi/core/sources/RecorderAdapterNode.h +1 -1
  102. package/common/cpp/audioapi/core/sources/StreamerNode.cpp +9 -1
  103. package/common/cpp/audioapi/core/sources/StreamerNode.h +1 -9
  104. package/common/cpp/audioapi/core/sources/WorkletSourceNode.cpp +84 -0
  105. package/common/cpp/audioapi/core/sources/WorkletSourceNode.h +47 -0
  106. package/common/cpp/audioapi/core/types/AudioFormat.h +16 -0
  107. package/common/cpp/audioapi/core/utils/AudioDecoder.h +36 -91
  108. package/common/cpp/audioapi/core/{AudioParamEventQueue.cpp → utils/AudioParamEventQueue.cpp} +13 -7
  109. package/common/cpp/audioapi/core/utils/AudioStretcher.cpp +75 -0
  110. package/common/cpp/audioapi/core/utils/AudioStretcher.h +30 -0
  111. package/common/cpp/audioapi/core/{Constants.h → utils/Constants.h} +9 -0
  112. package/common/cpp/audioapi/core/utils/worklets/SafeIncludes.h +52 -0
  113. package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.cpp +9 -0
  114. package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.h +73 -0
  115. package/common/cpp/audioapi/dsp/Windows.cpp +1 -1
  116. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.cpp +1 -1
  117. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +2 -1
  118. package/common/cpp/audioapi/jsi/AudioArrayBuffer.h +14 -1
  119. package/common/cpp/audioapi/jsi/JsiHostObject.h +6 -12
  120. package/common/cpp/audioapi/jsi/JsiPromise.cpp +49 -0
  121. package/common/cpp/audioapi/jsi/JsiPromise.h +29 -1
  122. package/common/cpp/audioapi/libs/ffmpeg/FFmpegDecoding.cpp +241 -282
  123. package/common/cpp/audioapi/libs/ffmpeg/FFmpegDecoding.h +57 -19
  124. package/common/cpp/audioapi/utils/AudioBus.cpp +1 -1
  125. package/common/cpp/audioapi/utils/ThreadPool.hpp +104 -0
  126. package/common/cpp/test/AudioParamTest.cpp +204 -0
  127. package/common/cpp/test/CMakeLists.txt +13 -4
  128. package/common/cpp/test/GainTest.cpp +11 -10
  129. package/common/cpp/test/OscillatorTest.cpp +2 -1
  130. package/common/cpp/test/StereoPannerTest.cpp +129 -0
  131. package/ios/audioapi/ios/AudioAPIModule.mm +32 -5
  132. package/ios/audioapi/ios/core/IOSAudioPlayer.mm +1 -1
  133. package/ios/audioapi/ios/core/IOSAudioRecorder.mm +1 -1
  134. package/ios/audioapi/ios/core/utils/AudioDecoder.mm +160 -0
  135. package/lib/commonjs/api.js +57 -3
  136. package/lib/commonjs/api.js.map +1 -1
  137. package/lib/commonjs/api.web.js +8 -0
  138. package/lib/commonjs/api.web.js.map +1 -1
  139. package/lib/commonjs/core/AudioBufferBaseSourceNode.js +7 -7
  140. package/lib/commonjs/core/AudioBufferBaseSourceNode.js.map +1 -1
  141. package/lib/commonjs/core/AudioBufferQueueSourceNode.js +1 -6
  142. package/lib/commonjs/core/AudioBufferQueueSourceNode.js.map +1 -1
  143. package/lib/commonjs/core/AudioBufferSourceNode.js +15 -0
  144. package/lib/commonjs/core/AudioBufferSourceNode.js.map +1 -1
  145. package/lib/commonjs/core/AudioContext.js +10 -1
  146. package/lib/commonjs/core/AudioContext.js.map +1 -1
  147. package/lib/commonjs/core/AudioDecoder.js +48 -0
  148. package/lib/commonjs/core/AudioDecoder.js.map +1 -0
  149. package/lib/commonjs/core/AudioScheduledSourceNode.js +4 -4
  150. package/lib/commonjs/core/AudioScheduledSourceNode.js.map +1 -1
  151. package/lib/commonjs/core/AudioStretcher.js +31 -0
  152. package/lib/commonjs/core/AudioStretcher.js.map +1 -0
  153. package/lib/commonjs/core/BaseAudioContext.js +76 -28
  154. package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
  155. package/lib/commonjs/core/ConstantSourceNode.js +17 -0
  156. package/lib/commonjs/core/ConstantSourceNode.js.map +1 -0
  157. package/lib/commonjs/core/OfflineAudioContext.js +11 -2
  158. package/lib/commonjs/core/OfflineAudioContext.js.map +1 -1
  159. package/lib/commonjs/core/OscillatorNode.js +6 -0
  160. package/lib/commonjs/core/OscillatorNode.js.map +1 -1
  161. package/lib/commonjs/core/WorkletNode.js +11 -0
  162. package/lib/commonjs/core/WorkletNode.js.map +1 -0
  163. package/lib/commonjs/core/WorkletProcessingNode.js +11 -0
  164. package/lib/commonjs/core/WorkletProcessingNode.js.map +1 -0
  165. package/lib/commonjs/core/WorkletSourceNode.js +11 -0
  166. package/lib/commonjs/core/WorkletSourceNode.js.map +1 -0
  167. package/lib/commonjs/hooks/{useSytemVolume.js → useSystemVolume.js} +1 -1
  168. package/lib/commonjs/hooks/useSystemVolume.js.map +1 -0
  169. package/lib/commonjs/utils/index.js +9 -0
  170. package/lib/commonjs/utils/index.js.map +1 -1
  171. package/lib/commonjs/web-core/AudioContext.js +4 -0
  172. package/lib/commonjs/web-core/AudioContext.js.map +1 -1
  173. package/lib/commonjs/web-core/AudioScheduledSourceNode.js +1 -1
  174. package/lib/commonjs/web-core/AudioScheduledSourceNode.js.map +1 -1
  175. package/lib/commonjs/web-core/ConstantSourceNode.js +17 -0
  176. package/lib/commonjs/web-core/ConstantSourceNode.js.map +1 -0
  177. package/lib/commonjs/web-core/OfflineAudioContext.js +4 -0
  178. package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
  179. package/lib/module/api.js +9 -3
  180. package/lib/module/api.js.map +1 -1
  181. package/lib/module/api.web.js +1 -0
  182. package/lib/module/api.web.js.map +1 -1
  183. package/lib/module/core/AudioBufferBaseSourceNode.js +7 -7
  184. package/lib/module/core/AudioBufferBaseSourceNode.js.map +1 -1
  185. package/lib/module/core/AudioBufferQueueSourceNode.js +1 -6
  186. package/lib/module/core/AudioBufferQueueSourceNode.js.map +1 -1
  187. package/lib/module/core/AudioBufferSourceNode.js +15 -0
  188. package/lib/module/core/AudioBufferSourceNode.js.map +1 -1
  189. package/lib/module/core/AudioContext.js +10 -1
  190. package/lib/module/core/AudioContext.js.map +1 -1
  191. package/lib/module/core/AudioDecoder.js +42 -0
  192. package/lib/module/core/AudioDecoder.js.map +1 -0
  193. package/lib/module/core/AudioScheduledSourceNode.js +4 -4
  194. package/lib/module/core/AudioScheduledSourceNode.js.map +1 -1
  195. package/lib/module/core/AudioStretcher.js +26 -0
  196. package/lib/module/core/AudioStretcher.js.map +1 -0
  197. package/lib/module/core/BaseAudioContext.js +76 -28
  198. package/lib/module/core/BaseAudioContext.js.map +1 -1
  199. package/lib/module/core/ConstantSourceNode.js +11 -0
  200. package/lib/module/core/ConstantSourceNode.js.map +1 -0
  201. package/lib/module/core/OfflineAudioContext.js +11 -2
  202. package/lib/module/core/OfflineAudioContext.js.map +1 -1
  203. package/lib/module/core/OscillatorNode.js +6 -0
  204. package/lib/module/core/OscillatorNode.js.map +1 -1
  205. package/lib/module/core/WorkletNode.js +5 -0
  206. package/lib/module/core/WorkletNode.js.map +1 -0
  207. package/lib/module/core/WorkletProcessingNode.js +5 -0
  208. package/lib/module/core/WorkletProcessingNode.js.map +1 -0
  209. package/lib/module/core/WorkletSourceNode.js +5 -0
  210. package/lib/module/core/WorkletSourceNode.js.map +1 -0
  211. package/lib/module/hooks/{useSytemVolume.js → useSystemVolume.js} +1 -1
  212. package/lib/module/hooks/useSystemVolume.js.map +1 -0
  213. package/lib/module/utils/index.js +8 -0
  214. package/lib/module/utils/index.js.map +1 -1
  215. package/lib/module/web-core/AudioContext.js +4 -0
  216. package/lib/module/web-core/AudioContext.js.map +1 -1
  217. package/lib/module/web-core/AudioScheduledSourceNode.js +1 -1
  218. package/lib/module/web-core/AudioScheduledSourceNode.js.map +1 -1
  219. package/lib/module/web-core/ConstantSourceNode.js +11 -0
  220. package/lib/module/web-core/ConstantSourceNode.js.map +1 -0
  221. package/lib/module/web-core/OfflineAudioContext.js +4 -0
  222. package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
  223. package/lib/typescript/api.d.ts +13 -5
  224. package/lib/typescript/api.d.ts.map +1 -1
  225. package/lib/typescript/api.web.d.ts +1 -0
  226. package/lib/typescript/api.web.d.ts.map +1 -1
  227. package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts +2 -2
  228. package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts.map +1 -1
  229. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts +1 -1
  230. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts.map +1 -1
  231. package/lib/typescript/core/AudioBufferSourceNode.d.ts +4 -0
  232. package/lib/typescript/core/AudioBufferSourceNode.d.ts.map +1 -1
  233. package/lib/typescript/core/AudioContext.d.ts +1 -0
  234. package/lib/typescript/core/AudioContext.d.ts.map +1 -1
  235. package/lib/typescript/core/AudioDecoder.d.ts +4 -0
  236. package/lib/typescript/core/AudioDecoder.d.ts.map +1 -0
  237. package/lib/typescript/core/AudioScheduledSourceNode.d.ts +1 -1
  238. package/lib/typescript/core/AudioStretcher.d.ts +3 -0
  239. package/lib/typescript/core/AudioStretcher.d.ts.map +1 -0
  240. package/lib/typescript/core/BaseAudioContext.d.ts +21 -16
  241. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
  242. package/lib/typescript/core/ConstantSourceNode.d.ts +9 -0
  243. package/lib/typescript/core/ConstantSourceNode.d.ts.map +1 -0
  244. package/lib/typescript/core/OfflineAudioContext.d.ts +1 -0
  245. package/lib/typescript/core/OfflineAudioContext.d.ts.map +1 -1
  246. package/lib/typescript/core/OscillatorNode.d.ts +3 -0
  247. package/lib/typescript/core/OscillatorNode.d.ts.map +1 -1
  248. package/lib/typescript/core/WorkletNode.d.ts +4 -0
  249. package/lib/typescript/core/WorkletNode.d.ts.map +1 -0
  250. package/lib/typescript/core/WorkletProcessingNode.d.ts +4 -0
  251. package/lib/typescript/core/WorkletProcessingNode.d.ts.map +1 -0
  252. package/lib/typescript/core/WorkletSourceNode.d.ts +4 -0
  253. package/lib/typescript/core/WorkletSourceNode.d.ts.map +1 -0
  254. package/lib/typescript/events/types.d.ts +2 -0
  255. package/lib/typescript/events/types.d.ts.map +1 -1
  256. package/lib/typescript/hooks/{useSytemVolume.d.ts → useSystemVolume.d.ts} +1 -1
  257. package/lib/typescript/hooks/useSystemVolume.d.ts.map +1 -0
  258. package/lib/typescript/interfaces.d.ts +31 -6
  259. package/lib/typescript/interfaces.d.ts.map +1 -1
  260. package/lib/typescript/types.d.ts +2 -1
  261. package/lib/typescript/types.d.ts.map +1 -1
  262. package/lib/typescript/utils/index.d.ts +8 -0
  263. package/lib/typescript/utils/index.d.ts.map +1 -1
  264. package/lib/typescript/web-core/AudioBufferSourceNode.d.ts +1 -1
  265. package/lib/typescript/web-core/AudioContext.d.ts +4 -2
  266. package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
  267. package/lib/typescript/web-core/AudioScheduledSourceNode.d.ts +1 -1
  268. package/lib/typescript/web-core/BaseAudioContext.d.ts +2 -0
  269. package/lib/typescript/web-core/BaseAudioContext.d.ts.map +1 -1
  270. package/lib/typescript/web-core/ConstantSourceNode.d.ts +8 -0
  271. package/lib/typescript/web-core/ConstantSourceNode.d.ts.map +1 -0
  272. package/lib/typescript/web-core/OfflineAudioContext.d.ts +4 -2
  273. package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
  274. package/package.json +3 -2
  275. package/src/api.ts +22 -3
  276. package/src/api.web.ts +1 -0
  277. package/src/core/AudioBufferBaseSourceNode.ts +9 -9
  278. package/src/core/AudioBufferQueueSourceNode.ts +1 -9
  279. package/src/core/AudioBufferSourceNode.ts +28 -0
  280. package/src/core/AudioContext.ts +12 -1
  281. package/src/core/AudioDecoder.ts +78 -0
  282. package/src/core/AudioScheduledSourceNode.ts +5 -5
  283. package/src/core/AudioStretcher.ts +43 -0
  284. package/src/core/BaseAudioContext.ts +174 -41
  285. package/src/core/ConstantSourceNode.ts +13 -0
  286. package/src/core/OfflineAudioContext.ts +18 -2
  287. package/src/core/OscillatorNode.ts +11 -0
  288. package/src/core/WorkletNode.ts +3 -0
  289. package/src/core/WorkletProcessingNode.ts +3 -0
  290. package/src/core/WorkletSourceNode.ts +3 -0
  291. package/src/events/types.ts +2 -0
  292. package/src/interfaces.ts +85 -11
  293. package/src/types.ts +3 -1
  294. package/src/utils/index.ts +21 -0
  295. package/src/web-core/AudioBufferSourceNode.tsx +1 -1
  296. package/src/web-core/AudioContext.tsx +7 -2
  297. package/src/web-core/AudioScheduledSourceNode.tsx +1 -1
  298. package/src/web-core/BaseAudioContext.tsx +2 -0
  299. package/src/web-core/ConstantSourceNode.tsx +12 -0
  300. package/src/web-core/OfflineAudioContext.tsx +7 -2
  301. package/common/cpp/audioapi/HostObjects/AnalyserNodeHostObject.h +0 -149
  302. package/common/cpp/audioapi/HostObjects/AudioBufferBaseSourceNodeHostObject.h +0 -76
  303. package/common/cpp/audioapi/HostObjects/AudioBufferHostObject.h +0 -120
  304. package/common/cpp/audioapi/HostObjects/AudioBufferQueueSourceNodeHostObject.h +0 -67
  305. package/common/cpp/audioapi/HostObjects/AudioBufferSourceNodeHostObject.h +0 -142
  306. package/common/cpp/audioapi/HostObjects/AudioRecorderHostObject.h +0 -86
  307. package/common/cpp/audioapi/HostObjects/AudioScheduledSourceNodeHostObject.h +0 -56
  308. package/common/cpp/audioapi/HostObjects/BiquadFilterNodeHostObject.h +0 -89
  309. package/common/cpp/audioapi/HostObjects/GainNodeHostObject.h +0 -27
  310. package/common/cpp/audioapi/HostObjects/OscillatorNodeHostObject.h +0 -65
  311. package/common/cpp/audioapi/HostObjects/StereoPannerNodeHostObject.h +0 -29
  312. package/common/cpp/audioapi/HostObjects/StreamerNodeHostObject.h +0 -30
  313. package/common/cpp/audioapi/events/AudioEventHandlerRegistryHostObject.h +0 -48
  314. package/ios/audioapi/ios/core/AudioDecoder.mm +0 -156
  315. package/ios/audioapi/ios/events/IOSAudioEventHandlerRegistry.h +0 -7
  316. package/ios/audioapi/ios/events/IOSAudioEventHandlerRegistry.mm +0 -12
  317. package/lib/commonjs/hooks/useSytemVolume.js.map +0 -1
  318. package/lib/module/hooks/useSytemVolume.js.map +0 -1
  319. package/lib/typescript/hooks/useSytemVolume.d.ts.map +0 -1
  320. /package/common/cpp/audioapi/HostObjects/{AudioDestinationNodeHostObject.h → destinations/AudioDestinationNodeHostObject.h} +0 -0
  321. /package/common/cpp/audioapi/HostObjects/{PeriodicWaveHostObject.h → effects/PeriodicWaveHostObject.h} +0 -0
  322. /package/common/cpp/audioapi/core/{AudioParamEventQueue.h → utils/AudioParamEventQueue.h} +0 -0
  323. /package/src/hooks/{useSytemVolume.ts → useSystemVolume.ts} +0 -0
@@ -2,7 +2,7 @@ import {
2
2
  ContextState,
3
3
  PeriodicWaveConstraints,
4
4
  AudioContextOptions,
5
- AudioBufferSourceNodeOptions,
5
+ AudioBufferBaseSourceNodeOptions,
6
6
  } from '../types';
7
7
  import { InvalidAccessError, NotSupportedError } from '../errors';
8
8
  import BaseAudioContext from './BaseAudioContext';
@@ -17,6 +17,7 @@ import PeriodicWave from './PeriodicWave';
17
17
  import StereoPannerNode from './StereoPannerNode';
18
18
 
19
19
  import { globalWasmPromise, globalTag } from './custom/LoadCustomWasm';
20
+ import ConstantSourceNode from './ConstantSourceNode';
20
21
 
21
22
  export default class AudioContext implements BaseAudioContext {
22
23
  readonly context: globalThis.AudioContext;
@@ -53,6 +54,10 @@ export default class AudioContext implements BaseAudioContext {
53
54
  return new OscillatorNode(this, this.context.createOscillator());
54
55
  }
55
56
 
57
+ createConstantSource(): ConstantSourceNode {
58
+ return new ConstantSourceNode(this, this.context.createConstantSource());
59
+ }
60
+
56
61
  createGain(): GainNode {
57
62
  return new GainNode(this, this.context.createGain());
58
63
  }
@@ -66,7 +71,7 @@ export default class AudioContext implements BaseAudioContext {
66
71
  }
67
72
 
68
73
  async createBufferSource(
69
- options?: AudioBufferSourceNodeOptions
74
+ options?: AudioBufferBaseSourceNodeOptions
70
75
  ): Promise<AudioBufferSourceNode> {
71
76
  if (!options || !options.pitchCorrection) {
72
77
  return new AudioBufferSourceNode(
@@ -37,7 +37,7 @@ export default class AudioScheduledSourceNode extends AudioNode {
37
37
  }
38
38
 
39
39
  // eslint-disable-next-line accessor-pairs
40
- public set onended(callback: (event: EventEmptyType) => void) {
40
+ public set onEnded(callback: (event: EventEmptyType) => void) {
41
41
  (this.node as globalThis.AudioScheduledSourceNode).onended = callback;
42
42
  }
43
43
  }
@@ -8,6 +8,7 @@ import GainNode from './GainNode';
8
8
  import OscillatorNode from './OscillatorNode';
9
9
  import PeriodicWave from './PeriodicWave';
10
10
  import StereoPannerNode from './StereoPannerNode';
11
+ import ConstantSourceNode from './ConstantSourceNode';
11
12
 
12
13
  export default interface BaseAudioContext {
13
14
  readonly context: globalThis.BaseAudioContext;
@@ -18,6 +19,7 @@ export default interface BaseAudioContext {
18
19
  get currentTime(): number;
19
20
  get state(): ContextState;
20
21
  createOscillator(): OscillatorNode;
22
+ createConstantSource(): ConstantSourceNode;
21
23
  createGain(): GainNode;
22
24
  createStereoPanner(): StereoPannerNode;
23
25
  createBiquadFilter(): BiquadFilterNode;
@@ -0,0 +1,12 @@
1
+ import AudioParam from './AudioParam';
2
+ import AudioScheduledSourceNode from './AudioScheduledSourceNode';
3
+ import BaseAudioContext from './BaseAudioContext';
4
+
5
+ export default class ConstantSourceNode extends AudioScheduledSourceNode {
6
+ readonly offset: AudioParam;
7
+
8
+ constructor(context: BaseAudioContext, node: globalThis.ConstantSourceNode) {
9
+ super(context, node);
10
+ this.offset = new AudioParam(node.offset, context);
11
+ }
12
+ }
@@ -2,7 +2,7 @@ import {
2
2
  ContextState,
3
3
  PeriodicWaveConstraints,
4
4
  OfflineAudioContextOptions,
5
- AudioBufferSourceNodeOptions,
5
+ AudioBufferBaseSourceNodeOptions,
6
6
  } from '../types';
7
7
  import { InvalidAccessError, NotSupportedError } from '../errors';
8
8
  import BaseAudioContext from './BaseAudioContext';
@@ -15,6 +15,7 @@ import GainNode from './GainNode';
15
15
  import OscillatorNode from './OscillatorNode';
16
16
  import PeriodicWave from './PeriodicWave';
17
17
  import StereoPannerNode from './StereoPannerNode';
18
+ import ConstantSourceNode from './ConstantSourceNode';
18
19
 
19
20
  import { globalWasmPromise, globalTag } from './custom/LoadCustomWasm';
20
21
 
@@ -59,6 +60,10 @@ export default class OfflineAudioContext implements BaseAudioContext {
59
60
  return new OscillatorNode(this, this.context.createOscillator());
60
61
  }
61
62
 
63
+ createConstantSource(): ConstantSourceNode {
64
+ return new ConstantSourceNode(this, this.context.createConstantSource());
65
+ }
66
+
62
67
  createGain(): GainNode {
63
68
  return new GainNode(this, this.context.createGain());
64
69
  }
@@ -72,7 +77,7 @@ export default class OfflineAudioContext implements BaseAudioContext {
72
77
  }
73
78
 
74
79
  async createBufferSource(
75
- options?: AudioBufferSourceNodeOptions
80
+ options?: AudioBufferBaseSourceNodeOptions
76
81
  ): Promise<AudioBufferSourceNode> {
77
82
  if (!options || !options.pitchCorrection) {
78
83
  return new AudioBufferSourceNode(
@@ -1,149 +0,0 @@
1
- #pragma once
2
-
3
- #include <audioapi/core/analysis/AnalyserNode.h>
4
- #include <audioapi/HostObjects/AudioNodeHostObject.h>
5
-
6
- #include <memory>
7
- #include <string>
8
- #include <vector>
9
-
10
- namespace audioapi {
11
- using namespace facebook;
12
-
13
- class AnalyserNodeHostObject : public AudioNodeHostObject {
14
- public:
15
- explicit AnalyserNodeHostObject(const std::shared_ptr<AnalyserNode> &node)
16
- : AudioNodeHostObject(node) {
17
- addGetters(
18
- JSI_EXPORT_PROPERTY_GETTER(AnalyserNodeHostObject, fftSize),
19
- JSI_EXPORT_PROPERTY_GETTER(AnalyserNodeHostObject, frequencyBinCount),
20
- JSI_EXPORT_PROPERTY_GETTER(AnalyserNodeHostObject, minDecibels),
21
- JSI_EXPORT_PROPERTY_GETTER(AnalyserNodeHostObject, maxDecibels),
22
- JSI_EXPORT_PROPERTY_GETTER(AnalyserNodeHostObject, smoothingTimeConstant),
23
- JSI_EXPORT_PROPERTY_GETTER(AnalyserNodeHostObject, window));
24
-
25
- addFunctions(
26
- JSI_EXPORT_FUNCTION(
27
- AnalyserNodeHostObject, getFloatFrequencyData),
28
- JSI_EXPORT_FUNCTION(
29
- AnalyserNodeHostObject, getByteFrequencyData),
30
- JSI_EXPORT_FUNCTION(
31
- AnalyserNodeHostObject, getFloatTimeDomainData),
32
- JSI_EXPORT_FUNCTION(
33
- AnalyserNodeHostObject, getByteTimeDomainData));
34
-
35
- addSetters(
36
- JSI_EXPORT_PROPERTY_SETTER(AnalyserNodeHostObject, fftSize),
37
- JSI_EXPORT_PROPERTY_SETTER(AnalyserNodeHostObject, minDecibels),
38
- JSI_EXPORT_PROPERTY_SETTER(AnalyserNodeHostObject, maxDecibels),
39
- JSI_EXPORT_PROPERTY_SETTER(
40
- AnalyserNodeHostObject, smoothingTimeConstant),
41
- JSI_EXPORT_PROPERTY_SETTER(AnalyserNodeHostObject, window));
42
- }
43
-
44
- JSI_PROPERTY_GETTER(fftSize) {
45
- auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
46
- return {static_cast<int>(analyserNode->getFftSize())};
47
- }
48
-
49
- JSI_PROPERTY_GETTER(frequencyBinCount) {
50
- auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
51
- return {static_cast<int>(analyserNode->getFrequencyBinCount())};
52
- }
53
-
54
- JSI_PROPERTY_GETTER(minDecibels) {
55
- auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
56
- return {analyserNode->getMinDecibels()};
57
- }
58
-
59
- JSI_PROPERTY_GETTER(maxDecibels) {
60
- auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
61
- return {analyserNode->getMaxDecibels()};
62
- }
63
-
64
- JSI_PROPERTY_GETTER(smoothingTimeConstant) {
65
- auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
66
- return {analyserNode->getSmoothingTimeConstant()};
67
- }
68
-
69
- JSI_PROPERTY_GETTER(window) {
70
- auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
71
- auto windowType = analyserNode->getWindowType();
72
- return jsi::String::createFromUtf8(runtime, windowType);
73
- }
74
-
75
- JSI_HOST_FUNCTION(getFloatFrequencyData) {
76
- auto arrayBuffer = args[0].getObject(runtime).getPropertyAsObject(runtime, "buffer").getArrayBuffer(runtime);
77
- auto data = reinterpret_cast<float *>(arrayBuffer.data(runtime));
78
- auto length = static_cast<int>(arrayBuffer.size(runtime));
79
-
80
- auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
81
- analyserNode->getFloatFrequencyData(data, length);
82
-
83
- return jsi::Value::undefined();
84
- }
85
-
86
- JSI_HOST_FUNCTION(getByteFrequencyData) {
87
- auto arrayBuffer = args[0].getObject(runtime).getPropertyAsObject(runtime, "buffer").getArrayBuffer(runtime);
88
- auto data = arrayBuffer.data(runtime);
89
- auto length = static_cast<int>(arrayBuffer.size(runtime));
90
-
91
- auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
92
- analyserNode->getByteFrequencyData(data, length);
93
-
94
- return jsi::Value::undefined();
95
- }
96
-
97
- JSI_HOST_FUNCTION(getFloatTimeDomainData) {
98
- auto arrayBuffer = args[0].getObject(runtime).getPropertyAsObject(runtime, "buffer").getArrayBuffer(runtime);
99
- auto data = reinterpret_cast<float *>(arrayBuffer.data(runtime));
100
- auto length = static_cast<int>(arrayBuffer.size(runtime));
101
-
102
- auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
103
- analyserNode->getFloatTimeDomainData(data, length);
104
-
105
- return jsi::Value::undefined();
106
- }
107
-
108
- JSI_HOST_FUNCTION(getByteTimeDomainData) {
109
- auto arrayBuffer = args[0].getObject(runtime).getPropertyAsObject(runtime, "buffer").getArrayBuffer(runtime);
110
- auto data = arrayBuffer.data(runtime);
111
- auto length = static_cast<int>(arrayBuffer.size(runtime));
112
-
113
- auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
114
- analyserNode->getByteTimeDomainData(data, length);
115
-
116
- return jsi::Value::undefined();
117
- }
118
-
119
- JSI_PROPERTY_SETTER(fftSize) {
120
- auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
121
- auto fftSize = static_cast<int>(value.getNumber());
122
- analyserNode->setFftSize(fftSize);
123
- }
124
-
125
- JSI_PROPERTY_SETTER(minDecibels) {
126
- auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
127
- auto minDecibels = static_cast<float>(value.getNumber());
128
- analyserNode->setMinDecibels(minDecibels);
129
- }
130
-
131
- JSI_PROPERTY_SETTER(maxDecibels) {
132
- auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
133
- auto maxDecibels = static_cast<float>(value.getNumber());
134
- analyserNode->setMaxDecibels(maxDecibels);
135
- }
136
-
137
- JSI_PROPERTY_SETTER(smoothingTimeConstant) {
138
- auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
139
- auto smoothingTimeConstant = static_cast<float>(value.getNumber());
140
- analyserNode->setSmoothingTimeConstant(smoothingTimeConstant);
141
- }
142
-
143
- JSI_PROPERTY_SETTER(window) {
144
- auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
145
- analyserNode->setWindowType(value.getString(runtime).utf8(runtime));
146
- }
147
- };
148
-
149
- } // namespace audioapi
@@ -1,76 +0,0 @@
1
- #pragma once
2
-
3
- #include <audioapi/core/sources/AudioBufferBaseSourceNode.h>
4
- #include <audioapi/HostObjects/AudioParamHostObject.h>
5
- #include <audioapi/HostObjects/AudioScheduledSourceNodeHostObject.h>
6
-
7
- #include <memory>
8
- #include <vector>
9
-
10
- namespace audioapi {
11
- using namespace facebook;
12
-
13
- class AudioBufferBaseSourceNodeHostObject
14
- : public AudioScheduledSourceNodeHostObject {
15
- public:
16
- explicit AudioBufferBaseSourceNodeHostObject(
17
- const std::shared_ptr<AudioBufferBaseSourceNode> &node)
18
- : AudioScheduledSourceNodeHostObject(node) {
19
- addGetters(
20
- JSI_EXPORT_PROPERTY_GETTER(AudioBufferBaseSourceNodeHostObject, detune),
21
- JSI_EXPORT_PROPERTY_GETTER(AudioBufferBaseSourceNodeHostObject, playbackRate),
22
- JSI_EXPORT_PROPERTY_GETTER(AudioBufferBaseSourceNodeHostObject, onPositionChangedInterval));
23
-
24
- addSetters(
25
- JSI_EXPORT_PROPERTY_SETTER(AudioBufferBaseSourceNodeHostObject, onPositionChanged),
26
- JSI_EXPORT_PROPERTY_SETTER(AudioBufferBaseSourceNodeHostObject, onPositionChangedInterval));
27
- }
28
-
29
- ~AudioBufferBaseSourceNodeHostObject() {
30
- auto sourceNode =
31
- std::static_pointer_cast<AudioBufferBaseSourceNode>(node_);
32
-
33
- // When JSI object is garbage collected (together with the eventual callback),
34
- // underlying source node might still be active and try to call the non-existing callback.
35
- sourceNode->clearOnPositionChangedCallback();
36
- }
37
-
38
- JSI_PROPERTY_GETTER(detune) {
39
- auto sourceNode =
40
- std::static_pointer_cast<AudioBufferBaseSourceNode>(node_);
41
- auto detune = sourceNode->getDetuneParam();
42
- auto detuneHostObject = std::make_shared<AudioParamHostObject>(detune);
43
- return jsi::Object::createFromHostObject(runtime, detuneHostObject);
44
- }
45
-
46
- JSI_PROPERTY_GETTER(playbackRate) {
47
- auto sourceNode =
48
- std::static_pointer_cast<AudioBufferBaseSourceNode>(node_);
49
- auto playbackRate = sourceNode->getPlaybackRateParam();
50
- auto playbackRateHostObject =
51
- std::make_shared<AudioParamHostObject>(playbackRate);
52
- return jsi::Object::createFromHostObject(runtime, playbackRateHostObject);
53
- }
54
-
55
- JSI_PROPERTY_SETTER(onPositionChanged) {
56
- auto sourceNode =
57
- std::static_pointer_cast<AudioBufferBaseSourceNode>(node_);
58
-
59
- sourceNode->setOnPositionChangedCallbackId(std::stoull(value.getString(runtime).utf8(runtime)));
60
- }
61
-
62
- JSI_PROPERTY_GETTER(onPositionChangedInterval) {
63
- auto sourceNode =
64
- std::static_pointer_cast<AudioBufferBaseSourceNode>(node_);
65
- return jsi::Value(sourceNode->getOnPositionChangedInterval());
66
- }
67
-
68
- JSI_PROPERTY_SETTER(onPositionChangedInterval) {
69
- auto sourceNode =
70
- std::static_pointer_cast<AudioBufferBaseSourceNode>(node_);
71
-
72
- sourceNode->setOnPositionChangedInterval(static_cast<int>(value.getNumber()));
73
- }
74
- };
75
-
76
- } // namespace audioapi
@@ -1,120 +0,0 @@
1
- #pragma once
2
-
3
- #include <audioapi/core/sources/AudioBuffer.h>
4
- #include <audioapi/jsi/AudioArrayBuffer.h>
5
- #include <audioapi/jsi/JsiHostObject.h>
6
-
7
- #include <jsi/jsi.h>
8
- #include <cstddef>
9
- #include <memory>
10
- #include <utility>
11
- #include <vector>
12
-
13
- namespace audioapi {
14
- using namespace facebook;
15
-
16
- class AudioBufferHostObject : public JsiHostObject {
17
- public:
18
- std::shared_ptr<AudioBuffer> audioBuffer_;
19
-
20
- explicit AudioBufferHostObject(
21
- const std::shared_ptr<AudioBuffer> &audioBuffer)
22
- : audioBuffer_(audioBuffer) {
23
- addGetters(
24
- JSI_EXPORT_PROPERTY_GETTER(AudioBufferHostObject, sampleRate),
25
- JSI_EXPORT_PROPERTY_GETTER(AudioBufferHostObject, length),
26
- JSI_EXPORT_PROPERTY_GETTER(AudioBufferHostObject, duration),
27
- JSI_EXPORT_PROPERTY_GETTER(AudioBufferHostObject, numberOfChannels));
28
-
29
- addFunctions(
30
- JSI_EXPORT_FUNCTION(AudioBufferHostObject, getChannelData),
31
- JSI_EXPORT_FUNCTION(AudioBufferHostObject, copyFromChannel),
32
- JSI_EXPORT_FUNCTION(AudioBufferHostObject, copyToChannel));
33
- }
34
- AudioBufferHostObject(const AudioBufferHostObject &) = delete;
35
- AudioBufferHostObject &operator=(const AudioBufferHostObject &) = delete;
36
- AudioBufferHostObject(AudioBufferHostObject &&other) noexcept
37
- : JsiHostObject(std::move(other)),
38
- audioBuffer_(std::move(other.audioBuffer_)) {}
39
- AudioBufferHostObject &operator=(AudioBufferHostObject &&other) noexcept {
40
- if (this != &other) {
41
- JsiHostObject::operator=(std::move(other));
42
- audioBuffer_ = std::move(other.audioBuffer_);
43
- }
44
- return *this;
45
- }
46
-
47
- [[nodiscard]] size_t getSizeInBytes() const {
48
- return audioBuffer_->getLength() * audioBuffer_->getNumberOfChannels() *
49
- sizeof(float);
50
- }
51
-
52
- JSI_PROPERTY_GETTER(sampleRate) {
53
- return {audioBuffer_->getSampleRate()};
54
- }
55
-
56
- JSI_PROPERTY_GETTER(length) {
57
- return {static_cast<double>(audioBuffer_->getLength())};
58
- }
59
-
60
- JSI_PROPERTY_GETTER(duration) {
61
- return {audioBuffer_->getDuration()};
62
- }
63
-
64
- JSI_PROPERTY_GETTER(numberOfChannels) {
65
- return {audioBuffer_->getNumberOfChannels()};
66
- }
67
-
68
- JSI_HOST_FUNCTION(getChannelData) {
69
- auto channel = static_cast<int>(args[0].getNumber());
70
- auto channelData =
71
- reinterpret_cast<uint8_t *>(audioBuffer_->getChannelData(channel));
72
- auto length = static_cast<int>(audioBuffer_->getLength());
73
- auto size = static_cast<int>(length * sizeof(float));
74
-
75
- // reading or writing from this ArrayBuffer could cause a crash
76
- // if underlying channelData is deallocated
77
- auto audioArrayBuffer =
78
- std::make_shared<AudioArrayBuffer>(channelData, size);
79
- auto arrayBuffer = jsi::ArrayBuffer(runtime, audioArrayBuffer);
80
-
81
- auto float32ArrayCtor =
82
- runtime.global().getPropertyAsFunction(runtime, "Float32Array");
83
- auto float32Array = float32ArrayCtor.callAsConstructor(runtime, arrayBuffer)
84
- .getObject(runtime);
85
-
86
- return float32Array;
87
- }
88
-
89
- JSI_HOST_FUNCTION(copyFromChannel) {
90
- auto arrayBuffer = args[0]
91
- .getObject(runtime)
92
- .getPropertyAsObject(runtime, "buffer")
93
- .getArrayBuffer(runtime);
94
- auto destination = reinterpret_cast<float *>(arrayBuffer.data(runtime));
95
- auto length = static_cast<int>(arrayBuffer.size(runtime));
96
- auto channelNumber = static_cast<int>(args[1].getNumber());
97
- auto startInChannel = static_cast<size_t>(args[2].getNumber());
98
-
99
- audioBuffer_->copyFromChannel(
100
- destination, length, channelNumber, startInChannel);
101
-
102
- return jsi::Value::undefined();
103
- }
104
-
105
- JSI_HOST_FUNCTION(copyToChannel) {
106
- auto arrayBuffer = args[0]
107
- .getObject(runtime)
108
- .getPropertyAsObject(runtime, "buffer")
109
- .getArrayBuffer(runtime);
110
- auto source = reinterpret_cast<float *>(arrayBuffer.data(runtime));
111
- auto length = static_cast<int>(arrayBuffer.size(runtime));
112
- auto channelNumber = static_cast<int>(args[1].getNumber());
113
- auto startInChannel = static_cast<size_t>(args[2].getNumber());
114
-
115
- audioBuffer_->copyToChannel(source, length, channelNumber, startInChannel);
116
-
117
- return jsi::Value::undefined();
118
- }
119
- };
120
- } // namespace audioapi
@@ -1,67 +0,0 @@
1
- #pragma once
2
-
3
- #include <audioapi/HostObjects/AudioBufferHostObject.h>
4
- #include <audioapi/core/sources/AudioBufferQueueSourceNode.h>
5
- #include <audioapi/HostObjects/AudioBufferBaseSourceNodeHostObject.h>
6
-
7
- #include <memory>
8
- #include <vector>
9
-
10
- namespace audioapi {
11
- using namespace facebook;
12
-
13
- class AudioBufferQueueSourceNodeHostObject
14
- : public AudioBufferBaseSourceNodeHostObject {
15
- public:
16
- explicit AudioBufferQueueSourceNodeHostObject(
17
- const std::shared_ptr<AudioBufferQueueSourceNode> &node)
18
- : AudioBufferBaseSourceNodeHostObject(node) {
19
- addFunctions(
20
- JSI_EXPORT_FUNCTION(AudioBufferQueueSourceNodeHostObject, enqueueBuffer),
21
- JSI_EXPORT_FUNCTION(AudioBufferQueueSourceNodeHostObject, pause));
22
- }
23
-
24
- JSI_HOST_FUNCTION(pause) {
25
- auto audioBufferQueueSourceNode =
26
- std::static_pointer_cast<AudioBufferQueueSourceNode>(node_);
27
-
28
- audioBufferQueueSourceNode->pause();
29
-
30
- return jsi::Value::undefined();
31
- }
32
-
33
- JSI_HOST_FUNCTION(enqueueBuffer) {
34
- auto audioBufferQueueSourceNode =
35
- std::static_pointer_cast<AudioBufferQueueSourceNode>(node_);
36
-
37
- auto audioBufferHostObject =
38
- args[0].getObject(runtime).asHostObject<AudioBufferHostObject>(runtime);
39
-
40
- auto bufferId = audioBufferQueueSourceNode->enqueueBuffer(audioBufferHostObject->audioBuffer_);
41
-
42
- return jsi::String::createFromUtf8(runtime, bufferId);
43
- }
44
-
45
- JSI_HOST_FUNCTION(dequeueBuffer) {
46
- auto audioBufferQueueSourceNode =
47
- std::static_pointer_cast<AudioBufferQueueSourceNode>(node_);
48
-
49
- auto bufferId =
50
- args[0].getNumber();
51
-
52
- audioBufferQueueSourceNode->dequeueBuffer(bufferId);
53
-
54
- return jsi::Value::undefined();
55
- }
56
-
57
- JSI_HOST_FUNCTION(clearBuffers) {
58
- auto audioBufferQueueSourceNode =
59
- std::static_pointer_cast<AudioBufferQueueSourceNode>(node_);
60
-
61
- audioBufferQueueSourceNode->clearBuffers();
62
-
63
- return jsi::Value::undefined();
64
- }
65
- };
66
-
67
- } // namespace audioapi
@@ -1,142 +0,0 @@
1
- #pragma once
2
-
3
- #include <audioapi/HostObjects/AudioBufferHostObject.h>
4
- #include <audioapi/core/sources/AudioBufferSourceNode.h>
5
- #include <audioapi/HostObjects/AudioBufferBaseSourceNodeHostObject.h>
6
-
7
- #include <memory>
8
- #include <vector>
9
-
10
- namespace audioapi {
11
- using namespace facebook;
12
-
13
- class AudioBufferSourceNodeHostObject
14
- : public AudioBufferBaseSourceNodeHostObject {
15
- public:
16
- explicit AudioBufferSourceNodeHostObject(
17
- const std::shared_ptr<AudioBufferSourceNode> &node)
18
- : AudioBufferBaseSourceNodeHostObject(node) {
19
- addGetters(
20
- JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, loop),
21
- JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, loopSkip),
22
- JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, buffer),
23
- JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, loopStart),
24
- JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, loopEnd));
25
-
26
- addSetters(
27
- JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, loop),
28
- JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, loopSkip),
29
- JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, loopStart),
30
- JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, loopEnd));
31
-
32
- // start method is overridden in this class
33
- functions_->erase("start");
34
-
35
- addFunctions(
36
- JSI_EXPORT_FUNCTION(AudioBufferSourceNodeHostObject, start),
37
- JSI_EXPORT_FUNCTION(AudioBufferSourceNodeHostObject, setBuffer));
38
- }
39
-
40
- JSI_PROPERTY_GETTER(loop) {
41
- auto audioBufferSourceNode =
42
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
43
- auto loop = audioBufferSourceNode->getLoop();
44
- return {loop};
45
- }
46
-
47
- JSI_PROPERTY_GETTER(loopSkip) {
48
- auto audioBufferSourceNode =
49
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
50
- auto loopSkip = audioBufferSourceNode->getLoopSkip();
51
- return {loopSkip};
52
- }
53
-
54
- JSI_PROPERTY_GETTER(buffer) {
55
- auto audioBufferSourceNode =
56
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
57
- auto buffer = audioBufferSourceNode->getBuffer();
58
-
59
- if (!buffer) {
60
- return jsi::Value::null();
61
- }
62
-
63
- auto bufferHostObject = std::make_shared<AudioBufferHostObject>(buffer);
64
- return jsi::Object::createFromHostObject(runtime, bufferHostObject);
65
- }
66
-
67
- JSI_PROPERTY_GETTER(loopStart) {
68
- auto audioBufferSourceNode =
69
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
70
- auto loopStart = audioBufferSourceNode->getLoopStart();
71
- return {loopStart};
72
- }
73
-
74
- JSI_PROPERTY_GETTER(loopEnd) {
75
- auto audioBufferSourceNode =
76
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
77
- auto loopEnd = audioBufferSourceNode->getLoopEnd();
78
- return {loopEnd};
79
- }
80
-
81
- JSI_PROPERTY_SETTER(loop) {
82
- auto audioBufferSourceNode =
83
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
84
- audioBufferSourceNode->setLoop(value.getBool());
85
- }
86
-
87
- JSI_PROPERTY_SETTER(loopSkip) {
88
- auto audioBufferSourceNode =
89
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
90
- audioBufferSourceNode->setLoopSkip(value.getBool());
91
- }
92
-
93
- JSI_PROPERTY_SETTER(loopStart) {
94
- auto audioBufferSourceNode =
95
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
96
- audioBufferSourceNode->setLoopStart(value.getNumber());
97
- }
98
-
99
- JSI_PROPERTY_SETTER(loopEnd) {
100
- auto audioBufferSourceNode =
101
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
102
- audioBufferSourceNode->setLoopEnd(value.getNumber());
103
- }
104
-
105
- JSI_HOST_FUNCTION(start) {
106
- auto when = args[0].getNumber();
107
- auto offset = args[1].getNumber();
108
-
109
- auto audioBufferSourceNode =
110
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
111
-
112
- if (args[2].isUndefined()) {
113
- audioBufferSourceNode->start(when, offset);
114
-
115
- return jsi::Value::undefined();
116
- }
117
-
118
- auto duration = args[2].getNumber();
119
- audioBufferSourceNode->start(when, offset, duration);
120
-
121
- return jsi::Value::undefined();
122
- }
123
-
124
- JSI_HOST_FUNCTION(setBuffer) {
125
- auto audioBufferSourceNode =
126
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
127
-
128
- if (args[0].isNull()) {
129
- audioBufferSourceNode->setBuffer(std::shared_ptr<AudioBuffer>(nullptr));
130
- return jsi::Value::undefined();
131
- }
132
-
133
- auto bufferHostObject =
134
- args[0].getObject(runtime).asHostObject<AudioBufferHostObject>(runtime);
135
- thisValue.asObject(runtime).setExternalMemoryPressure(runtime,
136
- bufferHostObject->getSizeInBytes() + 16);
137
- audioBufferSourceNode->setBuffer(bufferHostObject->audioBuffer_);
138
- return jsi::Value::undefined();
139
- }
140
- };
141
-
142
- } // namespace audioapi