react-native-audio-api 0.8.3 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (296) hide show
  1. package/README.md +40 -39
  2. package/RNAudioAPI.podspec +17 -12
  3. package/android/build.gradle +44 -4
  4. package/android/src/main/cpp/audioapi/CMakeLists.txt +65 -0
  5. package/android/src/main/cpp/audioapi/android/AudioAPIModule.cpp +29 -1
  6. package/android/src/main/cpp/audioapi/android/AudioAPIModule.h +14 -0
  7. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.cpp +7 -1
  8. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +6 -1
  9. package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +1 -1
  10. package/android/src/main/cpp/audioapi/android/core/NativeAudioRecorder.hpp +36 -0
  11. package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +11 -1
  12. package/android/src/main/java/com/swmansion/audioapi/core/NativeAudioRecorder.kt +24 -0
  13. package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionManager.kt +15 -2
  14. package/common/cpp/audioapi/AudioAPIModuleInstaller.h +53 -18
  15. package/common/cpp/audioapi/HostObjects/AudioContextHostObject.cpp +57 -0
  16. package/common/cpp/audioapi/HostObjects/AudioContextHostObject.h +6 -46
  17. package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.cpp +70 -6
  18. package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.h +10 -66
  19. package/common/cpp/audioapi/HostObjects/AudioParamHostObject.cpp +105 -0
  20. package/common/cpp/audioapi/HostObjects/AudioParamHostObject.h +17 -91
  21. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +362 -6
  22. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +29 -241
  23. package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.cpp +70 -0
  24. package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.h +6 -50
  25. package/common/cpp/audioapi/HostObjects/WorkletNodeHostObject.h +18 -0
  26. package/common/cpp/audioapi/HostObjects/WorkletProcessingNodeHostObject.h +18 -0
  27. package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.cpp +148 -0
  28. package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.h +37 -0
  29. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp +92 -0
  30. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.h +29 -0
  31. package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.cpp +20 -0
  32. package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.h +19 -0
  33. package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.cpp +21 -0
  34. package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.h +21 -0
  35. package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.cpp +41 -0
  36. package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.h +28 -0
  37. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.cpp +69 -0
  38. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +33 -0
  39. package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.cpp +73 -0
  40. package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.h +29 -0
  41. package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.cpp +94 -0
  42. package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.h +46 -0
  43. package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.cpp +60 -0
  44. package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.h +25 -0
  45. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.cpp +152 -0
  46. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.h +37 -0
  47. package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.cpp +52 -0
  48. package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.h +25 -0
  49. package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.cpp +19 -0
  50. package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.h +21 -0
  51. package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.cpp +55 -0
  52. package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.h +27 -0
  53. package/common/cpp/audioapi/HostObjects/{RecorderAdapterNodeHostObject.h → sources/RecorderAdapterNodeHostObject.h} +1 -2
  54. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.cpp +22 -0
  55. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.h +28 -0
  56. package/common/cpp/audioapi/HostObjects/sources/WorkletSourceNodeHostObject.h +18 -0
  57. package/common/cpp/audioapi/core/AudioContext.cpp +3 -2
  58. package/common/cpp/audioapi/core/AudioContext.h +2 -1
  59. package/common/cpp/audioapi/core/AudioNode.cpp +3 -3
  60. package/common/cpp/audioapi/core/AudioNode.h +2 -2
  61. package/common/cpp/audioapi/core/AudioParam.cpp +2 -2
  62. package/common/cpp/audioapi/core/AudioParam.h +1 -1
  63. package/common/cpp/audioapi/core/BaseAudioContext.cpp +47 -3
  64. package/common/cpp/audioapi/core/BaseAudioContext.h +13 -4
  65. package/common/cpp/audioapi/core/OfflineAudioContext.cpp +4 -3
  66. package/common/cpp/audioapi/core/OfflineAudioContext.h +2 -1
  67. package/common/cpp/audioapi/core/analysis/AnalyserNode.cpp +3 -1
  68. package/common/cpp/audioapi/core/analysis/AnalyserNode.h +1 -1
  69. package/common/cpp/audioapi/core/destinations/AudioDestinationNode.h +1 -1
  70. package/common/cpp/audioapi/core/effects/BiquadFilterNode.cpp +3 -1
  71. package/common/cpp/audioapi/core/effects/BiquadFilterNode.h +1 -1
  72. package/common/cpp/audioapi/core/effects/GainNode.cpp +3 -1
  73. package/common/cpp/audioapi/core/effects/GainNode.h +1 -1
  74. package/common/cpp/audioapi/core/effects/PeriodicWave.cpp +1 -1
  75. package/common/cpp/audioapi/core/effects/StereoPannerNode.cpp +18 -13
  76. package/common/cpp/audioapi/core/effects/StereoPannerNode.h +1 -1
  77. package/common/cpp/audioapi/core/effects/WorkletNode.cpp +89 -0
  78. package/common/cpp/audioapi/core/effects/WorkletNode.h +65 -0
  79. package/common/cpp/audioapi/core/effects/WorkletProcessingNode.cpp +91 -0
  80. package/common/cpp/audioapi/core/effects/WorkletProcessingNode.h +52 -0
  81. package/common/cpp/audioapi/core/inputs/AudioRecorder.cpp +1 -1
  82. package/common/cpp/audioapi/core/inputs/AudioRecorder.h +2 -2
  83. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +47 -10
  84. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +18 -3
  85. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +98 -14
  86. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +9 -3
  87. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +37 -44
  88. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +7 -9
  89. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +1 -6
  90. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +1 -1
  91. package/common/cpp/audioapi/core/sources/ConstantSourceNode.cpp +53 -0
  92. package/common/cpp/audioapi/core/sources/ConstantSourceNode.h +26 -0
  93. package/common/cpp/audioapi/core/sources/OscillatorNode.cpp +7 -2
  94. package/common/cpp/audioapi/core/sources/OscillatorNode.h +1 -1
  95. package/common/cpp/audioapi/core/sources/RecorderAdapterNode.cpp +3 -1
  96. package/common/cpp/audioapi/core/sources/RecorderAdapterNode.h +1 -1
  97. package/common/cpp/audioapi/core/sources/StreamerNode.cpp +9 -1
  98. package/common/cpp/audioapi/core/sources/StreamerNode.h +1 -9
  99. package/common/cpp/audioapi/core/sources/WorkletSourceNode.cpp +84 -0
  100. package/common/cpp/audioapi/core/sources/WorkletSourceNode.h +47 -0
  101. package/common/cpp/audioapi/core/{AudioParamEventQueue.cpp → utils/AudioParamEventQueue.cpp} +13 -7
  102. package/common/cpp/audioapi/core/{Constants.h → utils/Constants.h} +5 -0
  103. package/common/cpp/audioapi/core/utils/worklets/SafeIncludes.h +52 -0
  104. package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.cpp +9 -0
  105. package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.h +73 -0
  106. package/common/cpp/audioapi/dsp/Windows.cpp +1 -1
  107. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.cpp +1 -1
  108. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +2 -1
  109. package/common/cpp/audioapi/jsi/AudioArrayBuffer.h +14 -1
  110. package/common/cpp/audioapi/jsi/JsiHostObject.h +6 -12
  111. package/common/cpp/audioapi/jsi/JsiPromise.cpp +49 -0
  112. package/common/cpp/audioapi/jsi/JsiPromise.h +29 -1
  113. package/common/cpp/audioapi/utils/AudioBus.cpp +1 -1
  114. package/common/cpp/audioapi/utils/ThreadPool.hpp +104 -0
  115. package/common/cpp/test/AudioParamTest.cpp +204 -0
  116. package/common/cpp/test/CMakeLists.txt +12 -3
  117. package/common/cpp/test/GainTest.cpp +11 -10
  118. package/common/cpp/test/OscillatorTest.cpp +2 -1
  119. package/common/cpp/test/StereoPannerTest.cpp +129 -0
  120. package/ios/audioapi/ios/AudioAPIModule.mm +32 -5
  121. package/ios/audioapi/ios/core/IOSAudioPlayer.mm +1 -1
  122. package/ios/audioapi/ios/core/IOSAudioRecorder.mm +1 -1
  123. package/lib/commonjs/api.js +36 -2
  124. package/lib/commonjs/api.js.map +1 -1
  125. package/lib/commonjs/api.web.js +8 -0
  126. package/lib/commonjs/api.web.js.map +1 -1
  127. package/lib/commonjs/core/AudioBufferBaseSourceNode.js +7 -7
  128. package/lib/commonjs/core/AudioBufferBaseSourceNode.js.map +1 -1
  129. package/lib/commonjs/core/AudioBufferQueueSourceNode.js +1 -6
  130. package/lib/commonjs/core/AudioBufferQueueSourceNode.js.map +1 -1
  131. package/lib/commonjs/core/AudioBufferSourceNode.js +15 -0
  132. package/lib/commonjs/core/AudioBufferSourceNode.js.map +1 -1
  133. package/lib/commonjs/core/AudioContext.js +10 -1
  134. package/lib/commonjs/core/AudioContext.js.map +1 -1
  135. package/lib/commonjs/core/AudioScheduledSourceNode.js +4 -4
  136. package/lib/commonjs/core/AudioScheduledSourceNode.js.map +1 -1
  137. package/lib/commonjs/core/BaseAudioContext.js +66 -11
  138. package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
  139. package/lib/commonjs/core/ConstantSourceNode.js +17 -0
  140. package/lib/commonjs/core/ConstantSourceNode.js.map +1 -0
  141. package/lib/commonjs/core/OfflineAudioContext.js +11 -2
  142. package/lib/commonjs/core/OfflineAudioContext.js.map +1 -1
  143. package/lib/commonjs/core/OscillatorNode.js +6 -0
  144. package/lib/commonjs/core/OscillatorNode.js.map +1 -1
  145. package/lib/commonjs/core/WorkletNode.js +11 -0
  146. package/lib/commonjs/core/WorkletNode.js.map +1 -0
  147. package/lib/commonjs/core/WorkletProcessingNode.js +11 -0
  148. package/lib/commonjs/core/WorkletProcessingNode.js.map +1 -0
  149. package/lib/commonjs/core/WorkletSourceNode.js +11 -0
  150. package/lib/commonjs/core/WorkletSourceNode.js.map +1 -0
  151. package/lib/commonjs/hooks/{useSytemVolume.js → useSystemVolume.js} +1 -1
  152. package/lib/commonjs/hooks/useSystemVolume.js.map +1 -0
  153. package/lib/commonjs/utils/index.js +9 -0
  154. package/lib/commonjs/utils/index.js.map +1 -1
  155. package/lib/commonjs/web-core/AudioContext.js +4 -0
  156. package/lib/commonjs/web-core/AudioContext.js.map +1 -1
  157. package/lib/commonjs/web-core/AudioScheduledSourceNode.js +1 -1
  158. package/lib/commonjs/web-core/AudioScheduledSourceNode.js.map +1 -1
  159. package/lib/commonjs/web-core/ConstantSourceNode.js +17 -0
  160. package/lib/commonjs/web-core/ConstantSourceNode.js.map +1 -0
  161. package/lib/commonjs/web-core/OfflineAudioContext.js +4 -0
  162. package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
  163. package/lib/module/api.js +6 -2
  164. package/lib/module/api.js.map +1 -1
  165. package/lib/module/api.web.js +1 -0
  166. package/lib/module/api.web.js.map +1 -1
  167. package/lib/module/core/AudioBufferBaseSourceNode.js +7 -7
  168. package/lib/module/core/AudioBufferBaseSourceNode.js.map +1 -1
  169. package/lib/module/core/AudioBufferQueueSourceNode.js +1 -6
  170. package/lib/module/core/AudioBufferQueueSourceNode.js.map +1 -1
  171. package/lib/module/core/AudioBufferSourceNode.js +15 -0
  172. package/lib/module/core/AudioBufferSourceNode.js.map +1 -1
  173. package/lib/module/core/AudioContext.js +10 -1
  174. package/lib/module/core/AudioContext.js.map +1 -1
  175. package/lib/module/core/AudioScheduledSourceNode.js +4 -4
  176. package/lib/module/core/AudioScheduledSourceNode.js.map +1 -1
  177. package/lib/module/core/BaseAudioContext.js +66 -11
  178. package/lib/module/core/BaseAudioContext.js.map +1 -1
  179. package/lib/module/core/ConstantSourceNode.js +11 -0
  180. package/lib/module/core/ConstantSourceNode.js.map +1 -0
  181. package/lib/module/core/OfflineAudioContext.js +11 -2
  182. package/lib/module/core/OfflineAudioContext.js.map +1 -1
  183. package/lib/module/core/OscillatorNode.js +6 -0
  184. package/lib/module/core/OscillatorNode.js.map +1 -1
  185. package/lib/module/core/WorkletNode.js +5 -0
  186. package/lib/module/core/WorkletNode.js.map +1 -0
  187. package/lib/module/core/WorkletProcessingNode.js +5 -0
  188. package/lib/module/core/WorkletProcessingNode.js.map +1 -0
  189. package/lib/module/core/WorkletSourceNode.js +5 -0
  190. package/lib/module/core/WorkletSourceNode.js.map +1 -0
  191. package/lib/module/hooks/{useSytemVolume.js → useSystemVolume.js} +1 -1
  192. package/lib/module/hooks/useSystemVolume.js.map +1 -0
  193. package/lib/module/utils/index.js +8 -0
  194. package/lib/module/utils/index.js.map +1 -1
  195. package/lib/module/web-core/AudioContext.js +4 -0
  196. package/lib/module/web-core/AudioContext.js.map +1 -1
  197. package/lib/module/web-core/AudioScheduledSourceNode.js +1 -1
  198. package/lib/module/web-core/AudioScheduledSourceNode.js.map +1 -1
  199. package/lib/module/web-core/ConstantSourceNode.js +11 -0
  200. package/lib/module/web-core/ConstantSourceNode.js.map +1 -0
  201. package/lib/module/web-core/OfflineAudioContext.js +4 -0
  202. package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
  203. package/lib/typescript/api.d.ts +8 -4
  204. package/lib/typescript/api.d.ts.map +1 -1
  205. package/lib/typescript/api.web.d.ts +1 -0
  206. package/lib/typescript/api.web.d.ts.map +1 -1
  207. package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts +2 -2
  208. package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts.map +1 -1
  209. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts +1 -1
  210. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts.map +1 -1
  211. package/lib/typescript/core/AudioBufferSourceNode.d.ts +4 -0
  212. package/lib/typescript/core/AudioBufferSourceNode.d.ts.map +1 -1
  213. package/lib/typescript/core/AudioContext.d.ts +1 -0
  214. package/lib/typescript/core/AudioContext.d.ts.map +1 -1
  215. package/lib/typescript/core/AudioScheduledSourceNode.d.ts +1 -1
  216. package/lib/typescript/core/BaseAudioContext.d.ts +19 -11
  217. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
  218. package/lib/typescript/core/ConstantSourceNode.d.ts +9 -0
  219. package/lib/typescript/core/ConstantSourceNode.d.ts.map +1 -0
  220. package/lib/typescript/core/OfflineAudioContext.d.ts +1 -0
  221. package/lib/typescript/core/OfflineAudioContext.d.ts.map +1 -1
  222. package/lib/typescript/core/OscillatorNode.d.ts +3 -0
  223. package/lib/typescript/core/OscillatorNode.d.ts.map +1 -1
  224. package/lib/typescript/core/WorkletNode.d.ts +4 -0
  225. package/lib/typescript/core/WorkletNode.d.ts.map +1 -0
  226. package/lib/typescript/core/WorkletProcessingNode.d.ts +4 -0
  227. package/lib/typescript/core/WorkletProcessingNode.d.ts.map +1 -0
  228. package/lib/typescript/core/WorkletSourceNode.d.ts +4 -0
  229. package/lib/typescript/core/WorkletSourceNode.d.ts.map +1 -0
  230. package/lib/typescript/events/types.d.ts +2 -0
  231. package/lib/typescript/events/types.d.ts.map +1 -1
  232. package/lib/typescript/hooks/{useSytemVolume.d.ts → useSystemVolume.d.ts} +1 -1
  233. package/lib/typescript/hooks/useSystemVolume.d.ts.map +1 -0
  234. package/lib/typescript/interfaces.d.ts +21 -3
  235. package/lib/typescript/interfaces.d.ts.map +1 -1
  236. package/lib/typescript/types.d.ts +2 -1
  237. package/lib/typescript/types.d.ts.map +1 -1
  238. package/lib/typescript/utils/index.d.ts +8 -0
  239. package/lib/typescript/utils/index.d.ts.map +1 -1
  240. package/lib/typescript/web-core/AudioBufferSourceNode.d.ts +1 -1
  241. package/lib/typescript/web-core/AudioContext.d.ts +4 -2
  242. package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
  243. package/lib/typescript/web-core/AudioScheduledSourceNode.d.ts +1 -1
  244. package/lib/typescript/web-core/BaseAudioContext.d.ts +2 -0
  245. package/lib/typescript/web-core/BaseAudioContext.d.ts.map +1 -1
  246. package/lib/typescript/web-core/ConstantSourceNode.d.ts +8 -0
  247. package/lib/typescript/web-core/ConstantSourceNode.d.ts.map +1 -0
  248. package/lib/typescript/web-core/OfflineAudioContext.d.ts +4 -2
  249. package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
  250. package/package.json +3 -2
  251. package/src/api.ts +12 -3
  252. package/src/api.web.ts +1 -0
  253. package/src/core/AudioBufferBaseSourceNode.ts +9 -9
  254. package/src/core/AudioBufferQueueSourceNode.ts +1 -9
  255. package/src/core/AudioBufferSourceNode.ts +28 -0
  256. package/src/core/AudioContext.ts +12 -1
  257. package/src/core/AudioScheduledSourceNode.ts +5 -5
  258. package/src/core/BaseAudioContext.ts +149 -13
  259. package/src/core/ConstantSourceNode.ts +13 -0
  260. package/src/core/OfflineAudioContext.ts +18 -2
  261. package/src/core/OscillatorNode.ts +11 -0
  262. package/src/core/WorkletNode.ts +3 -0
  263. package/src/core/WorkletProcessingNode.ts +3 -0
  264. package/src/core/WorkletSourceNode.ts +3 -0
  265. package/src/events/types.ts +2 -0
  266. package/src/interfaces.ts +59 -5
  267. package/src/types.ts +3 -1
  268. package/src/utils/index.ts +21 -0
  269. package/src/web-core/AudioBufferSourceNode.tsx +1 -1
  270. package/src/web-core/AudioContext.tsx +7 -2
  271. package/src/web-core/AudioScheduledSourceNode.tsx +1 -1
  272. package/src/web-core/BaseAudioContext.tsx +2 -0
  273. package/src/web-core/ConstantSourceNode.tsx +12 -0
  274. package/src/web-core/OfflineAudioContext.tsx +7 -2
  275. package/common/cpp/audioapi/HostObjects/AnalyserNodeHostObject.h +0 -149
  276. package/common/cpp/audioapi/HostObjects/AudioBufferBaseSourceNodeHostObject.h +0 -76
  277. package/common/cpp/audioapi/HostObjects/AudioBufferHostObject.h +0 -120
  278. package/common/cpp/audioapi/HostObjects/AudioBufferQueueSourceNodeHostObject.h +0 -67
  279. package/common/cpp/audioapi/HostObjects/AudioBufferSourceNodeHostObject.h +0 -142
  280. package/common/cpp/audioapi/HostObjects/AudioRecorderHostObject.h +0 -86
  281. package/common/cpp/audioapi/HostObjects/AudioScheduledSourceNodeHostObject.h +0 -56
  282. package/common/cpp/audioapi/HostObjects/BiquadFilterNodeHostObject.h +0 -89
  283. package/common/cpp/audioapi/HostObjects/GainNodeHostObject.h +0 -27
  284. package/common/cpp/audioapi/HostObjects/OscillatorNodeHostObject.h +0 -65
  285. package/common/cpp/audioapi/HostObjects/StereoPannerNodeHostObject.h +0 -29
  286. package/common/cpp/audioapi/HostObjects/StreamerNodeHostObject.h +0 -30
  287. package/common/cpp/audioapi/events/AudioEventHandlerRegistryHostObject.h +0 -48
  288. package/ios/audioapi/ios/events/IOSAudioEventHandlerRegistry.h +0 -7
  289. package/ios/audioapi/ios/events/IOSAudioEventHandlerRegistry.mm +0 -12
  290. package/lib/commonjs/hooks/useSytemVolume.js.map +0 -1
  291. package/lib/module/hooks/useSytemVolume.js.map +0 -1
  292. package/lib/typescript/hooks/useSytemVolume.d.ts.map +0 -1
  293. /package/common/cpp/audioapi/HostObjects/{AudioDestinationNodeHostObject.h → destinations/AudioDestinationNodeHostObject.h} +0 -0
  294. /package/common/cpp/audioapi/HostObjects/{PeriodicWaveHostObject.h → effects/PeriodicWaveHostObject.h} +0 -0
  295. /package/common/cpp/audioapi/core/{AudioParamEventQueue.h → utils/AudioParamEventQueue.h} +0 -0
  296. /package/src/hooks/{useSytemVolume.ts → useSystemVolume.ts} +0 -0
@@ -6,10 +6,12 @@
6
6
  #include <audioapi/core/inputs/AudioRecorder.h>
7
7
  #include <audioapi/HostObjects/AudioContextHostObject.h>
8
8
  #include <audioapi/HostObjects/OfflineAudioContextHostObject.h>
9
- #include <audioapi/HostObjects/AudioRecorderHostObject.h>
9
+ #include <audioapi/HostObjects/inputs/AudioRecorderHostObject.h>
10
10
 
11
11
  #include <audioapi/events/AudioEventHandlerRegistry.h>
12
- #include <audioapi/events/AudioEventHandlerRegistryHostObject.h>
12
+ #include <audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.h>
13
+
14
+ #include <audioapi/core/utils/worklets/SafeIncludes.h>
13
15
 
14
16
  #include <memory>
15
17
 
@@ -19,10 +21,15 @@ using namespace facebook;
19
21
 
20
22
  class AudioAPIModuleInstaller {
21
23
  public:
22
- static void injectJSIBindings(jsi::Runtime *jsiRuntime, const std::shared_ptr<react::CallInvoker> &jsCallInvoker, const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry) {
23
- auto createAudioContext = getCreateAudioContextFunction(jsiRuntime, jsCallInvoker, audioEventHandlerRegistry);
24
+ static void injectJSIBindings(
25
+ jsi::Runtime *jsiRuntime,
26
+ const std::shared_ptr<react::CallInvoker> &jsCallInvoker,
27
+ const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
28
+ std::shared_ptr<worklets::WorkletRuntime> uiRuntime = nullptr) {
29
+
30
+ auto createAudioContext = getCreateAudioContextFunction(jsiRuntime, jsCallInvoker, audioEventHandlerRegistry, uiRuntime);
24
31
  auto createAudioRecorder = getCreateAudioRecorderFunction(jsiRuntime, audioEventHandlerRegistry);
25
- auto createOfflineAudioContext = getCreateOfflineAudioContextFunction(jsiRuntime, jsCallInvoker, audioEventHandlerRegistry);
32
+ auto createOfflineAudioContext = getCreateOfflineAudioContextFunction(jsiRuntime, jsCallInvoker, audioEventHandlerRegistry, uiRuntime);
26
33
 
27
34
  jsiRuntime->global().setProperty(*jsiRuntime, "createAudioContext", createAudioContext);
28
35
  jsiRuntime->global().setProperty(*jsiRuntime, "createAudioRecorder", createAudioRecorder);
@@ -33,12 +40,16 @@ class AudioAPIModuleInstaller {
33
40
  }
34
41
 
35
42
  private:
36
- static jsi::Function getCreateAudioContextFunction(jsi::Runtime *jsiRuntime, const std::shared_ptr<react::CallInvoker> &jsCallInvoker, const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry) {
43
+ static jsi::Function getCreateAudioContextFunction(
44
+ jsi::Runtime *jsiRuntime,
45
+ const std::shared_ptr<react::CallInvoker> &jsCallInvoker,
46
+ const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
47
+ const std::weak_ptr<worklets::WorkletRuntime> &uiRuntime) {
37
48
  return jsi::Function::createFromHostFunction(
38
49
  *jsiRuntime,
39
50
  jsi::PropNameID::forAscii(*jsiRuntime, "createAudioContext"),
40
51
  0,
41
- [jsCallInvoker, audioEventHandlerRegistry](
52
+ [jsCallInvoker, audioEventHandlerRegistry, uiRuntime](
42
53
  jsi::Runtime &runtime,
43
54
  const jsi::Value &thisValue,
44
55
  const jsi::Value *args,
@@ -46,8 +57,17 @@ class AudioAPIModuleInstaller {
46
57
  std::shared_ptr<AudioContext> audioContext;
47
58
  auto sampleRate = static_cast<float>(args[0].getNumber());
48
59
  auto initSuspended = args[1].getBool();
49
- audioContext = std::make_shared<AudioContext>(sampleRate, initSuspended, audioEventHandlerRegistry);
50
60
 
61
+ #if RN_AUDIO_API_ENABLE_WORKLETS
62
+ auto runtimeRegistry = RuntimeRegistry{
63
+ .uiRuntime = uiRuntime,
64
+ .audioRuntime = worklets::extractWorkletRuntime(runtime, args[2])
65
+ };
66
+ #else
67
+ auto runtimeRegistry = RuntimeRegistry{};
68
+ #endif
69
+
70
+ audioContext = std::make_shared<AudioContext>(sampleRate, initSuspended, audioEventHandlerRegistry, runtimeRegistry);
51
71
  auto audioContextHostObject = std::make_shared<AudioContextHostObject>(
52
72
  audioContext, &runtime, jsCallInvoker);
53
73
 
@@ -56,12 +76,16 @@ class AudioAPIModuleInstaller {
56
76
  });
57
77
  }
58
78
 
59
- static jsi::Function getCreateOfflineAudioContextFunction(jsi::Runtime *jsiRuntime, const std::shared_ptr<react::CallInvoker> &jsCallInvoker, const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry) {
79
+ static jsi::Function getCreateOfflineAudioContextFunction(
80
+ jsi::Runtime *jsiRuntime,
81
+ const std::shared_ptr<react::CallInvoker> &jsCallInvoker,
82
+ const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
83
+ const std::weak_ptr<worklets::WorkletRuntime> &uiRuntime) {
60
84
  return jsi::Function::createFromHostFunction(
61
85
  *jsiRuntime,
62
86
  jsi::PropNameID::forAscii(*jsiRuntime, "createOfflineAudioContext"),
63
87
  0,
64
- [jsCallInvoker, audioEventHandlerRegistry](
88
+ [jsCallInvoker, audioEventHandlerRegistry, uiRuntime](
65
89
  jsi::Runtime &runtime,
66
90
  const jsi::Value &thisValue,
67
91
  const jsi::Value *args,
@@ -70,16 +94,27 @@ class AudioAPIModuleInstaller {
70
94
  auto length = static_cast<size_t>(args[1].getNumber());
71
95
  auto sampleRate = static_cast<float>(args[2].getNumber());
72
96
 
73
- auto offlineAudioContext = std::make_shared<OfflineAudioContext>(numberOfChannels, length, sampleRate, audioEventHandlerRegistry);
74
- auto audioContextHostObject = std::make_shared<OfflineAudioContextHostObject>(
75
- offlineAudioContext, &runtime, jsCallInvoker);
76
-
77
- return jsi::Object::createFromHostObject(
78
- runtime, audioContextHostObject);
97
+ #if RN_AUDIO_API_ENABLE_WORKLETS
98
+ auto runtimeRegistry = RuntimeRegistry{
99
+ .uiRuntime = uiRuntime,
100
+ .audioRuntime = worklets::extractWorkletRuntime(runtime, args[3])
101
+ };
102
+ #else
103
+ auto runtimeRegistry = RuntimeRegistry{};
104
+ #endif
105
+
106
+ auto offlineAudioContext = std::make_shared<OfflineAudioContext>(numberOfChannels, length, sampleRate, audioEventHandlerRegistry, runtimeRegistry);
107
+ auto audioContextHostObject = std::make_shared<OfflineAudioContextHostObject>(
108
+ offlineAudioContext, &runtime, jsCallInvoker);
109
+
110
+ return jsi::Object::createFromHostObject(
111
+ runtime, audioContextHostObject);
79
112
  });
80
113
  }
81
114
 
82
- static jsi::Function getCreateAudioRecorderFunction(jsi::Runtime *jsiRuntime, const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry) {
115
+ static jsi::Function getCreateAudioRecorderFunction(
116
+ jsi::Runtime *jsiRuntime,
117
+ const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry) {
83
118
  return jsi::Function::createFromHostFunction(
84
119
  *jsiRuntime,
85
120
  jsi::PropNameID::forAscii(*jsiRuntime, "createAudioRecorder"),
@@ -94,7 +129,7 @@ class AudioAPIModuleInstaller {
94
129
  auto sampleRate = static_cast<float>(options.getProperty(runtime, "sampleRate").getNumber());
95
130
  auto bufferLength = static_cast<int>(options.getProperty(runtime, "bufferLengthInSamples").getNumber());
96
131
 
97
- auto audioRecorderHostObject = std::make_shared<AudioRecorderHostObject>(&runtime, audioEventHandlerRegistry, sampleRate, bufferLength);
132
+ auto audioRecorderHostObject = std::make_shared<AudioRecorderHostObject>(audioEventHandlerRegistry, sampleRate, bufferLength);
98
133
 
99
134
  return jsi::Object::createFromHostObject(runtime, audioRecorderHostObject);
100
135
  });
@@ -0,0 +1,57 @@
1
+ #include <audioapi/HostObjects/AudioContextHostObject.h>
2
+
3
+ #include <audioapi/core/AudioContext.h>
4
+
5
+ namespace audioapi {
6
+
7
+ AudioContextHostObject::AudioContextHostObject(
8
+ const std::shared_ptr<AudioContext> &audioContext,
9
+ jsi::Runtime *runtime,
10
+ const std::shared_ptr<react::CallInvoker> &callInvoker)
11
+ : BaseAudioContextHostObject(audioContext, runtime, callInvoker) {
12
+ addFunctions(
13
+ JSI_EXPORT_FUNCTION(AudioContextHostObject, close),
14
+ JSI_EXPORT_FUNCTION(AudioContextHostObject, resume),
15
+ JSI_EXPORT_FUNCTION(AudioContextHostObject, suspend));
16
+ }
17
+
18
+ JSI_HOST_FUNCTION_IMPL(AudioContextHostObject, close) {
19
+ auto audioContext = std::static_pointer_cast<AudioContext>(context_);
20
+ auto promise = promiseVendor_->createPromise(
21
+ [audioContext](const std::shared_ptr<Promise> &promise) {
22
+ audioContext->close();
23
+
24
+ promise->resolve(
25
+ [](jsi::Runtime &runtime) { return jsi::Value::undefined(); });
26
+ });
27
+
28
+ return promise;
29
+ }
30
+
31
+ JSI_HOST_FUNCTION_IMPL(AudioContextHostObject, resume) {
32
+ auto audioContext = std::static_pointer_cast<AudioContext>(context_);
33
+ auto promise = promiseVendor_->createPromise(
34
+ [audioContext](const std::shared_ptr<Promise> &promise) {
35
+ auto result = audioContext->resume();
36
+
37
+ promise->resolve(
38
+ [result](jsi::Runtime &runtime) { return jsi::Value(result); });
39
+ });
40
+
41
+ return promise;
42
+ }
43
+
44
+ JSI_HOST_FUNCTION_IMPL(AudioContextHostObject, suspend) {
45
+ auto audioContext = std::static_pointer_cast<AudioContext>(context_);
46
+ auto promise = promiseVendor_->createPromise(
47
+ [audioContext](const std::shared_ptr<Promise> &promise) {
48
+ auto result = audioContext->suspend();
49
+
50
+ promise->resolve(
51
+ [result](jsi::Runtime &runtime) { return jsi::Value(result); });
52
+ });
53
+
54
+ return promise;
55
+ }
56
+
57
+ } // namespace audioapi
@@ -1,6 +1,5 @@
1
1
  #pragma once
2
2
 
3
- #include <audioapi/core/AudioContext.h>
4
3
  #include <audioapi/HostObjects/BaseAudioContextHostObject.h>
5
4
 
6
5
  #include <jsi/jsi.h>
@@ -11,56 +10,17 @@
11
10
  namespace audioapi {
12
11
  using namespace facebook;
13
12
 
13
+ class AudioContext;
14
+
14
15
  class AudioContextHostObject : public BaseAudioContextHostObject {
15
16
  public:
16
17
  explicit AudioContextHostObject(
17
18
  const std::shared_ptr<AudioContext> &audioContext,
18
19
  jsi::Runtime *runtime,
19
- const std::shared_ptr<react::CallInvoker> &callInvoker)
20
- : BaseAudioContextHostObject(audioContext, runtime, callInvoker) {
21
- addFunctions(
22
- JSI_EXPORT_FUNCTION(AudioContextHostObject, close),
23
- JSI_EXPORT_FUNCTION(AudioContextHostObject, resume),
24
- JSI_EXPORT_FUNCTION(AudioContextHostObject, suspend));
25
- }
26
-
27
- JSI_HOST_FUNCTION(close) {
28
- auto audioContext = std::static_pointer_cast<AudioContext>(context_);
29
- auto promise = promiseVendor_->createPromise([audioContext](const std::shared_ptr<Promise>& promise) {
30
- audioContext->close();
31
-
32
- promise->resolve([](jsi::Runtime &runtime) {
33
- return jsi::Value::undefined();
34
- });
35
- });
36
-
37
- return promise;
38
- }
39
-
40
- JSI_HOST_FUNCTION(resume) {
41
- auto audioContext = std::static_pointer_cast<AudioContext>(context_);
42
- auto promise = promiseVendor_->createPromise([audioContext](const std::shared_ptr<Promise>& promise) {
43
- auto result = audioContext->resume();
44
-
45
- promise->resolve([result](jsi::Runtime &runtime) {
46
- return jsi::Value(result);
47
- });
48
- });
49
-
50
- return promise;
51
- }
52
-
53
- JSI_HOST_FUNCTION(suspend) {
54
- auto audioContext = std::static_pointer_cast<AudioContext>(context_);
55
- auto promise = promiseVendor_->createPromise([audioContext](const std::shared_ptr<Promise>& promise) {
56
- auto result = audioContext->suspend();
57
-
58
- promise->resolve([result](jsi::Runtime &runtime) {
59
- return jsi::Value(result);
60
- });
61
- });
20
+ const std::shared_ptr<react::CallInvoker> &callInvoker);
62
21
 
63
- return promise;
64
- }
22
+ JSI_HOST_FUNCTION_DECL(close);
23
+ JSI_HOST_FUNCTION_DECL(resume);
24
+ JSI_HOST_FUNCTION_DECL(suspend);
65
25
  };
66
26
  } // namespace audioapi
@@ -1,9 +1,73 @@
1
1
  #include <audioapi/HostObjects/AudioNodeHostObject.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/AudioParamHostObject.h>
4
+ #include <audioapi/core/AudioNode.h>
5
+
7
6
  namespace audioapi {
8
- AudioNodeHostObject::~AudioNodeHostObject() = default;
9
- }
7
+
8
+ AudioNodeHostObject::AudioNodeHostObject(const std::shared_ptr<AudioNode> &node)
9
+ : node_(node) {
10
+ addGetters(
11
+ JSI_EXPORT_PROPERTY_GETTER(AudioNodeHostObject, numberOfInputs),
12
+ JSI_EXPORT_PROPERTY_GETTER(AudioNodeHostObject, numberOfOutputs),
13
+ JSI_EXPORT_PROPERTY_GETTER(AudioNodeHostObject, channelCount),
14
+ JSI_EXPORT_PROPERTY_GETTER(AudioNodeHostObject, channelCountMode),
15
+ JSI_EXPORT_PROPERTY_GETTER(AudioNodeHostObject, channelInterpretation));
16
+
17
+ addFunctions(
18
+ JSI_EXPORT_FUNCTION(AudioNodeHostObject, connect),
19
+ JSI_EXPORT_FUNCTION(AudioNodeHostObject, disconnect));
20
+ }
21
+
22
+ JSI_PROPERTY_GETTER_IMPL(AudioNodeHostObject, numberOfInputs) {
23
+ return {node_->getNumberOfInputs()};
24
+ }
25
+
26
+ JSI_PROPERTY_GETTER_IMPL(AudioNodeHostObject, numberOfOutputs) {
27
+ return {node_->getNumberOfOutputs()};
28
+ }
29
+
30
+ JSI_PROPERTY_GETTER_IMPL(AudioNodeHostObject, channelCount) {
31
+ return {node_->getChannelCount()};
32
+ }
33
+
34
+ JSI_PROPERTY_GETTER_IMPL(AudioNodeHostObject, channelCountMode) {
35
+ return jsi::String::createFromUtf8(runtime, node_->getChannelCountMode());
36
+ }
37
+
38
+ JSI_PROPERTY_GETTER_IMPL(AudioNodeHostObject, channelInterpretation) {
39
+ return jsi::String::createFromUtf8(
40
+ runtime, node_->getChannelInterpretation());
41
+ }
42
+
43
+ JSI_HOST_FUNCTION_IMPL(AudioNodeHostObject, connect) {
44
+ auto obj = args[0].getObject(runtime);
45
+ if (obj.isHostObject<AudioNodeHostObject>(runtime)) {
46
+ auto node = obj.getHostObject<AudioNodeHostObject>(runtime);
47
+ node_->connect(std::shared_ptr<AudioNodeHostObject>(node)->node_);
48
+ }
49
+ if (obj.isHostObject<AudioParamHostObject>(runtime)) {
50
+ auto param = obj.getHostObject<AudioParamHostObject>(runtime);
51
+ node_->connect(std::shared_ptr<AudioParamHostObject>(param)->param_);
52
+ }
53
+ return jsi::Value::undefined();
54
+ }
55
+
56
+ JSI_HOST_FUNCTION_IMPL(AudioNodeHostObject, disconnect) {
57
+ if (args[0].isUndefined()) {
58
+ node_->disconnect();
59
+ return jsi::Value::undefined();
60
+ }
61
+ auto obj = args[0].getObject(runtime);
62
+ if (obj.isHostObject<AudioNodeHostObject>(runtime)) {
63
+ auto node = obj.getHostObject<AudioNodeHostObject>(runtime);
64
+ node_->disconnect(std::shared_ptr<AudioNodeHostObject>(node)->node_);
65
+ }
66
+
67
+ if (obj.isHostObject<AudioParamHostObject>(runtime)) {
68
+ auto param = obj.getHostObject<AudioParamHostObject>(runtime);
69
+ node_->disconnect(std::shared_ptr<AudioParamHostObject>(param)->param_);
70
+ }
71
+ return jsi::Value::undefined();
72
+ }
73
+ } // namespace audioapi
@@ -1,7 +1,5 @@
1
1
  #pragma once
2
2
 
3
- #include <audioapi/HostObjects/AudioParamHostObject.h>
4
- #include <audioapi/core/AudioNode.h>
5
3
  #include <audioapi/jsi/JsiHostObject.h>
6
4
 
7
5
  #include <jsi/jsi.h>
@@ -11,74 +9,20 @@
11
9
  namespace audioapi {
12
10
  using namespace facebook;
13
11
 
12
+ class AudioNode;
13
+
14
14
  class AudioNodeHostObject : public JsiHostObject {
15
15
  public:
16
- explicit AudioNodeHostObject(const std::shared_ptr<AudioNode> &node)
17
- : node_(node) {
18
- addGetters(
19
- JSI_EXPORT_PROPERTY_GETTER(AudioNodeHostObject, numberOfInputs),
20
- JSI_EXPORT_PROPERTY_GETTER(AudioNodeHostObject, numberOfOutputs),
21
- JSI_EXPORT_PROPERTY_GETTER(AudioNodeHostObject, channelCount),
22
- JSI_EXPORT_PROPERTY_GETTER(AudioNodeHostObject, channelCountMode),
23
- JSI_EXPORT_PROPERTY_GETTER(AudioNodeHostObject, channelInterpretation));
24
- addFunctions(
25
- JSI_EXPORT_FUNCTION(AudioNodeHostObject, connect),
26
- JSI_EXPORT_FUNCTION(AudioNodeHostObject, disconnect));
27
- }
28
-
29
- ~AudioNodeHostObject() override;
30
-
31
- JSI_PROPERTY_GETTER(numberOfInputs) {
32
- return {node_->getNumberOfInputs()};
33
- }
34
-
35
- JSI_PROPERTY_GETTER(numberOfOutputs) {
36
- return {node_->getNumberOfOutputs()};
37
- }
38
-
39
- JSI_PROPERTY_GETTER(channelCount) {
40
- return {node_->getChannelCount()};
41
- }
42
-
43
- JSI_PROPERTY_GETTER(channelCountMode) {
44
- return jsi::String::createFromUtf8(runtime, node_->getChannelCountMode());
45
- }
46
-
47
- JSI_PROPERTY_GETTER(channelInterpretation) {
48
- return jsi::String::createFromUtf8(
49
- runtime, node_->getChannelInterpretation());
50
- }
51
-
52
- JSI_HOST_FUNCTION(connect) {
53
- auto obj = args[0].getObject(runtime);
54
- if (obj.isHostObject<AudioNodeHostObject>(runtime)) {
55
- auto node = obj.getHostObject<AudioNodeHostObject>(runtime);
56
- node_->connect(std::shared_ptr<AudioNodeHostObject>(node)->node_);
57
- }
58
- if (obj.isHostObject<AudioParamHostObject>(runtime)) {
59
- auto param = obj.getHostObject<AudioParamHostObject>(runtime);
60
- node_->connect(std::shared_ptr<AudioParamHostObject>(param)->param_);
61
- }
62
- return jsi::Value::undefined();
63
- }
16
+ explicit AudioNodeHostObject(const std::shared_ptr<AudioNode> &node);
64
17
 
65
- JSI_HOST_FUNCTION(disconnect) {
66
- if (args[0].isUndefined()) {
67
- node_->disconnect();
68
- return jsi::Value::undefined();
69
- }
70
- auto obj = args[0].getObject(runtime);
71
- if (obj.isHostObject<AudioNodeHostObject>(runtime)) {
72
- auto node = obj.getHostObject<AudioNodeHostObject>(runtime);
73
- node_->disconnect(std::shared_ptr<AudioNodeHostObject>(node)->node_);
74
- }
18
+ JSI_PROPERTY_GETTER_DECL(numberOfInputs);
19
+ JSI_PROPERTY_GETTER_DECL(numberOfOutputs);
20
+ JSI_PROPERTY_GETTER_DECL(channelCount);
21
+ JSI_PROPERTY_GETTER_DECL(channelCountMode);
22
+ JSI_PROPERTY_GETTER_DECL(channelInterpretation);
75
23
 
76
- if (obj.isHostObject<AudioParamHostObject>(runtime)) {
77
- auto param = obj.getHostObject<AudioParamHostObject>(runtime);
78
- node_->disconnect(std::shared_ptr<AudioParamHostObject>(param)->param_);
79
- }
80
- return jsi::Value::undefined();
81
- }
24
+ JSI_HOST_FUNCTION_DECL(connect);
25
+ JSI_HOST_FUNCTION_DECL(disconnect);
82
26
 
83
27
  protected:
84
28
  std::shared_ptr<AudioNode> node_;
@@ -0,0 +1,105 @@
1
+ #include <audioapi/HostObjects/AudioParamHostObject.h>
2
+
3
+ #include <audioapi/core/AudioParam.h>
4
+
5
+ namespace audioapi {
6
+
7
+ AudioParamHostObject::AudioParamHostObject(
8
+ const std::shared_ptr<AudioParam> &param)
9
+ : param_(param) {
10
+ addGetters(
11
+ JSI_EXPORT_PROPERTY_GETTER(AudioParamHostObject, value),
12
+ JSI_EXPORT_PROPERTY_GETTER(AudioParamHostObject, defaultValue),
13
+ JSI_EXPORT_PROPERTY_GETTER(AudioParamHostObject, minValue),
14
+ JSI_EXPORT_PROPERTY_GETTER(AudioParamHostObject, maxValue));
15
+
16
+ addFunctions(
17
+ JSI_EXPORT_FUNCTION(AudioParamHostObject, setValueAtTime),
18
+ JSI_EXPORT_FUNCTION(AudioParamHostObject, linearRampToValueAtTime),
19
+ JSI_EXPORT_FUNCTION(AudioParamHostObject, exponentialRampToValueAtTime),
20
+ JSI_EXPORT_FUNCTION(AudioParamHostObject, setTargetAtTime),
21
+ JSI_EXPORT_FUNCTION(AudioParamHostObject, setValueCurveAtTime),
22
+ JSI_EXPORT_FUNCTION(AudioParamHostObject, cancelScheduledValues),
23
+ JSI_EXPORT_FUNCTION(AudioParamHostObject, cancelAndHoldAtTime));
24
+
25
+ addSetters(JSI_EXPORT_PROPERTY_SETTER(AudioParamHostObject, value));
26
+ }
27
+
28
+ JSI_PROPERTY_GETTER_IMPL(AudioParamHostObject, value) {
29
+ return {param_->getValue()};
30
+ }
31
+
32
+ JSI_PROPERTY_GETTER_IMPL(AudioParamHostObject, defaultValue) {
33
+ return {param_->getDefaultValue()};
34
+ }
35
+
36
+ JSI_PROPERTY_GETTER_IMPL(AudioParamHostObject, minValue) {
37
+ return {param_->getMinValue()};
38
+ }
39
+
40
+ JSI_PROPERTY_GETTER_IMPL(AudioParamHostObject, maxValue) {
41
+ return {param_->getMaxValue()};
42
+ }
43
+
44
+ JSI_PROPERTY_SETTER_IMPL(AudioParamHostObject, value) {
45
+ param_->setValue(static_cast<float>(value.getNumber()));
46
+ }
47
+
48
+ JSI_HOST_FUNCTION_IMPL(AudioParamHostObject, setValueAtTime) {
49
+ auto value = static_cast<float>(args[0].getNumber());
50
+ double startTime = args[1].getNumber();
51
+ param_->setValueAtTime(value, startTime);
52
+ return jsi::Value::undefined();
53
+ }
54
+
55
+ JSI_HOST_FUNCTION_IMPL(AudioParamHostObject, linearRampToValueAtTime) {
56
+ auto value = static_cast<float>(args[0].getNumber());
57
+ double endTime = args[1].getNumber();
58
+ param_->linearRampToValueAtTime(value, endTime);
59
+ return jsi::Value::undefined();
60
+ }
61
+
62
+ JSI_HOST_FUNCTION_IMPL(AudioParamHostObject, exponentialRampToValueAtTime) {
63
+ auto value = static_cast<float>(args[0].getNumber());
64
+ double endTime = args[1].getNumber();
65
+ param_->exponentialRampToValueAtTime(value, endTime);
66
+ return jsi::Value::undefined();
67
+ }
68
+
69
+ JSI_HOST_FUNCTION_IMPL(AudioParamHostObject, setTargetAtTime) {
70
+ auto target = static_cast<float>(args[0].getNumber());
71
+ double startTime = args[1].getNumber();
72
+ double timeConstant = args[2].getNumber();
73
+ param_->setTargetAtTime(target, startTime, timeConstant);
74
+ return jsi::Value::undefined();
75
+ }
76
+
77
+ JSI_HOST_FUNCTION_IMPL(AudioParamHostObject, setValueCurveAtTime) {
78
+ auto arrayBuffer = args[0]
79
+ .getObject(runtime)
80
+ .getPropertyAsObject(runtime, "buffer")
81
+ .getArrayBuffer(runtime);
82
+ auto rawValues = reinterpret_cast<float *>(arrayBuffer.data(runtime));
83
+ auto length = static_cast<int>(arrayBuffer.size(runtime));
84
+ auto values =
85
+ std::make_unique<std::vector<float>>(rawValues, rawValues + length);
86
+
87
+ double startTime = args[1].getNumber();
88
+ double duration = args[2].getNumber();
89
+ param_->setValueCurveAtTime(std::move(values), length, startTime, duration);
90
+ return jsi::Value::undefined();
91
+ }
92
+
93
+ JSI_HOST_FUNCTION_IMPL(AudioParamHostObject, cancelScheduledValues) {
94
+ double cancelTime = args[0].getNumber();
95
+ param_->cancelScheduledValues(cancelTime);
96
+ return jsi::Value::undefined();
97
+ }
98
+
99
+ JSI_HOST_FUNCTION_IMPL(AudioParamHostObject, cancelAndHoldAtTime) {
100
+ double cancelTime = args[0].getNumber();
101
+ param_->cancelAndHoldAtTime(cancelTime);
102
+ return jsi::Value::undefined();
103
+ }
104
+
105
+ } // namespace audioapi
@@ -1,7 +1,6 @@
1
1
  #pragma once
2
2
 
3
3
  #include <audioapi/jsi/JsiHostObject.h>
4
- #include <audioapi/core/AudioParam.h>
5
4
 
6
5
  #include <jsi/jsi.h>
7
6
  #include <utility>
@@ -12,103 +11,30 @@
12
11
  namespace audioapi {
13
12
  using namespace facebook;
14
13
 
14
+ class AudioParam;
15
+
15
16
  class AudioParamHostObject : public JsiHostObject {
16
17
  public:
17
- explicit AudioParamHostObject(const std::shared_ptr<AudioParam> &param)
18
- : param_(param) {
19
- addGetters(
20
- JSI_EXPORT_PROPERTY_GETTER(AudioParamHostObject, value),
21
- JSI_EXPORT_PROPERTY_GETTER(AudioParamHostObject, defaultValue),
22
- JSI_EXPORT_PROPERTY_GETTER(AudioParamHostObject, minValue),
23
- JSI_EXPORT_PROPERTY_GETTER(AudioParamHostObject, maxValue));
24
-
25
- addFunctions(
26
- JSI_EXPORT_FUNCTION(AudioParamHostObject, setValueAtTime),
27
- JSI_EXPORT_FUNCTION(AudioParamHostObject, linearRampToValueAtTime),
28
- JSI_EXPORT_FUNCTION(AudioParamHostObject, exponentialRampToValueAtTime),
29
- JSI_EXPORT_FUNCTION(AudioParamHostObject, setTargetAtTime),
30
- JSI_EXPORT_FUNCTION(AudioParamHostObject, setValueCurveAtTime),
31
- JSI_EXPORT_FUNCTION(AudioParamHostObject, cancelScheduledValues),
32
- JSI_EXPORT_FUNCTION(AudioParamHostObject, cancelAndHoldAtTime));
33
-
34
- addSetters(JSI_EXPORT_PROPERTY_SETTER(AudioParamHostObject, value));
35
- }
36
- friend class AudioNodeHostObject;
37
-
38
- JSI_PROPERTY_GETTER(value) {
39
- return {param_->getValue()};
40
- }
41
-
42
- JSI_PROPERTY_GETTER(defaultValue) {
43
- return {param_->getDefaultValue()};
44
- }
45
-
46
- JSI_PROPERTY_GETTER(minValue) {
47
- return {param_->getMinValue()};
48
- }
49
-
50
- JSI_PROPERTY_GETTER(maxValue) {
51
- return {param_->getMaxValue()};
52
- }
18
+ explicit AudioParamHostObject(const std::shared_ptr<AudioParam> &param);
53
19
 
54
- JSI_HOST_FUNCTION(setValueAtTime) {
55
- auto value = static_cast<float>(args[0].getNumber());
56
- double startTime = args[1].getNumber();
57
- param_->setValueAtTime(value, startTime);
58
- return jsi::Value::undefined();
59
- }
20
+ JSI_PROPERTY_GETTER_DECL(value);
21
+ JSI_PROPERTY_GETTER_DECL(defaultValue);
22
+ JSI_PROPERTY_GETTER_DECL(minValue);
23
+ JSI_PROPERTY_GETTER_DECL(maxValue);
60
24
 
61
- JSI_HOST_FUNCTION(linearRampToValueAtTime) {
62
- auto value = static_cast<float>(args[0].getNumber());
63
- double endTime = args[1].getNumber();
64
- param_->linearRampToValueAtTime(value, endTime);
65
- return jsi::Value::undefined();
66
- }
25
+ JSI_PROPERTY_SETTER_DECL(value);
67
26
 
68
- JSI_HOST_FUNCTION(exponentialRampToValueAtTime) {
69
- auto value = static_cast<float>(args[0].getNumber());
70
- double endTime = args[1].getNumber();
71
- param_->exponentialRampToValueAtTime(value, endTime);
72
- return jsi::Value::undefined();
73
- }
74
-
75
- JSI_HOST_FUNCTION(setTargetAtTime) {
76
- auto target = static_cast<float>(args[0].getNumber());
77
- double startTime = args[1].getNumber();
78
- double timeConstant = args[2].getNumber();
79
- param_->setTargetAtTime(target, startTime, timeConstant);
80
- return jsi::Value::undefined();
81
- }
82
-
83
- JSI_HOST_FUNCTION(setValueCurveAtTime) {
84
- auto arrayBuffer = args[0].getObject(runtime).getPropertyAsObject(runtime, "buffer").getArrayBuffer(runtime);
85
- auto rawValues = reinterpret_cast<float *>(arrayBuffer.data(runtime));
86
- auto length = static_cast<int>(arrayBuffer.size(runtime));
87
- auto values = std::make_unique<std::vector<float>>(rawValues, rawValues + length);
88
-
89
- double startTime = args[1].getNumber();
90
- double duration = args[2].getNumber();
91
- param_->setValueCurveAtTime(std::move(values), length, startTime, duration);
92
- return jsi::Value::undefined();
93
- }
94
-
95
- JSI_HOST_FUNCTION(cancelScheduledValues) {
96
- double cancelTime = args[0].getNumber();
97
- param_->cancelScheduledValues(cancelTime);
98
- return jsi::Value::undefined();
99
- }
100
-
101
- JSI_HOST_FUNCTION(cancelAndHoldAtTime) {
102
- double cancelTime = args[0].getNumber();
103
- param_->cancelAndHoldAtTime(cancelTime);
104
- return jsi::Value::undefined();
105
- }
106
-
107
- JSI_PROPERTY_SETTER(value) {
108
- param_->setValue(static_cast<float>(value.getNumber()));
109
- }
27
+ JSI_HOST_FUNCTION_DECL(setValueAtTime);
28
+ JSI_HOST_FUNCTION_DECL(linearRampToValueAtTime);
29
+ JSI_HOST_FUNCTION_DECL(exponentialRampToValueAtTime);
30
+ JSI_HOST_FUNCTION_DECL(setTargetAtTime);
31
+ JSI_HOST_FUNCTION_DECL(setValueCurveAtTime);
32
+ JSI_HOST_FUNCTION_DECL(cancelScheduledValues);
33
+ JSI_HOST_FUNCTION_DECL(cancelAndHoldAtTime);
110
34
 
111
35
  private:
36
+ friend class AudioNodeHostObject;
37
+
112
38
  std::shared_ptr<AudioParam> param_;
113
39
  };
114
40
  } // namespace audioapi