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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. package/README.md +39 -40
  2. package/RNAudioAPI.podspec +12 -17
  3. package/android/build.gradle +4 -44
  4. package/android/src/main/cpp/audioapi/CMakeLists.txt +0 -65
  5. package/android/src/main/cpp/audioapi/android/AudioAPIModule.cpp +1 -29
  6. package/android/src/main/cpp/audioapi/android/AudioAPIModule.h +0 -14
  7. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.cpp +1 -7
  8. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +1 -6
  9. package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +1 -1
  10. package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +1 -11
  11. package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionManager.kt +2 -15
  12. package/common/cpp/audioapi/AudioAPIModuleInstaller.h +18 -53
  13. package/common/cpp/audioapi/HostObjects/AnalyserNodeHostObject.h +149 -0
  14. package/common/cpp/audioapi/HostObjects/AudioBufferBaseSourceNodeHostObject.h +76 -0
  15. package/common/cpp/audioapi/HostObjects/AudioBufferHostObject.h +120 -0
  16. package/common/cpp/audioapi/HostObjects/AudioBufferQueueSourceNodeHostObject.h +67 -0
  17. package/common/cpp/audioapi/HostObjects/AudioBufferSourceNodeHostObject.h +142 -0
  18. package/common/cpp/audioapi/HostObjects/AudioContextHostObject.h +46 -6
  19. package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.cpp +6 -70
  20. package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.h +66 -10
  21. package/common/cpp/audioapi/HostObjects/AudioParamHostObject.h +91 -17
  22. package/common/cpp/audioapi/HostObjects/AudioRecorderHostObject.h +86 -0
  23. package/common/cpp/audioapi/HostObjects/AudioScheduledSourceNodeHostObject.h +56 -0
  24. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +6 -362
  25. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +241 -29
  26. package/common/cpp/audioapi/HostObjects/BiquadFilterNodeHostObject.h +89 -0
  27. package/common/cpp/audioapi/HostObjects/GainNodeHostObject.h +27 -0
  28. package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.h +50 -6
  29. package/common/cpp/audioapi/HostObjects/OscillatorNodeHostObject.h +65 -0
  30. package/common/cpp/audioapi/HostObjects/{sources/RecorderAdapterNodeHostObject.h → RecorderAdapterNodeHostObject.h} +2 -1
  31. package/common/cpp/audioapi/HostObjects/StereoPannerNodeHostObject.h +29 -0
  32. package/common/cpp/audioapi/HostObjects/StreamerNodeHostObject.h +30 -0
  33. package/common/cpp/audioapi/core/AudioContext.cpp +2 -3
  34. package/common/cpp/audioapi/core/AudioContext.h +1 -2
  35. package/common/cpp/audioapi/core/AudioNode.h +1 -1
  36. package/common/cpp/audioapi/core/AudioParam.cpp +2 -2
  37. package/common/cpp/audioapi/core/AudioParam.h +1 -1
  38. package/common/cpp/audioapi/core/{utils/AudioParamEventQueue.cpp → AudioParamEventQueue.cpp} +7 -13
  39. package/common/cpp/audioapi/core/BaseAudioContext.cpp +3 -47
  40. package/common/cpp/audioapi/core/BaseAudioContext.h +4 -13
  41. package/common/cpp/audioapi/core/{utils/Constants.h → Constants.h} +0 -5
  42. package/common/cpp/audioapi/core/OfflineAudioContext.cpp +3 -4
  43. package/common/cpp/audioapi/core/OfflineAudioContext.h +1 -2
  44. package/common/cpp/audioapi/core/effects/PeriodicWave.cpp +1 -1
  45. package/common/cpp/audioapi/core/effects/StereoPannerNode.cpp +1 -1
  46. package/common/cpp/audioapi/core/inputs/AudioRecorder.cpp +1 -1
  47. package/common/cpp/audioapi/core/inputs/AudioRecorder.h +2 -2
  48. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +10 -47
  49. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +3 -18
  50. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +12 -94
  51. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +2 -8
  52. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +42 -33
  53. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +8 -6
  54. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +6 -1
  55. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +1 -1
  56. package/common/cpp/audioapi/core/sources/StreamerNode.h +8 -0
  57. package/common/cpp/audioapi/dsp/Windows.cpp +1 -1
  58. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.cpp +1 -1
  59. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +1 -2
  60. package/common/cpp/audioapi/events/AudioEventHandlerRegistryHostObject.h +48 -0
  61. package/common/cpp/audioapi/jsi/AudioArrayBuffer.h +1 -14
  62. package/common/cpp/audioapi/jsi/JsiHostObject.h +12 -6
  63. package/common/cpp/audioapi/jsi/JsiPromise.cpp +0 -49
  64. package/common/cpp/audioapi/jsi/JsiPromise.h +1 -29
  65. package/common/cpp/audioapi/utils/AudioBus.cpp +1 -1
  66. package/common/cpp/test/CMakeLists.txt +3 -11
  67. package/common/cpp/test/GainTest.cpp +1 -2
  68. package/common/cpp/test/OscillatorTest.cpp +1 -2
  69. package/ios/audioapi/ios/AudioAPIModule.mm +5 -32
  70. package/ios/audioapi/ios/core/IOSAudioPlayer.mm +1 -1
  71. package/ios/audioapi/ios/core/IOSAudioRecorder.h +1 -2
  72. package/ios/audioapi/ios/core/IOSAudioRecorder.mm +1 -1
  73. package/ios/audioapi/ios/events/IOSAudioEventHandlerRegistry.h +7 -0
  74. package/ios/audioapi/ios/events/IOSAudioEventHandlerRegistry.mm +12 -0
  75. package/lib/commonjs/api.js +2 -36
  76. package/lib/commonjs/api.js.map +1 -1
  77. package/lib/commonjs/api.web.js +0 -8
  78. package/lib/commonjs/api.web.js.map +1 -1
  79. package/lib/commonjs/core/AudioBufferBaseSourceNode.js +7 -7
  80. package/lib/commonjs/core/AudioBufferBaseSourceNode.js.map +1 -1
  81. package/lib/commonjs/core/AudioBufferQueueSourceNode.js +6 -1
  82. package/lib/commonjs/core/AudioBufferQueueSourceNode.js.map +1 -1
  83. package/lib/commonjs/core/AudioBufferSourceNode.js +0 -15
  84. package/lib/commonjs/core/AudioBufferSourceNode.js.map +1 -1
  85. package/lib/commonjs/core/AudioContext.js +1 -10
  86. package/lib/commonjs/core/AudioContext.js.map +1 -1
  87. package/lib/commonjs/core/AudioScheduledSourceNode.js +4 -4
  88. package/lib/commonjs/core/AudioScheduledSourceNode.js.map +1 -1
  89. package/lib/commonjs/core/BaseAudioContext.js +11 -66
  90. package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
  91. package/lib/commonjs/core/OfflineAudioContext.js +2 -11
  92. package/lib/commonjs/core/OfflineAudioContext.js.map +1 -1
  93. package/lib/commonjs/core/OscillatorNode.js +0 -6
  94. package/lib/commonjs/core/OscillatorNode.js.map +1 -1
  95. package/lib/commonjs/hooks/{useSystemVolume.js → useSytemVolume.js} +1 -1
  96. package/lib/commonjs/hooks/useSytemVolume.js.map +1 -0
  97. package/lib/commonjs/utils/index.js +0 -9
  98. package/lib/commonjs/utils/index.js.map +1 -1
  99. package/lib/commonjs/web-core/AudioContext.js +0 -4
  100. package/lib/commonjs/web-core/AudioContext.js.map +1 -1
  101. package/lib/commonjs/web-core/AudioScheduledSourceNode.js +1 -1
  102. package/lib/commonjs/web-core/AudioScheduledSourceNode.js.map +1 -1
  103. package/lib/commonjs/web-core/OfflineAudioContext.js +0 -4
  104. package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
  105. package/lib/module/api.js +2 -6
  106. package/lib/module/api.js.map +1 -1
  107. package/lib/module/api.web.js +0 -1
  108. package/lib/module/api.web.js.map +1 -1
  109. package/lib/module/core/AudioBufferBaseSourceNode.js +7 -7
  110. package/lib/module/core/AudioBufferBaseSourceNode.js.map +1 -1
  111. package/lib/module/core/AudioBufferQueueSourceNode.js +6 -1
  112. package/lib/module/core/AudioBufferQueueSourceNode.js.map +1 -1
  113. package/lib/module/core/AudioBufferSourceNode.js +0 -15
  114. package/lib/module/core/AudioBufferSourceNode.js.map +1 -1
  115. package/lib/module/core/AudioContext.js +1 -10
  116. package/lib/module/core/AudioContext.js.map +1 -1
  117. package/lib/module/core/AudioScheduledSourceNode.js +4 -4
  118. package/lib/module/core/AudioScheduledSourceNode.js.map +1 -1
  119. package/lib/module/core/BaseAudioContext.js +11 -66
  120. package/lib/module/core/BaseAudioContext.js.map +1 -1
  121. package/lib/module/core/OfflineAudioContext.js +2 -11
  122. package/lib/module/core/OfflineAudioContext.js.map +1 -1
  123. package/lib/module/core/OscillatorNode.js +0 -6
  124. package/lib/module/core/OscillatorNode.js.map +1 -1
  125. package/lib/module/hooks/{useSystemVolume.js → useSytemVolume.js} +1 -1
  126. package/lib/module/hooks/useSytemVolume.js.map +1 -0
  127. package/lib/module/utils/index.js +0 -8
  128. package/lib/module/utils/index.js.map +1 -1
  129. package/lib/module/web-core/AudioContext.js +0 -4
  130. package/lib/module/web-core/AudioContext.js.map +1 -1
  131. package/lib/module/web-core/AudioScheduledSourceNode.js +1 -1
  132. package/lib/module/web-core/AudioScheduledSourceNode.js.map +1 -1
  133. package/lib/module/web-core/OfflineAudioContext.js +0 -4
  134. package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
  135. package/lib/typescript/api.d.ts +4 -8
  136. package/lib/typescript/api.d.ts.map +1 -1
  137. package/lib/typescript/api.web.d.ts +0 -1
  138. package/lib/typescript/api.web.d.ts.map +1 -1
  139. package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts +2 -2
  140. package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts.map +1 -1
  141. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts +1 -1
  142. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts.map +1 -1
  143. package/lib/typescript/core/AudioBufferSourceNode.d.ts +0 -4
  144. package/lib/typescript/core/AudioBufferSourceNode.d.ts.map +1 -1
  145. package/lib/typescript/core/AudioContext.d.ts +0 -1
  146. package/lib/typescript/core/AudioContext.d.ts.map +1 -1
  147. package/lib/typescript/core/AudioScheduledSourceNode.d.ts +1 -1
  148. package/lib/typescript/core/BaseAudioContext.d.ts +11 -19
  149. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
  150. package/lib/typescript/core/OfflineAudioContext.d.ts +0 -1
  151. package/lib/typescript/core/OfflineAudioContext.d.ts.map +1 -1
  152. package/lib/typescript/core/OscillatorNode.d.ts +0 -3
  153. package/lib/typescript/core/OscillatorNode.d.ts.map +1 -1
  154. package/lib/typescript/events/types.d.ts +0 -2
  155. package/lib/typescript/events/types.d.ts.map +1 -1
  156. package/lib/typescript/hooks/{useSystemVolume.d.ts → useSytemVolume.d.ts} +1 -1
  157. package/lib/typescript/hooks/useSytemVolume.d.ts.map +1 -0
  158. package/lib/typescript/interfaces.d.ts +3 -21
  159. package/lib/typescript/interfaces.d.ts.map +1 -1
  160. package/lib/typescript/types.d.ts +1 -2
  161. package/lib/typescript/types.d.ts.map +1 -1
  162. package/lib/typescript/utils/index.d.ts +0 -8
  163. package/lib/typescript/utils/index.d.ts.map +1 -1
  164. package/lib/typescript/web-core/AudioBufferSourceNode.d.ts +1 -1
  165. package/lib/typescript/web-core/AudioContext.d.ts +2 -4
  166. package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
  167. package/lib/typescript/web-core/AudioScheduledSourceNode.d.ts +1 -1
  168. package/lib/typescript/web-core/BaseAudioContext.d.ts +0 -2
  169. package/lib/typescript/web-core/BaseAudioContext.d.ts.map +1 -1
  170. package/lib/typescript/web-core/OfflineAudioContext.d.ts +2 -4
  171. package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
  172. package/package.json +2 -3
  173. package/src/api.ts +3 -12
  174. package/src/api.web.ts +0 -1
  175. package/src/core/AudioBufferBaseSourceNode.ts +9 -9
  176. package/src/core/AudioBufferQueueSourceNode.ts +9 -1
  177. package/src/core/AudioBufferSourceNode.ts +0 -28
  178. package/src/core/AudioContext.ts +1 -12
  179. package/src/core/AudioScheduledSourceNode.ts +5 -5
  180. package/src/core/BaseAudioContext.ts +13 -149
  181. package/src/core/OfflineAudioContext.ts +2 -18
  182. package/src/core/OscillatorNode.ts +0 -11
  183. package/src/events/types.ts +0 -2
  184. package/src/interfaces.ts +5 -59
  185. package/src/types.ts +1 -3
  186. package/src/utils/index.ts +0 -21
  187. package/src/web-core/AudioBufferSourceNode.tsx +1 -1
  188. package/src/web-core/AudioContext.tsx +2 -7
  189. package/src/web-core/AudioScheduledSourceNode.tsx +1 -1
  190. package/src/web-core/BaseAudioContext.tsx +0 -2
  191. package/src/web-core/OfflineAudioContext.tsx +2 -7
  192. package/android/src/main/cpp/audioapi/android/core/NativeAudioRecorder.hpp +0 -36
  193. package/android/src/main/java/com/swmansion/audioapi/core/NativeAudioRecorder.kt +0 -24
  194. package/common/cpp/audioapi/HostObjects/AudioContextHostObject.cpp +0 -57
  195. package/common/cpp/audioapi/HostObjects/AudioParamHostObject.cpp +0 -105
  196. package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.cpp +0 -70
  197. package/common/cpp/audioapi/HostObjects/WorkletNodeHostObject.h +0 -18
  198. package/common/cpp/audioapi/HostObjects/WorkletProcessingNodeHostObject.h +0 -18
  199. package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.cpp +0 -148
  200. package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.h +0 -37
  201. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp +0 -92
  202. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.h +0 -29
  203. package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.cpp +0 -20
  204. package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.h +0 -19
  205. package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.cpp +0 -21
  206. package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.h +0 -21
  207. package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.cpp +0 -41
  208. package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.h +0 -28
  209. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.cpp +0 -69
  210. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +0 -33
  211. package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.cpp +0 -73
  212. package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.h +0 -29
  213. package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.cpp +0 -94
  214. package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.h +0 -46
  215. package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.cpp +0 -60
  216. package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.h +0 -25
  217. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.cpp +0 -152
  218. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.h +0 -37
  219. package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.cpp +0 -52
  220. package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.h +0 -25
  221. package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.cpp +0 -19
  222. package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.h +0 -21
  223. package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.cpp +0 -55
  224. package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.h +0 -27
  225. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.cpp +0 -22
  226. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.h +0 -28
  227. package/common/cpp/audioapi/HostObjects/sources/WorkletSourceNodeHostObject.h +0 -18
  228. package/common/cpp/audioapi/core/effects/WorkletNode.cpp +0 -87
  229. package/common/cpp/audioapi/core/effects/WorkletNode.h +0 -65
  230. package/common/cpp/audioapi/core/effects/WorkletProcessingNode.cpp +0 -89
  231. package/common/cpp/audioapi/core/effects/WorkletProcessingNode.h +0 -52
  232. package/common/cpp/audioapi/core/sources/ConstantSourceNode.cpp +0 -51
  233. package/common/cpp/audioapi/core/sources/ConstantSourceNode.h +0 -26
  234. package/common/cpp/audioapi/core/sources/WorkletSourceNode.cpp +0 -82
  235. package/common/cpp/audioapi/core/sources/WorkletSourceNode.h +0 -47
  236. package/common/cpp/audioapi/core/utils/worklets/SafeIncludes.h +0 -52
  237. package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.cpp +0 -9
  238. package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.h +0 -73
  239. package/common/cpp/audioapi/utils/ThreadPool.hpp +0 -104
  240. package/common/cpp/test/AudioParamTest.cpp +0 -204
  241. package/lib/commonjs/core/ConstantSourceNode.js +0 -17
  242. package/lib/commonjs/core/ConstantSourceNode.js.map +0 -1
  243. package/lib/commonjs/core/WorkletNode.js +0 -11
  244. package/lib/commonjs/core/WorkletNode.js.map +0 -1
  245. package/lib/commonjs/core/WorkletProcessingNode.js +0 -11
  246. package/lib/commonjs/core/WorkletProcessingNode.js.map +0 -1
  247. package/lib/commonjs/core/WorkletSourceNode.js +0 -11
  248. package/lib/commonjs/core/WorkletSourceNode.js.map +0 -1
  249. package/lib/commonjs/hooks/useSystemVolume.js.map +0 -1
  250. package/lib/commonjs/web-core/ConstantSourceNode.js +0 -17
  251. package/lib/commonjs/web-core/ConstantSourceNode.js.map +0 -1
  252. package/lib/module/core/ConstantSourceNode.js +0 -11
  253. package/lib/module/core/ConstantSourceNode.js.map +0 -1
  254. package/lib/module/core/WorkletNode.js +0 -5
  255. package/lib/module/core/WorkletNode.js.map +0 -1
  256. package/lib/module/core/WorkletProcessingNode.js +0 -5
  257. package/lib/module/core/WorkletProcessingNode.js.map +0 -1
  258. package/lib/module/core/WorkletSourceNode.js +0 -5
  259. package/lib/module/core/WorkletSourceNode.js.map +0 -1
  260. package/lib/module/hooks/useSystemVolume.js.map +0 -1
  261. package/lib/module/web-core/ConstantSourceNode.js +0 -11
  262. package/lib/module/web-core/ConstantSourceNode.js.map +0 -1
  263. package/lib/typescript/core/ConstantSourceNode.d.ts +0 -9
  264. package/lib/typescript/core/ConstantSourceNode.d.ts.map +0 -1
  265. package/lib/typescript/core/WorkletNode.d.ts +0 -4
  266. package/lib/typescript/core/WorkletNode.d.ts.map +0 -1
  267. package/lib/typescript/core/WorkletProcessingNode.d.ts +0 -4
  268. package/lib/typescript/core/WorkletProcessingNode.d.ts.map +0 -1
  269. package/lib/typescript/core/WorkletSourceNode.d.ts +0 -4
  270. package/lib/typescript/core/WorkletSourceNode.d.ts.map +0 -1
  271. package/lib/typescript/hooks/useSystemVolume.d.ts.map +0 -1
  272. package/lib/typescript/web-core/ConstantSourceNode.d.ts +0 -8
  273. package/lib/typescript/web-core/ConstantSourceNode.d.ts.map +0 -1
  274. package/src/core/ConstantSourceNode.ts +0 -13
  275. package/src/core/WorkletNode.ts +0 -3
  276. package/src/core/WorkletProcessingNode.ts +0 -3
  277. package/src/core/WorkletSourceNode.ts +0 -3
  278. package/src/web-core/ConstantSourceNode.tsx +0 -12
  279. /package/common/cpp/audioapi/HostObjects/{destinations/AudioDestinationNodeHostObject.h → AudioDestinationNodeHostObject.h} +0 -0
  280. /package/common/cpp/audioapi/HostObjects/{effects/PeriodicWaveHostObject.h → PeriodicWaveHostObject.h} +0 -0
  281. /package/common/cpp/audioapi/core/{utils/AudioParamEventQueue.h → AudioParamEventQueue.h} +0 -0
  282. /package/src/hooks/{useSystemVolume.ts → useSytemVolume.ts} +0 -0
package/README.md CHANGED
@@ -4,8 +4,8 @@
4
4
 
5
5
  [![NPM latest](https://img.shields.io/npm/v/react-native-audio-api/latest)](https://www.npmjs.com/package/react-native-audio-api)
6
6
  [![NPM nightly](https://img.shields.io/npm/v/react-native-audio-api/audio-api-nightly)](https://www.npmjs.com/package/react-native-audio-api?activeTab=versions)
7
- <br />
8
7
  [![github ci](https://github.com/software-mansion/react-native-audio-api/actions/workflows/ci.yml/badge.svg)](https://github.com/software-mansion/react-native-audio-api/actions/workflows/ci.yml)
8
+ [![NPM Audio Api publish nightly](https://github.com/software-mansion/react-native-audio-api/actions/workflows/npm-publish-nightly.yml/badge.svg)](https://github.com/software-mansion/react-native-audio-api/actions/workflows/npm-publish-nightly.yml)
9
9
  [![Audio Api tests](https://github.com/software-mansion/react-native-audio-api/actions/workflows/tests.yml/badge.svg)](https://github.com/software-mansion/react-native-audio-api/actions/workflows/tests.yml)
10
10
 
11
11
  `react-native-audio-api` provides system for controlling audio in React Native environment compatible with Web Audio API specification,
@@ -17,56 +17,55 @@ check out the [Getting Started](https://docs.swmansion.com/react-native-audio-ap
17
17
 
18
18
  ## Roadmap
19
19
 
20
- ### Planned
20
+ - <sub>[![Released in 0.1.0](https://img.shields.io/badge/Released_in-0.1.0-green)](https://github.com/software-mansion/react-native-audio-api/releases/tag/0.1.0)</sub> <br />
21
+ **Sound synthesis and system audio** 🐣 <br />
22
+ Access to devices audio engines and threads, basic nodes for sound synthesis, simple effects and audio graph implementation
23
+ <br />
21
24
 
22
- ### <img src="https://img.shields.io/badge/Coming_in-0.9.0-orange" />
25
+ - <sub>[![Released in 0.2.0](https://img.shields.io/badge/Released_in-0.2.0-green)](https://github.com/software-mansion/react-native-audio-api/releases/tag/0.2.0)</sub> <br />
26
+ **Graph Processing** 🛎️ <br />
27
+ Support for multi-channel audio processing, audio-graph route optimizations, improved react-native layer for managing audio nodes
28
+ <br />
23
29
 
24
- - **JS Audio Worklets V1 🐎**<br />
25
- Receive events and data callbacks from audio thread to synchronize with UI on UI thread.
30
+ - <sub>[![Released in 0.3.2](https://img.shields.io/badge/Released_in-0.3.2-green)](https://github.com/software-mansion/react-native-audio-api/releases/tag/0.3.2)</sub> <br />
31
+ **Audio Files** 🎸 <br />
32
+ Support for local and remote audio file resources: MP3, WAV, FLAC.
33
+ <br />
26
34
 
27
- ### <img src="https://img.shields.io/badge/Coming_in-x.x.x-orange" />
35
+ - <sub>[![Released in 0.4.0](https://img.shields.io/badge/Released_in-0.4.0-green)](https://github.com/software-mansion/react-native-audio-api/releases/tag/0.4.0)</sub> <br />
36
+ **Analyser Node** 🌊 <br />
37
+ Ability to draw, animate or simply debug audio data in time or frequency domain.
38
+ <br />
28
39
 
29
- - **Convolver Node 🐐**<br />
30
- Realistic reverb and spatial effects in the browser by applying impulse responses. It makes audio sound like it’s being played in real spaces, from small rooms to cathedrals, or through hardware like amps and speakers
40
+ - <sub>[![Released in 0.5.0](https://img.shields.io/badge/Released_in-0.5.0-green)](https://github.com/software-mansion/react-native-audio-api/releases/tag/0.5.0)</sub> <br />
41
+ **Pitch correction, extending the web** 💥 <br />
42
+ Ability to modify playback speed without affecting pitch of the sound
43
+ <br />
31
44
 
32
- - **Decoding and utility modules 🔧**<br />
33
- Decode and modify audio data without the need to create AudioContext first through a set of utility classes
45
+ - <sub>[![Released in 0.6.0](https://img.shields.io/badge/Released_in-0.6.0-green)](https://github.com/software-mansion/react-native-audio-api/releases/tag/0.6.0)</sub> <br />
46
+ **System configuration** 🛠️ <br />
47
+ Full control of system audio settings, remote controls, lock screen integration and most importantly configurable background modes
34
48
 
35
- - **DynamicCompressorNode 〽️**<br />
36
- Reduce the volume of loud sounds and boost quieter nodes to balance the audio signal, avoid clipping or distorted sounds
49
+ **Connect audio param** 🤞 <br />
50
+ Ability to connect Audio nodes to audio params, which will allow for powerful and efficient modulation of audio parameters, creating effects like tremolo, vibrato or complex envelope followers. <br />
37
51
 
38
- - **Audio tag 🏷️**<br />
39
- Simple ability to play and buffer audio, with all of the most commonly used functions, same as on the web, without the need to create and manipulate an audio graph.
52
+ - <sub>[![Released in 0.7.0](https://img.shields.io/badge/Released_in-0.7.0-green)](https://github.com/software-mansion/react-native-audio-api/releases/tag/0.7.0)</sub> <br />
53
+ **Microphone support** 🎙️ <br />
54
+ Grab audio data from device microphone or connected device, connect it to the audio graph or stream through the internet <br />
40
55
 
41
- - **MIDI support 🎸**<br />
42
- Complementary lib for react-native-audio-api, that will allow to communicate with MIDI devices or read/write MIDI files.
56
+ **Custom Audio Processor** ⚙️ <br />
57
+ Write your own processing AudioNode <br />
43
58
 
44
- - **Spatial Audio 🛢️**<br />
45
- manipulate audio in 3D space
59
+ - <sub>[![Released in 0.8.0](https://img.shields.io/badge/Released_in-0.8.0-green)](https://github.com/software-mansion/react-native-audio-api/releases/tag/0.8.0)</sub> <br />
60
+ **Decoding support for m4a/mp4/aac/ogg/opus** 📁 <br />
61
+ Ability to decode m4a/mp4/aac/ogg/opus audio files, allowing for playback of these formats in the audio graph. <br />
46
62
 
47
- - **Noise Cancellation 🦇**<br />
48
- System-based active noise and echo cancellation support
63
+ **HLS streaming support** 🌊 <br />
64
+ Ability to stream audio from HLS sources, allowing for playback of live audio streams or pre-recorded audio files. <br />
49
65
 
50
- - **JS Audio Worklets V2 🐎**<br />
51
- Customize the process pipeline with JS functions running on audio thread.
52
-
53
- ### <a href="https://github.com/software-mansion/react-native-audio-api/releases/tag/0.8.0"><img src="https://img.shields.io/badge/Released_in-0.8.0-green" /></a>
54
-
55
- - **Decoding support for m4a/mp4/aac/ogg/opus 📁** <br />
56
- Decode m4a/mp4/aac/ogg/opus audio files, allowing for playback of these formats in the audio graph.
57
-
58
- - **HLS streaming support** 🌊 <br />
59
- Stream audio from HLS sources, allowing for playback of live audio streams or pre-recorded audio files.
60
-
61
- ### <a href="https://github.com/software-mansion/react-native-audio-api/releases/tag/0.7.0"><img src="https://img.shields.io/badge/Released_in-0.7.0-green" /></a>
62
-
63
- - **Microphone support 🎙️** <br />
64
- Grab audio data from device microphone or connected device, connect it to the audio graph or stream through the internet.
65
-
66
- - **Custom Audio Processor ⚙️** <br />
67
- Write your own processing AudioNode.
68
-
69
- See more in [Changelog](./ghdocs/changelog.md)
66
+ - **JS Audio Worklets** 🐎 <br />
67
+ Ability to run JS functions connected to the audio graph running on audio thread allowing for full customization of what happens to the audio signal.
68
+ <br />
70
69
 
71
70
  ## Web Audio API Specification Coverage
72
71
 
@@ -4,7 +4,7 @@ package_json = JSON.parse(File.read(File.join(__dir__, "package.json")))
4
4
 
5
5
  $new_arch_enabled = ENV['RCT_NEW_ARCH_ENABLED'] == '1'
6
6
 
7
- folly_flags = "-DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32"
7
+ folly_flags = "-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32"
8
8
  fabric_flags = $new_arch_enabled ? '-DRCT_NEW_ARCH_ENABLED' : ''
9
9
  version_flag = "-DAUDIOAPI_VERSION=#{package_json['version']}"
10
10
 
@@ -20,12 +20,12 @@ Pod::Spec.new do |s|
20
20
  s.source = { :git => "https://github.com/software-mansion/react-native-audio-api.git", :tag => "#{s.version}" }
21
21
 
22
22
  s.subspec "audioapi" do |ss|
23
- ss.source_files = "common/cpp/audioapi/**/*.{cpp,c,h,hpp}"
23
+ ss.source_files = "common/cpp/audioapi/**/*.{cpp,c,h}"
24
24
  ss.header_dir = "audioapi"
25
25
  ss.header_mappings_dir = "common/cpp/audioapi"
26
26
 
27
27
  ss.subspec "ios" do |sss|
28
- sss.source_files = "ios/audioapi/**/*.{mm,h,m,hpp}"
28
+ sss.source_files = "ios/audioapi/**/*.{mm,h,m}"
29
29
  sss.header_dir = "audioapi"
30
30
  sss.header_mappings_dir = "ios/audioapi"
31
31
  end
@@ -42,18 +42,16 @@ Pod::Spec.new do |s|
42
42
  # Assumes Pods dir is nested under ios project dir
43
43
  ios_dir = File.join(Pod::Config.instance.project_pods_root, '..')
44
44
  rn_audio_dir_relative = Pathname.new(__dir__).relative_path_from(ios_dir).to_s
45
-
46
- external_dir_relative = "common/cpp/audioapi/external"
47
- lib_dir = "$(PROJECT_DIR)/#{rn_audio_dir_relative}/#{external_dir_relative}/$(PLATFORM_NAME)"
48
-
49
- external_dir = File.join(__dir__, "common/cpp/audioapi/external")
50
-
45
+ external_dir = "common/cpp/audioapi/external"
46
+ lib_dir = "$(PROJECT_DIR)/#{rn_audio_dir_relative}/#{external_dir}/$(PLATFORM_NAME)"
47
+
51
48
  s.ios.vendored_frameworks = [
52
49
  'common/cpp/audioapi/external/libavcodec.xcframework',
53
50
  'common/cpp/audioapi/external/libavformat.xcframework',
54
51
  'common/cpp/audioapi/external/libavutil.xcframework',
55
52
  'common/cpp/audioapi/external/libswresample.xcframework'
56
53
  ]
54
+
57
55
  s.pod_target_xcconfig = {
58
56
  "USE_HEADERMAP" => "YES",
59
57
  "CLANG_CXX_LANGUAGE_STANDARD" => "c++20",
@@ -61,15 +59,12 @@ s.pod_target_xcconfig = {
61
59
  "HEADER_SEARCH_PATHS" => %W[
62
60
  $(PODS_TARGET_SRCROOT)/common/cpp
63
61
  $(PODS_TARGET_SRCROOT)/ios
64
- $(PODS_ROOT)/Headers/Public/RNWorklets
65
- $(PODS_ROOT)/Headers/Private/React-Core
66
- $(PODS_TARGET_SRCROOT)/#{external_dir_relative}/include
67
- $(PODS_TARGET_SRCROOT)/#{external_dir_relative}/include/opus
68
- $(PODS_TARGET_SRCROOT)/#{external_dir_relative}/include/vorbis
69
- $(PODS_TARGET_SRCROOT)/#{external_dir_relative}/ffmpeg_include
62
+ $(PODS_TARGET_SRCROOT)/#{external_dir}/include
63
+ $(PODS_TARGET_SRCROOT)/#{external_dir}/include/opus
64
+ $(PODS_TARGET_SRCROOT)/#{external_dir}/include/vorbis
65
+ $(PODS_TARGET_SRCROOT)/common/cpp/audioapi/external/ffmpeg_include
70
66
  ].join(" "),
71
- 'OTHER_CFLAGS' => "$(inherited) #{folly_flags} #{fabric_flags} #{version_flag}",
72
- 'OTHER_CPLUSPLUSFLAGS' => "$(inherited) #{folly_flags} #{fabric_flags} #{version_flag}"
67
+ 'OTHER_CFLAGS' => "$(inherited) #{folly_flags} #{fabric_flags} #{version_flag}"
73
68
  }
74
69
 
75
70
  s.user_target_xcconfig = {
@@ -65,15 +65,6 @@ def resolveReactNativeDirectory() {
65
65
  )
66
66
  }
67
67
 
68
- def resolveReactNativeWorkletsDirectory() {
69
- def rnWorklets = rootProject.subprojects.find { it.name == 'react-native-worklets' }
70
- if (rnWorklets != null) {
71
- return rnWorklets.projectDir
72
- }
73
-
74
- return null;
75
- }
76
-
77
68
  def toPlatformFileString(String path) {
78
69
  if (Os.isFamily(Os.FAMILY_WINDOWS)) {
79
70
  path = path.replace(File.separatorChar, '/' as char)
@@ -91,8 +82,6 @@ static def supportsNamespace() {
91
82
  }
92
83
 
93
84
  def reactNativeRootDir = resolveReactNativeDirectory()
94
- def reactNativeWorkletsRootDir = resolveReactNativeWorkletsDirectory()
95
- def isWorkletsAvailable = reactNativeWorkletsRootDir != null
96
85
 
97
86
  def reactProperties = new Properties()
98
87
  file("$reactNativeRootDir/ReactAndroid/gradle.properties").withInputStream { reactProperties.load(it) }
@@ -123,30 +112,17 @@ android {
123
112
  defaultConfig {
124
113
  minSdkVersion getExtOrIntegerDefault("minSdkVersion")
125
114
  targetSdkVersion getExtOrIntegerDefault("targetSdkVersion")
126
-
127
115
  buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
128
- buildConfigField "boolean", "RN_AUDIO_API_ENABLE_WORKLETS", "${isWorkletsAvailable}"
129
-
130
-
131
116
 
132
117
  externalNativeBuild {
133
118
  cmake {
134
119
  abiFilters (*reactNativeArchitectures())
135
-
136
- def cmakeArgs = [
137
- "-DANDROID_STL=c++_shared",
138
- "-DREACT_NATIVE_MINOR_VERSION=${REACT_NATIVE_MINOR_VERSION}",
139
- "-DANDROID_TOOLCHAIN=clang",
140
- "-DREACT_NATIVE_DIR=${toPlatformFileString(reactNativeRootDir.path)}",
141
- "-DRN_AUDIO_API_WORKLETS_ENABLED=${isWorkletsAvailable}",
120
+ arguments "-DANDROID_STL=c++_shared",
121
+ "-DREACT_NATIVE_MINOR_VERSION=${REACT_NATIVE_MINOR_VERSION}",
122
+ "-DANDROID_TOOLCHAIN=clang",
123
+ "-DREACT_NATIVE_DIR=${toPlatformFileString(reactNativeRootDir.path)}",
142
124
  "-DIS_NEW_ARCHITECTURE_ENABLED=${IS_NEW_ARCHITECTURE_ENABLED}",
143
125
  "-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON"
144
- ]
145
-
146
- if (isWorkletsAvailable) {
147
- cmakeArgs << "-DREACT_NATIVE_WORKLETS_DIR=${toPlatformFileString(reactNativeWorkletsRootDir.path)}"
148
- }
149
- arguments = cmakeArgs
150
126
  }
151
127
  }
152
128
  }
@@ -249,24 +225,8 @@ dependencies {
249
225
  implementation 'com.facebook.fbjni:fbjni:0.6.0'
250
226
  implementation 'com.google.oboe:oboe:1.9.3'
251
227
  implementation 'androidx.media:media:1.7.0'
252
-
253
- if (isWorkletsAvailable) {
254
- implementation(rootProject.subprojects.find { it.name == 'react-native-worklets' })
255
- }
256
228
  }
257
229
 
258
- if (isWorkletsAvailable) {
259
- // Ensure worklets is built before react-native-audio-api
260
- def rnWorkletsProject = rootProject.subprojects.find { it.name == 'react-native-worklets' }
261
- evaluationDependsOn(rnWorkletsProject.path)
262
-
263
- afterEvaluate {
264
- tasks.getByName("buildCMakeDebug").dependsOn(rnWorkletsProject.tasks.getByName("mergeDebugNativeLibs"))
265
- tasks.getByName("buildCMakeRelWithDebInfo").dependsOn(rnWorkletsProject.tasks.getByName("mergeReleaseNativeLibs"))
266
- }
267
- }
268
-
269
-
270
230
  def assertMinimalReactNativeVersion = task assertMinimalReactNativeVersionTask {
271
231
  // If you change the minimal React Native version remember to update Compatibility Table in docs
272
232
  def minimalReactNativeVersion = 76
@@ -27,12 +27,6 @@ find_package(ReactAndroid REQUIRED CONFIG)
27
27
  find_package(fbjni REQUIRED CONFIG)
28
28
  find_package(oboe REQUIRED CONFIG)
29
29
 
30
- if(${CMAKE_BUILD_TYPE} MATCHES "Debug")
31
- set(BUILD_TYPE "debug")
32
- else()
33
- set(BUILD_TYPE "release")
34
- endif()
35
-
36
30
  target_include_directories(
37
31
  react-native-audio-api
38
32
  PRIVATE
@@ -54,69 +48,10 @@ set(LINK_LIBRARIES
54
48
  oboe::oboe
55
49
  )
56
50
 
57
- set(INCLUDE_LIBRARIES
58
- "${COMMON_CPP_DIR}"
59
- "${ANDROID_CPP_DIR}"
60
- "${INCLUDE_DIR}"
61
- "${INCLUDE_DIR}/opus"
62
- "${INCLUDE_DIR}/vorbis"
63
- "${REACT_NATIVE_DIR}/ReactCommon"
64
- "${REACT_NATIVE_DIR}/ReactCommon/jsiexecutor"
65
- "${REACT_NATIVE_DIR}/ReactAndroid/src/main/jni/react/turbomodule"
66
- "${REACT_NATIVE_DIR}/ReactCommon/callinvoker"
67
- )
68
-
69
- if(RN_AUDIO_API_WORKLETS_ENABLED)
70
- # Import the worklets library (similar to how Reanimated does it)
71
- add_library(worklets SHARED IMPORTED)
72
- set_target_properties(
73
- worklets
74
- PROPERTIES
75
- IMPORTED_LOCATION
76
- "${REACT_NATIVE_WORKLETS_DIR}/build/intermediates/cmake/${BUILD_TYPE}/obj/${ANDROID_ABI}/libworklets.so"
77
- )
78
- list(APPEND INCLUDE_LIBRARIES
79
- "${REACT_NATIVE_WORKLETS_DIR}/../Common/cpp"
80
- "${REACT_NATIVE_WORKLETS_DIR}/src/main/cpp"
81
- )
82
- list(APPEND LINK_LIBRARIES worklets)
83
- endif()
84
-
85
- target_include_directories(
86
- react-native-audio-api
87
- PRIVATE
88
- ${INCLUDE_LIBRARIES}
89
- )
90
-
91
- if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76)
92
- set(RN_VERSION_LINK_LIBRARIES
93
- ReactAndroid::reactnative
94
- )
95
- else()
96
- set(RN_VERSION_LINK_LIBRARIES
97
- ReactAndroid::folly_runtime
98
- ReactAndroid::react_nativemodule_core
99
- ReactAndroid::glog
100
- ReactAndroid::reactnativejni
101
- )
102
- endif()
103
-
104
51
  set(RN_VERSION_LINK_LIBRARIES
105
52
  ReactAndroid::reactnative
106
53
  )
107
54
 
108
- if(RN_AUDIO_API_WORKLETS_ENABLED)
109
- target_compile_definitions(
110
- react-native-audio-api
111
- PRIVATE RN_AUDIO_API_ENABLE_WORKLETS=1
112
- )
113
- else()
114
- target_compile_definitions(
115
- react-native-audio-api
116
- PRIVATE RN_AUDIO_API_ENABLE_WORKLETS=0
117
- )
118
- endif()
119
-
120
55
  target_link_libraries(react-native-audio-api
121
56
  ${LINK_LIBRARIES}
122
57
  ${RN_VERSION_LINK_LIBRARIES}
@@ -6,16 +6,10 @@ using namespace facebook::jni;
6
6
 
7
7
  AudioAPIModule::AudioAPIModule(
8
8
  jni::alias_ref<AudioAPIModule::jhybridobject> &jThis,
9
- #if RN_AUDIO_API_ENABLE_WORKLETS
10
- std::weak_ptr<WorkletsModuleProxy> weakWorkletsModuleProxy,
11
- #endif
12
9
  jsi::Runtime *jsiRuntime,
13
10
  const std::shared_ptr<facebook::react::CallInvoker> &jsCallInvoker)
14
11
  : javaPart_(make_global(jThis)),
15
12
  jsiRuntime_(jsiRuntime),
16
- #if RN_AUDIO_API_ENABLE_WORKLETS
17
- weakWorkletsModuleProxy_(weakWorkletsModuleProxy),
18
- #endif
19
13
  jsCallInvoker_(jsCallInvoker) {
20
14
  audioEventHandlerRegistry_ =
21
15
  std::make_shared<AudioEventHandlerRegistry>(jsiRuntime, jsCallInvoker);
@@ -23,25 +17,12 @@ AudioAPIModule::AudioAPIModule(
23
17
 
24
18
  jni::local_ref<AudioAPIModule::jhybriddata> AudioAPIModule::initHybrid(
25
19
  jni::alias_ref<jhybridobject> jThis,
26
- jni::alias_ref<jni::JObject> jWorkletsModule,
27
20
  jlong jsContext,
28
21
  jni::alias_ref<facebook::react::CallInvokerHolder::javaobject>
29
22
  jsCallInvokerHolder) {
30
23
  auto jsCallInvoker = jsCallInvokerHolder->cthis()->getCallInvoker();
31
24
  auto rnRuntime = reinterpret_cast<jsi::Runtime *>(jsContext);
32
- #if RN_AUDIO_API_ENABLE_WORKLETS
33
- if (jWorkletsModule) {
34
- auto castedModule =
35
- jni::static_ref_cast<WorkletsModule::javaobject>(jWorkletsModule);
36
- auto workletsModuleProxy = castedModule->cthis()->getWorkletsModuleProxy();
37
- return makeCxxInstance(
38
- jThis, workletsModuleProxy, rnRuntime, jsCallInvoker);
39
- }
40
- throw std::runtime_error(
41
- "Worklets module is required but not provided from Java/Kotlin side");
42
- #else
43
25
  return makeCxxInstance(jThis, rnRuntime, jsCallInvoker);
44
- #endif
45
26
  }
46
27
 
47
28
  void AudioAPIModule::registerNatives() {
@@ -55,17 +36,8 @@ void AudioAPIModule::registerNatives() {
55
36
  }
56
37
 
57
38
  void AudioAPIModule::injectJSIBindings() {
58
- #if RN_AUDIO_API_ENABLE_WORKLETS
59
- auto uiWorkletRuntime =
60
- weakWorkletsModuleProxy_.lock()->getUIWorkletRuntime();
61
- #else
62
- auto uiWorkletRuntime = nullptr;
63
- #endif
64
39
  AudioAPIModuleInstaller::injectJSIBindings(
65
- jsiRuntime_,
66
- jsCallInvoker_,
67
- audioEventHandlerRegistry_,
68
- uiWorkletRuntime);
40
+ jsiRuntime_, jsCallInvoker_, audioEventHandlerRegistry_);
69
41
  }
70
42
 
71
43
  void AudioAPIModule::invokeHandlerWithEventNameAndEventBody(
@@ -7,7 +7,6 @@
7
7
  #include <fbjni/fbjni.h>
8
8
  #include <react/jni/CxxModuleWrapper.h>
9
9
  #include <react/jni/JMessageQueueThread.h>
10
- #include <audioapi/core/utils/worklets/SafeIncludes.h>
11
10
  #include <memory>
12
11
  #include <utility>
13
12
  #include <unordered_map>
@@ -16,7 +15,6 @@ namespace audioapi {
16
15
 
17
16
  using namespace facebook;
18
17
  using namespace react;
19
- using namespace worklets;
20
18
 
21
19
  class AudioAPIModule : public jni::HybridClass<AudioAPIModule> {
22
20
  public:
@@ -25,7 +23,6 @@ class AudioAPIModule : public jni::HybridClass<AudioAPIModule> {
25
23
 
26
24
  static jni::local_ref<AudioAPIModule::jhybriddata> initHybrid(
27
25
  jni::alias_ref<jhybridobject> jThis,
28
- jni::alias_ref<jni::JObject> jWorkletsModule, // it will be null if RN_AUDIO_API_ENABLE_WORKLETS is false
29
26
  jlong jsContext,
30
27
  jni::alias_ref<facebook::react::CallInvokerHolder::javaobject>
31
28
  jsCallInvokerHolder);
@@ -40,24 +37,13 @@ class AudioAPIModule : public jni::HybridClass<AudioAPIModule> {
40
37
 
41
38
  jni::global_ref<AudioAPIModule::javaobject> javaPart_;
42
39
  jsi::Runtime *jsiRuntime_;
43
- #if RN_AUDIO_API_ENABLE_WORKLETS
44
- std::weak_ptr<worklets::WorkletsModuleProxy> weakWorkletsModuleProxy_;
45
- #endif
46
40
  std::shared_ptr<facebook::react::CallInvoker> jsCallInvoker_;
47
41
  std::shared_ptr<AudioEventHandlerRegistry> audioEventHandlerRegistry_;
48
42
 
49
- #if RN_AUDIO_API_ENABLE_WORKLETS
50
43
  explicit AudioAPIModule(
51
44
  jni::alias_ref<AudioAPIModule::jhybridobject> &jThis,
52
- std::weak_ptr<worklets::WorkletsModuleProxy> weakWorkletsModuleProxy,
53
45
  jsi::Runtime *jsiRuntime,
54
46
  const std::shared_ptr<facebook::react::CallInvoker> &jsCallInvoker);
55
- #else
56
- explicit AudioAPIModule(
57
- jni::alias_ref<AudioAPIModule::jhybridobject> &jThis,
58
- jsi::Runtime *jsiRuntime,
59
- const std::shared_ptr<facebook::react::CallInvoker> &jsCallInvoker);
60
- #endif
61
47
  };
62
48
 
63
49
  } // namespace audioapi
@@ -1,6 +1,6 @@
1
1
  #include <audioapi/android/core/AndroidAudioRecorder.h>
2
+ #include <audioapi/core/Constants.h>
2
3
  #include <audioapi/core/sources/RecorderAdapterNode.h>
3
- #include <audioapi/core/utils/Constants.h>
4
4
  #include <audioapi/events/AudioEventHandlerRegistry.h>
5
5
  #include <audioapi/utils/AudioArray.h>
6
6
  #include <audioapi/utils/AudioBus.h>
@@ -25,13 +25,9 @@ AndroidAudioRecorder::AndroidAudioRecorder(
25
25
  ->setDataCallback(this)
26
26
  ->setSampleRate(static_cast<int>(sampleRate))
27
27
  ->openStream(mStream_);
28
-
29
- nativeAudioRecorder_ = jni::make_global(NativeAudioRecorder::create());
30
28
  }
31
29
 
32
30
  AndroidAudioRecorder::~AndroidAudioRecorder() {
33
- nativeAudioRecorder_.release();
34
-
35
31
  if (mStream_) {
36
32
  mStream_->requestStop();
37
33
  mStream_->close();
@@ -45,7 +41,6 @@ void AndroidAudioRecorder::start() {
45
41
  }
46
42
 
47
43
  if (mStream_) {
48
- nativeAudioRecorder_->start();
49
44
  mStream_->requestStart();
50
45
  }
51
46
 
@@ -60,7 +55,6 @@ void AndroidAudioRecorder::stop() {
60
55
  isRunning_.store(false);
61
56
 
62
57
  if (mStream_) {
63
- nativeAudioRecorder_->stop();
64
58
  mStream_->requestStop();
65
59
  }
66
60
 
@@ -6,8 +6,6 @@
6
6
  #include <functional>
7
7
  #include <memory>
8
8
 
9
- #include <audioapi/android/core/NativeAudioRecorder.hpp>
10
-
11
9
  namespace audioapi {
12
10
 
13
11
  using namespace oboe;
@@ -18,8 +16,7 @@ class AndroidAudioRecorder : public AudioStreamDataCallback, public AudioRecorde
18
16
  public:
19
17
  AndroidAudioRecorder(float sampleRate,
20
18
  int bufferLength,
21
- const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry
22
- );
19
+ const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry);
23
20
 
24
21
  ~AndroidAudioRecorder() override;
25
22
 
@@ -33,8 +30,6 @@ class AndroidAudioRecorder : public AudioStreamDataCallback, public AudioRecorde
33
30
 
34
31
  private:
35
32
  std::shared_ptr<AudioStream> mStream_;
36
-
37
- facebook::jni::global_ref<NativeAudioRecorder> nativeAudioRecorder_;
38
33
  };
39
34
 
40
35
  } // namespace audioapi
@@ -1,7 +1,7 @@
1
1
  #include <android/log.h>
2
2
  #include <audioapi/android/core/AudioPlayer.h>
3
3
  #include <audioapi/core/AudioContext.h>
4
- #include <audioapi/core/utils/Constants.h>
4
+ #include <audioapi/core/Constants.h>
5
5
  #include <audioapi/utils/AudioArray.h>
6
6
  #include <audioapi/utils/AudioBus.h>
7
7
 
@@ -26,7 +26,6 @@ class AudioAPIModule(
26
26
  private val mHybridData: HybridData
27
27
 
28
28
  external fun initHybrid(
29
- workletsModule: Any?,
30
29
  jsContext: Long,
31
30
  callInvoker: CallInvokerHolderImpl,
32
31
  ): HybridData
@@ -42,16 +41,7 @@ class AudioAPIModule(
42
41
  try {
43
42
  System.loadLibrary("react-native-audio-api")
44
43
  val jsCallInvokerHolder = reactContext.jsCallInvokerHolder as CallInvokerHolderImpl
45
-
46
- var workletsModule: Any? = null
47
- if (BuildConfig.RN_AUDIO_API_ENABLE_WORKLETS) {
48
- try {
49
- workletsModule = reactContext.getNativeModule("WorkletsModule")
50
- } catch (ex: Exception) {
51
- throw RuntimeException("WorkletsModule not found - make sure react-native-worklets is properly installed")
52
- }
53
- }
54
- mHybridData = initHybrid(workletsModule, reactContext.javaScriptContextHolder!!.get(), jsCallInvokerHolder)
44
+ mHybridData = initHybrid(reactContext.javaScriptContextHolder!!.get(), jsCallInvokerHolder)
55
45
  } catch (exception: UnsatisfiedLinkError) {
56
46
  throw RuntimeException("Could not load native module AudioAPIModule", exception)
57
47
  }
@@ -21,7 +21,6 @@ import com.facebook.react.modules.core.PermissionAwareActivity
21
21
  import com.facebook.react.modules.core.PermissionListener
22
22
  import com.swmansion.audioapi.AudioAPIModule
23
23
  import com.swmansion.audioapi.core.NativeAudioPlayer
24
- import com.swmansion.audioapi.core.NativeAudioRecorder
25
24
  import com.swmansion.audioapi.system.PermissionRequestListener.Companion.RECORDING_REQUEST_CODE
26
25
  import java.lang.ref.WeakReference
27
26
  import java.util.UUID
@@ -43,7 +42,6 @@ object MediaSessionManager {
43
42
  private var isServiceRunning = false
44
43
  private val serviceStateLock = Any()
45
44
  private val nativeAudioPlayers = mutableMapOf<String, NativeAudioPlayer>()
46
- private val nativeAudioRecorders = mutableMapOf<String, NativeAudioRecorder>()
47
45
 
48
46
  fun initialize(
49
47
  audioAPIModule: WeakReference<AudioAPIModule>,
@@ -97,25 +95,14 @@ object MediaSessionManager {
97
95
  nativeAudioPlayers.remove(uuid)
98
96
  }
99
97
 
100
- fun attachAudioRecorder(recorder: NativeAudioRecorder): String {
101
- val uuid = UUID.randomUUID().toString()
102
- nativeAudioRecorders[uuid] = recorder
103
-
104
- return uuid
105
- }
106
-
107
- fun detachAudioRecorder(uuid: String) {
108
- nativeAudioRecorders.remove(uuid)
109
- }
110
-
111
98
  fun startForegroundServiceIfNecessary() {
112
- if (nativeAudioPlayers.isNotEmpty() || nativeAudioRecorders.isNotEmpty()) {
99
+ if (nativeAudioPlayers.isNotEmpty()) {
113
100
  startForegroundService()
114
101
  }
115
102
  }
116
103
 
117
104
  fun stopForegroundServiceIfNecessary() {
118
- if (nativeAudioPlayers.isEmpty() && nativeAudioRecorders.isEmpty()) {
105
+ if (nativeAudioPlayers.isEmpty()) {
119
106
  stopForegroundService()
120
107
  }
121
108
  }