react-native-audio-api 0.10.0-nightly-e16d7ff-20251030 → 0.11.0-alpha.1

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 (288) hide show
  1. package/RNAudioAPI.podspec +11 -16
  2. package/android/build.gradle +3 -33
  3. package/android/src/main/cpp/audioapi/CMakeLists.txt +0 -6
  4. package/android/src/main/cpp/audioapi/android/AudioAPIModule.cpp +0 -5
  5. package/android/src/main/cpp/audioapi/android/AudioAPIModule.h +0 -1
  6. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.cpp +142 -28
  7. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +40 -13
  8. package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +2 -4
  9. package/android/src/main/cpp/audioapi/android/core/NativeAudioRecorder.hpp +9 -9
  10. package/android/src/main/cpp/audioapi/android/core/utils/AndroidFileWriterBackend.h +37 -0
  11. package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.cpp +187 -0
  12. package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.h +57 -0
  13. package/android/src/main/cpp/audioapi/android/core/utils/AudioDecoder.cpp +0 -6
  14. package/android/src/main/cpp/audioapi/android/core/utils/FileUtils.h +34 -0
  15. package/android/src/main/cpp/audioapi/android/core/utils/FileUtilts.cpp +133 -0
  16. package/android/src/main/cpp/audioapi/android/core/utils/MiniaudioImplementation.cpp +3 -0
  17. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.cpp +154 -0
  18. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.h +41 -0
  19. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.cpp +429 -0
  20. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.h +113 -0
  21. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.cpp +47 -0
  22. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.h +28 -0
  23. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.cpp +269 -0
  24. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.h +47 -0
  25. package/android/src/main/cpp/audioapi/android/system/NativeFileInfo.hpp +31 -0
  26. package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +3 -29
  27. package/android/src/main/java/com/swmansion/audioapi/system/AudioFocusListener.kt +9 -21
  28. package/android/src/main/java/com/swmansion/audioapi/system/LockScreenManager.kt +6 -27
  29. package/android/src/main/java/com/swmansion/audioapi/system/MediaNotificationManager.kt +0 -11
  30. package/android/src/main/java/com/swmansion/audioapi/system/NativeFileInfo.kt +18 -0
  31. package/android/src/main/jniLibs/arm64-v8a/libavcodec.so +0 -0
  32. package/android/src/main/jniLibs/arm64-v8a/libavformat.so +0 -0
  33. package/android/src/main/jniLibs/arm64-v8a/libavutil.so +0 -0
  34. package/android/src/main/jniLibs/arm64-v8a/libswresample.so +0 -0
  35. package/android/src/main/jniLibs/armeabi-v7a/libavcodec.so +0 -0
  36. package/android/src/main/jniLibs/armeabi-v7a/libavformat.so +0 -0
  37. package/android/src/main/jniLibs/armeabi-v7a/libavutil.so +0 -0
  38. package/android/src/main/jniLibs/armeabi-v7a/libswresample.so +0 -0
  39. package/android/src/main/jniLibs/x86/libavcodec.so +0 -0
  40. package/android/src/main/jniLibs/x86/libavformat.so +0 -0
  41. package/android/src/main/jniLibs/x86/libavutil.so +0 -0
  42. package/android/src/main/jniLibs/x86/libswresample.so +0 -0
  43. package/android/src/main/jniLibs/x86_64/libavcodec.so +0 -0
  44. package/android/src/main/jniLibs/x86_64/libavformat.so +0 -0
  45. package/android/src/main/jniLibs/x86_64/libavutil.so +0 -0
  46. package/android/src/main/jniLibs/x86_64/libswresample.so +0 -0
  47. package/common/cpp/audioapi/AudioAPIModuleInstaller.h +2 -30
  48. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +0 -18
  49. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +0 -1
  50. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp +1 -1
  51. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.cpp +97 -18
  52. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +18 -6
  53. package/common/cpp/audioapi/core/AudioNode.h +2 -3
  54. package/common/cpp/audioapi/core/AudioParam.cpp +2 -2
  55. package/common/cpp/audioapi/core/BaseAudioContext.cpp +0 -10
  56. package/common/cpp/audioapi/core/BaseAudioContext.h +0 -2
  57. package/common/cpp/audioapi/core/effects/BiquadFilterNode.cpp +32 -69
  58. package/common/cpp/audioapi/core/effects/BiquadFilterNode.h +1 -37
  59. package/common/cpp/audioapi/core/inputs/AudioRecorder.cpp +36 -82
  60. package/common/cpp/audioapi/core/inputs/AudioRecorder.h +52 -31
  61. package/common/cpp/audioapi/core/sources/StreamerNode.cpp +58 -59
  62. package/common/cpp/audioapi/core/sources/StreamerNode.h +8 -37
  63. package/common/cpp/audioapi/core/utils/AudioNodeManager.cpp +0 -5
  64. package/common/cpp/audioapi/core/utils/Constants.h +1 -2
  65. package/common/cpp/audioapi/core/utils/worklets/SafeIncludes.h +10 -0
  66. package/common/cpp/audioapi/dsp/AudioUtils.cpp +1 -1
  67. package/common/cpp/audioapi/dsp/FFT.cpp +26 -0
  68. package/common/cpp/audioapi/dsp/FFT.h +2 -26
  69. package/common/cpp/audioapi/external/arm64-v8a/libcrypto.a +0 -0
  70. package/common/cpp/audioapi/external/arm64-v8a/libogg.a +0 -0
  71. package/common/cpp/audioapi/external/arm64-v8a/libopus.a +0 -0
  72. package/common/cpp/audioapi/external/arm64-v8a/libopusfile.a +0 -0
  73. package/common/cpp/audioapi/external/arm64-v8a/libssl.a +0 -0
  74. package/common/cpp/audioapi/external/arm64-v8a/libvorbis.a +0 -0
  75. package/common/cpp/audioapi/external/arm64-v8a/libvorbisenc.a +0 -0
  76. package/common/cpp/audioapi/external/arm64-v8a/libvorbisfile.a +0 -0
  77. package/common/cpp/audioapi/external/armeabi-v7a/libcrypto.a +0 -0
  78. package/common/cpp/audioapi/external/armeabi-v7a/libogg.a +0 -0
  79. package/common/cpp/audioapi/external/armeabi-v7a/libopus.a +0 -0
  80. package/common/cpp/audioapi/external/armeabi-v7a/libopusfile.a +0 -0
  81. package/common/cpp/audioapi/external/armeabi-v7a/libssl.a +0 -0
  82. package/common/cpp/audioapi/external/armeabi-v7a/libvorbis.a +0 -0
  83. package/common/cpp/audioapi/external/armeabi-v7a/libvorbisenc.a +0 -0
  84. package/common/cpp/audioapi/external/armeabi-v7a/libvorbisfile.a +0 -0
  85. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/avcodec.h +2 -2
  86. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec.h +1 -1
  87. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_desc.h +1 -1
  88. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_id.h +1 -1
  89. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_par.h +1 -1
  90. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/avformat.h +2 -2
  91. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avutil.h +2 -2
  92. package/common/cpp/audioapi/external/iphoneos/libcrypto.a +0 -0
  93. package/common/cpp/audioapi/external/iphoneos/libogg.a +0 -0
  94. package/common/cpp/audioapi/external/iphoneos/libopus.a +0 -0
  95. package/common/cpp/audioapi/external/iphoneos/libopusfile.a +0 -0
  96. package/common/cpp/audioapi/external/iphoneos/libssl.a +0 -0
  97. package/common/cpp/audioapi/external/iphoneos/libvorbis.a +0 -0
  98. package/common/cpp/audioapi/external/iphoneos/libvorbisenc.a +0 -0
  99. package/common/cpp/audioapi/external/iphoneos/libvorbisfile.a +0 -0
  100. package/common/cpp/audioapi/external/iphonesimulator/libcrypto.a +0 -0
  101. package/common/cpp/audioapi/external/iphonesimulator/libogg.a +0 -0
  102. package/common/cpp/audioapi/external/iphonesimulator/libopus.a +0 -0
  103. package/common/cpp/audioapi/external/iphonesimulator/libopusfile.a +0 -0
  104. package/common/cpp/audioapi/external/iphonesimulator/libssl.a +0 -0
  105. package/common/cpp/audioapi/external/iphonesimulator/libvorbis.a +0 -0
  106. package/common/cpp/audioapi/external/iphonesimulator/libvorbisenc.a +0 -0
  107. package/common/cpp/audioapi/external/iphonesimulator/libvorbisfile.a +0 -0
  108. package/common/cpp/audioapi/external/libavcodec.xcframework/Info.plist +44 -0
  109. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64/libavcodec.framework/Info.plist +1 -0
  110. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64/libavcodec.framework/libavcodec +0 -0
  111. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64_x86_64-simulator/libavcodec.framework/Info.plist +1 -0
  112. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64_x86_64-simulator/libavcodec.framework/libavcodec +0 -0
  113. package/common/cpp/audioapi/external/libavformat.xcframework/Info.plist +44 -0
  114. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64/libavformat.framework/Info.plist +1 -0
  115. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64/libavformat.framework/libavformat +0 -0
  116. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64_x86_64-simulator/libavformat.framework/Info.plist +1 -0
  117. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64_x86_64-simulator/libavformat.framework/libavformat +0 -0
  118. package/common/cpp/audioapi/external/libavutil.xcframework/Info.plist +44 -0
  119. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64/libavutil.framework/Info.plist +1 -0
  120. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64/libavutil.framework/libavutil +0 -0
  121. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64_x86_64-simulator/libavutil.framework/Info.plist +1 -0
  122. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64_x86_64-simulator/libavutil.framework/libavutil +0 -0
  123. package/common/cpp/audioapi/external/libswresample.xcframework/Info.plist +44 -0
  124. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64/libswresample.framework/Info.plist +1 -0
  125. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64/libswresample.framework/libswresample +0 -0
  126. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64_x86_64-simulator/libswresample.framework/Info.plist +1 -0
  127. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64_x86_64-simulator/libswresample.framework/libswresample +0 -0
  128. package/common/cpp/audioapi/external/x86/libcrypto.a +0 -0
  129. package/common/cpp/audioapi/external/x86/libogg.a +0 -0
  130. package/common/cpp/audioapi/external/x86/libopus.a +0 -0
  131. package/common/cpp/audioapi/external/x86/libopusfile.a +0 -0
  132. package/common/cpp/audioapi/external/x86/libssl.a +0 -0
  133. package/common/cpp/audioapi/external/x86/libvorbis.a +0 -0
  134. package/common/cpp/audioapi/external/x86/libvorbisenc.a +0 -0
  135. package/common/cpp/audioapi/external/x86/libvorbisfile.a +0 -0
  136. package/common/cpp/audioapi/external/x86_64/libcrypto.a +0 -0
  137. package/common/cpp/audioapi/external/x86_64/libogg.a +0 -0
  138. package/common/cpp/audioapi/external/x86_64/libopus.a +0 -0
  139. package/common/cpp/audioapi/external/x86_64/libopusfile.a +0 -0
  140. package/common/cpp/audioapi/external/x86_64/libssl.a +0 -0
  141. package/common/cpp/audioapi/external/x86_64/libvorbis.a +0 -0
  142. package/common/cpp/audioapi/external/x86_64/libvorbisenc.a +0 -0
  143. package/common/cpp/audioapi/external/x86_64/libvorbisfile.a +0 -0
  144. package/common/cpp/audioapi/libs/ffmpeg/FFmpegDecoding.cpp +3 -2
  145. package/common/cpp/audioapi/libs/ffmpeg/INSTRUCTIONS.md +32 -0
  146. package/common/cpp/audioapi/libs/ffmpeg/create_xcframework.sh +111 -0
  147. package/common/cpp/audioapi/libs/ffmpeg/ffmpeg_setup.sh +391 -0
  148. package/common/cpp/audioapi/utils/AudioBus.cpp +0 -28
  149. package/common/cpp/audioapi/utils/AudioBus.h +0 -3
  150. package/common/cpp/audioapi/utils/ThreadPool.hpp +1 -59
  151. package/common/cpp/test/CMakeLists.txt +14 -19
  152. package/ios/audioapi/ios/AudioAPIModule.h +1 -2
  153. package/ios/audioapi/ios/AudioAPIModule.mm +0 -2
  154. package/ios/audioapi/ios/core/IOSAudioFileOptions.h +36 -0
  155. package/ios/audioapi/ios/core/IOSAudioFileOptions.mm +140 -0
  156. package/ios/audioapi/ios/core/IOSAudioFileWriter.h +51 -0
  157. package/ios/audioapi/ios/core/IOSAudioFileWriter.mm +223 -0
  158. package/ios/audioapi/ios/core/IOSAudioRecorder.h +28 -10
  159. package/ios/audioapi/ios/core/IOSAudioRecorder.mm +117 -30
  160. package/ios/audioapi/ios/core/IOSRecorderCallback.h +57 -0
  161. package/ios/audioapi/ios/core/IOSRecorderCallback.mm +189 -0
  162. package/ios/audioapi/ios/core/NativeAudioRecorder.h +4 -9
  163. package/ios/audioapi/ios/core/NativeAudioRecorder.m +29 -71
  164. package/ios/audioapi/ios/core/utils/AudioDecoder.mm +1 -0
  165. package/ios/audioapi/ios/system/AudioEngine.mm +3 -3
  166. package/ios/audioapi/ios/system/AudioSessionManager.mm +0 -9
  167. package/ios/audioapi/ios/system/LockScreenManager.h +1 -0
  168. package/ios/audioapi/ios/system/LockScreenManager.mm +19 -6
  169. package/lib/commonjs/api.js +76 -141
  170. package/lib/commonjs/api.js.map +1 -1
  171. package/lib/commonjs/api.web.js +0 -8
  172. package/lib/commonjs/api.web.js.map +1 -1
  173. package/lib/commonjs/core/AudioContext.js +1 -1
  174. package/lib/commonjs/core/AudioContext.js.map +1 -1
  175. package/lib/commonjs/core/AudioRecorder.js +171 -13
  176. package/lib/commonjs/core/AudioRecorder.js.map +1 -1
  177. package/lib/commonjs/core/BaseAudioContext.js +25 -28
  178. package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
  179. package/lib/commonjs/core/OfflineAudioContext.js +1 -1
  180. package/lib/commonjs/core/OfflineAudioContext.js.map +1 -1
  181. package/lib/commonjs/types.js +46 -0
  182. package/lib/commonjs/types.js.map +1 -1
  183. package/lib/commonjs/utils/bitEnums.js +33 -0
  184. package/lib/commonjs/utils/bitEnums.js.map +1 -0
  185. package/lib/commonjs/utils/index.js +21 -19
  186. package/lib/commonjs/utils/index.js.map +1 -1
  187. package/lib/commonjs/web-core/AudioContext.js +0 -12
  188. package/lib/commonjs/web-core/AudioContext.js.map +1 -1
  189. package/lib/commonjs/web-core/OfflineAudioContext.js +0 -12
  190. package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
  191. package/lib/module/api.js +15 -16
  192. package/lib/module/api.js.map +1 -1
  193. package/lib/module/api.web.js +0 -1
  194. package/lib/module/api.web.js.map +1 -1
  195. package/lib/module/core/AudioContext.js +2 -2
  196. package/lib/module/core/AudioContext.js.map +1 -1
  197. package/lib/module/core/AudioRecorder.js +171 -13
  198. package/lib/module/core/AudioRecorder.js.map +1 -1
  199. package/lib/module/core/BaseAudioContext.js +26 -29
  200. package/lib/module/core/BaseAudioContext.js.map +1 -1
  201. package/lib/module/core/OfflineAudioContext.js +2 -2
  202. package/lib/module/core/OfflineAudioContext.js.map +1 -1
  203. package/lib/module/types.js +45 -1
  204. package/lib/module/types.js.map +1 -1
  205. package/lib/module/utils/bitEnums.js +27 -0
  206. package/lib/module/utils/bitEnums.js.map +1 -0
  207. package/lib/module/utils/index.js +2 -15
  208. package/lib/module/utils/index.js.map +1 -1
  209. package/lib/module/web-core/AudioContext.js +0 -12
  210. package/lib/module/web-core/AudioContext.js.map +1 -1
  211. package/lib/module/web-core/OfflineAudioContext.js +0 -12
  212. package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
  213. package/lib/typescript/api.d.ts +17 -19
  214. package/lib/typescript/api.d.ts.map +1 -1
  215. package/lib/typescript/api.web.d.ts +0 -1
  216. package/lib/typescript/api.web.d.ts.map +1 -1
  217. package/lib/typescript/core/AudioContext.d.ts.map +1 -1
  218. package/lib/typescript/core/AudioRecorder.d.ts +62 -7
  219. package/lib/typescript/core/AudioRecorder.d.ts.map +1 -1
  220. package/lib/typescript/core/BaseAudioContext.d.ts +1 -3
  221. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
  222. package/lib/typescript/events/types.d.ts +16 -0
  223. package/lib/typescript/events/types.d.ts.map +1 -1
  224. package/lib/typescript/interfaces.d.ts +42 -9
  225. package/lib/typescript/interfaces.d.ts.map +1 -1
  226. package/lib/typescript/types.d.ts +79 -8
  227. package/lib/typescript/types.d.ts.map +1 -1
  228. package/lib/typescript/utils/bitEnums.d.ts +4 -0
  229. package/lib/typescript/utils/bitEnums.d.ts.map +1 -0
  230. package/lib/typescript/utils/index.d.ts +2 -5
  231. package/lib/typescript/utils/index.d.ts.map +1 -1
  232. package/lib/typescript/web-core/AudioContext.d.ts +0 -3
  233. package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
  234. package/lib/typescript/web-core/BaseAudioContext.d.ts +0 -2
  235. package/lib/typescript/web-core/BaseAudioContext.d.ts.map +1 -1
  236. package/lib/typescript/web-core/OfflineAudioContext.d.ts +0 -3
  237. package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
  238. package/package.json +4 -7
  239. package/src/api.ts +18 -45
  240. package/src/api.web.ts +0 -1
  241. package/src/core/AudioContext.ts +2 -3
  242. package/src/core/AudioRecorder.ts +211 -24
  243. package/src/core/BaseAudioContext.ts +60 -67
  244. package/src/core/OfflineAudioContext.ts +2 -2
  245. package/src/events/types.ts +18 -0
  246. package/src/interfaces.ts +52 -16
  247. package/src/types.ts +90 -9
  248. package/src/utils/bitEnums.ts +51 -0
  249. package/src/utils/index.ts +2 -22
  250. package/src/web-core/AudioContext.tsx +0 -25
  251. package/src/web-core/BaseAudioContext.tsx +0 -2
  252. package/src/web-core/OfflineAudioContext.tsx +0 -25
  253. package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.cpp +0 -47
  254. package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.h +0 -20
  255. package/common/cpp/audioapi/core/effects/ConvolverNode.cpp +0 -210
  256. package/common/cpp/audioapi/core/effects/ConvolverNode.h +0 -55
  257. package/common/cpp/audioapi/dsp/Convolver.cpp +0 -213
  258. package/common/cpp/audioapi/dsp/Convolver.h +0 -45
  259. package/common/cpp/audioapi/libs/ffmpeg/relinking.md +0 -24
  260. package/common/cpp/audioapi/utils/AlignedAllocator.hpp +0 -50
  261. package/common/cpp/test/src/biquad/BiquadFilterChromium.cpp +0 -389
  262. package/common/cpp/test/src/biquad/BiquadFilterChromium.h +0 -64
  263. package/common/cpp/test/src/biquad/BiquadFilterTest.cpp +0 -284
  264. package/common/cpp/test/src/biquad/BiquadFilterTest.h +0 -40
  265. package/lib/commonjs/core/ConvolverNode.js +0 -37
  266. package/lib/commonjs/core/ConvolverNode.js.map +0 -1
  267. package/lib/commonjs/web-core/ConvolverNode.js +0 -40
  268. package/lib/commonjs/web-core/ConvolverNode.js.map +0 -1
  269. package/lib/commonjs/web-core/ConvolverNodeOptions.js +0 -6
  270. package/lib/commonjs/web-core/ConvolverNodeOptions.js.map +0 -1
  271. package/lib/module/core/ConvolverNode.js +0 -31
  272. package/lib/module/core/ConvolverNode.js.map +0 -1
  273. package/lib/module/web-core/ConvolverNode.js +0 -34
  274. package/lib/module/web-core/ConvolverNode.js.map +0 -1
  275. package/lib/module/web-core/ConvolverNodeOptions.js +0 -4
  276. package/lib/module/web-core/ConvolverNodeOptions.js.map +0 -1
  277. package/lib/typescript/core/ConvolverNode.d.ts +0 -12
  278. package/lib/typescript/core/ConvolverNode.d.ts.map +0 -1
  279. package/lib/typescript/web-core/ConvolverNode.d.ts +0 -11
  280. package/lib/typescript/web-core/ConvolverNode.d.ts.map +0 -1
  281. package/lib/typescript/web-core/ConvolverNodeOptions.d.ts +0 -6
  282. package/lib/typescript/web-core/ConvolverNodeOptions.d.ts.map +0 -1
  283. package/scripts/download-prebuilt-binaries.sh +0 -52
  284. package/scripts/rnaa_utils.rb +0 -8
  285. package/scripts/validate-worklets-version.js +0 -28
  286. package/src/core/ConvolverNode.ts +0 -35
  287. package/src/web-core/ConvolverNode.tsx +0 -43
  288. package/src/web-core/ConvolverNodeOptions.tsx +0 -6
@@ -1 +1 @@
1
- {"version":3,"file":"BaseAudioContext.d.ts","sourceRoot":"","sources":["../../../src/web-core/BaseAudioContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AACjE,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAC1D,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,qBAAqB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AACtD,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAE5C,MAAM,CAAC,OAAO,WAAW,gBAAgB;IACvC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,gBAAgB,CAAC;IAE9C,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,IAAI,WAAW,IAAI,MAAM,CAAC;IAC1B,IAAI,KAAK,IAAI,YAAY,CAAC;IAC1B,gBAAgB,IAAI,cAAc,CAAC;IACnC,oBAAoB,IAAI,kBAAkB,CAAC;IAC3C,UAAU,IAAI,QAAQ,CAAC;IACvB,kBAAkB,IAAI,gBAAgB,CAAC;IACvC,kBAAkB,IAAI,gBAAgB,CAAC;IACvC,eAAe,IAAI,aAAa,CAAC;IACjC,kBAAkB,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACrD,YAAY,CACV,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,WAAW,CAAC;IACf,kBAAkB,CAChB,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,YAAY,EAClB,WAAW,CAAC,EAAE,uBAAuB,GACpC,YAAY,CAAC;IAChB,cAAc,IAAI,YAAY,CAAC;IAC/B,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC5D,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACjE"}
1
+ {"version":3,"file":"BaseAudioContext.d.ts","sourceRoot":"","sources":["../../../src/web-core/BaseAudioContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AACjE,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAC1D,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,qBAAqB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AAEtD,MAAM,CAAC,OAAO,WAAW,gBAAgB;IACvC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,gBAAgB,CAAC;IAE9C,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,IAAI,WAAW,IAAI,MAAM,CAAC;IAC1B,IAAI,KAAK,IAAI,YAAY,CAAC;IAC1B,gBAAgB,IAAI,cAAc,CAAC;IACnC,oBAAoB,IAAI,kBAAkB,CAAC;IAC3C,UAAU,IAAI,QAAQ,CAAC;IACvB,kBAAkB,IAAI,gBAAgB,CAAC;IACvC,kBAAkB,IAAI,gBAAgB,CAAC;IACvC,kBAAkB,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACrD,YAAY,CACV,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,WAAW,CAAC;IACf,kBAAkB,CAChB,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,YAAY,EAClB,WAAW,CAAC,EAAE,uBAAuB,GACpC,YAAY,CAAC;IAChB,cAAc,IAAI,YAAY,CAAC;IAC/B,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC5D,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACjE"}
@@ -10,8 +10,6 @@ import OscillatorNode from './OscillatorNode';
10
10
  import PeriodicWave from './PeriodicWave';
11
11
  import StereoPannerNode from './StereoPannerNode';
12
12
  import ConstantSourceNode from './ConstantSourceNode';
13
- import ConvolverNode from './ConvolverNode';
14
- import { ConvolverNodeOptions } from './ConvolverNodeOptions';
15
13
  export default class OfflineAudioContext implements BaseAudioContext {
16
14
  readonly context: globalThis.OfflineAudioContext;
17
15
  readonly destination: AudioDestinationNode;
@@ -25,7 +23,6 @@ export default class OfflineAudioContext implements BaseAudioContext {
25
23
  createGain(): GainNode;
26
24
  createStereoPanner(): StereoPannerNode;
27
25
  createBiquadFilter(): BiquadFilterNode;
28
- createConvolver(options?: ConvolverNodeOptions): ConvolverNode;
29
26
  createBufferSource(options?: AudioBufferBaseSourceNodeOptions): Promise<AudioBufferSourceNode>;
30
27
  createBuffer(numOfChannels: number, length: number, sampleRate: number): AudioBuffer;
31
28
  createPeriodicWave(real: Float32Array, imag: Float32Array, constraints?: PeriodicWaveConstraints): PeriodicWave;
@@ -1 +1 @@
1
- {"version":3,"file":"OfflineAudioContext.d.ts","sourceRoot":"","sources":["../../../src/web-core/OfflineAudioContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,0BAA0B,EAC1B,gCAAgC,EACjC,MAAM,UAAU,CAAC;AAElB,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAC1D,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,qBAAqB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AAGtD,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,CAAC,OAAO,OAAO,mBAAoB,YAAW,gBAAgB;IAClE,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,mBAAmB,CAAC;IAEjD,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAEhB,OAAO,EAAE,0BAA0B;gBACnC,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAsBxE,IAAW,WAAW,IAAI,MAAM,CAE/B;IAED,IAAW,KAAK,IAAI,YAAY,CAE/B;IAED,gBAAgB,IAAI,cAAc;IAIlC,oBAAoB,IAAI,kBAAkB;IAI1C,UAAU,IAAI,QAAQ;IAItB,kBAAkB,IAAI,gBAAgB;IAItC,kBAAkB,IAAI,gBAAgB;IAItC,eAAe,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,aAAa;IAuBxD,kBAAkB,CACtB,OAAO,CAAC,EAAE,gCAAgC,GACzC,OAAO,CAAC,qBAAqB,CAAC;IAgBjC,YAAY,CACV,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,WAAW;IAwBd,kBAAkB,CAChB,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,YAAY,EAClB,WAAW,CAAC,EAAE,uBAAuB,GACpC,YAAY;IAYf,cAAc,IAAI,YAAY;IAIxB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAQ3D,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAI/D,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC;IAItC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvB,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGlD"}
1
+ {"version":3,"file":"OfflineAudioContext.d.ts","sourceRoot":"","sources":["../../../src/web-core/OfflineAudioContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,0BAA0B,EAC1B,gCAAgC,EACjC,MAAM,UAAU,CAAC;AAElB,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAC1D,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,qBAAqB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AAItD,MAAM,CAAC,OAAO,OAAO,mBAAoB,YAAW,gBAAgB;IAClE,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,mBAAmB,CAAC;IAEjD,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAEhB,OAAO,EAAE,0BAA0B;gBACnC,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAsBxE,IAAW,WAAW,IAAI,MAAM,CAE/B;IAED,IAAW,KAAK,IAAI,YAAY,CAE/B;IAED,gBAAgB,IAAI,cAAc;IAIlC,oBAAoB,IAAI,kBAAkB;IAI1C,UAAU,IAAI,QAAQ;IAItB,kBAAkB,IAAI,gBAAgB;IAItC,kBAAkB,IAAI,gBAAgB;IAIhC,kBAAkB,CACtB,OAAO,CAAC,EAAE,gCAAgC,GACzC,OAAO,CAAC,qBAAqB,CAAC;IAgBjC,YAAY,CACV,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,WAAW;IAwBd,kBAAkB,CAChB,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,YAAY,EAClB,WAAW,CAAC,EAAE,uBAAuB,GACpC,YAAY;IAYf,cAAc,IAAI,YAAY;IAIxB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAQ3D,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAI/D,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC;IAItC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvB,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGlD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-audio-api",
3
- "version": "0.10.0-nightly-e16d7ff-20251030",
3
+ "version": "0.11.0-alpha.1",
4
4
  "description": "react-native-audio-api provides system for controlling audio in React Native environment compatible with Web Audio API specification",
5
5
  "bin": {
6
6
  "setup-rn-audio-api-web": "./scripts/setup-rn-audio-api-web.js"
@@ -35,9 +35,6 @@
35
35
  "!**/.*",
36
36
  "!**/node_modules",
37
37
  "scripts/setup-rn-audio-api-web.js",
38
- "scripts/rnaa_utils.rb",
39
- "scripts/validate-worklets-version.js",
40
- "scripts/download-prebuilt-binaries.sh",
41
38
  "app.plugin.js"
42
39
  ],
43
40
  "scripts": {
@@ -91,7 +88,7 @@
91
88
  "@babel/core": "^7.25.2",
92
89
  "@babel/preset-env": "^7.25.3",
93
90
  "@babel/types": "^7.20.0",
94
- "@commitlint/config-conventional": "^17.0.2",
91
+ "@commitlint/config-conventional": "17.0.2",
95
92
  "@evilmartians/lefthook": "^1.5.0",
96
93
  "@expo/config-plugins": "^9.0.0",
97
94
  "@expo/config-types": "^53.0.4",
@@ -108,7 +105,7 @@
108
105
  "@types/react": "^19.1.1",
109
106
  "@types/react-test-renderer": "^19.1.0",
110
107
  "babel-plugin-module-resolver": "^4.1.0",
111
- "commitlint": "^17.0.2",
108
+ "commitlint": "17.0.2",
112
109
  "del-cli": "^5.1.0",
113
110
  "eslint": "^8.57.0",
114
111
  "eslint-config-prettier": "^8.3.0",
@@ -130,7 +127,7 @@
130
127
  "react-native": "0.82.0",
131
128
  "react-native-builder-bob": "0.33.1",
132
129
  "turbo": "^1.10.7",
133
- "typescript": "5.8.3"
130
+ "typescript": "~5.8.3"
134
131
  },
135
132
  "react-native-builder-bob": {
136
133
  "source": "src",
package/src/api.ts CHANGED
@@ -1,13 +1,12 @@
1
- import { NativeAudioAPIModule } from './specs';
2
- import { AudioRecorderOptions } from './types';
3
1
  import type {
4
2
  IAudioContext,
5
3
  IAudioDecoder,
4
+ IAudioEventEmitter,
6
5
  IAudioRecorder,
7
6
  IAudioStretcher,
8
7
  IOfflineAudioContext,
9
- IAudioEventEmitter,
10
8
  } from './interfaces';
9
+ import { NativeAudioAPIModule } from './specs';
11
10
 
12
11
  /* eslint-disable no-var */
13
12
  declare global {
@@ -25,7 +24,7 @@ declare global {
25
24
  audioWorkletRuntime: any
26
25
  ) => IOfflineAudioContext;
27
26
 
28
- var createAudioRecorder: (options: AudioRecorderOptions) => IAudioRecorder;
27
+ var createAudioRecorder: () => IAudioRecorder;
29
28
 
30
29
  var createAudioDecoder: () => IAudioDecoder;
31
30
 
@@ -52,59 +51,33 @@ if (
52
51
  NativeAudioAPIModule.install();
53
52
  }
54
53
 
55
- export { default as WorkletNode } from './core/WorkletNode';
56
- export { default as WorkletSourceNode } from './core/WorkletSourceNode';
57
- export { default as WorkletProcessingNode } from './core/WorkletProcessingNode';
58
- export { default as RecorderAdapterNode } from './core/RecorderAdapterNode';
54
+ export { default as AnalyserNode } from './core/AnalyserNode';
59
55
  export { default as AudioBuffer } from './core/AudioBuffer';
60
- export { default as AudioBufferSourceNode } from './core/AudioBufferSourceNode';
61
56
  export { default as AudioBufferQueueSourceNode } from './core/AudioBufferQueueSourceNode';
57
+ export { default as AudioBufferSourceNode } from './core/AudioBufferSourceNode';
62
58
  export { default as AudioContext } from './core/AudioContext';
63
- export { default as OfflineAudioContext } from './core/OfflineAudioContext';
59
+ export { decodeAudioData, decodePCMInBase64 } from './core/AudioDecoder';
64
60
  export { default as AudioDestinationNode } from './core/AudioDestinationNode';
65
61
  export { default as AudioNode } from './core/AudioNode';
66
- export { default as AnalyserNode } from './core/AnalyserNode';
67
62
  export { default as AudioParam } from './core/AudioParam';
63
+ export { default as AudioRecorder } from './core/AudioRecorder';
68
64
  export { default as AudioScheduledSourceNode } from './core/AudioScheduledSourceNode';
65
+ export { default as changePlaybackSpeed } from './core/AudioStretcher';
69
66
  export { default as BaseAudioContext } from './core/BaseAudioContext';
70
67
  export { default as BiquadFilterNode } from './core/BiquadFilterNode';
68
+ export { default as ConstantSourceNode } from './core/ConstantSourceNode';
71
69
  export { default as GainNode } from './core/GainNode';
70
+ export { default as OfflineAudioContext } from './core/OfflineAudioContext';
72
71
  export { default as OscillatorNode } from './core/OscillatorNode';
72
+ export { default as RecorderAdapterNode } from './core/RecorderAdapterNode';
73
73
  export { default as StereoPannerNode } from './core/StereoPannerNode';
74
- export { default as AudioRecorder } from './core/AudioRecorder';
75
74
  export { default as StreamerNode } from './core/StreamerNode';
76
- export { default as ConstantSourceNode } from './core/ConstantSourceNode';
77
- export { default as AudioManager } from './system';
78
- export { default as ConvolverNode } from './core/ConvolverNode';
75
+ export { default as WorkletNode } from './core/WorkletNode';
76
+ export { default as WorkletProcessingNode } from './core/WorkletProcessingNode';
77
+ export { default as WorkletSourceNode } from './core/WorkletSourceNode';
79
78
  export { default as useSystemVolume } from './hooks/useSystemVolume';
80
- export { decodeAudioData, decodePCMInBase64 } from './core/AudioDecoder';
81
- export { default as changePlaybackSpeed } from './core/AudioStretcher';
82
-
83
- export {
84
- OscillatorType,
85
- BiquadFilterType,
86
- ChannelCountMode,
87
- ChannelInterpretation,
88
- ContextState,
89
- WindowType,
90
- PeriodicWaveConstraints,
91
- AudioWorkletRuntime,
92
- } from './types';
93
-
94
- export {
95
- IOSCategory,
96
- IOSMode,
97
- IOSOption,
98
- SessionOptions,
99
- MediaState,
100
- LockScreenInfo,
101
- PermissionStatus,
102
- } from './system/types';
79
+ export { default as AudioManager } from './system';
103
80
 
104
- export {
105
- IndexSizeError,
106
- InvalidAccessError,
107
- InvalidStateError,
108
- RangeError,
109
- NotSupportedError,
110
- } from './errors';
81
+ export * from './errors';
82
+ export * from './system/types';
83
+ export * from './types';
package/src/api.web.ts CHANGED
@@ -13,7 +13,6 @@ export { default as GainNode } from './web-core/GainNode';
13
13
  export { default as OscillatorNode } from './web-core/OscillatorNode';
14
14
  export { default as StereoPannerNode } from './web-core/StereoPannerNode';
15
15
  export { default as ConstantSourceNode } from './web-core/ConstantSourceNode';
16
- export { default as ConvolverNode } from './web-core/ConvolverNode';
17
16
 
18
17
  export * from './web-core/custom';
19
18
 
@@ -3,7 +3,7 @@ import BaseAudioContext from './BaseAudioContext';
3
3
  import AudioManager from '../system';
4
4
  import { AudioContextOptions } from '../types';
5
5
  import { NotSupportedError } from '../errors';
6
- import { isWorkletsVersionSupported, workletsModule } from '../utils';
6
+ import { isWorkletsAvailable, workletsModule } from '../utils';
7
7
 
8
8
  export default class AudioContext extends BaseAudioContext {
9
9
  constructor(options?: AudioContextOptions) {
@@ -17,8 +17,7 @@ export default class AudioContext extends BaseAudioContext {
17
17
  );
18
18
  }
19
19
  let audioRuntime = null;
20
-
21
- if (isWorkletsVersionSupported) {
20
+ if (isWorkletsAvailable) {
22
21
  audioRuntime = workletsModule.createWorkletRuntime('AudioWorkletRuntime');
23
22
  }
24
23
 
@@ -1,30 +1,143 @@
1
+ import { AudioEventEmitter, AudioEventSubscription } from '../events';
2
+ import { OnAudioReadyEventType } from '../events/types';
1
3
  import { IAudioRecorder } from '../interfaces';
2
- import { AudioRecorderOptions } from '../types';
4
+ import {
5
+ AndroidFormat,
6
+ AudioRecorderCallbackOptions,
7
+ AudioRecorderFileOptions,
8
+ BitDepth,
9
+ FileDirectory,
10
+ FileInfo,
11
+ IOSAudioQuality,
12
+ IOSFormat,
13
+ } from '../types';
14
+ import { encodeFlags } from '../utils';
3
15
  import AudioBuffer from './AudioBuffer';
4
- import { OnAudioReadyEventType } from '../events/types';
5
- import { AudioEventEmitter } from '../events';
6
16
  import RecorderAdapterNode from './RecorderAdapterNode';
7
17
 
18
+ function withDefaultOptions(inOptions: AudioRecorderFileOptions) {
19
+ return {
20
+ directory: FileDirectory.Cache,
21
+ sampleRate: 48000,
22
+ channels: 2,
23
+ bitRate: 128000,
24
+ bitDepth: BitDepth.Bit24,
25
+ ...inOptions,
26
+ ios: {
27
+ format: IOSFormat.M4A,
28
+ quality: IOSAudioQuality.High,
29
+ ...(inOptions.ios ?? {}),
30
+ },
31
+ android: {
32
+ format: AndroidFormat.M4A,
33
+ ...(inOptions.android ?? {}),
34
+ },
35
+ };
36
+ }
37
+
38
+ function parseFileOptions(inOptions: AudioRecorderFileOptions) {
39
+ const { sampleRate, channels, bitRate, directory, bitDepth, ios, android } =
40
+ withDefaultOptions(inOptions);
41
+
42
+ const iosFlags = encodeFlags(
43
+ ios.format,
44
+ ios.quality,
45
+ ios.flacCompressionLevel || 0,
46
+ directory,
47
+ bitDepth
48
+ );
49
+
50
+ // TODO: ensure directory and bitDepth are last in the bitmask
51
+ const androidFlags = encodeFlags(android.format, directory, bitDepth);
52
+
53
+ return {
54
+ sampleRate,
55
+ channels,
56
+ bitRate,
57
+ ios: iosFlags,
58
+ android: androidFlags,
59
+ };
60
+ }
61
+
8
62
  export default class AudioRecorder {
63
+ protected onAudioReadySubscription: AudioEventSubscription | null = null;
9
64
  protected readonly recorder: IAudioRecorder;
65
+ protected options_: AudioRecorderFileOptions | null = null;
66
+ private isFileOutputEnabled: boolean = false;
10
67
 
11
- private readonly audioEventEmitter = new AudioEventEmitter(
68
+ protected readonly audioEventEmitter = new AudioEventEmitter(
12
69
  global.AudioEventEmitter
13
70
  );
14
71
 
15
- constructor(options: AudioRecorderOptions) {
16
- this.recorder = global.createAudioRecorder(options);
72
+ constructor() {
73
+ this.recorder = global.createAudioRecorder();
74
+ }
75
+
76
+ enableFileOutput(options: AudioRecorderFileOptions): void {
77
+ if (this.recorder.isRecording()) {
78
+ throw new Error(
79
+ 'Cannot enable file output while recording is in progress. Please stop the recorder before changing output options.'
80
+ );
81
+ }
82
+
83
+ this.options_ = options;
84
+
85
+ const parsedOptions = parseFileOptions(options);
86
+ this.recorder.enableFileOutput(parsedOptions);
87
+ this.isFileOutputEnabled = true;
17
88
  }
18
89
 
19
- public start(): void {
20
- this.recorder.start();
90
+ public get options(): AudioRecorderFileOptions | null {
91
+ return this.options_;
21
92
  }
22
93
 
23
- public stop(): void {
24
- this.recorder.stop();
94
+ disableFileOutput(): void {
95
+ this.options_ = null;
96
+ this.recorder.disableFileOutput();
97
+ this.isFileOutputEnabled = false;
25
98
  }
26
99
 
27
- public connect(node: RecorderAdapterNode): void {
100
+ /** Starts the audio recording process with configured output options */
101
+ start(): string | void {
102
+ if (!this.isFileOutputEnabled) {
103
+ this.recorder.start();
104
+ return;
105
+ }
106
+
107
+ return this.recorder.start();
108
+ }
109
+
110
+ /** Stops the audio recording process and releases internal resources */
111
+ stop(): FileInfo {
112
+ return this.recorder.stop();
113
+ }
114
+
115
+ /** Pauses the audio recording process without tearing down anything */
116
+ pause(): void {
117
+ this.recorder.pause();
118
+ }
119
+
120
+ /** Resumes the audio recording process after being paused */
121
+ resume(): void {
122
+ this.recorder.resume();
123
+ }
124
+
125
+ /**
126
+ * Connects a {@link RecorderAdapterNode} to the recorder’s audio graph.
127
+ *
128
+ * Each node can only be connected once. Attempting to connect a node multiple
129
+ * times will throw an error.
130
+ *
131
+ * @param node - The adapter node to connect to the recorder.
132
+ * @throws If the node has already been connected.
133
+ */
134
+ connect(node: RecorderAdapterNode): void {
135
+ if (this.recorder.isRecording()) {
136
+ throw new Error(
137
+ 'Cannot connect adapter node while recording is in progress. Please stop the recorder before connecting new nodes.'
138
+ );
139
+ }
140
+
28
141
  if (node.wasConnected) {
29
142
  throw new Error(
30
143
  'RecorderAdapterNode cannot be connected more than once. Refer to the documentation for more details.'
@@ -34,24 +147,98 @@ export default class AudioRecorder {
34
147
  this.recorder.connect(node.getNode());
35
148
  }
36
149
 
37
- public disconnect(): void {
150
+ /**
151
+ * Disconnects the recorder from all connected adapter nodes.
152
+ *
153
+ * After calling this method, any connected {@link RecorderAdapterNode} will no
154
+ * longer receive audio data until reconnected.
155
+ */
156
+ disconnect(): void {
38
157
  this.recorder.disconnect();
39
158
  }
40
159
 
41
- public onAudioReady(callback: (event: OnAudioReadyEventType) => void): void {
42
- const onAudioReadyCallback = (event: OnAudioReadyEventType) => {
43
- callback({
44
- buffer: new AudioBuffer(event.buffer),
45
- numFrames: event.numFrames,
46
- when: event.when,
160
+ /**
161
+ * Registers a callback to receive raw audio data during an active recording
162
+ * session.
163
+ *
164
+ * The callback is periodically invoked with audio buffers that match the
165
+ * preferred configuration provided in `options`. These parameters (sample
166
+ * rate, buffer length, and channel count) guide how audio data is chunked and
167
+ * delivered, though the exact values may vary depending on device
168
+ * capabilities. Values may vary depending on device capabilities.
169
+ *
170
+ * @param options - Preferred configuration for the audio buffers delivered to
171
+ * the callback.
172
+ * @param callback - Function invoked each time a new audio buffer is
173
+ * available. The callback receives an {@link OnAudioReadyEventType} object
174
+ * containing the audio data and associated metadata.
175
+ */
176
+ onAudioReady(
177
+ options: AudioRecorderCallbackOptions,
178
+ callback: (event: OnAudioReadyEventType) => void
179
+ ): void {
180
+ if (this.recorder.isRecording()) {
181
+ throw new Error(
182
+ 'Cannot set onAudioReady callback while recording is in progress. Please stop the recorder before setting a new callback.'
183
+ );
184
+ }
185
+
186
+ if (this.onAudioReadySubscription) {
187
+ this.recorder.clearOnAudioReady();
188
+ this.onAudioReadySubscription.remove();
189
+ this.onAudioReadySubscription = null;
190
+ }
191
+
192
+ this.onAudioReadySubscription =
193
+ this.audioEventEmitter.addAudioEventListener('audioReady', (event) => {
194
+ const audioBuffer = new AudioBuffer(event.buffer);
195
+ callback({
196
+ ...event,
197
+ buffer: audioBuffer,
198
+ });
47
199
  });
48
- };
49
200
 
50
- const subscription = this.audioEventEmitter.addAudioEventListener(
51
- 'audioReady',
52
- onAudioReadyCallback
53
- );
201
+ this.recorder.setOnAudioReady({
202
+ sampleRate: options.sampleRate,
203
+ bufferLength: options.bufferLength,
204
+ channelCount: options.channelCount,
205
+ callbackId: this.onAudioReadySubscription.subscriptionId,
206
+ });
207
+ }
208
+
209
+ /**
210
+ * Removes the previously registered audio data callback, if any.
211
+ *
212
+ * This stops further `onAudioReady` events from being delivered during
213
+ * recording. Calling this method is safe even if no callback is currently
214
+ * registered.
215
+ */
216
+ clearOnAudioReady(): void {
217
+ if (this.recorder.isRecording()) {
218
+ throw new Error(
219
+ 'Cannot clear onAudioReady callback while recording is in progress. Please stop the recorder before clearing the callback.'
220
+ );
221
+ }
222
+
223
+ if (!this.onAudioReadySubscription) {
224
+ return;
225
+ }
226
+
227
+ this.recorder.clearOnAudioReady();
228
+
229
+ this.onAudioReadySubscription.remove();
230
+ this.onAudioReadySubscription = null;
231
+ }
232
+
233
+ isRecording(): boolean {
234
+ return this.recorder.isRecording();
235
+ }
236
+
237
+ isPaused(): boolean {
238
+ return this.recorder.isPaused();
239
+ }
54
240
 
55
- this.recorder.onAudioReady = subscription.subscriptionId;
241
+ getCurrentDuration(): number {
242
+ return this.recorder.getCurrentDuration();
56
243
  }
57
244
  }
@@ -5,15 +5,13 @@ import {
5
5
  ContextState,
6
6
  PeriodicWaveConstraints,
7
7
  AudioWorkletRuntime,
8
- ConvolverNodeOptions,
9
8
  } from '../types';
10
- import { assertWorkletsEnabled, workletsModule } from '../utils';
9
+ import { isWorkletsAvailable, workletsModule } from '../utils';
11
10
  import WorkletSourceNode from './WorkletSourceNode';
12
11
  import WorkletProcessingNode from './WorkletProcessingNode';
13
12
  import AnalyserNode from './AnalyserNode';
14
13
  import AudioBuffer from './AudioBuffer';
15
14
  import AudioBufferQueueSourceNode from './AudioBufferQueueSourceNode';
16
- import ConvolverNode from './ConvolverNode';
17
15
  import AudioBufferSourceNode from './AudioBufferSourceNode';
18
16
  import AudioDestinationNode from './AudioDestinationNode';
19
17
  import BiquadFilterNode from './BiquadFilterNode';
@@ -86,24 +84,30 @@ export default class BaseAudioContext {
86
84
  `The buffer length provided (${bufferLength}) can not be less than 1`
87
85
  );
88
86
  }
89
- assertWorkletsEnabled();
90
- const shareableWorklet = workletsModule.makeShareableCloneRecursive(
91
- (audioBuffers: Array<ArrayBuffer>, channelCount: number) => {
92
- 'worklet';
93
- const floatAudioData: Array<Float32Array> = audioBuffers.map(
94
- (buffer) => new Float32Array(buffer)
95
- );
96
- callback(floatAudioData, channelCount);
97
- }
98
- );
99
- return new WorkletNode(
100
- this,
101
- this.context.createWorkletNode(
102
- shareableWorklet,
103
- workletRuntime === 'UIRuntime',
104
- bufferLength,
105
- inputChannelCount
106
- )
87
+
88
+ if (isWorkletsAvailable) {
89
+ const shareableWorklet = workletsModule.makeShareableCloneRecursive(
90
+ (audioBuffers: Array<ArrayBuffer>, channelCount: number) => {
91
+ 'worklet';
92
+ const floatAudioData: Array<Float32Array> = audioBuffers.map(
93
+ (buffer) => new Float32Array(buffer)
94
+ );
95
+ callback(floatAudioData, channelCount);
96
+ }
97
+ );
98
+ return new WorkletNode(
99
+ this,
100
+ this.context.createWorkletNode(
101
+ shareableWorklet,
102
+ workletRuntime === 'UIRuntime',
103
+ bufferLength,
104
+ inputChannelCount
105
+ )
106
+ );
107
+ }
108
+ /// User does not have worklets as a dependency so he cannot use the worklet API.
109
+ throw new Error(
110
+ '[RnAudioApi] Worklets are not available, please install react-native-worklets as a dependency. Refer to documentation for more details.'
107
111
  );
108
112
  }
109
113
 
@@ -116,30 +120,35 @@ export default class BaseAudioContext {
116
120
  ) => void,
117
121
  workletRuntime: AudioWorkletRuntime = 'AudioRuntime'
118
122
  ): WorkletProcessingNode {
119
- assertWorkletsEnabled();
120
- const shareableWorklet = workletsModule.makeShareableCloneRecursive(
121
- (
122
- inputBuffers: Array<ArrayBuffer>,
123
- outputBuffers: Array<ArrayBuffer>,
124
- framesToProcess: number,
125
- currentTime: number
126
- ) => {
127
- 'worklet';
128
- const inputData: Array<Float32Array> = inputBuffers.map(
129
- (buffer) => new Float32Array(buffer, 0, framesToProcess)
130
- );
131
- const outputData: Array<Float32Array> = outputBuffers.map(
132
- (buffer) => new Float32Array(buffer, 0, framesToProcess)
133
- );
134
- callback(inputData, outputData, framesToProcess, currentTime);
135
- }
136
- );
137
- return new WorkletProcessingNode(
138
- this,
139
- this.context.createWorkletProcessingNode(
140
- shareableWorklet,
141
- workletRuntime === 'UIRuntime'
142
- )
123
+ if (isWorkletsAvailable) {
124
+ const shareableWorklet = workletsModule.makeShareableCloneRecursive(
125
+ (
126
+ inputBuffers: Array<ArrayBuffer>,
127
+ outputBuffers: Array<ArrayBuffer>,
128
+ framesToProcess: number,
129
+ currentTime: number
130
+ ) => {
131
+ 'worklet';
132
+ const inputData: Array<Float32Array> = inputBuffers.map(
133
+ (buffer) => new Float32Array(buffer, 0, framesToProcess)
134
+ );
135
+ const outputData: Array<Float32Array> = outputBuffers.map(
136
+ (buffer) => new Float32Array(buffer, 0, framesToProcess)
137
+ );
138
+ callback(inputData, outputData, framesToProcess, currentTime);
139
+ }
140
+ );
141
+ return new WorkletProcessingNode(
142
+ this,
143
+ this.context.createWorkletProcessingNode(
144
+ shareableWorklet,
145
+ workletRuntime === 'UIRuntime'
146
+ )
147
+ );
148
+ }
149
+ /// User does not have worklets as a dependency so he cannot use the worklet API.
150
+ throw new Error(
151
+ '[RnAudioApi] Worklets are not available, please install react-native-worklets as a dependency. Refer to documentation for more details.'
143
152
  );
144
153
  }
145
154
 
@@ -152,7 +161,12 @@ export default class BaseAudioContext {
152
161
  ) => void,
153
162
  workletRuntime: AudioWorkletRuntime = 'AudioRuntime'
154
163
  ): WorkletSourceNode {
155
- assertWorkletsEnabled();
164
+ if (!isWorkletsAvailable) {
165
+ /// User does not have worklets as a dependency so he cannot use the worklet API.
166
+ throw new Error(
167
+ '[RnAudioApi] Worklets are not available, please install react-native-worklets as a dependency. Refer to documentation for more details.'
168
+ );
169
+ }
156
170
  const shareableWorklet = workletsModule.makeShareableCloneRecursive(
157
171
  (
158
172
  audioBuffers: Array<ArrayBuffer>,
@@ -275,25 +289,4 @@ export default class BaseAudioContext {
275
289
  createAnalyser(): AnalyserNode {
276
290
  return new AnalyserNode(this, this.context.createAnalyser());
277
291
  }
278
-
279
- createConvolver(options?: ConvolverNodeOptions): ConvolverNode {
280
- if (options?.buffer) {
281
- const numberOfChannels = options.buffer.numberOfChannels;
282
- if (
283
- numberOfChannels !== 1 &&
284
- numberOfChannels !== 2 &&
285
- numberOfChannels !== 4
286
- ) {
287
- throw new NotSupportedError(
288
- `The number of channels provided (${numberOfChannels}) in impulse response for ConvolverNode buffer must be 1 or 2 or 4.`
289
- );
290
- }
291
- }
292
- const buffer = options?.buffer ?? null;
293
- const disableNormalization = options?.disableNormalization ?? false;
294
- return new ConvolverNode(
295
- this,
296
- this.context.createConvolver(buffer?.buffer, disableNormalization)
297
- );
298
- }
299
292
  }
@@ -3,7 +3,7 @@ import BaseAudioContext from './BaseAudioContext';
3
3
  import { OfflineAudioContextOptions } from '../types';
4
4
  import { InvalidStateError, NotSupportedError } from '../errors';
5
5
  import AudioBuffer from './AudioBuffer';
6
- import { isWorkletsVersionSupported, workletsModule } from '../utils';
6
+ import { isWorkletsAvailable, workletsModule } from '../utils';
7
7
 
8
8
  export default class OfflineAudioContext extends BaseAudioContext {
9
9
  private isSuspended: boolean;
@@ -18,7 +18,7 @@ export default class OfflineAudioContext extends BaseAudioContext {
18
18
  arg2?: number
19
19
  ) {
20
20
  let audioRuntime = null;
21
- if (isWorkletsVersionSupported) {
21
+ if (isWorkletsAvailable) {
22
22
  audioRuntime = workletsModule.createWorkletRuntime('AudioWorkletRuntime');
23
23
  }
24
24