react-native-audio-api 0.8.3 → 0.9.0-nightly-96a5bcd-20251007

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 (312) hide show
  1. package/README.md +40 -39
  2. package/RNAudioAPI.podspec +17 -12
  3. package/android/build.gradle +44 -4
  4. package/android/src/main/cpp/audioapi/CMakeLists.txt +65 -0
  5. package/android/src/main/cpp/audioapi/android/AudioAPIModule.cpp +29 -1
  6. package/android/src/main/cpp/audioapi/android/AudioAPIModule.h +14 -0
  7. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.cpp +7 -1
  8. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +6 -1
  9. package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +1 -1
  10. package/android/src/main/cpp/audioapi/android/core/NativeAudioRecorder.hpp +36 -0
  11. package/android/src/main/cpp/audioapi/android/core/{AudioDecoder.cpp → utils/AudioDecoder.cpp} +79 -75
  12. package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +11 -1
  13. package/android/src/main/java/com/swmansion/audioapi/core/NativeAudioRecorder.kt +24 -0
  14. package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionManager.kt +15 -2
  15. package/common/cpp/audioapi/AudioAPIModuleInstaller.h +129 -38
  16. package/common/cpp/audioapi/HostObjects/AudioContextHostObject.cpp +57 -0
  17. package/common/cpp/audioapi/HostObjects/AudioContextHostObject.h +6 -46
  18. package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.cpp +70 -6
  19. package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.h +10 -66
  20. package/common/cpp/audioapi/HostObjects/AudioParamHostObject.cpp +105 -0
  21. package/common/cpp/audioapi/HostObjects/AudioParamHostObject.h +17 -91
  22. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +262 -6
  23. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +26 -241
  24. package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.cpp +70 -0
  25. package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.h +6 -50
  26. package/common/cpp/audioapi/HostObjects/WorkletNodeHostObject.h +18 -0
  27. package/common/cpp/audioapi/HostObjects/WorkletProcessingNodeHostObject.h +18 -0
  28. package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.cpp +148 -0
  29. package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.h +37 -0
  30. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp +92 -0
  31. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.h +29 -0
  32. package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.cpp +20 -0
  33. package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.h +19 -0
  34. package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.cpp +21 -0
  35. package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.h +21 -0
  36. package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.cpp +41 -0
  37. package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.h +28 -0
  38. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.cpp +69 -0
  39. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +33 -0
  40. package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.cpp +73 -0
  41. package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.h +29 -0
  42. package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.cpp +94 -0
  43. package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.h +46 -0
  44. package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.cpp +60 -0
  45. package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.h +25 -0
  46. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.cpp +152 -0
  47. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.h +37 -0
  48. package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.cpp +52 -0
  49. package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.h +25 -0
  50. package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.cpp +19 -0
  51. package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.h +21 -0
  52. package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.cpp +55 -0
  53. package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.h +27 -0
  54. package/common/cpp/audioapi/HostObjects/{RecorderAdapterNodeHostObject.h → sources/RecorderAdapterNodeHostObject.h} +1 -2
  55. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.cpp +22 -0
  56. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.h +28 -0
  57. package/common/cpp/audioapi/HostObjects/sources/WorkletSourceNodeHostObject.h +18 -0
  58. package/common/cpp/audioapi/HostObjects/utils/AudioDecoderHostObject.cpp +107 -0
  59. package/common/cpp/audioapi/HostObjects/utils/AudioDecoderHostObject.h +28 -0
  60. package/common/cpp/audioapi/core/AudioContext.cpp +3 -4
  61. package/common/cpp/audioapi/core/AudioContext.h +2 -1
  62. package/common/cpp/audioapi/core/AudioNode.cpp +3 -3
  63. package/common/cpp/audioapi/core/AudioNode.h +2 -2
  64. package/common/cpp/audioapi/core/AudioParam.cpp +2 -2
  65. package/common/cpp/audioapi/core/AudioParam.h +1 -1
  66. package/common/cpp/audioapi/core/BaseAudioContext.cpp +47 -38
  67. package/common/cpp/audioapi/core/BaseAudioContext.h +17 -16
  68. package/common/cpp/audioapi/core/OfflineAudioContext.cpp +4 -5
  69. package/common/cpp/audioapi/core/OfflineAudioContext.h +2 -1
  70. package/common/cpp/audioapi/core/analysis/AnalyserNode.cpp +3 -1
  71. package/common/cpp/audioapi/core/analysis/AnalyserNode.h +1 -1
  72. package/common/cpp/audioapi/core/destinations/AudioDestinationNode.h +1 -1
  73. package/common/cpp/audioapi/core/effects/BiquadFilterNode.cpp +3 -1
  74. package/common/cpp/audioapi/core/effects/BiquadFilterNode.h +1 -1
  75. package/common/cpp/audioapi/core/effects/GainNode.cpp +3 -1
  76. package/common/cpp/audioapi/core/effects/GainNode.h +1 -1
  77. package/common/cpp/audioapi/core/effects/PeriodicWave.cpp +1 -1
  78. package/common/cpp/audioapi/core/effects/StereoPannerNode.cpp +18 -13
  79. package/common/cpp/audioapi/core/effects/StereoPannerNode.h +1 -1
  80. package/common/cpp/audioapi/core/effects/WorkletNode.cpp +89 -0
  81. package/common/cpp/audioapi/core/effects/WorkletNode.h +65 -0
  82. package/common/cpp/audioapi/core/effects/WorkletProcessingNode.cpp +91 -0
  83. package/common/cpp/audioapi/core/effects/WorkletProcessingNode.h +52 -0
  84. package/common/cpp/audioapi/core/inputs/AudioRecorder.cpp +1 -1
  85. package/common/cpp/audioapi/core/inputs/AudioRecorder.h +2 -2
  86. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +47 -10
  87. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +18 -3
  88. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +98 -14
  89. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +9 -3
  90. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +37 -44
  91. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +7 -9
  92. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +1 -6
  93. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +1 -1
  94. package/common/cpp/audioapi/core/sources/ConstantSourceNode.cpp +53 -0
  95. package/common/cpp/audioapi/core/sources/ConstantSourceNode.h +26 -0
  96. package/common/cpp/audioapi/core/sources/OscillatorNode.cpp +7 -2
  97. package/common/cpp/audioapi/core/sources/OscillatorNode.h +1 -1
  98. package/common/cpp/audioapi/core/sources/RecorderAdapterNode.cpp +3 -1
  99. package/common/cpp/audioapi/core/sources/RecorderAdapterNode.h +1 -1
  100. package/common/cpp/audioapi/core/sources/StreamerNode.cpp +9 -1
  101. package/common/cpp/audioapi/core/sources/StreamerNode.h +1 -9
  102. package/common/cpp/audioapi/core/sources/WorkletSourceNode.cpp +84 -0
  103. package/common/cpp/audioapi/core/sources/WorkletSourceNode.h +47 -0
  104. package/common/cpp/audioapi/core/types/AudioFormat.h +16 -0
  105. package/common/cpp/audioapi/core/utils/AudioDecoder.h +36 -90
  106. package/common/cpp/audioapi/core/{AudioParamEventQueue.cpp → utils/AudioParamEventQueue.cpp} +13 -7
  107. package/common/cpp/audioapi/core/{Constants.h → utils/Constants.h} +5 -0
  108. package/common/cpp/audioapi/core/utils/worklets/SafeIncludes.h +52 -0
  109. package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.cpp +9 -0
  110. package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.h +73 -0
  111. package/common/cpp/audioapi/dsp/Windows.cpp +1 -1
  112. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.cpp +1 -1
  113. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +2 -1
  114. package/common/cpp/audioapi/jsi/AudioArrayBuffer.h +14 -1
  115. package/common/cpp/audioapi/jsi/JsiHostObject.h +6 -12
  116. package/common/cpp/audioapi/jsi/JsiPromise.cpp +49 -0
  117. package/common/cpp/audioapi/jsi/JsiPromise.h +29 -1
  118. package/common/cpp/audioapi/libs/ffmpeg/FFmpegDecoding.cpp +241 -282
  119. package/common/cpp/audioapi/libs/ffmpeg/FFmpegDecoding.h +57 -19
  120. package/common/cpp/audioapi/utils/AudioBus.cpp +1 -1
  121. package/common/cpp/audioapi/utils/ThreadPool.hpp +104 -0
  122. package/common/cpp/test/AudioParamTest.cpp +204 -0
  123. package/common/cpp/test/CMakeLists.txt +13 -4
  124. package/common/cpp/test/GainTest.cpp +11 -10
  125. package/common/cpp/test/OscillatorTest.cpp +2 -1
  126. package/common/cpp/test/StereoPannerTest.cpp +129 -0
  127. package/ios/audioapi/ios/AudioAPIModule.mm +32 -5
  128. package/ios/audioapi/ios/core/IOSAudioPlayer.mm +1 -1
  129. package/ios/audioapi/ios/core/IOSAudioRecorder.mm +1 -1
  130. package/ios/audioapi/ios/core/utils/AudioDecoder.mm +160 -0
  131. package/lib/commonjs/api.js +50 -3
  132. package/lib/commonjs/api.js.map +1 -1
  133. package/lib/commonjs/api.web.js +8 -0
  134. package/lib/commonjs/api.web.js.map +1 -1
  135. package/lib/commonjs/core/AudioBufferBaseSourceNode.js +7 -7
  136. package/lib/commonjs/core/AudioBufferBaseSourceNode.js.map +1 -1
  137. package/lib/commonjs/core/AudioBufferQueueSourceNode.js +1 -6
  138. package/lib/commonjs/core/AudioBufferQueueSourceNode.js.map +1 -1
  139. package/lib/commonjs/core/AudioBufferSourceNode.js +15 -0
  140. package/lib/commonjs/core/AudioBufferSourceNode.js.map +1 -1
  141. package/lib/commonjs/core/AudioContext.js +10 -1
  142. package/lib/commonjs/core/AudioContext.js.map +1 -1
  143. package/lib/commonjs/core/AudioDecoder.js +48 -0
  144. package/lib/commonjs/core/AudioDecoder.js.map +1 -0
  145. package/lib/commonjs/core/AudioScheduledSourceNode.js +4 -4
  146. package/lib/commonjs/core/AudioScheduledSourceNode.js.map +1 -1
  147. package/lib/commonjs/core/BaseAudioContext.js +76 -28
  148. package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
  149. package/lib/commonjs/core/ConstantSourceNode.js +17 -0
  150. package/lib/commonjs/core/ConstantSourceNode.js.map +1 -0
  151. package/lib/commonjs/core/OfflineAudioContext.js +11 -2
  152. package/lib/commonjs/core/OfflineAudioContext.js.map +1 -1
  153. package/lib/commonjs/core/OscillatorNode.js +6 -0
  154. package/lib/commonjs/core/OscillatorNode.js.map +1 -1
  155. package/lib/commonjs/core/WorkletNode.js +11 -0
  156. package/lib/commonjs/core/WorkletNode.js.map +1 -0
  157. package/lib/commonjs/core/WorkletProcessingNode.js +11 -0
  158. package/lib/commonjs/core/WorkletProcessingNode.js.map +1 -0
  159. package/lib/commonjs/core/WorkletSourceNode.js +11 -0
  160. package/lib/commonjs/core/WorkletSourceNode.js.map +1 -0
  161. package/lib/commonjs/hooks/{useSytemVolume.js → useSystemVolume.js} +1 -1
  162. package/lib/commonjs/hooks/useSystemVolume.js.map +1 -0
  163. package/lib/commonjs/utils/index.js +9 -0
  164. package/lib/commonjs/utils/index.js.map +1 -1
  165. package/lib/commonjs/web-core/AudioContext.js +4 -0
  166. package/lib/commonjs/web-core/AudioContext.js.map +1 -1
  167. package/lib/commonjs/web-core/AudioScheduledSourceNode.js +1 -1
  168. package/lib/commonjs/web-core/AudioScheduledSourceNode.js.map +1 -1
  169. package/lib/commonjs/web-core/ConstantSourceNode.js +17 -0
  170. package/lib/commonjs/web-core/ConstantSourceNode.js.map +1 -0
  171. package/lib/commonjs/web-core/OfflineAudioContext.js +4 -0
  172. package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
  173. package/lib/module/api.js +8 -3
  174. package/lib/module/api.js.map +1 -1
  175. package/lib/module/api.web.js +1 -0
  176. package/lib/module/api.web.js.map +1 -1
  177. package/lib/module/core/AudioBufferBaseSourceNode.js +7 -7
  178. package/lib/module/core/AudioBufferBaseSourceNode.js.map +1 -1
  179. package/lib/module/core/AudioBufferQueueSourceNode.js +1 -6
  180. package/lib/module/core/AudioBufferQueueSourceNode.js.map +1 -1
  181. package/lib/module/core/AudioBufferSourceNode.js +15 -0
  182. package/lib/module/core/AudioBufferSourceNode.js.map +1 -1
  183. package/lib/module/core/AudioContext.js +10 -1
  184. package/lib/module/core/AudioContext.js.map +1 -1
  185. package/lib/module/core/AudioDecoder.js +42 -0
  186. package/lib/module/core/AudioDecoder.js.map +1 -0
  187. package/lib/module/core/AudioScheduledSourceNode.js +4 -4
  188. package/lib/module/core/AudioScheduledSourceNode.js.map +1 -1
  189. package/lib/module/core/BaseAudioContext.js +76 -28
  190. package/lib/module/core/BaseAudioContext.js.map +1 -1
  191. package/lib/module/core/ConstantSourceNode.js +11 -0
  192. package/lib/module/core/ConstantSourceNode.js.map +1 -0
  193. package/lib/module/core/OfflineAudioContext.js +11 -2
  194. package/lib/module/core/OfflineAudioContext.js.map +1 -1
  195. package/lib/module/core/OscillatorNode.js +6 -0
  196. package/lib/module/core/OscillatorNode.js.map +1 -1
  197. package/lib/module/core/WorkletNode.js +5 -0
  198. package/lib/module/core/WorkletNode.js.map +1 -0
  199. package/lib/module/core/WorkletProcessingNode.js +5 -0
  200. package/lib/module/core/WorkletProcessingNode.js.map +1 -0
  201. package/lib/module/core/WorkletSourceNode.js +5 -0
  202. package/lib/module/core/WorkletSourceNode.js.map +1 -0
  203. package/lib/module/hooks/{useSytemVolume.js → useSystemVolume.js} +1 -1
  204. package/lib/module/hooks/useSystemVolume.js.map +1 -0
  205. package/lib/module/utils/index.js +8 -0
  206. package/lib/module/utils/index.js.map +1 -1
  207. package/lib/module/web-core/AudioContext.js +4 -0
  208. package/lib/module/web-core/AudioContext.js.map +1 -1
  209. package/lib/module/web-core/AudioScheduledSourceNode.js +1 -1
  210. package/lib/module/web-core/AudioScheduledSourceNode.js.map +1 -1
  211. package/lib/module/web-core/ConstantSourceNode.js +11 -0
  212. package/lib/module/web-core/ConstantSourceNode.js.map +1 -0
  213. package/lib/module/web-core/OfflineAudioContext.js +4 -0
  214. package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
  215. package/lib/typescript/api.d.ts +11 -5
  216. package/lib/typescript/api.d.ts.map +1 -1
  217. package/lib/typescript/api.web.d.ts +1 -0
  218. package/lib/typescript/api.web.d.ts.map +1 -1
  219. package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts +2 -2
  220. package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts.map +1 -1
  221. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts +1 -1
  222. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts.map +1 -1
  223. package/lib/typescript/core/AudioBufferSourceNode.d.ts +4 -0
  224. package/lib/typescript/core/AudioBufferSourceNode.d.ts.map +1 -1
  225. package/lib/typescript/core/AudioContext.d.ts +1 -0
  226. package/lib/typescript/core/AudioContext.d.ts.map +1 -1
  227. package/lib/typescript/core/AudioDecoder.d.ts +4 -0
  228. package/lib/typescript/core/AudioDecoder.d.ts.map +1 -0
  229. package/lib/typescript/core/AudioScheduledSourceNode.d.ts +1 -1
  230. package/lib/typescript/core/BaseAudioContext.d.ts +21 -16
  231. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
  232. package/lib/typescript/core/ConstantSourceNode.d.ts +9 -0
  233. package/lib/typescript/core/ConstantSourceNode.d.ts.map +1 -0
  234. package/lib/typescript/core/OfflineAudioContext.d.ts +1 -0
  235. package/lib/typescript/core/OfflineAudioContext.d.ts.map +1 -1
  236. package/lib/typescript/core/OscillatorNode.d.ts +3 -0
  237. package/lib/typescript/core/OscillatorNode.d.ts.map +1 -1
  238. package/lib/typescript/core/WorkletNode.d.ts +4 -0
  239. package/lib/typescript/core/WorkletNode.d.ts.map +1 -0
  240. package/lib/typescript/core/WorkletProcessingNode.d.ts +4 -0
  241. package/lib/typescript/core/WorkletProcessingNode.d.ts.map +1 -0
  242. package/lib/typescript/core/WorkletSourceNode.d.ts +4 -0
  243. package/lib/typescript/core/WorkletSourceNode.d.ts.map +1 -0
  244. package/lib/typescript/events/types.d.ts +2 -0
  245. package/lib/typescript/events/types.d.ts.map +1 -1
  246. package/lib/typescript/hooks/{useSytemVolume.d.ts → useSystemVolume.d.ts} +1 -1
  247. package/lib/typescript/hooks/useSystemVolume.d.ts.map +1 -0
  248. package/lib/typescript/interfaces.d.ts +27 -6
  249. package/lib/typescript/interfaces.d.ts.map +1 -1
  250. package/lib/typescript/types.d.ts +2 -1
  251. package/lib/typescript/types.d.ts.map +1 -1
  252. package/lib/typescript/utils/index.d.ts +8 -0
  253. package/lib/typescript/utils/index.d.ts.map +1 -1
  254. package/lib/typescript/web-core/AudioBufferSourceNode.d.ts +1 -1
  255. package/lib/typescript/web-core/AudioContext.d.ts +4 -2
  256. package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
  257. package/lib/typescript/web-core/AudioScheduledSourceNode.d.ts +1 -1
  258. package/lib/typescript/web-core/BaseAudioContext.d.ts +2 -0
  259. package/lib/typescript/web-core/BaseAudioContext.d.ts.map +1 -1
  260. package/lib/typescript/web-core/ConstantSourceNode.d.ts +8 -0
  261. package/lib/typescript/web-core/ConstantSourceNode.d.ts.map +1 -0
  262. package/lib/typescript/web-core/OfflineAudioContext.d.ts +4 -2
  263. package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
  264. package/package.json +3 -2
  265. package/src/api.ts +17 -3
  266. package/src/api.web.ts +1 -0
  267. package/src/core/AudioBufferBaseSourceNode.ts +9 -9
  268. package/src/core/AudioBufferQueueSourceNode.ts +1 -9
  269. package/src/core/AudioBufferSourceNode.ts +28 -0
  270. package/src/core/AudioContext.ts +12 -1
  271. package/src/core/AudioDecoder.ts +78 -0
  272. package/src/core/AudioScheduledSourceNode.ts +5 -5
  273. package/src/core/BaseAudioContext.ts +174 -41
  274. package/src/core/ConstantSourceNode.ts +13 -0
  275. package/src/core/OfflineAudioContext.ts +18 -2
  276. package/src/core/OscillatorNode.ts +11 -0
  277. package/src/core/WorkletNode.ts +3 -0
  278. package/src/core/WorkletProcessingNode.ts +3 -0
  279. package/src/core/WorkletSourceNode.ts +3 -0
  280. package/src/events/types.ts +2 -0
  281. package/src/interfaces.ts +77 -11
  282. package/src/types.ts +3 -1
  283. package/src/utils/index.ts +21 -0
  284. package/src/web-core/AudioBufferSourceNode.tsx +1 -1
  285. package/src/web-core/AudioContext.tsx +7 -2
  286. package/src/web-core/AudioScheduledSourceNode.tsx +1 -1
  287. package/src/web-core/BaseAudioContext.tsx +2 -0
  288. package/src/web-core/ConstantSourceNode.tsx +12 -0
  289. package/src/web-core/OfflineAudioContext.tsx +7 -2
  290. package/common/cpp/audioapi/HostObjects/AnalyserNodeHostObject.h +0 -149
  291. package/common/cpp/audioapi/HostObjects/AudioBufferBaseSourceNodeHostObject.h +0 -76
  292. package/common/cpp/audioapi/HostObjects/AudioBufferHostObject.h +0 -120
  293. package/common/cpp/audioapi/HostObjects/AudioBufferQueueSourceNodeHostObject.h +0 -67
  294. package/common/cpp/audioapi/HostObjects/AudioBufferSourceNodeHostObject.h +0 -142
  295. package/common/cpp/audioapi/HostObjects/AudioRecorderHostObject.h +0 -86
  296. package/common/cpp/audioapi/HostObjects/AudioScheduledSourceNodeHostObject.h +0 -56
  297. package/common/cpp/audioapi/HostObjects/BiquadFilterNodeHostObject.h +0 -89
  298. package/common/cpp/audioapi/HostObjects/GainNodeHostObject.h +0 -27
  299. package/common/cpp/audioapi/HostObjects/OscillatorNodeHostObject.h +0 -65
  300. package/common/cpp/audioapi/HostObjects/StereoPannerNodeHostObject.h +0 -29
  301. package/common/cpp/audioapi/HostObjects/StreamerNodeHostObject.h +0 -30
  302. package/common/cpp/audioapi/events/AudioEventHandlerRegistryHostObject.h +0 -48
  303. package/ios/audioapi/ios/core/AudioDecoder.mm +0 -156
  304. package/ios/audioapi/ios/events/IOSAudioEventHandlerRegistry.h +0 -7
  305. package/ios/audioapi/ios/events/IOSAudioEventHandlerRegistry.mm +0 -12
  306. package/lib/commonjs/hooks/useSytemVolume.js.map +0 -1
  307. package/lib/module/hooks/useSytemVolume.js.map +0 -1
  308. package/lib/typescript/hooks/useSytemVolume.d.ts.map +0 -1
  309. /package/common/cpp/audioapi/HostObjects/{AudioDestinationNodeHostObject.h → destinations/AudioDestinationNodeHostObject.h} +0 -0
  310. /package/common/cpp/audioapi/HostObjects/{PeriodicWaveHostObject.h → effects/PeriodicWaveHostObject.h} +0 -0
  311. /package/common/cpp/audioapi/core/{AudioParamEventQueue.h → utils/AudioParamEventQueue.h} +0 -0
  312. /package/src/hooks/{useSytemVolume.ts → useSystemVolume.ts} +0 -0
@@ -1,9 +1,265 @@
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
+ }
54
+
55
+ JSI_PROPERTY_GETTER_IMPL(BaseAudioContextHostObject, destination) {
56
+ auto destination = std::make_shared<AudioDestinationNodeHostObject>(
57
+ context_->getDestination());
58
+ return jsi::Object::createFromHostObject(runtime, destination);
59
+ }
60
+
61
+ JSI_PROPERTY_GETTER_IMPL(BaseAudioContextHostObject, state) {
62
+ return jsi::String::createFromUtf8(runtime, context_->getState());
63
+ }
64
+
65
+ JSI_PROPERTY_GETTER_IMPL(BaseAudioContextHostObject, sampleRate) {
66
+ return {context_->getSampleRate()};
67
+ }
68
+
69
+ JSI_PROPERTY_GETTER_IMPL(BaseAudioContextHostObject, currentTime) {
70
+ return {context_->getCurrentTime()};
71
+ }
72
+
73
+ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createWorkletSourceNode) {
74
+ #if RN_AUDIO_API_ENABLE_WORKLETS
75
+ auto shareableWorklet =
76
+ worklets::extractSerializableOrThrow<worklets::SerializableWorklet>(
77
+ runtime, args[0]);
78
+ std::weak_ptr<worklets::WorkletRuntime> workletRuntime;
79
+ auto shouldUseUiRuntime = args[1].getBool();
80
+ if (shouldUseUiRuntime) {
81
+ workletRuntime = context_->runtimeRegistry_.uiRuntime;
82
+ } else {
83
+ workletRuntime = context_->runtimeRegistry_.audioRuntime;
84
+ }
85
+
86
+ auto workletSourceNode =
87
+ context_->createWorkletSourceNode(shareableWorklet, workletRuntime);
88
+ auto workletSourceNodeHostObject =
89
+ std::make_shared<WorkletSourceNodeHostObject>(workletSourceNode);
90
+ return jsi::Object::createFromHostObject(
91
+ runtime, workletSourceNodeHostObject);
92
+ #endif
93
+ return jsi::Value::undefined();
94
+ }
95
+
96
+ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createWorkletNode) {
97
+ #if RN_AUDIO_API_ENABLE_WORKLETS
98
+ auto shareableWorklet =
99
+ worklets::extractSerializableOrThrow<worklets::SerializableWorklet>(
100
+ runtime, args[0]);
101
+
102
+ std::weak_ptr<worklets::WorkletRuntime> workletRuntime;
103
+ auto shouldUseUiRuntime = args[1].getBool();
104
+ if (shouldUseUiRuntime) {
105
+ workletRuntime = context_->runtimeRegistry_.uiRuntime;
106
+ } else {
107
+ workletRuntime = context_->runtimeRegistry_.audioRuntime;
108
+ }
109
+ auto bufferLength = static_cast<size_t>(args[2].getNumber());
110
+ auto inputChannelCount = static_cast<size_t>(args[3].getNumber());
111
+
112
+ auto workletNode = context_->createWorkletNode(
113
+ shareableWorklet, workletRuntime, bufferLength, inputChannelCount);
114
+ auto workletNodeHostObject =
115
+ std::make_shared<WorkletNodeHostObject>(workletNode);
116
+ return jsi::Object::createFromHostObject(runtime, workletNodeHostObject);
117
+ #endif
118
+ return jsi::Value::undefined();
119
+ }
120
+
121
+ JSI_HOST_FUNCTION_IMPL(
122
+ BaseAudioContextHostObject,
123
+ createWorkletProcessingNode) {
124
+ #if RN_AUDIO_API_ENABLE_WORKLETS
125
+ auto shareableWorklet =
126
+ worklets::extractSerializableOrThrow<worklets::SerializableWorklet>(
127
+ runtime, args[0]);
128
+
129
+ std::weak_ptr<worklets::WorkletRuntime> workletRuntime;
130
+ auto shouldUseUiRuntime = args[1].getBool();
131
+ if (shouldUseUiRuntime) {
132
+ workletRuntime = context_->runtimeRegistry_.uiRuntime;
133
+ } else {
134
+ workletRuntime = context_->runtimeRegistry_.audioRuntime;
135
+ }
136
+
137
+ auto workletProcessingNode =
138
+ context_->createWorkletProcessingNode(shareableWorklet, workletRuntime);
139
+ auto workletProcessingNodeHostObject =
140
+ std::make_shared<WorkletProcessingNodeHostObject>(workletProcessingNode);
141
+ return jsi::Object::createFromHostObject(
142
+ runtime, workletProcessingNodeHostObject);
143
+ #endif
144
+ return jsi::Value::undefined();
145
+ }
146
+
147
+ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createRecorderAdapter) {
148
+ auto recorderAdapter = context_->createRecorderAdapter();
149
+ auto recorderAdapterHostObject =
150
+ std::make_shared<RecorderAdapterNodeHostObject>(recorderAdapter);
151
+ return jsi::Object::createFromHostObject(runtime, recorderAdapterHostObject);
152
+ }
153
+
154
+ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createOscillator) {
155
+ auto oscillator = context_->createOscillator();
156
+ auto oscillatorHostObject =
157
+ std::make_shared<OscillatorNodeHostObject>(oscillator);
158
+ return jsi::Object::createFromHostObject(runtime, oscillatorHostObject);
159
+ }
160
+
161
+ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createStreamer) {
162
+ auto streamer = context_->createStreamer();
163
+ auto streamerHostObject = std::make_shared<StreamerNodeHostObject>(streamer);
164
+ auto object = jsi::Object::createFromHostObject(runtime, streamerHostObject);
165
+ object.setExternalMemoryPressure(
166
+ runtime, StreamerNodeHostObject::getSizeInBytes());
167
+ return object;
168
+ }
169
+
170
+ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createConstantSource) {
171
+ auto constantSource = context_->createConstantSource();
172
+ auto constantSourceHostObject =
173
+ std::make_shared<ConstantSourceNodeHostObject>(constantSource);
174
+ return jsi::Object::createFromHostObject(runtime, constantSourceHostObject);
175
+ }
176
+
177
+ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createGain) {
178
+ auto gain = context_->createGain();
179
+ auto gainHostObject = std::make_shared<GainNodeHostObject>(gain);
180
+ return jsi::Object::createFromHostObject(runtime, gainHostObject);
181
+ }
182
+
183
+ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createStereoPanner) {
184
+ auto stereoPanner = context_->createStereoPanner();
185
+ auto stereoPannerHostObject =
186
+ std::make_shared<StereoPannerNodeHostObject>(stereoPanner);
187
+ return jsi::Object::createFromHostObject(runtime, stereoPannerHostObject);
188
+ }
189
+
190
+ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createBiquadFilter) {
191
+ auto biquadFilter = context_->createBiquadFilter();
192
+ auto biquadFilterHostObject =
193
+ std::make_shared<BiquadFilterNodeHostObject>(biquadFilter);
194
+ return jsi::Object::createFromHostObject(runtime, biquadFilterHostObject);
195
+ }
196
+
197
+ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createBufferSource) {
198
+ auto pitchCorrection = args[0].asBool();
199
+ auto bufferSource = context_->createBufferSource(pitchCorrection);
200
+ auto bufferSourceHostObject =
201
+ std::make_shared<AudioBufferSourceNodeHostObject>(bufferSource);
202
+ return jsi::Object::createFromHostObject(runtime, bufferSourceHostObject);
203
+ }
204
+
205
+ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createBufferQueueSource) {
206
+ auto pitchCorrection = args[0].asBool();
207
+ auto bufferSource = context_->createBufferQueueSource(pitchCorrection);
208
+ auto bufferStreamSourceHostObject =
209
+ std::make_shared<AudioBufferQueueSourceNodeHostObject>(bufferSource);
210
+ return jsi::Object::createFromHostObject(
211
+ runtime, bufferStreamSourceHostObject);
212
+ }
213
+
214
+ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createBuffer) {
215
+ auto numberOfChannels = static_cast<int>(args[0].getNumber());
216
+ auto length = static_cast<size_t>(args[1].getNumber());
217
+ auto sampleRate = static_cast<float>(args[2].getNumber());
218
+ auto buffer =
219
+ BaseAudioContext::createBuffer(numberOfChannels, length, sampleRate);
220
+ auto bufferHostObject = std::make_shared<AudioBufferHostObject>(buffer);
221
+
222
+ auto jsiObject = jsi::Object::createFromHostObject(runtime, bufferHostObject);
223
+ jsiObject.setExternalMemoryPressure(
224
+ runtime, bufferHostObject->getSizeInBytes());
225
+
226
+ return jsiObject;
227
+ }
228
+
229
+ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createPeriodicWave) {
230
+ auto arrayBufferReal = args[0]
231
+ .getObject(runtime)
232
+ .getPropertyAsObject(runtime, "buffer")
233
+ .getArrayBuffer(runtime);
234
+ auto real = reinterpret_cast<float *>(arrayBufferReal.data(runtime));
235
+ auto length = static_cast<int>(arrayBufferReal.size(runtime));
236
+
237
+ auto arrayBufferImag = args[1]
238
+ .getObject(runtime)
239
+ .getPropertyAsObject(runtime, "buffer")
240
+ .getArrayBuffer(runtime);
241
+ auto imag = reinterpret_cast<float *>(arrayBufferImag.data(runtime));
242
+
243
+ auto disableNormalization = args[2].getBool();
244
+
245
+ auto complexData = std::vector<std::complex<float>>(length);
246
+
247
+ for (size_t i = 0; i < length; i++) {
248
+ complexData[i] = std::complex<float>(
249
+ static_cast<float>(real[i]), static_cast<float>(imag[i]));
250
+ }
251
+
252
+ auto periodicWave =
253
+ context_->createPeriodicWave(complexData, disableNormalization, length);
254
+ auto periodicWaveHostObject =
255
+ std::make_shared<PeriodicWaveHostObject>(periodicWave);
256
+
257
+ return jsi::Object::createFromHostObject(runtime, periodicWaveHostObject);
258
+ }
259
+
260
+ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createAnalyser) {
261
+ auto analyser = context_->createAnalyser();
262
+ auto analyserHostObject = std::make_shared<AnalyserNodeHostObject>(analyser);
263
+ return jsi::Object::createFromHostObject(runtime, analyserHostObject);
264
+ }
265
+ } // 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,37 @@
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
+
45
+ std::shared_ptr<BaseAudioContext> context_;
261
46
 
262
47
  protected:
263
48
  std::shared_ptr<PromiseVendor> promiseVendor_;
@@ -0,0 +1,70 @@
1
+ #include <audioapi/HostObjects/OfflineAudioContextHostObject.h>
2
+
3
+ #include <audioapi/HostObjects/sources/AudioBufferHostObject.h>
4
+ #include <audioapi/core/OfflineAudioContext.h>
5
+
6
+ namespace audioapi {
7
+
8
+ OfflineAudioContextHostObject::OfflineAudioContextHostObject(
9
+ const std::shared_ptr<OfflineAudioContext> &offlineAudioContext,
10
+ jsi::Runtime *runtime,
11
+ const std::shared_ptr<react::CallInvoker> &callInvoker)
12
+ : BaseAudioContextHostObject(offlineAudioContext, runtime, callInvoker) {
13
+ addFunctions(
14
+ JSI_EXPORT_FUNCTION(OfflineAudioContextHostObject, resume),
15
+ JSI_EXPORT_FUNCTION(OfflineAudioContextHostObject, suspend),
16
+ JSI_EXPORT_FUNCTION(OfflineAudioContextHostObject, startRendering));
17
+ }
18
+
19
+ JSI_HOST_FUNCTION_IMPL(OfflineAudioContextHostObject, resume) {
20
+ auto promise = promiseVendor_->createPromise(
21
+ [this](const std::shared_ptr<Promise> &promise) {
22
+ auto audioContext =
23
+ std::static_pointer_cast<OfflineAudioContext>(context_);
24
+ audioContext->resume();
25
+ });
26
+
27
+ return promise;
28
+ }
29
+
30
+ JSI_HOST_FUNCTION_IMPL(OfflineAudioContextHostObject, suspend) {
31
+ double when = args[0].getNumber();
32
+
33
+ auto promise = promiseVendor_->createPromise(
34
+ [this, when](const std::shared_ptr<Promise> &promise) {
35
+ auto audioContext =
36
+ std::static_pointer_cast<OfflineAudioContext>(context_);
37
+ OfflineAudioContextSuspendCallback callback = [promise]() {
38
+ promise->resolve(
39
+ [](jsi::Runtime &runtime) { return jsi::Value::undefined(); });
40
+ };
41
+ audioContext->suspend(when, callback);
42
+ });
43
+
44
+ return promise;
45
+ }
46
+
47
+ JSI_HOST_FUNCTION_IMPL(OfflineAudioContextHostObject, startRendering) {
48
+ auto promise = promiseVendor_->createPromise(
49
+ [this](const std::shared_ptr<Promise> &promise) {
50
+ auto audioContext =
51
+ std::static_pointer_cast<OfflineAudioContext>(context_);
52
+
53
+ OfflineAudioContextResultCallback callback =
54
+ [promise](const std::shared_ptr<AudioBuffer> &audioBuffer) -> void {
55
+ auto audioBufferHostObject =
56
+ std::make_shared<AudioBufferHostObject>(audioBuffer);
57
+ promise->resolve([audioBufferHostObject = std::move(
58
+ audioBufferHostObject)](jsi::Runtime &runtime) {
59
+ return jsi::Object::createFromHostObject(
60
+ runtime, audioBufferHostObject);
61
+ });
62
+ };
63
+
64
+ audioContext->startRendering(callback);
65
+ });
66
+
67
+ return promise;
68
+ }
69
+
70
+ } // namespace audioapi