react-native-audio-api 0.8.3-nightly-ea268f4-20251006 → 0.8.3

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 (282) hide show
  1. package/README.md +39 -40
  2. package/RNAudioAPI.podspec +12 -17
  3. package/android/build.gradle +4 -44
  4. package/android/src/main/cpp/audioapi/CMakeLists.txt +0 -65
  5. package/android/src/main/cpp/audioapi/android/AudioAPIModule.cpp +1 -29
  6. package/android/src/main/cpp/audioapi/android/AudioAPIModule.h +0 -14
  7. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.cpp +1 -7
  8. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +1 -6
  9. package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +1 -1
  10. package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +1 -11
  11. package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionManager.kt +2 -15
  12. package/common/cpp/audioapi/AudioAPIModuleInstaller.h +18 -53
  13. package/common/cpp/audioapi/HostObjects/AnalyserNodeHostObject.h +149 -0
  14. package/common/cpp/audioapi/HostObjects/AudioBufferBaseSourceNodeHostObject.h +76 -0
  15. package/common/cpp/audioapi/HostObjects/AudioBufferHostObject.h +120 -0
  16. package/common/cpp/audioapi/HostObjects/AudioBufferQueueSourceNodeHostObject.h +67 -0
  17. package/common/cpp/audioapi/HostObjects/AudioBufferSourceNodeHostObject.h +142 -0
  18. package/common/cpp/audioapi/HostObjects/AudioContextHostObject.h +46 -6
  19. package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.cpp +6 -70
  20. package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.h +66 -10
  21. package/common/cpp/audioapi/HostObjects/AudioParamHostObject.h +91 -17
  22. package/common/cpp/audioapi/HostObjects/AudioRecorderHostObject.h +86 -0
  23. package/common/cpp/audioapi/HostObjects/AudioScheduledSourceNodeHostObject.h +56 -0
  24. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +6 -362
  25. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +241 -29
  26. package/common/cpp/audioapi/HostObjects/BiquadFilterNodeHostObject.h +89 -0
  27. package/common/cpp/audioapi/HostObjects/GainNodeHostObject.h +27 -0
  28. package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.h +50 -6
  29. package/common/cpp/audioapi/HostObjects/OscillatorNodeHostObject.h +65 -0
  30. package/common/cpp/audioapi/HostObjects/{sources/RecorderAdapterNodeHostObject.h → RecorderAdapterNodeHostObject.h} +2 -1
  31. package/common/cpp/audioapi/HostObjects/StereoPannerNodeHostObject.h +29 -0
  32. package/common/cpp/audioapi/HostObjects/StreamerNodeHostObject.h +30 -0
  33. package/common/cpp/audioapi/core/AudioContext.cpp +2 -3
  34. package/common/cpp/audioapi/core/AudioContext.h +1 -2
  35. package/common/cpp/audioapi/core/AudioNode.h +1 -1
  36. package/common/cpp/audioapi/core/AudioParam.cpp +2 -2
  37. package/common/cpp/audioapi/core/AudioParam.h +1 -1
  38. package/common/cpp/audioapi/core/{utils/AudioParamEventQueue.cpp → AudioParamEventQueue.cpp} +7 -13
  39. package/common/cpp/audioapi/core/BaseAudioContext.cpp +3 -47
  40. package/common/cpp/audioapi/core/BaseAudioContext.h +4 -13
  41. package/common/cpp/audioapi/core/{utils/Constants.h → Constants.h} +0 -5
  42. package/common/cpp/audioapi/core/OfflineAudioContext.cpp +3 -4
  43. package/common/cpp/audioapi/core/OfflineAudioContext.h +1 -2
  44. package/common/cpp/audioapi/core/effects/PeriodicWave.cpp +1 -1
  45. package/common/cpp/audioapi/core/effects/StereoPannerNode.cpp +1 -1
  46. package/common/cpp/audioapi/core/inputs/AudioRecorder.cpp +1 -1
  47. package/common/cpp/audioapi/core/inputs/AudioRecorder.h +2 -2
  48. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +10 -47
  49. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +3 -18
  50. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +12 -94
  51. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +2 -8
  52. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +42 -33
  53. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +8 -6
  54. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +6 -1
  55. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +1 -1
  56. package/common/cpp/audioapi/core/sources/StreamerNode.h +8 -0
  57. package/common/cpp/audioapi/dsp/Windows.cpp +1 -1
  58. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.cpp +1 -1
  59. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +1 -2
  60. package/common/cpp/audioapi/events/AudioEventHandlerRegistryHostObject.h +48 -0
  61. package/common/cpp/audioapi/jsi/AudioArrayBuffer.h +1 -14
  62. package/common/cpp/audioapi/jsi/JsiHostObject.h +12 -6
  63. package/common/cpp/audioapi/jsi/JsiPromise.cpp +0 -49
  64. package/common/cpp/audioapi/jsi/JsiPromise.h +1 -29
  65. package/common/cpp/audioapi/utils/AudioBus.cpp +1 -1
  66. package/common/cpp/test/CMakeLists.txt +3 -11
  67. package/common/cpp/test/GainTest.cpp +1 -2
  68. package/common/cpp/test/OscillatorTest.cpp +1 -2
  69. package/ios/audioapi/ios/AudioAPIModule.mm +5 -32
  70. package/ios/audioapi/ios/core/IOSAudioPlayer.mm +1 -1
  71. package/ios/audioapi/ios/core/IOSAudioRecorder.h +1 -2
  72. package/ios/audioapi/ios/core/IOSAudioRecorder.mm +1 -1
  73. package/ios/audioapi/ios/events/IOSAudioEventHandlerRegistry.h +7 -0
  74. package/ios/audioapi/ios/events/IOSAudioEventHandlerRegistry.mm +12 -0
  75. package/lib/commonjs/api.js +2 -36
  76. package/lib/commonjs/api.js.map +1 -1
  77. package/lib/commonjs/api.web.js +0 -8
  78. package/lib/commonjs/api.web.js.map +1 -1
  79. package/lib/commonjs/core/AudioBufferBaseSourceNode.js +7 -7
  80. package/lib/commonjs/core/AudioBufferBaseSourceNode.js.map +1 -1
  81. package/lib/commonjs/core/AudioBufferQueueSourceNode.js +6 -1
  82. package/lib/commonjs/core/AudioBufferQueueSourceNode.js.map +1 -1
  83. package/lib/commonjs/core/AudioBufferSourceNode.js +0 -15
  84. package/lib/commonjs/core/AudioBufferSourceNode.js.map +1 -1
  85. package/lib/commonjs/core/AudioContext.js +1 -10
  86. package/lib/commonjs/core/AudioContext.js.map +1 -1
  87. package/lib/commonjs/core/AudioScheduledSourceNode.js +4 -4
  88. package/lib/commonjs/core/AudioScheduledSourceNode.js.map +1 -1
  89. package/lib/commonjs/core/BaseAudioContext.js +11 -66
  90. package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
  91. package/lib/commonjs/core/OfflineAudioContext.js +2 -11
  92. package/lib/commonjs/core/OfflineAudioContext.js.map +1 -1
  93. package/lib/commonjs/core/OscillatorNode.js +0 -6
  94. package/lib/commonjs/core/OscillatorNode.js.map +1 -1
  95. package/lib/commonjs/hooks/{useSystemVolume.js → useSytemVolume.js} +1 -1
  96. package/lib/commonjs/hooks/useSytemVolume.js.map +1 -0
  97. package/lib/commonjs/utils/index.js +0 -9
  98. package/lib/commonjs/utils/index.js.map +1 -1
  99. package/lib/commonjs/web-core/AudioContext.js +0 -4
  100. package/lib/commonjs/web-core/AudioContext.js.map +1 -1
  101. package/lib/commonjs/web-core/AudioScheduledSourceNode.js +1 -1
  102. package/lib/commonjs/web-core/AudioScheduledSourceNode.js.map +1 -1
  103. package/lib/commonjs/web-core/OfflineAudioContext.js +0 -4
  104. package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
  105. package/lib/module/api.js +2 -6
  106. package/lib/module/api.js.map +1 -1
  107. package/lib/module/api.web.js +0 -1
  108. package/lib/module/api.web.js.map +1 -1
  109. package/lib/module/core/AudioBufferBaseSourceNode.js +7 -7
  110. package/lib/module/core/AudioBufferBaseSourceNode.js.map +1 -1
  111. package/lib/module/core/AudioBufferQueueSourceNode.js +6 -1
  112. package/lib/module/core/AudioBufferQueueSourceNode.js.map +1 -1
  113. package/lib/module/core/AudioBufferSourceNode.js +0 -15
  114. package/lib/module/core/AudioBufferSourceNode.js.map +1 -1
  115. package/lib/module/core/AudioContext.js +1 -10
  116. package/lib/module/core/AudioContext.js.map +1 -1
  117. package/lib/module/core/AudioScheduledSourceNode.js +4 -4
  118. package/lib/module/core/AudioScheduledSourceNode.js.map +1 -1
  119. package/lib/module/core/BaseAudioContext.js +11 -66
  120. package/lib/module/core/BaseAudioContext.js.map +1 -1
  121. package/lib/module/core/OfflineAudioContext.js +2 -11
  122. package/lib/module/core/OfflineAudioContext.js.map +1 -1
  123. package/lib/module/core/OscillatorNode.js +0 -6
  124. package/lib/module/core/OscillatorNode.js.map +1 -1
  125. package/lib/module/hooks/{useSystemVolume.js → useSytemVolume.js} +1 -1
  126. package/lib/module/hooks/useSytemVolume.js.map +1 -0
  127. package/lib/module/utils/index.js +0 -8
  128. package/lib/module/utils/index.js.map +1 -1
  129. package/lib/module/web-core/AudioContext.js +0 -4
  130. package/lib/module/web-core/AudioContext.js.map +1 -1
  131. package/lib/module/web-core/AudioScheduledSourceNode.js +1 -1
  132. package/lib/module/web-core/AudioScheduledSourceNode.js.map +1 -1
  133. package/lib/module/web-core/OfflineAudioContext.js +0 -4
  134. package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
  135. package/lib/typescript/api.d.ts +4 -8
  136. package/lib/typescript/api.d.ts.map +1 -1
  137. package/lib/typescript/api.web.d.ts +0 -1
  138. package/lib/typescript/api.web.d.ts.map +1 -1
  139. package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts +2 -2
  140. package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts.map +1 -1
  141. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts +1 -1
  142. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts.map +1 -1
  143. package/lib/typescript/core/AudioBufferSourceNode.d.ts +0 -4
  144. package/lib/typescript/core/AudioBufferSourceNode.d.ts.map +1 -1
  145. package/lib/typescript/core/AudioContext.d.ts +0 -1
  146. package/lib/typescript/core/AudioContext.d.ts.map +1 -1
  147. package/lib/typescript/core/AudioScheduledSourceNode.d.ts +1 -1
  148. package/lib/typescript/core/BaseAudioContext.d.ts +11 -19
  149. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
  150. package/lib/typescript/core/OfflineAudioContext.d.ts +0 -1
  151. package/lib/typescript/core/OfflineAudioContext.d.ts.map +1 -1
  152. package/lib/typescript/core/OscillatorNode.d.ts +0 -3
  153. package/lib/typescript/core/OscillatorNode.d.ts.map +1 -1
  154. package/lib/typescript/events/types.d.ts +0 -2
  155. package/lib/typescript/events/types.d.ts.map +1 -1
  156. package/lib/typescript/hooks/{useSystemVolume.d.ts → useSytemVolume.d.ts} +1 -1
  157. package/lib/typescript/hooks/useSytemVolume.d.ts.map +1 -0
  158. package/lib/typescript/interfaces.d.ts +3 -21
  159. package/lib/typescript/interfaces.d.ts.map +1 -1
  160. package/lib/typescript/types.d.ts +1 -2
  161. package/lib/typescript/types.d.ts.map +1 -1
  162. package/lib/typescript/utils/index.d.ts +0 -8
  163. package/lib/typescript/utils/index.d.ts.map +1 -1
  164. package/lib/typescript/web-core/AudioBufferSourceNode.d.ts +1 -1
  165. package/lib/typescript/web-core/AudioContext.d.ts +2 -4
  166. package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
  167. package/lib/typescript/web-core/AudioScheduledSourceNode.d.ts +1 -1
  168. package/lib/typescript/web-core/BaseAudioContext.d.ts +0 -2
  169. package/lib/typescript/web-core/BaseAudioContext.d.ts.map +1 -1
  170. package/lib/typescript/web-core/OfflineAudioContext.d.ts +2 -4
  171. package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
  172. package/package.json +2 -3
  173. package/src/api.ts +3 -12
  174. package/src/api.web.ts +0 -1
  175. package/src/core/AudioBufferBaseSourceNode.ts +9 -9
  176. package/src/core/AudioBufferQueueSourceNode.ts +9 -1
  177. package/src/core/AudioBufferSourceNode.ts +0 -28
  178. package/src/core/AudioContext.ts +1 -12
  179. package/src/core/AudioScheduledSourceNode.ts +5 -5
  180. package/src/core/BaseAudioContext.ts +13 -149
  181. package/src/core/OfflineAudioContext.ts +2 -18
  182. package/src/core/OscillatorNode.ts +0 -11
  183. package/src/events/types.ts +0 -2
  184. package/src/interfaces.ts +5 -59
  185. package/src/types.ts +1 -3
  186. package/src/utils/index.ts +0 -21
  187. package/src/web-core/AudioBufferSourceNode.tsx +1 -1
  188. package/src/web-core/AudioContext.tsx +2 -7
  189. package/src/web-core/AudioScheduledSourceNode.tsx +1 -1
  190. package/src/web-core/BaseAudioContext.tsx +0 -2
  191. package/src/web-core/OfflineAudioContext.tsx +2 -7
  192. package/android/src/main/cpp/audioapi/android/core/NativeAudioRecorder.hpp +0 -36
  193. package/android/src/main/java/com/swmansion/audioapi/core/NativeAudioRecorder.kt +0 -24
  194. package/common/cpp/audioapi/HostObjects/AudioContextHostObject.cpp +0 -57
  195. package/common/cpp/audioapi/HostObjects/AudioParamHostObject.cpp +0 -105
  196. package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.cpp +0 -70
  197. package/common/cpp/audioapi/HostObjects/WorkletNodeHostObject.h +0 -18
  198. package/common/cpp/audioapi/HostObjects/WorkletProcessingNodeHostObject.h +0 -18
  199. package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.cpp +0 -148
  200. package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.h +0 -37
  201. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp +0 -92
  202. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.h +0 -29
  203. package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.cpp +0 -20
  204. package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.h +0 -19
  205. package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.cpp +0 -21
  206. package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.h +0 -21
  207. package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.cpp +0 -41
  208. package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.h +0 -28
  209. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.cpp +0 -69
  210. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +0 -33
  211. package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.cpp +0 -73
  212. package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.h +0 -29
  213. package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.cpp +0 -94
  214. package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.h +0 -46
  215. package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.cpp +0 -60
  216. package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.h +0 -25
  217. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.cpp +0 -152
  218. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.h +0 -37
  219. package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.cpp +0 -52
  220. package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.h +0 -25
  221. package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.cpp +0 -19
  222. package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.h +0 -21
  223. package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.cpp +0 -55
  224. package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.h +0 -27
  225. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.cpp +0 -22
  226. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.h +0 -28
  227. package/common/cpp/audioapi/HostObjects/sources/WorkletSourceNodeHostObject.h +0 -18
  228. package/common/cpp/audioapi/core/effects/WorkletNode.cpp +0 -87
  229. package/common/cpp/audioapi/core/effects/WorkletNode.h +0 -65
  230. package/common/cpp/audioapi/core/effects/WorkletProcessingNode.cpp +0 -89
  231. package/common/cpp/audioapi/core/effects/WorkletProcessingNode.h +0 -52
  232. package/common/cpp/audioapi/core/sources/ConstantSourceNode.cpp +0 -51
  233. package/common/cpp/audioapi/core/sources/ConstantSourceNode.h +0 -26
  234. package/common/cpp/audioapi/core/sources/WorkletSourceNode.cpp +0 -82
  235. package/common/cpp/audioapi/core/sources/WorkletSourceNode.h +0 -47
  236. package/common/cpp/audioapi/core/utils/worklets/SafeIncludes.h +0 -52
  237. package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.cpp +0 -9
  238. package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.h +0 -73
  239. package/common/cpp/audioapi/utils/ThreadPool.hpp +0 -104
  240. package/common/cpp/test/AudioParamTest.cpp +0 -204
  241. package/lib/commonjs/core/ConstantSourceNode.js +0 -17
  242. package/lib/commonjs/core/ConstantSourceNode.js.map +0 -1
  243. package/lib/commonjs/core/WorkletNode.js +0 -11
  244. package/lib/commonjs/core/WorkletNode.js.map +0 -1
  245. package/lib/commonjs/core/WorkletProcessingNode.js +0 -11
  246. package/lib/commonjs/core/WorkletProcessingNode.js.map +0 -1
  247. package/lib/commonjs/core/WorkletSourceNode.js +0 -11
  248. package/lib/commonjs/core/WorkletSourceNode.js.map +0 -1
  249. package/lib/commonjs/hooks/useSystemVolume.js.map +0 -1
  250. package/lib/commonjs/web-core/ConstantSourceNode.js +0 -17
  251. package/lib/commonjs/web-core/ConstantSourceNode.js.map +0 -1
  252. package/lib/module/core/ConstantSourceNode.js +0 -11
  253. package/lib/module/core/ConstantSourceNode.js.map +0 -1
  254. package/lib/module/core/WorkletNode.js +0 -5
  255. package/lib/module/core/WorkletNode.js.map +0 -1
  256. package/lib/module/core/WorkletProcessingNode.js +0 -5
  257. package/lib/module/core/WorkletProcessingNode.js.map +0 -1
  258. package/lib/module/core/WorkletSourceNode.js +0 -5
  259. package/lib/module/core/WorkletSourceNode.js.map +0 -1
  260. package/lib/module/hooks/useSystemVolume.js.map +0 -1
  261. package/lib/module/web-core/ConstantSourceNode.js +0 -11
  262. package/lib/module/web-core/ConstantSourceNode.js.map +0 -1
  263. package/lib/typescript/core/ConstantSourceNode.d.ts +0 -9
  264. package/lib/typescript/core/ConstantSourceNode.d.ts.map +0 -1
  265. package/lib/typescript/core/WorkletNode.d.ts +0 -4
  266. package/lib/typescript/core/WorkletNode.d.ts.map +0 -1
  267. package/lib/typescript/core/WorkletProcessingNode.d.ts +0 -4
  268. package/lib/typescript/core/WorkletProcessingNode.d.ts.map +0 -1
  269. package/lib/typescript/core/WorkletSourceNode.d.ts +0 -4
  270. package/lib/typescript/core/WorkletSourceNode.d.ts.map +0 -1
  271. package/lib/typescript/hooks/useSystemVolume.d.ts.map +0 -1
  272. package/lib/typescript/web-core/ConstantSourceNode.d.ts +0 -8
  273. package/lib/typescript/web-core/ConstantSourceNode.d.ts.map +0 -1
  274. package/src/core/ConstantSourceNode.ts +0 -13
  275. package/src/core/WorkletNode.ts +0 -3
  276. package/src/core/WorkletProcessingNode.ts +0 -3
  277. package/src/core/WorkletSourceNode.ts +0 -3
  278. package/src/web-core/ConstantSourceNode.tsx +0 -12
  279. /package/common/cpp/audioapi/HostObjects/{destinations/AudioDestinationNodeHostObject.h → AudioDestinationNodeHostObject.h} +0 -0
  280. /package/common/cpp/audioapi/HostObjects/{effects/PeriodicWaveHostObject.h → PeriodicWaveHostObject.h} +0 -0
  281. /package/common/cpp/audioapi/core/{utils/AudioParamEventQueue.h → AudioParamEventQueue.h} +0 -0
  282. /package/src/hooks/{useSystemVolume.ts → useSytemVolume.ts} +0 -0
@@ -1,365 +1,9 @@
1
1
  #include <audioapi/HostObjects/BaseAudioContextHostObject.h>
2
2
 
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
-
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
21
7
  namespace audioapi {
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
8
+ BaseAudioContextHostObject::~BaseAudioContextHostObject() = default;
9
+ }
@@ -2,6 +2,19 @@
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>
5
18
 
6
19
  #include <jsi/jsi.h>
7
20
  #include <memory>
@@ -12,40 +25,239 @@
12
25
  namespace audioapi {
13
26
  using namespace facebook;
14
27
 
15
- class BaseAudioContext;
16
-
17
28
  class BaseAudioContextHostObject : public JsiHostObject {
18
29
  public:
19
30
  explicit BaseAudioContextHostObject(
20
31
  const std::shared_ptr<BaseAudioContext> &context,
21
32
  jsi::Runtime *runtime,
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_;
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_;
49
261
 
50
262
  protected:
51
263
  std::shared_ptr<PromiseVendor> promiseVendor_;