react-native-audio-api 0.8.3 → 0.9.0

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 (296) 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/java/com/swmansion/audioapi/AudioAPIModule.kt +11 -1
  12. package/android/src/main/java/com/swmansion/audioapi/core/NativeAudioRecorder.kt +24 -0
  13. package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionManager.kt +15 -2
  14. package/common/cpp/audioapi/AudioAPIModuleInstaller.h +53 -18
  15. package/common/cpp/audioapi/HostObjects/AudioContextHostObject.cpp +57 -0
  16. package/common/cpp/audioapi/HostObjects/AudioContextHostObject.h +6 -46
  17. package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.cpp +70 -6
  18. package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.h +10 -66
  19. package/common/cpp/audioapi/HostObjects/AudioParamHostObject.cpp +105 -0
  20. package/common/cpp/audioapi/HostObjects/AudioParamHostObject.h +17 -91
  21. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +362 -6
  22. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +29 -241
  23. package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.cpp +70 -0
  24. package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.h +6 -50
  25. package/common/cpp/audioapi/HostObjects/WorkletNodeHostObject.h +18 -0
  26. package/common/cpp/audioapi/HostObjects/WorkletProcessingNodeHostObject.h +18 -0
  27. package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.cpp +148 -0
  28. package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.h +37 -0
  29. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp +92 -0
  30. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.h +29 -0
  31. package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.cpp +20 -0
  32. package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.h +19 -0
  33. package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.cpp +21 -0
  34. package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.h +21 -0
  35. package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.cpp +41 -0
  36. package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.h +28 -0
  37. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.cpp +69 -0
  38. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +33 -0
  39. package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.cpp +73 -0
  40. package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.h +29 -0
  41. package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.cpp +94 -0
  42. package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.h +46 -0
  43. package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.cpp +60 -0
  44. package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.h +25 -0
  45. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.cpp +152 -0
  46. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.h +37 -0
  47. package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.cpp +52 -0
  48. package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.h +25 -0
  49. package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.cpp +19 -0
  50. package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.h +21 -0
  51. package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.cpp +55 -0
  52. package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.h +27 -0
  53. package/common/cpp/audioapi/HostObjects/{RecorderAdapterNodeHostObject.h → sources/RecorderAdapterNodeHostObject.h} +1 -2
  54. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.cpp +22 -0
  55. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.h +28 -0
  56. package/common/cpp/audioapi/HostObjects/sources/WorkletSourceNodeHostObject.h +18 -0
  57. package/common/cpp/audioapi/core/AudioContext.cpp +3 -2
  58. package/common/cpp/audioapi/core/AudioContext.h +2 -1
  59. package/common/cpp/audioapi/core/AudioNode.cpp +3 -3
  60. package/common/cpp/audioapi/core/AudioNode.h +2 -2
  61. package/common/cpp/audioapi/core/AudioParam.cpp +2 -2
  62. package/common/cpp/audioapi/core/AudioParam.h +1 -1
  63. package/common/cpp/audioapi/core/BaseAudioContext.cpp +47 -3
  64. package/common/cpp/audioapi/core/BaseAudioContext.h +13 -4
  65. package/common/cpp/audioapi/core/OfflineAudioContext.cpp +4 -3
  66. package/common/cpp/audioapi/core/OfflineAudioContext.h +2 -1
  67. package/common/cpp/audioapi/core/analysis/AnalyserNode.cpp +3 -1
  68. package/common/cpp/audioapi/core/analysis/AnalyserNode.h +1 -1
  69. package/common/cpp/audioapi/core/destinations/AudioDestinationNode.h +1 -1
  70. package/common/cpp/audioapi/core/effects/BiquadFilterNode.cpp +3 -1
  71. package/common/cpp/audioapi/core/effects/BiquadFilterNode.h +1 -1
  72. package/common/cpp/audioapi/core/effects/GainNode.cpp +3 -1
  73. package/common/cpp/audioapi/core/effects/GainNode.h +1 -1
  74. package/common/cpp/audioapi/core/effects/PeriodicWave.cpp +1 -1
  75. package/common/cpp/audioapi/core/effects/StereoPannerNode.cpp +18 -13
  76. package/common/cpp/audioapi/core/effects/StereoPannerNode.h +1 -1
  77. package/common/cpp/audioapi/core/effects/WorkletNode.cpp +89 -0
  78. package/common/cpp/audioapi/core/effects/WorkletNode.h +65 -0
  79. package/common/cpp/audioapi/core/effects/WorkletProcessingNode.cpp +91 -0
  80. package/common/cpp/audioapi/core/effects/WorkletProcessingNode.h +52 -0
  81. package/common/cpp/audioapi/core/inputs/AudioRecorder.cpp +1 -1
  82. package/common/cpp/audioapi/core/inputs/AudioRecorder.h +2 -2
  83. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +47 -10
  84. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +18 -3
  85. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +98 -14
  86. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +9 -3
  87. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +37 -44
  88. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +7 -9
  89. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +1 -6
  90. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +1 -1
  91. package/common/cpp/audioapi/core/sources/ConstantSourceNode.cpp +53 -0
  92. package/common/cpp/audioapi/core/sources/ConstantSourceNode.h +26 -0
  93. package/common/cpp/audioapi/core/sources/OscillatorNode.cpp +7 -2
  94. package/common/cpp/audioapi/core/sources/OscillatorNode.h +1 -1
  95. package/common/cpp/audioapi/core/sources/RecorderAdapterNode.cpp +3 -1
  96. package/common/cpp/audioapi/core/sources/RecorderAdapterNode.h +1 -1
  97. package/common/cpp/audioapi/core/sources/StreamerNode.cpp +9 -1
  98. package/common/cpp/audioapi/core/sources/StreamerNode.h +1 -9
  99. package/common/cpp/audioapi/core/sources/WorkletSourceNode.cpp +84 -0
  100. package/common/cpp/audioapi/core/sources/WorkletSourceNode.h +47 -0
  101. package/common/cpp/audioapi/core/{AudioParamEventQueue.cpp → utils/AudioParamEventQueue.cpp} +13 -7
  102. package/common/cpp/audioapi/core/{Constants.h → utils/Constants.h} +5 -0
  103. package/common/cpp/audioapi/core/utils/worklets/SafeIncludes.h +52 -0
  104. package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.cpp +9 -0
  105. package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.h +73 -0
  106. package/common/cpp/audioapi/dsp/Windows.cpp +1 -1
  107. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.cpp +1 -1
  108. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +2 -1
  109. package/common/cpp/audioapi/jsi/AudioArrayBuffer.h +14 -1
  110. package/common/cpp/audioapi/jsi/JsiHostObject.h +6 -12
  111. package/common/cpp/audioapi/jsi/JsiPromise.cpp +49 -0
  112. package/common/cpp/audioapi/jsi/JsiPromise.h +29 -1
  113. package/common/cpp/audioapi/utils/AudioBus.cpp +1 -1
  114. package/common/cpp/audioapi/utils/ThreadPool.hpp +104 -0
  115. package/common/cpp/test/AudioParamTest.cpp +204 -0
  116. package/common/cpp/test/CMakeLists.txt +12 -3
  117. package/common/cpp/test/GainTest.cpp +11 -10
  118. package/common/cpp/test/OscillatorTest.cpp +2 -1
  119. package/common/cpp/test/StereoPannerTest.cpp +129 -0
  120. package/ios/audioapi/ios/AudioAPIModule.mm +32 -5
  121. package/ios/audioapi/ios/core/IOSAudioPlayer.mm +1 -1
  122. package/ios/audioapi/ios/core/IOSAudioRecorder.mm +1 -1
  123. package/lib/commonjs/api.js +36 -2
  124. package/lib/commonjs/api.js.map +1 -1
  125. package/lib/commonjs/api.web.js +8 -0
  126. package/lib/commonjs/api.web.js.map +1 -1
  127. package/lib/commonjs/core/AudioBufferBaseSourceNode.js +7 -7
  128. package/lib/commonjs/core/AudioBufferBaseSourceNode.js.map +1 -1
  129. package/lib/commonjs/core/AudioBufferQueueSourceNode.js +1 -6
  130. package/lib/commonjs/core/AudioBufferQueueSourceNode.js.map +1 -1
  131. package/lib/commonjs/core/AudioBufferSourceNode.js +15 -0
  132. package/lib/commonjs/core/AudioBufferSourceNode.js.map +1 -1
  133. package/lib/commonjs/core/AudioContext.js +10 -1
  134. package/lib/commonjs/core/AudioContext.js.map +1 -1
  135. package/lib/commonjs/core/AudioScheduledSourceNode.js +4 -4
  136. package/lib/commonjs/core/AudioScheduledSourceNode.js.map +1 -1
  137. package/lib/commonjs/core/BaseAudioContext.js +66 -11
  138. package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
  139. package/lib/commonjs/core/ConstantSourceNode.js +17 -0
  140. package/lib/commonjs/core/ConstantSourceNode.js.map +1 -0
  141. package/lib/commonjs/core/OfflineAudioContext.js +11 -2
  142. package/lib/commonjs/core/OfflineAudioContext.js.map +1 -1
  143. package/lib/commonjs/core/OscillatorNode.js +6 -0
  144. package/lib/commonjs/core/OscillatorNode.js.map +1 -1
  145. package/lib/commonjs/core/WorkletNode.js +11 -0
  146. package/lib/commonjs/core/WorkletNode.js.map +1 -0
  147. package/lib/commonjs/core/WorkletProcessingNode.js +11 -0
  148. package/lib/commonjs/core/WorkletProcessingNode.js.map +1 -0
  149. package/lib/commonjs/core/WorkletSourceNode.js +11 -0
  150. package/lib/commonjs/core/WorkletSourceNode.js.map +1 -0
  151. package/lib/commonjs/hooks/{useSytemVolume.js → useSystemVolume.js} +1 -1
  152. package/lib/commonjs/hooks/useSystemVolume.js.map +1 -0
  153. package/lib/commonjs/utils/index.js +9 -0
  154. package/lib/commonjs/utils/index.js.map +1 -1
  155. package/lib/commonjs/web-core/AudioContext.js +4 -0
  156. package/lib/commonjs/web-core/AudioContext.js.map +1 -1
  157. package/lib/commonjs/web-core/AudioScheduledSourceNode.js +1 -1
  158. package/lib/commonjs/web-core/AudioScheduledSourceNode.js.map +1 -1
  159. package/lib/commonjs/web-core/ConstantSourceNode.js +17 -0
  160. package/lib/commonjs/web-core/ConstantSourceNode.js.map +1 -0
  161. package/lib/commonjs/web-core/OfflineAudioContext.js +4 -0
  162. package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
  163. package/lib/module/api.js +6 -2
  164. package/lib/module/api.js.map +1 -1
  165. package/lib/module/api.web.js +1 -0
  166. package/lib/module/api.web.js.map +1 -1
  167. package/lib/module/core/AudioBufferBaseSourceNode.js +7 -7
  168. package/lib/module/core/AudioBufferBaseSourceNode.js.map +1 -1
  169. package/lib/module/core/AudioBufferQueueSourceNode.js +1 -6
  170. package/lib/module/core/AudioBufferQueueSourceNode.js.map +1 -1
  171. package/lib/module/core/AudioBufferSourceNode.js +15 -0
  172. package/lib/module/core/AudioBufferSourceNode.js.map +1 -1
  173. package/lib/module/core/AudioContext.js +10 -1
  174. package/lib/module/core/AudioContext.js.map +1 -1
  175. package/lib/module/core/AudioScheduledSourceNode.js +4 -4
  176. package/lib/module/core/AudioScheduledSourceNode.js.map +1 -1
  177. package/lib/module/core/BaseAudioContext.js +66 -11
  178. package/lib/module/core/BaseAudioContext.js.map +1 -1
  179. package/lib/module/core/ConstantSourceNode.js +11 -0
  180. package/lib/module/core/ConstantSourceNode.js.map +1 -0
  181. package/lib/module/core/OfflineAudioContext.js +11 -2
  182. package/lib/module/core/OfflineAudioContext.js.map +1 -1
  183. package/lib/module/core/OscillatorNode.js +6 -0
  184. package/lib/module/core/OscillatorNode.js.map +1 -1
  185. package/lib/module/core/WorkletNode.js +5 -0
  186. package/lib/module/core/WorkletNode.js.map +1 -0
  187. package/lib/module/core/WorkletProcessingNode.js +5 -0
  188. package/lib/module/core/WorkletProcessingNode.js.map +1 -0
  189. package/lib/module/core/WorkletSourceNode.js +5 -0
  190. package/lib/module/core/WorkletSourceNode.js.map +1 -0
  191. package/lib/module/hooks/{useSytemVolume.js → useSystemVolume.js} +1 -1
  192. package/lib/module/hooks/useSystemVolume.js.map +1 -0
  193. package/lib/module/utils/index.js +8 -0
  194. package/lib/module/utils/index.js.map +1 -1
  195. package/lib/module/web-core/AudioContext.js +4 -0
  196. package/lib/module/web-core/AudioContext.js.map +1 -1
  197. package/lib/module/web-core/AudioScheduledSourceNode.js +1 -1
  198. package/lib/module/web-core/AudioScheduledSourceNode.js.map +1 -1
  199. package/lib/module/web-core/ConstantSourceNode.js +11 -0
  200. package/lib/module/web-core/ConstantSourceNode.js.map +1 -0
  201. package/lib/module/web-core/OfflineAudioContext.js +4 -0
  202. package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
  203. package/lib/typescript/api.d.ts +8 -4
  204. package/lib/typescript/api.d.ts.map +1 -1
  205. package/lib/typescript/api.web.d.ts +1 -0
  206. package/lib/typescript/api.web.d.ts.map +1 -1
  207. package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts +2 -2
  208. package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts.map +1 -1
  209. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts +1 -1
  210. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts.map +1 -1
  211. package/lib/typescript/core/AudioBufferSourceNode.d.ts +4 -0
  212. package/lib/typescript/core/AudioBufferSourceNode.d.ts.map +1 -1
  213. package/lib/typescript/core/AudioContext.d.ts +1 -0
  214. package/lib/typescript/core/AudioContext.d.ts.map +1 -1
  215. package/lib/typescript/core/AudioScheduledSourceNode.d.ts +1 -1
  216. package/lib/typescript/core/BaseAudioContext.d.ts +19 -11
  217. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
  218. package/lib/typescript/core/ConstantSourceNode.d.ts +9 -0
  219. package/lib/typescript/core/ConstantSourceNode.d.ts.map +1 -0
  220. package/lib/typescript/core/OfflineAudioContext.d.ts +1 -0
  221. package/lib/typescript/core/OfflineAudioContext.d.ts.map +1 -1
  222. package/lib/typescript/core/OscillatorNode.d.ts +3 -0
  223. package/lib/typescript/core/OscillatorNode.d.ts.map +1 -1
  224. package/lib/typescript/core/WorkletNode.d.ts +4 -0
  225. package/lib/typescript/core/WorkletNode.d.ts.map +1 -0
  226. package/lib/typescript/core/WorkletProcessingNode.d.ts +4 -0
  227. package/lib/typescript/core/WorkletProcessingNode.d.ts.map +1 -0
  228. package/lib/typescript/core/WorkletSourceNode.d.ts +4 -0
  229. package/lib/typescript/core/WorkletSourceNode.d.ts.map +1 -0
  230. package/lib/typescript/events/types.d.ts +2 -0
  231. package/lib/typescript/events/types.d.ts.map +1 -1
  232. package/lib/typescript/hooks/{useSytemVolume.d.ts → useSystemVolume.d.ts} +1 -1
  233. package/lib/typescript/hooks/useSystemVolume.d.ts.map +1 -0
  234. package/lib/typescript/interfaces.d.ts +21 -3
  235. package/lib/typescript/interfaces.d.ts.map +1 -1
  236. package/lib/typescript/types.d.ts +2 -1
  237. package/lib/typescript/types.d.ts.map +1 -1
  238. package/lib/typescript/utils/index.d.ts +8 -0
  239. package/lib/typescript/utils/index.d.ts.map +1 -1
  240. package/lib/typescript/web-core/AudioBufferSourceNode.d.ts +1 -1
  241. package/lib/typescript/web-core/AudioContext.d.ts +4 -2
  242. package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
  243. package/lib/typescript/web-core/AudioScheduledSourceNode.d.ts +1 -1
  244. package/lib/typescript/web-core/BaseAudioContext.d.ts +2 -0
  245. package/lib/typescript/web-core/BaseAudioContext.d.ts.map +1 -1
  246. package/lib/typescript/web-core/ConstantSourceNode.d.ts +8 -0
  247. package/lib/typescript/web-core/ConstantSourceNode.d.ts.map +1 -0
  248. package/lib/typescript/web-core/OfflineAudioContext.d.ts +4 -2
  249. package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
  250. package/package.json +3 -2
  251. package/src/api.ts +12 -3
  252. package/src/api.web.ts +1 -0
  253. package/src/core/AudioBufferBaseSourceNode.ts +9 -9
  254. package/src/core/AudioBufferQueueSourceNode.ts +1 -9
  255. package/src/core/AudioBufferSourceNode.ts +28 -0
  256. package/src/core/AudioContext.ts +12 -1
  257. package/src/core/AudioScheduledSourceNode.ts +5 -5
  258. package/src/core/BaseAudioContext.ts +149 -13
  259. package/src/core/ConstantSourceNode.ts +13 -0
  260. package/src/core/OfflineAudioContext.ts +18 -2
  261. package/src/core/OscillatorNode.ts +11 -0
  262. package/src/core/WorkletNode.ts +3 -0
  263. package/src/core/WorkletProcessingNode.ts +3 -0
  264. package/src/core/WorkletSourceNode.ts +3 -0
  265. package/src/events/types.ts +2 -0
  266. package/src/interfaces.ts +59 -5
  267. package/src/types.ts +3 -1
  268. package/src/utils/index.ts +21 -0
  269. package/src/web-core/AudioBufferSourceNode.tsx +1 -1
  270. package/src/web-core/AudioContext.tsx +7 -2
  271. package/src/web-core/AudioScheduledSourceNode.tsx +1 -1
  272. package/src/web-core/BaseAudioContext.tsx +2 -0
  273. package/src/web-core/ConstantSourceNode.tsx +12 -0
  274. package/src/web-core/OfflineAudioContext.tsx +7 -2
  275. package/common/cpp/audioapi/HostObjects/AnalyserNodeHostObject.h +0 -149
  276. package/common/cpp/audioapi/HostObjects/AudioBufferBaseSourceNodeHostObject.h +0 -76
  277. package/common/cpp/audioapi/HostObjects/AudioBufferHostObject.h +0 -120
  278. package/common/cpp/audioapi/HostObjects/AudioBufferQueueSourceNodeHostObject.h +0 -67
  279. package/common/cpp/audioapi/HostObjects/AudioBufferSourceNodeHostObject.h +0 -142
  280. package/common/cpp/audioapi/HostObjects/AudioRecorderHostObject.h +0 -86
  281. package/common/cpp/audioapi/HostObjects/AudioScheduledSourceNodeHostObject.h +0 -56
  282. package/common/cpp/audioapi/HostObjects/BiquadFilterNodeHostObject.h +0 -89
  283. package/common/cpp/audioapi/HostObjects/GainNodeHostObject.h +0 -27
  284. package/common/cpp/audioapi/HostObjects/OscillatorNodeHostObject.h +0 -65
  285. package/common/cpp/audioapi/HostObjects/StereoPannerNodeHostObject.h +0 -29
  286. package/common/cpp/audioapi/HostObjects/StreamerNodeHostObject.h +0 -30
  287. package/common/cpp/audioapi/events/AudioEventHandlerRegistryHostObject.h +0 -48
  288. package/ios/audioapi/ios/events/IOSAudioEventHandlerRegistry.h +0 -7
  289. package/ios/audioapi/ios/events/IOSAudioEventHandlerRegistry.mm +0 -12
  290. package/lib/commonjs/hooks/useSytemVolume.js.map +0 -1
  291. package/lib/module/hooks/useSytemVolume.js.map +0 -1
  292. package/lib/typescript/hooks/useSytemVolume.d.ts.map +0 -1
  293. /package/common/cpp/audioapi/HostObjects/{AudioDestinationNodeHostObject.h → destinations/AudioDestinationNodeHostObject.h} +0 -0
  294. /package/common/cpp/audioapi/HostObjects/{PeriodicWaveHostObject.h → effects/PeriodicWaveHostObject.h} +0 -0
  295. /package/common/cpp/audioapi/core/{AudioParamEventQueue.h → utils/AudioParamEventQueue.h} +0 -0
  296. /package/src/hooks/{useSytemVolume.ts → useSystemVolume.ts} +0 -0
@@ -0,0 +1,69 @@
1
+ #include <audioapi/HostObjects/inputs/AudioRecorderHostObject.h>
2
+
3
+ #include <audioapi/HostObjects/sources/AudioBufferHostObject.h>
4
+ #include <audioapi/HostObjects/sources/RecorderAdapterNodeHostObject.h>
5
+ #include <audioapi/core/inputs/AudioRecorder.h>
6
+ #include <audioapi/core/sources/AudioBuffer.h>
7
+ #include <audioapi/events/AudioEventHandlerRegistry.h>
8
+ #ifdef ANDROID
9
+ #include <audioapi/android/core/AndroidAudioRecorder.h>
10
+ #else
11
+ #include <audioapi/ios/core/IOSAudioRecorder.h>
12
+ #endif
13
+
14
+ namespace audioapi {
15
+
16
+ AudioRecorderHostObject::AudioRecorderHostObject(
17
+ const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
18
+ float sampleRate,
19
+ int bufferLength) {
20
+ #ifdef ANDROID
21
+ audioRecorder_ = std::make_shared<AndroidAudioRecorder>(
22
+ sampleRate, bufferLength, audioEventHandlerRegistry);
23
+ #else
24
+ audioRecorder_ = std::make_shared<IOSAudioRecorder>(
25
+ sampleRate, bufferLength, audioEventHandlerRegistry);
26
+ #endif
27
+
28
+ addSetters(JSI_EXPORT_PROPERTY_SETTER(AudioRecorderHostObject, onAudioReady));
29
+
30
+ addFunctions(
31
+ JSI_EXPORT_FUNCTION(AudioRecorderHostObject, start),
32
+ JSI_EXPORT_FUNCTION(AudioRecorderHostObject, stop),
33
+ JSI_EXPORT_FUNCTION(AudioRecorderHostObject, connect),
34
+ JSI_EXPORT_FUNCTION(AudioRecorderHostObject, disconnect));
35
+ }
36
+
37
+ JSI_PROPERTY_SETTER_IMPL(AudioRecorderHostObject, onAudioReady) {
38
+ audioRecorder_->setOnAudioReadyCallbackId(
39
+ std::stoull(value.getString(runtime).utf8(runtime)));
40
+ }
41
+
42
+ JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, connect) {
43
+ auto adapterNodeHostObject =
44
+ args[0].getObject(runtime).getHostObject<RecorderAdapterNodeHostObject>(
45
+ runtime);
46
+ audioRecorder_->connect(
47
+ std::static_pointer_cast<RecorderAdapterNode>(
48
+ adapterNodeHostObject->node_));
49
+ return jsi::Value::undefined();
50
+ }
51
+
52
+ JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, disconnect) {
53
+ audioRecorder_->disconnect();
54
+ return jsi::Value::undefined();
55
+ }
56
+
57
+ JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, start) {
58
+ audioRecorder_->start();
59
+
60
+ return jsi::Value::undefined();
61
+ }
62
+
63
+ JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, stop) {
64
+ audioRecorder_->stop();
65
+
66
+ return jsi::Value::undefined();
67
+ }
68
+
69
+ } // namespace audioapi
@@ -0,0 +1,33 @@
1
+ #pragma once
2
+
3
+ #include <audioapi/jsi/JsiHostObject.h>
4
+
5
+ #include <memory>
6
+ #include <utility>
7
+ #include <vector>
8
+ #include <cstdio>
9
+
10
+ namespace audioapi {
11
+ using namespace facebook;
12
+
13
+ class AudioRecorder;
14
+ class AudioEventHandlerRegistry;
15
+
16
+ class AudioRecorderHostObject : public JsiHostObject {
17
+ public:
18
+ explicit AudioRecorderHostObject(
19
+ const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
20
+ float sampleRate,
21
+ int bufferLength);
22
+
23
+ JSI_PROPERTY_SETTER_DECL(onAudioReady);
24
+
25
+ JSI_HOST_FUNCTION_DECL(connect);
26
+ JSI_HOST_FUNCTION_DECL(disconnect);
27
+ JSI_HOST_FUNCTION_DECL(start);
28
+ JSI_HOST_FUNCTION_DECL(stop);
29
+
30
+ private:
31
+ std::shared_ptr<AudioRecorder> audioRecorder_;
32
+ };
33
+ } // namespace audioapi
@@ -0,0 +1,73 @@
1
+ #include <audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.h>
2
+
3
+ #include <audioapi/HostObjects/AudioParamHostObject.h>
4
+ #include <audioapi/core/sources/AudioBufferBaseSourceNode.h>
5
+
6
+ namespace audioapi {
7
+
8
+ AudioBufferBaseSourceNodeHostObject::AudioBufferBaseSourceNodeHostObject(
9
+ const std::shared_ptr<AudioBufferBaseSourceNode> &node)
10
+ : AudioScheduledSourceNodeHostObject(node) {
11
+ addGetters(
12
+ JSI_EXPORT_PROPERTY_GETTER(AudioBufferBaseSourceNodeHostObject, detune),
13
+ JSI_EXPORT_PROPERTY_GETTER(
14
+ AudioBufferBaseSourceNodeHostObject, playbackRate),
15
+ JSI_EXPORT_PROPERTY_GETTER(
16
+ AudioBufferBaseSourceNodeHostObject, onPositionChangedInterval));
17
+
18
+ addSetters(
19
+ JSI_EXPORT_PROPERTY_SETTER(
20
+ AudioBufferBaseSourceNodeHostObject, onPositionChanged),
21
+ JSI_EXPORT_PROPERTY_SETTER(
22
+ AudioBufferBaseSourceNodeHostObject, onPositionChangedInterval));
23
+ }
24
+
25
+ AudioBufferBaseSourceNodeHostObject::~AudioBufferBaseSourceNodeHostObject() {
26
+ auto sourceNode = std::static_pointer_cast<AudioBufferBaseSourceNode>(node_);
27
+
28
+ // When JSI object is garbage collected (together with the eventual callback),
29
+ // underlying source node might still be active and try to call the
30
+ // non-existing callback.
31
+ sourceNode->clearOnPositionChangedCallback();
32
+ }
33
+
34
+ JSI_PROPERTY_GETTER_IMPL(AudioBufferBaseSourceNodeHostObject, detune) {
35
+ auto sourceNode = std::static_pointer_cast<AudioBufferBaseSourceNode>(node_);
36
+ auto detune = sourceNode->getDetuneParam();
37
+ auto detuneHostObject = std::make_shared<AudioParamHostObject>(detune);
38
+ return jsi::Object::createFromHostObject(runtime, detuneHostObject);
39
+ }
40
+
41
+ JSI_PROPERTY_GETTER_IMPL(AudioBufferBaseSourceNodeHostObject, playbackRate) {
42
+ auto sourceNode = std::static_pointer_cast<AudioBufferBaseSourceNode>(node_);
43
+ auto playbackRate = sourceNode->getPlaybackRateParam();
44
+ auto playbackRateHostObject =
45
+ std::make_shared<AudioParamHostObject>(playbackRate);
46
+ return jsi::Object::createFromHostObject(runtime, playbackRateHostObject);
47
+ }
48
+
49
+ JSI_PROPERTY_GETTER_IMPL(
50
+ AudioBufferBaseSourceNodeHostObject,
51
+ onPositionChangedInterval) {
52
+ auto sourceNode = std::static_pointer_cast<AudioBufferBaseSourceNode>(node_);
53
+ return {sourceNode->getOnPositionChangedInterval()};
54
+ }
55
+
56
+ JSI_PROPERTY_SETTER_IMPL(
57
+ AudioBufferBaseSourceNodeHostObject,
58
+ onPositionChanged) {
59
+ auto sourceNode = std::static_pointer_cast<AudioBufferBaseSourceNode>(node_);
60
+
61
+ sourceNode->setOnPositionChangedCallbackId(
62
+ std::stoull(value.getString(runtime).utf8(runtime)));
63
+ }
64
+
65
+ JSI_PROPERTY_SETTER_IMPL(
66
+ AudioBufferBaseSourceNodeHostObject,
67
+ onPositionChangedInterval) {
68
+ auto sourceNode = std::static_pointer_cast<AudioBufferBaseSourceNode>(node_);
69
+
70
+ sourceNode->setOnPositionChangedInterval(static_cast<int>(value.getNumber()));
71
+ }
72
+
73
+ } // namespace audioapi
@@ -0,0 +1,29 @@
1
+ #pragma once
2
+
3
+ #include <audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.h>
4
+
5
+ #include <memory>
6
+ #include <vector>
7
+
8
+ namespace audioapi {
9
+ using namespace facebook;
10
+
11
+ class AudioBufferBaseSourceNode;
12
+
13
+ class AudioBufferBaseSourceNodeHostObject
14
+ : public AudioScheduledSourceNodeHostObject {
15
+ public:
16
+ explicit AudioBufferBaseSourceNodeHostObject(
17
+ const std::shared_ptr<AudioBufferBaseSourceNode> &node);
18
+
19
+ ~AudioBufferBaseSourceNodeHostObject() override;
20
+
21
+ JSI_PROPERTY_GETTER_DECL(detune);
22
+ JSI_PROPERTY_GETTER_DECL(playbackRate);
23
+ JSI_PROPERTY_GETTER_DECL(onPositionChangedInterval);
24
+
25
+ JSI_PROPERTY_SETTER_DECL(onPositionChanged);
26
+ JSI_PROPERTY_SETTER_DECL(onPositionChangedInterval);
27
+ };
28
+
29
+ } // namespace audioapi
@@ -0,0 +1,94 @@
1
+ #include <audioapi/HostObjects/sources/AudioBufferHostObject.h>
2
+
3
+ #include <audioapi/jsi/AudioArrayBuffer.h>
4
+
5
+ namespace audioapi {
6
+
7
+ AudioBufferHostObject::AudioBufferHostObject(
8
+ const std::shared_ptr<AudioBuffer> &audioBuffer)
9
+ : audioBuffer_(audioBuffer) {
10
+ addGetters(
11
+ JSI_EXPORT_PROPERTY_GETTER(AudioBufferHostObject, sampleRate),
12
+ JSI_EXPORT_PROPERTY_GETTER(AudioBufferHostObject, length),
13
+ JSI_EXPORT_PROPERTY_GETTER(AudioBufferHostObject, duration),
14
+ JSI_EXPORT_PROPERTY_GETTER(AudioBufferHostObject, numberOfChannels));
15
+
16
+ addFunctions(
17
+ JSI_EXPORT_FUNCTION(AudioBufferHostObject, getChannelData),
18
+ JSI_EXPORT_FUNCTION(AudioBufferHostObject, copyFromChannel),
19
+ JSI_EXPORT_FUNCTION(AudioBufferHostObject, copyToChannel));
20
+ }
21
+
22
+ AudioBufferHostObject::AudioBufferHostObject(
23
+ AudioBufferHostObject &&other) noexcept
24
+ : JsiHostObject(std::move(other)),
25
+ audioBuffer_(std::move(other.audioBuffer_)) {}
26
+
27
+ JSI_PROPERTY_GETTER_IMPL(AudioBufferHostObject, sampleRate) {
28
+ return {audioBuffer_->getSampleRate()};
29
+ }
30
+
31
+ JSI_PROPERTY_GETTER_IMPL(AudioBufferHostObject, length) {
32
+ return {static_cast<double>(audioBuffer_->getLength())};
33
+ }
34
+
35
+ JSI_PROPERTY_GETTER_IMPL(AudioBufferHostObject, duration) {
36
+ return {audioBuffer_->getDuration()};
37
+ }
38
+
39
+ JSI_PROPERTY_GETTER_IMPL(AudioBufferHostObject, numberOfChannels) {
40
+ return {audioBuffer_->getNumberOfChannels()};
41
+ }
42
+
43
+ JSI_HOST_FUNCTION_IMPL(AudioBufferHostObject, getChannelData) {
44
+ auto channel = static_cast<int>(args[0].getNumber());
45
+ auto channelData =
46
+ reinterpret_cast<uint8_t *>(audioBuffer_->getChannelData(channel));
47
+ auto length = static_cast<int>(audioBuffer_->getLength());
48
+ auto size = static_cast<int>(length * sizeof(float));
49
+
50
+ // reading or writing from this ArrayBuffer could cause a crash
51
+ // if underlying channelData is deallocated
52
+ auto audioArrayBuffer = std::make_shared<AudioArrayBuffer>(channelData, size);
53
+ auto arrayBuffer = jsi::ArrayBuffer(runtime, audioArrayBuffer);
54
+
55
+ auto float32ArrayCtor =
56
+ runtime.global().getPropertyAsFunction(runtime, "Float32Array");
57
+ auto float32Array = float32ArrayCtor.callAsConstructor(runtime, arrayBuffer)
58
+ .getObject(runtime);
59
+
60
+ return float32Array;
61
+ }
62
+
63
+ JSI_HOST_FUNCTION_IMPL(AudioBufferHostObject, copyFromChannel) {
64
+ auto arrayBuffer = args[0]
65
+ .getObject(runtime)
66
+ .getPropertyAsObject(runtime, "buffer")
67
+ .getArrayBuffer(runtime);
68
+ auto destination = reinterpret_cast<float *>(arrayBuffer.data(runtime));
69
+ auto length = static_cast<int>(arrayBuffer.size(runtime));
70
+ auto channelNumber = static_cast<int>(args[1].getNumber());
71
+ auto startInChannel = static_cast<size_t>(args[2].getNumber());
72
+
73
+ audioBuffer_->copyFromChannel(
74
+ destination, length, channelNumber, startInChannel);
75
+
76
+ return jsi::Value::undefined();
77
+ }
78
+
79
+ JSI_HOST_FUNCTION_IMPL(AudioBufferHostObject, copyToChannel) {
80
+ auto arrayBuffer = args[0]
81
+ .getObject(runtime)
82
+ .getPropertyAsObject(runtime, "buffer")
83
+ .getArrayBuffer(runtime);
84
+ auto source = reinterpret_cast<float *>(arrayBuffer.data(runtime));
85
+ auto length = static_cast<int>(arrayBuffer.size(runtime));
86
+ auto channelNumber = static_cast<int>(args[1].getNumber());
87
+ auto startInChannel = static_cast<size_t>(args[2].getNumber());
88
+
89
+ audioBuffer_->copyToChannel(source, length, channelNumber, startInChannel);
90
+
91
+ return jsi::Value::undefined();
92
+ }
93
+
94
+ } // namespace audioapi
@@ -0,0 +1,46 @@
1
+ #pragma once
2
+
3
+ #include <audioapi/jsi/JsiHostObject.h>
4
+ #include <audioapi/core/sources/AudioBuffer.h>
5
+
6
+ #include <jsi/jsi.h>
7
+ #include <cstddef>
8
+ #include <memory>
9
+ #include <utility>
10
+ #include <vector>
11
+
12
+ namespace audioapi {
13
+ using namespace facebook;
14
+
15
+ class AudioBufferHostObject : public JsiHostObject {
16
+ public:
17
+ std::shared_ptr<AudioBuffer> audioBuffer_;
18
+
19
+ explicit AudioBufferHostObject(
20
+ const std::shared_ptr<AudioBuffer> &audioBuffer);
21
+ AudioBufferHostObject(const AudioBufferHostObject &) = delete;
22
+ AudioBufferHostObject &operator=(const AudioBufferHostObject &) = delete;
23
+ AudioBufferHostObject(AudioBufferHostObject &&other) noexcept;
24
+ AudioBufferHostObject &operator=(AudioBufferHostObject &&other) noexcept {
25
+ if (this != &other) {
26
+ JsiHostObject::operator=(std::move(other));
27
+ audioBuffer_ = std::move(other.audioBuffer_);
28
+ }
29
+ return *this;
30
+ }
31
+
32
+ [[nodiscard]] inline size_t getSizeInBytes() const {
33
+ return audioBuffer_->getLength() * audioBuffer_->getNumberOfChannels() *
34
+ sizeof(float);
35
+ }
36
+
37
+ JSI_PROPERTY_GETTER_DECL(sampleRate);
38
+ JSI_PROPERTY_GETTER_DECL(length);
39
+ JSI_PROPERTY_GETTER_DECL(duration);
40
+ JSI_PROPERTY_GETTER_DECL(numberOfChannels);
41
+
42
+ JSI_HOST_FUNCTION_DECL(getChannelData);
43
+ JSI_HOST_FUNCTION_DECL(copyFromChannel);
44
+ JSI_HOST_FUNCTION_DECL(copyToChannel);
45
+ };
46
+ } // namespace audioapi
@@ -0,0 +1,60 @@
1
+ #include <audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.h>
2
+
3
+ #include <audioapi/HostObjects/sources/AudioBufferHostObject.h>
4
+ #include <audioapi/core/sources/AudioBufferQueueSourceNode.h>
5
+
6
+ namespace audioapi {
7
+
8
+ AudioBufferQueueSourceNodeHostObject::AudioBufferQueueSourceNodeHostObject(
9
+ const std::shared_ptr<AudioBufferQueueSourceNode> &node)
10
+ : AudioBufferBaseSourceNodeHostObject(node) {
11
+ addFunctions(
12
+ JSI_EXPORT_FUNCTION(AudioBufferQueueSourceNodeHostObject, enqueueBuffer),
13
+ JSI_EXPORT_FUNCTION(AudioBufferQueueSourceNodeHostObject, dequeueBuffer),
14
+ JSI_EXPORT_FUNCTION(AudioBufferQueueSourceNodeHostObject, clearBuffers),
15
+ JSI_EXPORT_FUNCTION(AudioBufferQueueSourceNodeHostObject, pause));
16
+ }
17
+
18
+ JSI_HOST_FUNCTION_IMPL(AudioBufferQueueSourceNodeHostObject, pause) {
19
+ auto audioBufferQueueSourceNode =
20
+ std::static_pointer_cast<AudioBufferQueueSourceNode>(node_);
21
+
22
+ audioBufferQueueSourceNode->pause();
23
+
24
+ return jsi::Value::undefined();
25
+ }
26
+
27
+ JSI_HOST_FUNCTION_IMPL(AudioBufferQueueSourceNodeHostObject, enqueueBuffer) {
28
+ auto audioBufferQueueSourceNode =
29
+ std::static_pointer_cast<AudioBufferQueueSourceNode>(node_);
30
+
31
+ auto audioBufferHostObject =
32
+ args[0].getObject(runtime).asHostObject<AudioBufferHostObject>(runtime);
33
+
34
+ auto bufferId = audioBufferQueueSourceNode->enqueueBuffer(
35
+ audioBufferHostObject->audioBuffer_);
36
+
37
+ return jsi::String::createFromUtf8(runtime, bufferId);
38
+ }
39
+
40
+ JSI_HOST_FUNCTION_IMPL(AudioBufferQueueSourceNodeHostObject, dequeueBuffer) {
41
+ auto audioBufferQueueSourceNode =
42
+ std::static_pointer_cast<AudioBufferQueueSourceNode>(node_);
43
+
44
+ auto bufferId = args[0].getNumber();
45
+
46
+ audioBufferQueueSourceNode->dequeueBuffer(bufferId);
47
+
48
+ return jsi::Value::undefined();
49
+ }
50
+
51
+ JSI_HOST_FUNCTION_IMPL(AudioBufferQueueSourceNodeHostObject, clearBuffers) {
52
+ auto audioBufferQueueSourceNode =
53
+ std::static_pointer_cast<AudioBufferQueueSourceNode>(node_);
54
+
55
+ audioBufferQueueSourceNode->clearBuffers();
56
+
57
+ return jsi::Value::undefined();
58
+ }
59
+
60
+ } // namespace audioapi
@@ -0,0 +1,25 @@
1
+ #pragma once
2
+
3
+ #include <audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.h>
4
+
5
+ #include <memory>
6
+ #include <vector>
7
+
8
+ namespace audioapi {
9
+ using namespace facebook;
10
+
11
+ class AudioBufferQueueSourceNode;
12
+
13
+ class AudioBufferQueueSourceNodeHostObject
14
+ : public AudioBufferBaseSourceNodeHostObject {
15
+ public:
16
+ explicit AudioBufferQueueSourceNodeHostObject(
17
+ const std::shared_ptr<AudioBufferQueueSourceNode> &node);
18
+
19
+ JSI_HOST_FUNCTION_DECL(pause);
20
+ JSI_HOST_FUNCTION_DECL(enqueueBuffer);
21
+ JSI_HOST_FUNCTION_DECL(dequeueBuffer);
22
+ JSI_HOST_FUNCTION_DECL(clearBuffers);
23
+ };
24
+
25
+ } // namespace audioapi
@@ -0,0 +1,152 @@
1
+ #include <audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.h>
2
+
3
+ #include <audioapi/HostObjects/sources/AudioBufferHostObject.h>
4
+ #include <audioapi/core/sources/AudioBufferSourceNode.h>
5
+
6
+ namespace audioapi {
7
+
8
+ AudioBufferSourceNodeHostObject::AudioBufferSourceNodeHostObject(
9
+ const std::shared_ptr<AudioBufferSourceNode> &node)
10
+ : AudioBufferBaseSourceNodeHostObject(node) {
11
+ addGetters(
12
+ JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, loop),
13
+ JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, loopSkip),
14
+ JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, buffer),
15
+ JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, loopStart),
16
+ JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, loopEnd));
17
+
18
+ addSetters(
19
+ JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, loop),
20
+ JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, loopSkip),
21
+ JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, loopStart),
22
+ JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, loopEnd),
23
+ JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, onLoopEnded));
24
+
25
+ // start method is overridden in this class
26
+ functions_->erase("start");
27
+
28
+ addFunctions(
29
+ JSI_EXPORT_FUNCTION(AudioBufferSourceNodeHostObject, start),
30
+ JSI_EXPORT_FUNCTION(AudioBufferSourceNodeHostObject, setBuffer));
31
+ }
32
+
33
+ AudioBufferSourceNodeHostObject::~AudioBufferSourceNodeHostObject() {
34
+ auto audioBufferSourceNode =
35
+ std::static_pointer_cast<AudioBufferSourceNode>(node_);
36
+
37
+ // When JSI object is garbage collected (together with the eventual callback),
38
+ // underlying source node might still be active and try to call the
39
+ // non-existing callback.
40
+ audioBufferSourceNode->clearOnLoopEndedCallback();
41
+ }
42
+
43
+ JSI_PROPERTY_GETTER_IMPL(AudioBufferSourceNodeHostObject, loop) {
44
+ auto audioBufferSourceNode =
45
+ std::static_pointer_cast<AudioBufferSourceNode>(node_);
46
+ auto loop = audioBufferSourceNode->getLoop();
47
+ return {loop};
48
+ }
49
+
50
+ JSI_PROPERTY_GETTER_IMPL(AudioBufferSourceNodeHostObject, loopSkip) {
51
+ auto audioBufferSourceNode =
52
+ std::static_pointer_cast<AudioBufferSourceNode>(node_);
53
+ auto loopSkip = audioBufferSourceNode->getLoopSkip();
54
+ return {loopSkip};
55
+ }
56
+
57
+ JSI_PROPERTY_GETTER_IMPL(AudioBufferSourceNodeHostObject, buffer) {
58
+ auto audioBufferSourceNode =
59
+ std::static_pointer_cast<AudioBufferSourceNode>(node_);
60
+ auto buffer = audioBufferSourceNode->getBuffer();
61
+
62
+ if (!buffer) {
63
+ return jsi::Value::null();
64
+ }
65
+
66
+ auto bufferHostObject = std::make_shared<AudioBufferHostObject>(buffer);
67
+ return jsi::Object::createFromHostObject(runtime, bufferHostObject);
68
+ }
69
+
70
+ JSI_PROPERTY_GETTER_IMPL(AudioBufferSourceNodeHostObject, loopStart) {
71
+ auto audioBufferSourceNode =
72
+ std::static_pointer_cast<AudioBufferSourceNode>(node_);
73
+ auto loopStart = audioBufferSourceNode->getLoopStart();
74
+ return {loopStart};
75
+ }
76
+
77
+ JSI_PROPERTY_GETTER_IMPL(AudioBufferSourceNodeHostObject, loopEnd) {
78
+ auto audioBufferSourceNode =
79
+ std::static_pointer_cast<AudioBufferSourceNode>(node_);
80
+ auto loopEnd = audioBufferSourceNode->getLoopEnd();
81
+ return {loopEnd};
82
+ }
83
+
84
+ JSI_PROPERTY_SETTER_IMPL(AudioBufferSourceNodeHostObject, loop) {
85
+ auto audioBufferSourceNode =
86
+ std::static_pointer_cast<AudioBufferSourceNode>(node_);
87
+ audioBufferSourceNode->setLoop(value.getBool());
88
+ }
89
+
90
+ JSI_PROPERTY_SETTER_IMPL(AudioBufferSourceNodeHostObject, loopSkip) {
91
+ auto audioBufferSourceNode =
92
+ std::static_pointer_cast<AudioBufferSourceNode>(node_);
93
+ audioBufferSourceNode->setLoopSkip(value.getBool());
94
+ }
95
+
96
+ JSI_PROPERTY_SETTER_IMPL(AudioBufferSourceNodeHostObject, loopStart) {
97
+ auto audioBufferSourceNode =
98
+ std::static_pointer_cast<AudioBufferSourceNode>(node_);
99
+ audioBufferSourceNode->setLoopStart(value.getNumber());
100
+ }
101
+
102
+ JSI_PROPERTY_SETTER_IMPL(AudioBufferSourceNodeHostObject, loopEnd) {
103
+ auto audioBufferSourceNode =
104
+ std::static_pointer_cast<AudioBufferSourceNode>(node_);
105
+ audioBufferSourceNode->setLoopEnd(value.getNumber());
106
+ }
107
+
108
+ JSI_PROPERTY_SETTER_IMPL(AudioBufferSourceNodeHostObject, onLoopEnded) {
109
+ auto audioBufferSourceNode =
110
+ std::static_pointer_cast<AudioBufferSourceNode>(node_);
111
+
112
+ audioBufferSourceNode->setOnLoopEndedCallbackId(
113
+ std::stoull(value.getString(runtime).utf8(runtime)));
114
+ }
115
+
116
+ JSI_HOST_FUNCTION_IMPL(AudioBufferSourceNodeHostObject, start) {
117
+ auto when = args[0].getNumber();
118
+ auto offset = args[1].getNumber();
119
+
120
+ auto audioBufferSourceNode =
121
+ std::static_pointer_cast<AudioBufferSourceNode>(node_);
122
+
123
+ if (args[2].isUndefined()) {
124
+ audioBufferSourceNode->start(when, offset);
125
+
126
+ return jsi::Value::undefined();
127
+ }
128
+
129
+ auto duration = args[2].getNumber();
130
+ audioBufferSourceNode->start(when, offset, duration);
131
+
132
+ return jsi::Value::undefined();
133
+ }
134
+
135
+ JSI_HOST_FUNCTION_IMPL(AudioBufferSourceNodeHostObject, setBuffer) {
136
+ auto audioBufferSourceNode =
137
+ std::static_pointer_cast<AudioBufferSourceNode>(node_);
138
+
139
+ if (args[0].isNull()) {
140
+ audioBufferSourceNode->setBuffer(std::shared_ptr<AudioBuffer>(nullptr));
141
+ return jsi::Value::undefined();
142
+ }
143
+
144
+ auto bufferHostObject =
145
+ args[0].getObject(runtime).asHostObject<AudioBufferHostObject>(runtime);
146
+ thisValue.asObject(runtime).setExternalMemoryPressure(
147
+ runtime, bufferHostObject->getSizeInBytes() + 16);
148
+ audioBufferSourceNode->setBuffer(bufferHostObject->audioBuffer_);
149
+ return jsi::Value::undefined();
150
+ }
151
+
152
+ } // namespace audioapi
@@ -0,0 +1,37 @@
1
+ #pragma once
2
+
3
+ #include <audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.h>
4
+
5
+ #include <memory>
6
+ #include <vector>
7
+
8
+ namespace audioapi {
9
+ using namespace facebook;
10
+
11
+ class AudioBufferSourceNode;
12
+
13
+ class AudioBufferSourceNodeHostObject
14
+ : public AudioBufferBaseSourceNodeHostObject {
15
+ public:
16
+ explicit AudioBufferSourceNodeHostObject(
17
+ const std::shared_ptr<AudioBufferSourceNode> &node);
18
+
19
+ ~AudioBufferSourceNodeHostObject() override;
20
+
21
+ JSI_PROPERTY_GETTER_DECL(loop);
22
+ JSI_PROPERTY_GETTER_DECL(loopSkip);
23
+ JSI_PROPERTY_GETTER_DECL(buffer);
24
+ JSI_PROPERTY_GETTER_DECL(loopStart);
25
+ JSI_PROPERTY_GETTER_DECL(loopEnd);
26
+
27
+ JSI_PROPERTY_SETTER_DECL(loop);
28
+ JSI_PROPERTY_SETTER_DECL(loopSkip);
29
+ JSI_PROPERTY_SETTER_DECL(loopStart);
30
+ JSI_PROPERTY_SETTER_DECL(loopEnd);
31
+ JSI_PROPERTY_SETTER_DECL(onLoopEnded);
32
+
33
+ JSI_HOST_FUNCTION_DECL(start);
34
+ JSI_HOST_FUNCTION_DECL(setBuffer);
35
+ };
36
+
37
+ } // namespace audioapi
@@ -0,0 +1,52 @@
1
+ #include <audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.h>
2
+
3
+ #include <audioapi/core/sources/AudioScheduledSourceNode.h>
4
+
5
+ namespace audioapi {
6
+
7
+ AudioScheduledSourceNodeHostObject::AudioScheduledSourceNodeHostObject(
8
+ const std::shared_ptr<AudioScheduledSourceNode> &node)
9
+ : AudioNodeHostObject(node) {
10
+ addSetters(
11
+ JSI_EXPORT_PROPERTY_SETTER(AudioScheduledSourceNodeHostObject, onEnded));
12
+
13
+ addFunctions(
14
+ JSI_EXPORT_FUNCTION(AudioScheduledSourceNodeHostObject, start),
15
+ JSI_EXPORT_FUNCTION(AudioScheduledSourceNodeHostObject, stop));
16
+ }
17
+
18
+ AudioScheduledSourceNodeHostObject::~AudioScheduledSourceNodeHostObject() {
19
+ auto audioScheduledSourceNode =
20
+ std::static_pointer_cast<AudioScheduledSourceNode>(node_);
21
+
22
+ // When JSI object is garbage collected (together with the eventual callback),
23
+ // underlying source node might still be active and try to call the
24
+ // non-existing callback.
25
+ audioScheduledSourceNode->clearOnEndedCallback();
26
+ }
27
+
28
+ JSI_PROPERTY_SETTER_IMPL(AudioScheduledSourceNodeHostObject, onEnded) {
29
+ auto audioScheduleSourceNode =
30
+ std::static_pointer_cast<AudioScheduledSourceNode>(node_);
31
+
32
+ audioScheduleSourceNode->setOnEndedCallbackId(
33
+ std::stoull(value.getString(runtime).utf8(runtime)));
34
+ }
35
+
36
+ JSI_HOST_FUNCTION_IMPL(AudioScheduledSourceNodeHostObject, start) {
37
+ auto when = args[0].getNumber();
38
+ auto audioScheduleSourceNode =
39
+ std::static_pointer_cast<AudioScheduledSourceNode>(node_);
40
+ audioScheduleSourceNode->start(when);
41
+ return jsi::Value::undefined();
42
+ }
43
+
44
+ JSI_HOST_FUNCTION_IMPL(AudioScheduledSourceNodeHostObject, stop) {
45
+ auto time = args[0].getNumber();
46
+ auto audioScheduleSourceNode =
47
+ std::static_pointer_cast<AudioScheduledSourceNode>(node_);
48
+ audioScheduleSourceNode->stop(time);
49
+ return jsi::Value::undefined();
50
+ }
51
+
52
+ } // namespace audioapi