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
@@ -2,7 +2,7 @@ import {
2
2
  ContextState,
3
3
  PeriodicWaveConstraints,
4
4
  OfflineAudioContextOptions,
5
- AudioBufferSourceNodeOptions,
5
+ AudioBufferBaseSourceNodeOptions,
6
6
  } from '../types';
7
7
  import { InvalidAccessError, NotSupportedError } from '../errors';
8
8
  import BaseAudioContext from './BaseAudioContext';
@@ -15,6 +15,7 @@ import GainNode from './GainNode';
15
15
  import OscillatorNode from './OscillatorNode';
16
16
  import PeriodicWave from './PeriodicWave';
17
17
  import StereoPannerNode from './StereoPannerNode';
18
+ import ConstantSourceNode from './ConstantSourceNode';
18
19
 
19
20
  import { globalWasmPromise, globalTag } from './custom/LoadCustomWasm';
20
21
 
@@ -59,6 +60,10 @@ export default class OfflineAudioContext implements BaseAudioContext {
59
60
  return new OscillatorNode(this, this.context.createOscillator());
60
61
  }
61
62
 
63
+ createConstantSource(): ConstantSourceNode {
64
+ return new ConstantSourceNode(this, this.context.createConstantSource());
65
+ }
66
+
62
67
  createGain(): GainNode {
63
68
  return new GainNode(this, this.context.createGain());
64
69
  }
@@ -72,7 +77,7 @@ export default class OfflineAudioContext implements BaseAudioContext {
72
77
  }
73
78
 
74
79
  async createBufferSource(
75
- options?: AudioBufferSourceNodeOptions
80
+ options?: AudioBufferBaseSourceNodeOptions
76
81
  ): Promise<AudioBufferSourceNode> {
77
82
  if (!options || !options.pitchCorrection) {
78
83
  return new AudioBufferSourceNode(
@@ -1,149 +0,0 @@
1
- #pragma once
2
-
3
- #include <audioapi/core/analysis/AnalyserNode.h>
4
- #include <audioapi/HostObjects/AudioNodeHostObject.h>
5
-
6
- #include <memory>
7
- #include <string>
8
- #include <vector>
9
-
10
- namespace audioapi {
11
- using namespace facebook;
12
-
13
- class AnalyserNodeHostObject : public AudioNodeHostObject {
14
- public:
15
- explicit AnalyserNodeHostObject(const std::shared_ptr<AnalyserNode> &node)
16
- : AudioNodeHostObject(node) {
17
- addGetters(
18
- JSI_EXPORT_PROPERTY_GETTER(AnalyserNodeHostObject, fftSize),
19
- JSI_EXPORT_PROPERTY_GETTER(AnalyserNodeHostObject, frequencyBinCount),
20
- JSI_EXPORT_PROPERTY_GETTER(AnalyserNodeHostObject, minDecibels),
21
- JSI_EXPORT_PROPERTY_GETTER(AnalyserNodeHostObject, maxDecibels),
22
- JSI_EXPORT_PROPERTY_GETTER(AnalyserNodeHostObject, smoothingTimeConstant),
23
- JSI_EXPORT_PROPERTY_GETTER(AnalyserNodeHostObject, window));
24
-
25
- addFunctions(
26
- JSI_EXPORT_FUNCTION(
27
- AnalyserNodeHostObject, getFloatFrequencyData),
28
- JSI_EXPORT_FUNCTION(
29
- AnalyserNodeHostObject, getByteFrequencyData),
30
- JSI_EXPORT_FUNCTION(
31
- AnalyserNodeHostObject, getFloatTimeDomainData),
32
- JSI_EXPORT_FUNCTION(
33
- AnalyserNodeHostObject, getByteTimeDomainData));
34
-
35
- addSetters(
36
- JSI_EXPORT_PROPERTY_SETTER(AnalyserNodeHostObject, fftSize),
37
- JSI_EXPORT_PROPERTY_SETTER(AnalyserNodeHostObject, minDecibels),
38
- JSI_EXPORT_PROPERTY_SETTER(AnalyserNodeHostObject, maxDecibels),
39
- JSI_EXPORT_PROPERTY_SETTER(
40
- AnalyserNodeHostObject, smoothingTimeConstant),
41
- JSI_EXPORT_PROPERTY_SETTER(AnalyserNodeHostObject, window));
42
- }
43
-
44
- JSI_PROPERTY_GETTER(fftSize) {
45
- auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
46
- return {static_cast<int>(analyserNode->getFftSize())};
47
- }
48
-
49
- JSI_PROPERTY_GETTER(frequencyBinCount) {
50
- auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
51
- return {static_cast<int>(analyserNode->getFrequencyBinCount())};
52
- }
53
-
54
- JSI_PROPERTY_GETTER(minDecibels) {
55
- auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
56
- return {analyserNode->getMinDecibels()};
57
- }
58
-
59
- JSI_PROPERTY_GETTER(maxDecibels) {
60
- auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
61
- return {analyserNode->getMaxDecibels()};
62
- }
63
-
64
- JSI_PROPERTY_GETTER(smoothingTimeConstant) {
65
- auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
66
- return {analyserNode->getSmoothingTimeConstant()};
67
- }
68
-
69
- JSI_PROPERTY_GETTER(window) {
70
- auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
71
- auto windowType = analyserNode->getWindowType();
72
- return jsi::String::createFromUtf8(runtime, windowType);
73
- }
74
-
75
- JSI_HOST_FUNCTION(getFloatFrequencyData) {
76
- auto arrayBuffer = args[0].getObject(runtime).getPropertyAsObject(runtime, "buffer").getArrayBuffer(runtime);
77
- auto data = reinterpret_cast<float *>(arrayBuffer.data(runtime));
78
- auto length = static_cast<int>(arrayBuffer.size(runtime));
79
-
80
- auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
81
- analyserNode->getFloatFrequencyData(data, length);
82
-
83
- return jsi::Value::undefined();
84
- }
85
-
86
- JSI_HOST_FUNCTION(getByteFrequencyData) {
87
- auto arrayBuffer = args[0].getObject(runtime).getPropertyAsObject(runtime, "buffer").getArrayBuffer(runtime);
88
- auto data = arrayBuffer.data(runtime);
89
- auto length = static_cast<int>(arrayBuffer.size(runtime));
90
-
91
- auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
92
- analyserNode->getByteFrequencyData(data, length);
93
-
94
- return jsi::Value::undefined();
95
- }
96
-
97
- JSI_HOST_FUNCTION(getFloatTimeDomainData) {
98
- auto arrayBuffer = args[0].getObject(runtime).getPropertyAsObject(runtime, "buffer").getArrayBuffer(runtime);
99
- auto data = reinterpret_cast<float *>(arrayBuffer.data(runtime));
100
- auto length = static_cast<int>(arrayBuffer.size(runtime));
101
-
102
- auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
103
- analyserNode->getFloatTimeDomainData(data, length);
104
-
105
- return jsi::Value::undefined();
106
- }
107
-
108
- JSI_HOST_FUNCTION(getByteTimeDomainData) {
109
- auto arrayBuffer = args[0].getObject(runtime).getPropertyAsObject(runtime, "buffer").getArrayBuffer(runtime);
110
- auto data = arrayBuffer.data(runtime);
111
- auto length = static_cast<int>(arrayBuffer.size(runtime));
112
-
113
- auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
114
- analyserNode->getByteTimeDomainData(data, length);
115
-
116
- return jsi::Value::undefined();
117
- }
118
-
119
- JSI_PROPERTY_SETTER(fftSize) {
120
- auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
121
- auto fftSize = static_cast<int>(value.getNumber());
122
- analyserNode->setFftSize(fftSize);
123
- }
124
-
125
- JSI_PROPERTY_SETTER(minDecibels) {
126
- auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
127
- auto minDecibels = static_cast<float>(value.getNumber());
128
- analyserNode->setMinDecibels(minDecibels);
129
- }
130
-
131
- JSI_PROPERTY_SETTER(maxDecibels) {
132
- auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
133
- auto maxDecibels = static_cast<float>(value.getNumber());
134
- analyserNode->setMaxDecibels(maxDecibels);
135
- }
136
-
137
- JSI_PROPERTY_SETTER(smoothingTimeConstant) {
138
- auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
139
- auto smoothingTimeConstant = static_cast<float>(value.getNumber());
140
- analyserNode->setSmoothingTimeConstant(smoothingTimeConstant);
141
- }
142
-
143
- JSI_PROPERTY_SETTER(window) {
144
- auto analyserNode = std::static_pointer_cast<AnalyserNode>(node_);
145
- analyserNode->setWindowType(value.getString(runtime).utf8(runtime));
146
- }
147
- };
148
-
149
- } // namespace audioapi
@@ -1,76 +0,0 @@
1
- #pragma once
2
-
3
- #include <audioapi/core/sources/AudioBufferBaseSourceNode.h>
4
- #include <audioapi/HostObjects/AudioParamHostObject.h>
5
- #include <audioapi/HostObjects/AudioScheduledSourceNodeHostObject.h>
6
-
7
- #include <memory>
8
- #include <vector>
9
-
10
- namespace audioapi {
11
- using namespace facebook;
12
-
13
- class AudioBufferBaseSourceNodeHostObject
14
- : public AudioScheduledSourceNodeHostObject {
15
- public:
16
- explicit AudioBufferBaseSourceNodeHostObject(
17
- const std::shared_ptr<AudioBufferBaseSourceNode> &node)
18
- : AudioScheduledSourceNodeHostObject(node) {
19
- addGetters(
20
- JSI_EXPORT_PROPERTY_GETTER(AudioBufferBaseSourceNodeHostObject, detune),
21
- JSI_EXPORT_PROPERTY_GETTER(AudioBufferBaseSourceNodeHostObject, playbackRate),
22
- JSI_EXPORT_PROPERTY_GETTER(AudioBufferBaseSourceNodeHostObject, onPositionChangedInterval));
23
-
24
- addSetters(
25
- JSI_EXPORT_PROPERTY_SETTER(AudioBufferBaseSourceNodeHostObject, onPositionChanged),
26
- JSI_EXPORT_PROPERTY_SETTER(AudioBufferBaseSourceNodeHostObject, onPositionChangedInterval));
27
- }
28
-
29
- ~AudioBufferBaseSourceNodeHostObject() {
30
- auto sourceNode =
31
- std::static_pointer_cast<AudioBufferBaseSourceNode>(node_);
32
-
33
- // When JSI object is garbage collected (together with the eventual callback),
34
- // underlying source node might still be active and try to call the non-existing callback.
35
- sourceNode->clearOnPositionChangedCallback();
36
- }
37
-
38
- JSI_PROPERTY_GETTER(detune) {
39
- auto sourceNode =
40
- std::static_pointer_cast<AudioBufferBaseSourceNode>(node_);
41
- auto detune = sourceNode->getDetuneParam();
42
- auto detuneHostObject = std::make_shared<AudioParamHostObject>(detune);
43
- return jsi::Object::createFromHostObject(runtime, detuneHostObject);
44
- }
45
-
46
- JSI_PROPERTY_GETTER(playbackRate) {
47
- auto sourceNode =
48
- std::static_pointer_cast<AudioBufferBaseSourceNode>(node_);
49
- auto playbackRate = sourceNode->getPlaybackRateParam();
50
- auto playbackRateHostObject =
51
- std::make_shared<AudioParamHostObject>(playbackRate);
52
- return jsi::Object::createFromHostObject(runtime, playbackRateHostObject);
53
- }
54
-
55
- JSI_PROPERTY_SETTER(onPositionChanged) {
56
- auto sourceNode =
57
- std::static_pointer_cast<AudioBufferBaseSourceNode>(node_);
58
-
59
- sourceNode->setOnPositionChangedCallbackId(std::stoull(value.getString(runtime).utf8(runtime)));
60
- }
61
-
62
- JSI_PROPERTY_GETTER(onPositionChangedInterval) {
63
- auto sourceNode =
64
- std::static_pointer_cast<AudioBufferBaseSourceNode>(node_);
65
- return jsi::Value(sourceNode->getOnPositionChangedInterval());
66
- }
67
-
68
- JSI_PROPERTY_SETTER(onPositionChangedInterval) {
69
- auto sourceNode =
70
- std::static_pointer_cast<AudioBufferBaseSourceNode>(node_);
71
-
72
- sourceNode->setOnPositionChangedInterval(static_cast<int>(value.getNumber()));
73
- }
74
- };
75
-
76
- } // namespace audioapi
@@ -1,120 +0,0 @@
1
- #pragma once
2
-
3
- #include <audioapi/core/sources/AudioBuffer.h>
4
- #include <audioapi/jsi/AudioArrayBuffer.h>
5
- #include <audioapi/jsi/JsiHostObject.h>
6
-
7
- #include <jsi/jsi.h>
8
- #include <cstddef>
9
- #include <memory>
10
- #include <utility>
11
- #include <vector>
12
-
13
- namespace audioapi {
14
- using namespace facebook;
15
-
16
- class AudioBufferHostObject : public JsiHostObject {
17
- public:
18
- std::shared_ptr<AudioBuffer> audioBuffer_;
19
-
20
- explicit AudioBufferHostObject(
21
- const std::shared_ptr<AudioBuffer> &audioBuffer)
22
- : audioBuffer_(audioBuffer) {
23
- addGetters(
24
- JSI_EXPORT_PROPERTY_GETTER(AudioBufferHostObject, sampleRate),
25
- JSI_EXPORT_PROPERTY_GETTER(AudioBufferHostObject, length),
26
- JSI_EXPORT_PROPERTY_GETTER(AudioBufferHostObject, duration),
27
- JSI_EXPORT_PROPERTY_GETTER(AudioBufferHostObject, numberOfChannels));
28
-
29
- addFunctions(
30
- JSI_EXPORT_FUNCTION(AudioBufferHostObject, getChannelData),
31
- JSI_EXPORT_FUNCTION(AudioBufferHostObject, copyFromChannel),
32
- JSI_EXPORT_FUNCTION(AudioBufferHostObject, copyToChannel));
33
- }
34
- AudioBufferHostObject(const AudioBufferHostObject &) = delete;
35
- AudioBufferHostObject &operator=(const AudioBufferHostObject &) = delete;
36
- AudioBufferHostObject(AudioBufferHostObject &&other) noexcept
37
- : JsiHostObject(std::move(other)),
38
- audioBuffer_(std::move(other.audioBuffer_)) {}
39
- AudioBufferHostObject &operator=(AudioBufferHostObject &&other) noexcept {
40
- if (this != &other) {
41
- JsiHostObject::operator=(std::move(other));
42
- audioBuffer_ = std::move(other.audioBuffer_);
43
- }
44
- return *this;
45
- }
46
-
47
- [[nodiscard]] size_t getSizeInBytes() const {
48
- return audioBuffer_->getLength() * audioBuffer_->getNumberOfChannels() *
49
- sizeof(float);
50
- }
51
-
52
- JSI_PROPERTY_GETTER(sampleRate) {
53
- return {audioBuffer_->getSampleRate()};
54
- }
55
-
56
- JSI_PROPERTY_GETTER(length) {
57
- return {static_cast<double>(audioBuffer_->getLength())};
58
- }
59
-
60
- JSI_PROPERTY_GETTER(duration) {
61
- return {audioBuffer_->getDuration()};
62
- }
63
-
64
- JSI_PROPERTY_GETTER(numberOfChannels) {
65
- return {audioBuffer_->getNumberOfChannels()};
66
- }
67
-
68
- JSI_HOST_FUNCTION(getChannelData) {
69
- auto channel = static_cast<int>(args[0].getNumber());
70
- auto channelData =
71
- reinterpret_cast<uint8_t *>(audioBuffer_->getChannelData(channel));
72
- auto length = static_cast<int>(audioBuffer_->getLength());
73
- auto size = static_cast<int>(length * sizeof(float));
74
-
75
- // reading or writing from this ArrayBuffer could cause a crash
76
- // if underlying channelData is deallocated
77
- auto audioArrayBuffer =
78
- std::make_shared<AudioArrayBuffer>(channelData, size);
79
- auto arrayBuffer = jsi::ArrayBuffer(runtime, audioArrayBuffer);
80
-
81
- auto float32ArrayCtor =
82
- runtime.global().getPropertyAsFunction(runtime, "Float32Array");
83
- auto float32Array = float32ArrayCtor.callAsConstructor(runtime, arrayBuffer)
84
- .getObject(runtime);
85
-
86
- return float32Array;
87
- }
88
-
89
- JSI_HOST_FUNCTION(copyFromChannel) {
90
- auto arrayBuffer = args[0]
91
- .getObject(runtime)
92
- .getPropertyAsObject(runtime, "buffer")
93
- .getArrayBuffer(runtime);
94
- auto destination = reinterpret_cast<float *>(arrayBuffer.data(runtime));
95
- auto length = static_cast<int>(arrayBuffer.size(runtime));
96
- auto channelNumber = static_cast<int>(args[1].getNumber());
97
- auto startInChannel = static_cast<size_t>(args[2].getNumber());
98
-
99
- audioBuffer_->copyFromChannel(
100
- destination, length, channelNumber, startInChannel);
101
-
102
- return jsi::Value::undefined();
103
- }
104
-
105
- JSI_HOST_FUNCTION(copyToChannel) {
106
- auto arrayBuffer = args[0]
107
- .getObject(runtime)
108
- .getPropertyAsObject(runtime, "buffer")
109
- .getArrayBuffer(runtime);
110
- auto source = reinterpret_cast<float *>(arrayBuffer.data(runtime));
111
- auto length = static_cast<int>(arrayBuffer.size(runtime));
112
- auto channelNumber = static_cast<int>(args[1].getNumber());
113
- auto startInChannel = static_cast<size_t>(args[2].getNumber());
114
-
115
- audioBuffer_->copyToChannel(source, length, channelNumber, startInChannel);
116
-
117
- return jsi::Value::undefined();
118
- }
119
- };
120
- } // namespace audioapi
@@ -1,67 +0,0 @@
1
- #pragma once
2
-
3
- #include <audioapi/HostObjects/AudioBufferHostObject.h>
4
- #include <audioapi/core/sources/AudioBufferQueueSourceNode.h>
5
- #include <audioapi/HostObjects/AudioBufferBaseSourceNodeHostObject.h>
6
-
7
- #include <memory>
8
- #include <vector>
9
-
10
- namespace audioapi {
11
- using namespace facebook;
12
-
13
- class AudioBufferQueueSourceNodeHostObject
14
- : public AudioBufferBaseSourceNodeHostObject {
15
- public:
16
- explicit AudioBufferQueueSourceNodeHostObject(
17
- const std::shared_ptr<AudioBufferQueueSourceNode> &node)
18
- : AudioBufferBaseSourceNodeHostObject(node) {
19
- addFunctions(
20
- JSI_EXPORT_FUNCTION(AudioBufferQueueSourceNodeHostObject, enqueueBuffer),
21
- JSI_EXPORT_FUNCTION(AudioBufferQueueSourceNodeHostObject, pause));
22
- }
23
-
24
- JSI_HOST_FUNCTION(pause) {
25
- auto audioBufferQueueSourceNode =
26
- std::static_pointer_cast<AudioBufferQueueSourceNode>(node_);
27
-
28
- audioBufferQueueSourceNode->pause();
29
-
30
- return jsi::Value::undefined();
31
- }
32
-
33
- JSI_HOST_FUNCTION(enqueueBuffer) {
34
- auto audioBufferQueueSourceNode =
35
- std::static_pointer_cast<AudioBufferQueueSourceNode>(node_);
36
-
37
- auto audioBufferHostObject =
38
- args[0].getObject(runtime).asHostObject<AudioBufferHostObject>(runtime);
39
-
40
- auto bufferId = audioBufferQueueSourceNode->enqueueBuffer(audioBufferHostObject->audioBuffer_);
41
-
42
- return jsi::String::createFromUtf8(runtime, bufferId);
43
- }
44
-
45
- JSI_HOST_FUNCTION(dequeueBuffer) {
46
- auto audioBufferQueueSourceNode =
47
- std::static_pointer_cast<AudioBufferQueueSourceNode>(node_);
48
-
49
- auto bufferId =
50
- args[0].getNumber();
51
-
52
- audioBufferQueueSourceNode->dequeueBuffer(bufferId);
53
-
54
- return jsi::Value::undefined();
55
- }
56
-
57
- JSI_HOST_FUNCTION(clearBuffers) {
58
- auto audioBufferQueueSourceNode =
59
- std::static_pointer_cast<AudioBufferQueueSourceNode>(node_);
60
-
61
- audioBufferQueueSourceNode->clearBuffers();
62
-
63
- return jsi::Value::undefined();
64
- }
65
- };
66
-
67
- } // namespace audioapi
@@ -1,142 +0,0 @@
1
- #pragma once
2
-
3
- #include <audioapi/HostObjects/AudioBufferHostObject.h>
4
- #include <audioapi/core/sources/AudioBufferSourceNode.h>
5
- #include <audioapi/HostObjects/AudioBufferBaseSourceNodeHostObject.h>
6
-
7
- #include <memory>
8
- #include <vector>
9
-
10
- namespace audioapi {
11
- using namespace facebook;
12
-
13
- class AudioBufferSourceNodeHostObject
14
- : public AudioBufferBaseSourceNodeHostObject {
15
- public:
16
- explicit AudioBufferSourceNodeHostObject(
17
- const std::shared_ptr<AudioBufferSourceNode> &node)
18
- : AudioBufferBaseSourceNodeHostObject(node) {
19
- addGetters(
20
- JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, loop),
21
- JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, loopSkip),
22
- JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, buffer),
23
- JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, loopStart),
24
- JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, loopEnd));
25
-
26
- addSetters(
27
- JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, loop),
28
- JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, loopSkip),
29
- JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, loopStart),
30
- JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, loopEnd));
31
-
32
- // start method is overridden in this class
33
- functions_->erase("start");
34
-
35
- addFunctions(
36
- JSI_EXPORT_FUNCTION(AudioBufferSourceNodeHostObject, start),
37
- JSI_EXPORT_FUNCTION(AudioBufferSourceNodeHostObject, setBuffer));
38
- }
39
-
40
- JSI_PROPERTY_GETTER(loop) {
41
- auto audioBufferSourceNode =
42
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
43
- auto loop = audioBufferSourceNode->getLoop();
44
- return {loop};
45
- }
46
-
47
- JSI_PROPERTY_GETTER(loopSkip) {
48
- auto audioBufferSourceNode =
49
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
50
- auto loopSkip = audioBufferSourceNode->getLoopSkip();
51
- return {loopSkip};
52
- }
53
-
54
- JSI_PROPERTY_GETTER(buffer) {
55
- auto audioBufferSourceNode =
56
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
57
- auto buffer = audioBufferSourceNode->getBuffer();
58
-
59
- if (!buffer) {
60
- return jsi::Value::null();
61
- }
62
-
63
- auto bufferHostObject = std::make_shared<AudioBufferHostObject>(buffer);
64
- return jsi::Object::createFromHostObject(runtime, bufferHostObject);
65
- }
66
-
67
- JSI_PROPERTY_GETTER(loopStart) {
68
- auto audioBufferSourceNode =
69
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
70
- auto loopStart = audioBufferSourceNode->getLoopStart();
71
- return {loopStart};
72
- }
73
-
74
- JSI_PROPERTY_GETTER(loopEnd) {
75
- auto audioBufferSourceNode =
76
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
77
- auto loopEnd = audioBufferSourceNode->getLoopEnd();
78
- return {loopEnd};
79
- }
80
-
81
- JSI_PROPERTY_SETTER(loop) {
82
- auto audioBufferSourceNode =
83
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
84
- audioBufferSourceNode->setLoop(value.getBool());
85
- }
86
-
87
- JSI_PROPERTY_SETTER(loopSkip) {
88
- auto audioBufferSourceNode =
89
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
90
- audioBufferSourceNode->setLoopSkip(value.getBool());
91
- }
92
-
93
- JSI_PROPERTY_SETTER(loopStart) {
94
- auto audioBufferSourceNode =
95
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
96
- audioBufferSourceNode->setLoopStart(value.getNumber());
97
- }
98
-
99
- JSI_PROPERTY_SETTER(loopEnd) {
100
- auto audioBufferSourceNode =
101
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
102
- audioBufferSourceNode->setLoopEnd(value.getNumber());
103
- }
104
-
105
- JSI_HOST_FUNCTION(start) {
106
- auto when = args[0].getNumber();
107
- auto offset = args[1].getNumber();
108
-
109
- auto audioBufferSourceNode =
110
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
111
-
112
- if (args[2].isUndefined()) {
113
- audioBufferSourceNode->start(when, offset);
114
-
115
- return jsi::Value::undefined();
116
- }
117
-
118
- auto duration = args[2].getNumber();
119
- audioBufferSourceNode->start(when, offset, duration);
120
-
121
- return jsi::Value::undefined();
122
- }
123
-
124
- JSI_HOST_FUNCTION(setBuffer) {
125
- auto audioBufferSourceNode =
126
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
127
-
128
- if (args[0].isNull()) {
129
- audioBufferSourceNode->setBuffer(std::shared_ptr<AudioBuffer>(nullptr));
130
- return jsi::Value::undefined();
131
- }
132
-
133
- auto bufferHostObject =
134
- args[0].getObject(runtime).asHostObject<AudioBufferHostObject>(runtime);
135
- thisValue.asObject(runtime).setExternalMemoryPressure(runtime,
136
- bufferHostObject->getSizeInBytes() + 16);
137
- audioBufferSourceNode->setBuffer(bufferHostObject->audioBuffer_);
138
- return jsi::Value::undefined();
139
- }
140
- };
141
-
142
- } // namespace audioapi
@@ -1,86 +0,0 @@
1
- #pragma once
2
-
3
- #include <jsi/jsi.h>
4
-
5
- #include <audioapi/core/sources/AudioBuffer.h>
6
- #include <audioapi/HostObjects/AudioBufferHostObject.h>
7
- #include <audioapi/core/inputs/AudioRecorder.h>
8
- #include <audioapi/HostObjects/RecorderAdapterNodeHostObject.h>
9
-
10
- #ifdef ANDROID
11
- #include <audioapi/android/core/AndroidAudioRecorder.h>
12
- #else
13
- #include <audioapi/ios/core/IOSAudioRecorder.h>
14
- #endif
15
-
16
- #include <memory>
17
- #include <utility>
18
- #include <vector>
19
- #include <cstdio>
20
-
21
- namespace audioapi {
22
- using namespace facebook;
23
-
24
- class AudioRecorderHostObject : public JsiHostObject {
25
- public:
26
- explicit AudioRecorderHostObject(
27
- jsi::Runtime *runtime,
28
- const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
29
- float sampleRate,
30
- int bufferLength) {
31
- #ifdef ANDROID
32
- audioRecorder_ = std::make_shared<AndroidAudioRecorder>(
33
- sampleRate,
34
- bufferLength,
35
- audioEventHandlerRegistry
36
- );
37
- #else
38
- audioRecorder_ = std::make_shared<IOSAudioRecorder>(
39
- sampleRate,
40
- bufferLength,
41
- audioEventHandlerRegistry
42
- );
43
- #endif
44
-
45
- addSetters(JSI_EXPORT_PROPERTY_SETTER(AudioRecorderHostObject, onAudioReady));
46
-
47
- addFunctions(
48
- JSI_EXPORT_FUNCTION(AudioRecorderHostObject, start),
49
- JSI_EXPORT_FUNCTION(AudioRecorderHostObject, stop),
50
- JSI_EXPORT_FUNCTION(AudioRecorderHostObject, connect),
51
- JSI_EXPORT_FUNCTION(AudioRecorderHostObject, disconnect)
52
- );
53
- }
54
-
55
- JSI_HOST_FUNCTION(connect) {
56
- auto adapterNodeHostObject = args[0].getObject(runtime).getHostObject<RecorderAdapterNodeHostObject>(runtime);
57
- audioRecorder_->connect(
58
- std::static_pointer_cast<RecorderAdapterNode>(adapterNodeHostObject->node_));
59
- return jsi::Value::undefined();
60
- }
61
-
62
- JSI_HOST_FUNCTION(disconnect) {
63
- audioRecorder_->disconnect();
64
- return jsi::Value::undefined();
65
- }
66
-
67
- JSI_HOST_FUNCTION(start) {
68
- audioRecorder_->start();
69
-
70
- return jsi::Value::undefined();
71
- }
72
-
73
- JSI_HOST_FUNCTION(stop) {
74
- audioRecorder_->stop();
75
-
76
- return jsi::Value::undefined();
77
- }
78
-
79
- JSI_PROPERTY_SETTER(onAudioReady) {
80
- audioRecorder_->setOnAudioReadyCallbackId(std::stoull(value.getString(runtime).utf8(runtime)));
81
- }
82
-
83
- private:
84
- std::shared_ptr<AudioRecorder> audioRecorder_;
85
- };
86
- } // namespace audioapi