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
@@ -1,9 +1,365 @@
1
1
  #include <audioapi/HostObjects/BaseAudioContextHostObject.h>
2
2
 
3
- // Explicitly define destructors here, as they to exist in order to act as a
4
- // "key function" for the audio classes - this allow for RTTI to work
5
- // properly across dynamic library boundaries (i.e. dynamic_cast that is used by
6
- // isHostObject method), android specific issue
3
+ #include <audioapi/HostObjects/WorkletNodeHostObject.h>
4
+ #include <audioapi/HostObjects/WorkletProcessingNodeHostObject.h>
5
+ #include <audioapi/HostObjects/analysis/AnalyserNodeHostObject.h>
6
+ #include <audioapi/HostObjects/destinations/AudioDestinationNodeHostObject.h>
7
+ #include <audioapi/HostObjects/effects/BiquadFilterNodeHostObject.h>
8
+ #include <audioapi/HostObjects/effects/GainNodeHostObject.h>
9
+ #include <audioapi/HostObjects/effects/PeriodicWaveHostObject.h>
10
+ #include <audioapi/HostObjects/effects/StereoPannerNodeHostObject.h>
11
+ #include <audioapi/HostObjects/sources/AudioBufferHostObject.h>
12
+ #include <audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.h>
13
+ #include <audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.h>
14
+ #include <audioapi/HostObjects/sources/ConstantSourceNodeHostObject.h>
15
+ #include <audioapi/HostObjects/sources/OscillatorNodeHostObject.h>
16
+ #include <audioapi/HostObjects/sources/RecorderAdapterNodeHostObject.h>
17
+ #include <audioapi/HostObjects/sources/StreamerNodeHostObject.h>
18
+ #include <audioapi/HostObjects/sources/WorkletSourceNodeHostObject.h>
19
+ #include <audioapi/core/BaseAudioContext.h>
20
+
7
21
  namespace audioapi {
8
- BaseAudioContextHostObject::~BaseAudioContextHostObject() = default;
9
- }
22
+
23
+ BaseAudioContextHostObject::BaseAudioContextHostObject(
24
+ const std::shared_ptr<BaseAudioContext> &context,
25
+ jsi::Runtime *runtime,
26
+ const std::shared_ptr<react::CallInvoker> &callInvoker)
27
+ : context_(context), callInvoker_(callInvoker) {
28
+ promiseVendor_ = std::make_shared<PromiseVendor>(runtime, callInvoker);
29
+
30
+ addGetters(
31
+ JSI_EXPORT_PROPERTY_GETTER(BaseAudioContextHostObject, destination),
32
+ JSI_EXPORT_PROPERTY_GETTER(BaseAudioContextHostObject, state),
33
+ JSI_EXPORT_PROPERTY_GETTER(BaseAudioContextHostObject, sampleRate),
34
+ JSI_EXPORT_PROPERTY_GETTER(BaseAudioContextHostObject, currentTime));
35
+
36
+ addFunctions(
37
+ JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createWorkletSourceNode),
38
+ JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createWorkletNode),
39
+ JSI_EXPORT_FUNCTION(
40
+ BaseAudioContextHostObject, createWorkletProcessingNode),
41
+ JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createRecorderAdapter),
42
+ JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createOscillator),
43
+ JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createStreamer),
44
+ JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createConstantSource),
45
+ JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createGain),
46
+ JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createStereoPanner),
47
+ JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createBiquadFilter),
48
+ JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createBufferSource),
49
+ JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createBufferQueueSource),
50
+ JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createBuffer),
51
+ JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createPeriodicWave),
52
+ JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createAnalyser),
53
+ JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, decodeAudioData),
54
+ JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, decodeAudioDataSource),
55
+ JSI_EXPORT_FUNCTION(
56
+ BaseAudioContextHostObject, decodePCMAudioDataInBase64));
57
+ }
58
+
59
+ JSI_PROPERTY_GETTER_IMPL(BaseAudioContextHostObject, destination) {
60
+ auto destination = std::make_shared<AudioDestinationNodeHostObject>(
61
+ context_->getDestination());
62
+ return jsi::Object::createFromHostObject(runtime, destination);
63
+ }
64
+
65
+ JSI_PROPERTY_GETTER_IMPL(BaseAudioContextHostObject, state) {
66
+ return jsi::String::createFromUtf8(runtime, context_->getState());
67
+ }
68
+
69
+ JSI_PROPERTY_GETTER_IMPL(BaseAudioContextHostObject, sampleRate) {
70
+ return {context_->getSampleRate()};
71
+ }
72
+
73
+ JSI_PROPERTY_GETTER_IMPL(BaseAudioContextHostObject, currentTime) {
74
+ return {context_->getCurrentTime()};
75
+ }
76
+
77
+ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createWorkletSourceNode) {
78
+ #if RN_AUDIO_API_ENABLE_WORKLETS
79
+ auto shareableWorklet =
80
+ worklets::extractSerializableOrThrow<worklets::SerializableWorklet>(
81
+ runtime, args[0]);
82
+ std::weak_ptr<worklets::WorkletRuntime> workletRuntime;
83
+ auto shouldUseUiRuntime = args[1].getBool();
84
+ if (shouldUseUiRuntime) {
85
+ workletRuntime = context_->runtimeRegistry_.uiRuntime;
86
+ } else {
87
+ workletRuntime = context_->runtimeRegistry_.audioRuntime;
88
+ }
89
+
90
+ auto workletSourceNode =
91
+ context_->createWorkletSourceNode(shareableWorklet, workletRuntime);
92
+ auto workletSourceNodeHostObject =
93
+ std::make_shared<WorkletSourceNodeHostObject>(workletSourceNode);
94
+ return jsi::Object::createFromHostObject(
95
+ runtime, workletSourceNodeHostObject);
96
+ #endif
97
+ return jsi::Value::undefined();
98
+ }
99
+
100
+ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createWorkletNode) {
101
+ #if RN_AUDIO_API_ENABLE_WORKLETS
102
+ auto shareableWorklet =
103
+ worklets::extractSerializableOrThrow<worklets::SerializableWorklet>(
104
+ runtime, args[0]);
105
+
106
+ std::weak_ptr<worklets::WorkletRuntime> workletRuntime;
107
+ auto shouldUseUiRuntime = args[1].getBool();
108
+ if (shouldUseUiRuntime) {
109
+ workletRuntime = context_->runtimeRegistry_.uiRuntime;
110
+ } else {
111
+ workletRuntime = context_->runtimeRegistry_.audioRuntime;
112
+ }
113
+ auto bufferLength = static_cast<size_t>(args[2].getNumber());
114
+ auto inputChannelCount = static_cast<size_t>(args[3].getNumber());
115
+
116
+ auto workletNode = context_->createWorkletNode(
117
+ shareableWorklet, workletRuntime, bufferLength, inputChannelCount);
118
+ auto workletNodeHostObject =
119
+ std::make_shared<WorkletNodeHostObject>(workletNode);
120
+ return jsi::Object::createFromHostObject(runtime, workletNodeHostObject);
121
+ #endif
122
+ return jsi::Value::undefined();
123
+ }
124
+
125
+ JSI_HOST_FUNCTION_IMPL(
126
+ BaseAudioContextHostObject,
127
+ createWorkletProcessingNode) {
128
+ #if RN_AUDIO_API_ENABLE_WORKLETS
129
+ auto shareableWorklet =
130
+ worklets::extractSerializableOrThrow<worklets::SerializableWorklet>(
131
+ runtime, args[0]);
132
+
133
+ std::weak_ptr<worklets::WorkletRuntime> workletRuntime;
134
+ auto shouldUseUiRuntime = args[1].getBool();
135
+ if (shouldUseUiRuntime) {
136
+ workletRuntime = context_->runtimeRegistry_.uiRuntime;
137
+ } else {
138
+ workletRuntime = context_->runtimeRegistry_.audioRuntime;
139
+ }
140
+
141
+ auto workletProcessingNode =
142
+ context_->createWorkletProcessingNode(shareableWorklet, workletRuntime);
143
+ auto workletProcessingNodeHostObject =
144
+ std::make_shared<WorkletProcessingNodeHostObject>(workletProcessingNode);
145
+ return jsi::Object::createFromHostObject(
146
+ runtime, workletProcessingNodeHostObject);
147
+ #endif
148
+ return jsi::Value::undefined();
149
+ }
150
+
151
+ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createRecorderAdapter) {
152
+ auto recorderAdapter = context_->createRecorderAdapter();
153
+ auto recorderAdapterHostObject =
154
+ std::make_shared<RecorderAdapterNodeHostObject>(recorderAdapter);
155
+ return jsi::Object::createFromHostObject(runtime, recorderAdapterHostObject);
156
+ }
157
+
158
+ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createOscillator) {
159
+ auto oscillator = context_->createOscillator();
160
+ auto oscillatorHostObject =
161
+ std::make_shared<OscillatorNodeHostObject>(oscillator);
162
+ return jsi::Object::createFromHostObject(runtime, oscillatorHostObject);
163
+ }
164
+
165
+ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createStreamer) {
166
+ auto streamer = context_->createStreamer();
167
+ auto streamerHostObject = std::make_shared<StreamerNodeHostObject>(streamer);
168
+ auto object = jsi::Object::createFromHostObject(runtime, streamerHostObject);
169
+ object.setExternalMemoryPressure(
170
+ runtime, StreamerNodeHostObject::getSizeInBytes());
171
+ return object;
172
+ }
173
+
174
+ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createConstantSource) {
175
+ auto constantSource = context_->createConstantSource();
176
+ auto constantSourceHostObject =
177
+ std::make_shared<ConstantSourceNodeHostObject>(constantSource);
178
+ return jsi::Object::createFromHostObject(runtime, constantSourceHostObject);
179
+ }
180
+
181
+ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createGain) {
182
+ auto gain = context_->createGain();
183
+ auto gainHostObject = std::make_shared<GainNodeHostObject>(gain);
184
+ return jsi::Object::createFromHostObject(runtime, gainHostObject);
185
+ }
186
+
187
+ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createStereoPanner) {
188
+ auto stereoPanner = context_->createStereoPanner();
189
+ auto stereoPannerHostObject =
190
+ std::make_shared<StereoPannerNodeHostObject>(stereoPanner);
191
+ return jsi::Object::createFromHostObject(runtime, stereoPannerHostObject);
192
+ }
193
+
194
+ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createBiquadFilter) {
195
+ auto biquadFilter = context_->createBiquadFilter();
196
+ auto biquadFilterHostObject =
197
+ std::make_shared<BiquadFilterNodeHostObject>(biquadFilter);
198
+ return jsi::Object::createFromHostObject(runtime, biquadFilterHostObject);
199
+ }
200
+
201
+ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createBufferSource) {
202
+ auto pitchCorrection = args[0].asBool();
203
+ auto bufferSource = context_->createBufferSource(pitchCorrection);
204
+ auto bufferSourceHostObject =
205
+ std::make_shared<AudioBufferSourceNodeHostObject>(bufferSource);
206
+ return jsi::Object::createFromHostObject(runtime, bufferSourceHostObject);
207
+ }
208
+
209
+ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createBufferQueueSource) {
210
+ auto pitchCorrection = args[0].asBool();
211
+ auto bufferSource = context_->createBufferQueueSource(pitchCorrection);
212
+ auto bufferStreamSourceHostObject =
213
+ std::make_shared<AudioBufferQueueSourceNodeHostObject>(bufferSource);
214
+ return jsi::Object::createFromHostObject(
215
+ runtime, bufferStreamSourceHostObject);
216
+ }
217
+
218
+ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createBuffer) {
219
+ auto numberOfChannels = static_cast<int>(args[0].getNumber());
220
+ auto length = static_cast<size_t>(args[1].getNumber());
221
+ auto sampleRate = static_cast<float>(args[2].getNumber());
222
+ auto buffer =
223
+ BaseAudioContext::createBuffer(numberOfChannels, length, sampleRate);
224
+ auto bufferHostObject = std::make_shared<AudioBufferHostObject>(buffer);
225
+
226
+ auto jsiObject = jsi::Object::createFromHostObject(runtime, bufferHostObject);
227
+ jsiObject.setExternalMemoryPressure(
228
+ runtime, bufferHostObject->getSizeInBytes());
229
+
230
+ return jsiObject;
231
+ }
232
+
233
+ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createPeriodicWave) {
234
+ auto arrayBufferReal = args[0]
235
+ .getObject(runtime)
236
+ .getPropertyAsObject(runtime, "buffer")
237
+ .getArrayBuffer(runtime);
238
+ auto real = reinterpret_cast<float *>(arrayBufferReal.data(runtime));
239
+ auto length = static_cast<int>(arrayBufferReal.size(runtime));
240
+
241
+ auto arrayBufferImag = args[1]
242
+ .getObject(runtime)
243
+ .getPropertyAsObject(runtime, "buffer")
244
+ .getArrayBuffer(runtime);
245
+ auto imag = reinterpret_cast<float *>(arrayBufferImag.data(runtime));
246
+
247
+ auto disableNormalization = args[2].getBool();
248
+
249
+ auto complexData = std::vector<std::complex<float>>(length);
250
+
251
+ for (size_t i = 0; i < length; i++) {
252
+ complexData[i] = std::complex<float>(
253
+ static_cast<float>(real[i]), static_cast<float>(imag[i]));
254
+ }
255
+
256
+ auto periodicWave =
257
+ context_->createPeriodicWave(complexData, disableNormalization, length);
258
+ auto periodicWaveHostObject =
259
+ std::make_shared<PeriodicWaveHostObject>(periodicWave);
260
+
261
+ return jsi::Object::createFromHostObject(runtime, periodicWaveHostObject);
262
+ }
263
+
264
+ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createAnalyser) {
265
+ auto analyser = context_->createAnalyser();
266
+ auto analyserHostObject = std::make_shared<AnalyserNodeHostObject>(analyser);
267
+ return jsi::Object::createFromHostObject(runtime, analyserHostObject);
268
+ }
269
+
270
+ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, decodeAudioDataSource) {
271
+ auto sourcePath = args[0].getString(runtime).utf8(runtime);
272
+
273
+ auto promise = promiseVendor_->createPromise(
274
+ [this, sourcePath](std::shared_ptr<Promise> promise) {
275
+ std::thread([this, sourcePath, promise = std::move(promise)]() {
276
+ auto results = context_->decodeAudioDataSource(sourcePath);
277
+
278
+ if (!results) {
279
+ promise->reject("Failed to decode audio data source.");
280
+ return;
281
+ }
282
+
283
+ auto audioBufferHostObject =
284
+ std::make_shared<AudioBufferHostObject>(results);
285
+
286
+ promise->resolve([audioBufferHostObject = std::move(
287
+ audioBufferHostObject)](jsi::Runtime &runtime) {
288
+ auto jsiObject = jsi::Object::createFromHostObject(
289
+ runtime, audioBufferHostObject);
290
+ jsiObject.setExternalMemoryPressure(
291
+ runtime, audioBufferHostObject->getSizeInBytes());
292
+ return jsiObject;
293
+ });
294
+ }).detach();
295
+ });
296
+
297
+ return promise;
298
+ }
299
+
300
+ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, decodeAudioData) {
301
+ auto arrayBuffer = args[0]
302
+ .getObject(runtime)
303
+ .getPropertyAsObject(runtime, "buffer")
304
+ .getArrayBuffer(runtime);
305
+ auto data = arrayBuffer.data(runtime);
306
+ auto size = static_cast<int>(arrayBuffer.size(runtime));
307
+
308
+ auto promise = promiseVendor_->createPromise(
309
+ [this, data, size](std::shared_ptr<Promise> promise) {
310
+ std::thread([this, data, size, promise = std::move(promise)]() {
311
+ auto results = context_->decodeAudioData(data, size);
312
+
313
+ if (!results) {
314
+ promise->reject("Failed to decode audio data source.");
315
+ return;
316
+ }
317
+
318
+ auto audioBufferHostObject =
319
+ std::make_shared<AudioBufferHostObject>(results);
320
+
321
+ promise->resolve([audioBufferHostObject = std::move(
322
+ audioBufferHostObject)](jsi::Runtime &runtime) {
323
+ auto jsiObject = jsi::Object::createFromHostObject(
324
+ runtime, audioBufferHostObject);
325
+ jsiObject.setExternalMemoryPressure(
326
+ runtime, audioBufferHostObject->getSizeInBytes());
327
+ return jsiObject;
328
+ });
329
+ }).detach();
330
+ });
331
+
332
+ return promise;
333
+ }
334
+
335
+ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, decodePCMAudioDataInBase64) {
336
+ auto b64 = args[0].getString(runtime).utf8(runtime);
337
+ auto playbackSpeed = static_cast<float>(args[1].getNumber());
338
+
339
+ auto promise = promiseVendor_->createPromise(
340
+ [this, b64, playbackSpeed](std::shared_ptr<Promise> promise) {
341
+ std::thread([this, b64, playbackSpeed, promise = std::move(promise)]() {
342
+ auto results = context_->decodeWithPCMInBase64(b64, playbackSpeed);
343
+
344
+ if (!results) {
345
+ promise->reject("Failed to decode audio data source.");
346
+ return;
347
+ }
348
+
349
+ auto audioBufferHostObject =
350
+ std::make_shared<AudioBufferHostObject>(results);
351
+
352
+ promise->resolve([audioBufferHostObject = std::move(
353
+ audioBufferHostObject)](jsi::Runtime &runtime) {
354
+ auto jsiObject = jsi::Object::createFromHostObject(
355
+ runtime, audioBufferHostObject);
356
+ jsiObject.setExternalMemoryPressure(
357
+ runtime, audioBufferHostObject->getSizeInBytes());
358
+ return jsiObject;
359
+ });
360
+ }).detach();
361
+ });
362
+
363
+ return promise;
364
+ }
365
+ } // namespace audioapi
@@ -2,19 +2,6 @@
2
2
 
3
3
  #include <audioapi/jsi/JsiHostObject.h>
4
4
  #include <audioapi/jsi/JsiPromise.h>
5
- #include <audioapi/HostObjects/AudioBufferHostObject.h>
6
- #include <audioapi/HostObjects/AudioBufferSourceNodeHostObject.h>
7
- #include <audioapi/HostObjects/AudioBufferQueueSourceNodeHostObject.h>
8
- #include <audioapi/HostObjects/AudioDestinationNodeHostObject.h>
9
- #include <audioapi/core/BaseAudioContext.h>
10
- #include <audioapi/HostObjects/BiquadFilterNodeHostObject.h>
11
- #include <audioapi/HostObjects/GainNodeHostObject.h>
12
- #include <audioapi/HostObjects/OscillatorNodeHostObject.h>
13
- #include <audioapi/HostObjects/PeriodicWaveHostObject.h>
14
- #include <audioapi/HostObjects/StereoPannerNodeHostObject.h>
15
- #include <audioapi/HostObjects/AnalyserNodeHostObject.h>
16
- #include <audioapi/HostObjects/RecorderAdapterNodeHostObject.h>
17
- #include <audioapi/HostObjects/StreamerNodeHostObject.h>
18
5
 
19
6
  #include <jsi/jsi.h>
20
7
  #include <memory>
@@ -25,239 +12,40 @@
25
12
  namespace audioapi {
26
13
  using namespace facebook;
27
14
 
15
+ class BaseAudioContext;
16
+
28
17
  class BaseAudioContextHostObject : public JsiHostObject {
29
18
  public:
30
19
  explicit BaseAudioContextHostObject(
31
20
  const std::shared_ptr<BaseAudioContext> &context,
32
21
  jsi::Runtime *runtime,
33
- const std::shared_ptr<react::CallInvoker> &callInvoker)
34
- : context_(context), callInvoker_(callInvoker) {
35
- promiseVendor_ = std::make_shared<PromiseVendor>(runtime, callInvoker);
36
-
37
- addGetters(
38
- JSI_EXPORT_PROPERTY_GETTER(BaseAudioContextHostObject, destination),
39
- JSI_EXPORT_PROPERTY_GETTER(BaseAudioContextHostObject, state),
40
- JSI_EXPORT_PROPERTY_GETTER(BaseAudioContextHostObject, sampleRate),
41
- JSI_EXPORT_PROPERTY_GETTER(BaseAudioContextHostObject, currentTime));
42
-
43
- addFunctions(
44
- JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createRecorderAdapter),
45
- JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createOscillator),
46
- JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createStreamer),
47
- JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createGain),
48
- JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createStereoPanner),
49
- JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createBiquadFilter),
50
- JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createBufferSource),
51
- JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createBufferQueueSource),
52
- JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createBuffer),
53
- JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createPeriodicWave),
54
- JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createAnalyser),
55
- JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, decodeAudioData),
56
- JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, decodeAudioDataSource),
57
- JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, decodePCMAudioDataInBase64));
58
- }
59
-
60
- ~BaseAudioContextHostObject() override;
61
-
62
- JSI_PROPERTY_GETTER(destination) {
63
- auto destination = std::make_shared<AudioDestinationNodeHostObject>(
64
- context_->getDestination());
65
- return jsi::Object::createFromHostObject(runtime, destination);
66
- }
67
-
68
- JSI_PROPERTY_GETTER(state) {
69
- return jsi::String::createFromUtf8(runtime, context_->getState());
70
- }
71
-
72
- JSI_PROPERTY_GETTER(sampleRate) {
73
- return {context_->getSampleRate()};
74
- }
75
-
76
- JSI_PROPERTY_GETTER(currentTime) {
77
- return {context_->getCurrentTime()};
78
- }
79
-
80
- JSI_HOST_FUNCTION(createRecorderAdapter) {
81
- auto recorderAdapter = context_->createRecorderAdapter();
82
- auto recorderAdapterHostObject = std::make_shared<RecorderAdapterNodeHostObject>(recorderAdapter);
83
- return jsi::Object::createFromHostObject(runtime, recorderAdapterHostObject);
84
- }
85
-
86
- JSI_HOST_FUNCTION(createOscillator) {
87
- auto oscillator = context_->createOscillator();
88
- auto oscillatorHostObject =
89
- std::make_shared<OscillatorNodeHostObject>(oscillator);
90
- return jsi::Object::createFromHostObject(runtime, oscillatorHostObject);
91
- }
92
-
93
- JSI_HOST_FUNCTION(createStreamer) {
94
- auto streamer = context_->createStreamer();
95
- auto streamerHostObject =
96
- std::make_shared<StreamerNodeHostObject>(streamer);
97
- auto object = jsi::Object::createFromHostObject(runtime, streamerHostObject);
98
- object.setExternalMemoryPressure(runtime, StreamerNode::getEstimatedSize());
99
- return object;
100
- }
101
-
102
- JSI_HOST_FUNCTION(createGain) {
103
- auto gain = context_->createGain();
104
- auto gainHostObject = std::make_shared<GainNodeHostObject>(gain);
105
- return jsi::Object::createFromHostObject(runtime, gainHostObject);
106
- }
107
-
108
- JSI_HOST_FUNCTION(createStereoPanner) {
109
- auto stereoPanner = context_->createStereoPanner();
110
- auto stereoPannerHostObject =
111
- std::make_shared<StereoPannerNodeHostObject>(stereoPanner);
112
- return jsi::Object::createFromHostObject(runtime, stereoPannerHostObject);
113
- }
114
-
115
- JSI_HOST_FUNCTION(createBiquadFilter) {
116
- auto biquadFilter = context_->createBiquadFilter();
117
- auto biquadFilterHostObject =
118
- std::make_shared<BiquadFilterNodeHostObject>(biquadFilter);
119
- return jsi::Object::createFromHostObject(runtime, biquadFilterHostObject);
120
- }
121
-
122
- JSI_HOST_FUNCTION(createBufferSource) {
123
- auto pitchCorrection = args[0].asBool();
124
- auto bufferSource = context_->createBufferSource(pitchCorrection);
125
- auto bufferSourceHostObject =
126
- std::make_shared<AudioBufferSourceNodeHostObject>(bufferSource);
127
- return jsi::Object::createFromHostObject(runtime, bufferSourceHostObject);
128
- }
129
-
130
- JSI_HOST_FUNCTION(createBufferQueueSource) {
131
- auto bufferSource = context_->createBufferQueueSource();
132
- auto bufferStreamSourceHostObject =
133
- std::make_shared<AudioBufferQueueSourceNodeHostObject>(bufferSource);
134
- return jsi::Object::createFromHostObject(runtime, bufferStreamSourceHostObject);
135
- }
136
-
137
- JSI_HOST_FUNCTION(createBuffer) {
138
- auto numberOfChannels = static_cast<int>(args[0].getNumber());
139
- auto length = static_cast<size_t>(args[1].getNumber());
140
- auto sampleRate = static_cast<float>(args[2].getNumber());
141
- auto buffer = BaseAudioContext::createBuffer(numberOfChannels, length, sampleRate);
142
- auto bufferHostObject = std::make_shared<AudioBufferHostObject>(buffer);
143
-
144
- auto jsiObject = jsi::Object::createFromHostObject(runtime, bufferHostObject);
145
- jsiObject.setExternalMemoryPressure(runtime, bufferHostObject->getSizeInBytes());
146
-
147
- return jsiObject;
148
- }
149
-
150
- JSI_HOST_FUNCTION(createPeriodicWave) {
151
- auto arrayBufferReal = args[0].getObject(runtime).getPropertyAsObject(runtime, "buffer").getArrayBuffer(runtime);
152
- auto real = reinterpret_cast<float *>(arrayBufferReal.data(runtime));
153
- auto length = static_cast<int>(arrayBufferReal.size(runtime));
154
-
155
- auto arrayBufferImag = args[1].getObject(runtime).getPropertyAsObject(runtime, "buffer").getArrayBuffer(runtime);
156
- auto imag = reinterpret_cast<float *>(arrayBufferImag.data(runtime));
157
-
158
- auto disableNormalization = args[2].getBool();
159
-
160
- auto complexData = std::vector<std::complex<float>>(length);
161
-
162
- for (size_t i = 0; i < length; i++) {
163
- complexData[i] = std::complex<float>(
164
- static_cast<float>(real[i]),
165
- static_cast<float>(imag[i]));
166
- }
167
-
168
- auto periodicWave = context_->createPeriodicWave(
169
- complexData, disableNormalization, length);
170
- auto periodicWaveHostObject =
171
- std::make_shared<PeriodicWaveHostObject>(periodicWave);
172
-
173
- return jsi::Object::createFromHostObject(runtime, periodicWaveHostObject);
174
- }
175
-
176
- JSI_HOST_FUNCTION(createAnalyser) {
177
- auto analyser = context_->createAnalyser();
178
- auto analyserHostObject = std::make_shared<AnalyserNodeHostObject>(analyser);
179
- return jsi::Object::createFromHostObject(runtime, analyserHostObject);
180
- }
181
-
182
- JSI_HOST_FUNCTION(decodeAudioDataSource) {
183
- auto sourcePath = args[0].getString(runtime).utf8(runtime);
184
-
185
- auto promise = promiseVendor_->createPromise([this, sourcePath](std::shared_ptr<Promise> promise) {
186
- std::thread([this, sourcePath, promise = std::move(promise)]() {
187
- auto results = context_->decodeAudioDataSource(sourcePath);
188
-
189
- if (!results) {
190
- promise->reject("Failed to decode audio data source.");
191
- return;
192
- }
193
-
194
- auto audioBufferHostObject = std::make_shared<AudioBufferHostObject>(results);
195
-
196
- promise->resolve([audioBufferHostObject = std::move(audioBufferHostObject)](jsi::Runtime &runtime) {
197
- auto jsiObject = jsi::Object::createFromHostObject(runtime, audioBufferHostObject);
198
- jsiObject.setExternalMemoryPressure(runtime, audioBufferHostObject->getSizeInBytes());
199
- return jsiObject;
200
- });
201
- }).detach();
202
- });
203
-
204
- return promise;
205
- }
206
-
207
- JSI_HOST_FUNCTION(decodeAudioData) {
208
- auto arrayBuffer = args[0].getObject(runtime).getPropertyAsObject(runtime, "buffer").getArrayBuffer(runtime);
209
- auto data = arrayBuffer.data(runtime);
210
- auto size = static_cast<int>(arrayBuffer.size(runtime));
211
-
212
- auto promise = promiseVendor_->createPromise([this, data, size](std::shared_ptr<Promise> promise) {
213
- std::thread([this, data, size, promise = std::move(promise)]() {
214
- auto results = context_->decodeAudioData(data, size);
215
-
216
- if (!results) {
217
- promise->reject("Failed to decode audio data source.");
218
- return;
219
- }
220
-
221
- auto audioBufferHostObject = std::make_shared<AudioBufferHostObject>(results);
222
-
223
- promise->resolve([audioBufferHostObject = std::move(audioBufferHostObject)](jsi::Runtime &runtime) {
224
- auto jsiObject = jsi::Object::createFromHostObject(runtime, audioBufferHostObject);
225
- jsiObject.setExternalMemoryPressure(runtime, audioBufferHostObject->getSizeInBytes());
226
- return jsiObject;
227
- });
228
- }).detach();
229
- });
230
-
231
- return promise;
232
- }
233
-
234
- JSI_HOST_FUNCTION(decodePCMAudioDataInBase64) {
235
- auto b64 = args[0].getString(runtime).utf8(runtime);
236
- auto playbackSpeed = static_cast<float>(args[1].getNumber());
237
-
238
- auto promise = promiseVendor_->createPromise([this, b64, playbackSpeed](std::shared_ptr<Promise> promise) {
239
- std::thread([this, b64, playbackSpeed, promise = std::move(promise)]() {
240
- auto results = context_->decodeWithPCMInBase64(b64, playbackSpeed);
241
-
242
- if (!results) {
243
- promise->reject("Failed to decode audio data source.");
244
- return;
245
- }
246
-
247
- auto audioBufferHostObject = std::make_shared<AudioBufferHostObject>(results);
248
-
249
- promise->resolve([audioBufferHostObject = std::move(audioBufferHostObject)](jsi::Runtime &runtime) {
250
- auto jsiObject = jsi::Object::createFromHostObject(runtime, audioBufferHostObject);
251
- jsiObject.setExternalMemoryPressure(runtime, audioBufferHostObject->getSizeInBytes());
252
- return jsiObject;
253
- });
254
- }).detach();
255
- });
256
-
257
- return promise;
258
- }
259
-
260
- std::shared_ptr<BaseAudioContext> context_;
22
+ const std::shared_ptr<react::CallInvoker> &callInvoker);
23
+
24
+ JSI_PROPERTY_GETTER_DECL(destination);
25
+ JSI_PROPERTY_GETTER_DECL(state);
26
+ JSI_PROPERTY_GETTER_DECL(sampleRate);
27
+ JSI_PROPERTY_GETTER_DECL(currentTime);
28
+
29
+ JSI_HOST_FUNCTION_DECL(createWorkletSourceNode);
30
+ JSI_HOST_FUNCTION_DECL(createWorkletNode);
31
+ JSI_HOST_FUNCTION_DECL(createWorkletProcessingNode);
32
+ JSI_HOST_FUNCTION_DECL(createRecorderAdapter);
33
+ JSI_HOST_FUNCTION_DECL(createOscillator);
34
+ JSI_HOST_FUNCTION_DECL(createStreamer);
35
+ JSI_HOST_FUNCTION_DECL(createConstantSource);
36
+ JSI_HOST_FUNCTION_DECL(createGain);
37
+ JSI_HOST_FUNCTION_DECL(createStereoPanner);
38
+ JSI_HOST_FUNCTION_DECL(createBiquadFilter);
39
+ JSI_HOST_FUNCTION_DECL(createBufferSource);
40
+ JSI_HOST_FUNCTION_DECL(createBufferQueueSource);
41
+ JSI_HOST_FUNCTION_DECL(createBuffer);
42
+ JSI_HOST_FUNCTION_DECL(createPeriodicWave);
43
+ JSI_HOST_FUNCTION_DECL(createAnalyser);
44
+ JSI_HOST_FUNCTION_DECL(decodeAudioDataSource);
45
+ JSI_HOST_FUNCTION_DECL(decodeAudioData);
46
+ JSI_HOST_FUNCTION_DECL(decodePCMAudioDataInBase64);
47
+
48
+ std::shared_ptr<BaseAudioContext> context_;
261
49
 
262
50
  protected:
263
51
  std::shared_ptr<PromiseVendor> promiseVendor_;