react-native-audio-api 0.11.0-alpha.0 → 0.11.0-nightly-bfab178-20251107

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 (350) hide show
  1. package/README.md +13 -11
  2. package/RNAudioAPI.podspec +20 -15
  3. package/android/build.gradle +33 -3
  4. package/android/src/main/cpp/audioapi/CMakeLists.txt +6 -3
  5. package/android/src/main/cpp/audioapi/android/AudioAPIModule.cpp +5 -0
  6. package/android/src/main/cpp/audioapi/android/AudioAPIModule.h +1 -0
  7. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.cpp +30 -94
  8. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +14 -28
  9. package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +4 -2
  10. package/android/src/main/cpp/audioapi/android/core/NativeAudioRecorder.hpp +9 -9
  11. package/android/src/main/cpp/audioapi/android/core/utils/AudioDecoder.cpp +6 -0
  12. package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +31 -3
  13. package/android/src/main/java/com/swmansion/audioapi/system/AudioFocusListener.kt +21 -9
  14. package/android/src/main/java/com/swmansion/audioapi/system/LockScreenManager.kt +27 -6
  15. package/android/src/main/java/com/swmansion/audioapi/system/MediaNotificationManager.kt +11 -0
  16. package/android/src/oldarch/NativeAudioAPIModuleSpec.java +4 -0
  17. package/common/cpp/audioapi/AudioAPIModuleInstaller.h +30 -2
  18. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +18 -0
  19. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +1 -0
  20. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp +1 -1
  21. package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.cpp +47 -0
  22. package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.h +20 -0
  23. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.cpp +18 -80
  24. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +6 -15
  25. package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.cpp +1 -1
  26. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.cpp +1 -1
  27. package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.cpp +1 -1
  28. package/common/cpp/audioapi/core/AudioNode.h +3 -2
  29. package/common/cpp/audioapi/core/AudioParam.cpp +2 -2
  30. package/common/cpp/audioapi/core/BaseAudioContext.cpp +10 -0
  31. package/common/cpp/audioapi/core/BaseAudioContext.h +2 -0
  32. package/common/cpp/audioapi/core/effects/BiquadFilterNode.cpp +69 -32
  33. package/common/cpp/audioapi/core/effects/BiquadFilterNode.h +37 -1
  34. package/common/cpp/audioapi/core/effects/ConvolverNode.cpp +210 -0
  35. package/common/cpp/audioapi/core/effects/ConvolverNode.h +55 -0
  36. package/common/cpp/audioapi/core/inputs/AudioRecorder.cpp +49 -102
  37. package/common/cpp/audioapi/core/inputs/AudioRecorder.h +28 -46
  38. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +14 -17
  39. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +0 -1
  40. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +8 -14
  41. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +0 -1
  42. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +14 -18
  43. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +2 -2
  44. package/common/cpp/audioapi/core/sources/StreamerNode.cpp +64 -64
  45. package/common/cpp/audioapi/core/sources/StreamerNode.h +38 -10
  46. package/common/cpp/audioapi/core/utils/AudioNodeManager.cpp +5 -0
  47. package/common/cpp/audioapi/core/utils/Constants.h +2 -1
  48. package/common/cpp/audioapi/core/utils/worklets/SafeIncludes.h +12 -8
  49. package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.cpp +3 -3
  50. package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.h +1 -1
  51. package/common/cpp/audioapi/dsp/AudioUtils.cpp +1 -1
  52. package/common/cpp/audioapi/dsp/Convolver.cpp +213 -0
  53. package/common/cpp/audioapi/dsp/Convolver.h +45 -0
  54. package/common/cpp/audioapi/dsp/FFT.cpp +0 -26
  55. package/common/cpp/audioapi/dsp/FFT.h +26 -2
  56. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +1 -1
  57. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/avcodec.h +4 -4
  58. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec.h +1 -1
  59. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_desc.h +1 -1
  60. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_id.h +3 -1
  61. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_par.h +2 -2
  62. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/defs.h +3 -0
  63. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/packet.h +1 -1
  64. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/smpte_436m.h +254 -0
  65. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/version.h +1 -1
  66. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/avformat.h +6 -6
  67. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version.h +2 -2
  68. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version_major.h +2 -0
  69. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avassert.h +5 -2
  70. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avutil.h +2 -2
  71. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/channel_layout.h +2 -2
  72. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/csp.h +1 -1
  73. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/dict.h +1 -1
  74. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/ffversion.h +1 -1
  75. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/film_grain_params.h +1 -1
  76. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/frame.h +1 -1
  77. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hdr_dynamic_vivid_metadata.h +3 -3
  78. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext.h +1 -1
  79. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_opencl.h +1 -1
  80. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_qsv.h +0 -1
  81. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_vulkan.h +1 -1
  82. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/iamf.h +2 -2
  83. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/lfg.h +2 -2
  84. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/log.h +2 -2
  85. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/mathematics.h +1 -1
  86. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/opt.h +4 -4
  87. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rational.h +1 -1
  88. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rc4.h +1 -1
  89. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/refstruct.h +1 -1
  90. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/spherical.h +6 -0
  91. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tdrdi.h +1 -1
  92. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tx.h +1 -1
  93. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/version.h +3 -3
  94. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/video_hint.h +1 -1
  95. package/common/cpp/audioapi/external/ffmpeg_include/libswresample/swresample.h +1 -1
  96. package/common/cpp/audioapi/external/ffmpeg_include/libswresample/version.h +1 -1
  97. package/common/cpp/audioapi/libs/ffmpeg/FFmpegDecoding.cpp +2 -3
  98. package/common/cpp/audioapi/libs/ffmpeg/relinking.md +24 -0
  99. package/common/cpp/audioapi/utils/AlignedAllocator.hpp +50 -0
  100. package/common/cpp/audioapi/utils/AudioBus.cpp +28 -0
  101. package/common/cpp/audioapi/utils/AudioBus.h +3 -0
  102. package/common/cpp/audioapi/utils/ThreadPool.hpp +59 -1
  103. package/common/cpp/test/CMakeLists.txt +19 -14
  104. package/common/cpp/test/src/AudioParamTest.cpp +1 -1
  105. package/common/cpp/test/src/AudioScheduledSourceTest.cpp +134 -0
  106. package/common/cpp/test/src/ConstantSourceTest.cpp +1 -1
  107. package/common/cpp/test/src/GainTest.cpp +1 -1
  108. package/common/cpp/test/src/MockAudioEventHandlerRegistry.h +4 -4
  109. package/common/cpp/test/src/OscillatorTest.cpp +1 -1
  110. package/common/cpp/test/src/StereoPannerTest.cpp +1 -1
  111. package/common/cpp/test/src/biquad/BiquadFilterChromium.cpp +389 -0
  112. package/common/cpp/test/src/biquad/BiquadFilterChromium.h +64 -0
  113. package/common/cpp/test/src/biquad/BiquadFilterTest.cpp +284 -0
  114. package/common/cpp/test/src/biquad/BiquadFilterTest.h +40 -0
  115. package/ios/audioapi/ios/AudioAPIModule.h +2 -1
  116. package/ios/audioapi/ios/AudioAPIModule.mm +13 -0
  117. package/ios/audioapi/ios/core/IOSAudioRecorder.h +9 -18
  118. package/ios/audioapi/ios/core/IOSAudioRecorder.mm +28 -70
  119. package/ios/audioapi/ios/core/NativeAudioRecorder.h +6 -2
  120. package/ios/audioapi/ios/core/NativeAudioRecorder.m +73 -5
  121. package/ios/audioapi/ios/system/AudioEngine.mm +3 -3
  122. package/ios/audioapi/ios/system/AudioSessionManager.h +2 -0
  123. package/ios/audioapi/ios/system/AudioSessionManager.mm +24 -0
  124. package/ios/audioapi/ios/system/LockScreenManager.h +0 -1
  125. package/ios/audioapi/ios/system/LockScreenManager.mm +6 -19
  126. package/lib/commonjs/api.js +141 -76
  127. package/lib/commonjs/api.js.map +1 -1
  128. package/lib/commonjs/api.web.js +8 -0
  129. package/lib/commonjs/api.web.js.map +1 -1
  130. package/lib/commonjs/core/AudioContext.js +1 -1
  131. package/lib/commonjs/core/AudioContext.js.map +1 -1
  132. package/lib/commonjs/core/AudioRecorder.js +12 -157
  133. package/lib/commonjs/core/AudioRecorder.js.map +1 -1
  134. package/lib/commonjs/core/BaseAudioContext.js +28 -25
  135. package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
  136. package/lib/commonjs/core/ConvolverNode.js +37 -0
  137. package/lib/commonjs/core/ConvolverNode.js.map +1 -0
  138. package/lib/commonjs/core/OfflineAudioContext.js +1 -1
  139. package/lib/commonjs/core/OfflineAudioContext.js.map +1 -1
  140. package/lib/commonjs/specs/NativeAudioAPIModule.js.map +1 -1
  141. package/lib/commonjs/system/AudioManager.js +3 -0
  142. package/lib/commonjs/system/AudioManager.js.map +1 -1
  143. package/lib/commonjs/types.js +0 -46
  144. package/lib/commonjs/types.js.map +1 -1
  145. package/lib/commonjs/utils/index.js +19 -21
  146. package/lib/commonjs/utils/index.js.map +1 -1
  147. package/lib/commonjs/web-core/AudioContext.js +12 -0
  148. package/lib/commonjs/web-core/AudioContext.js.map +1 -1
  149. package/lib/commonjs/web-core/ConvolverNode.js +40 -0
  150. package/lib/commonjs/web-core/ConvolverNode.js.map +1 -0
  151. package/lib/commonjs/web-core/ConvolverNodeOptions.js +6 -0
  152. package/lib/commonjs/web-core/ConvolverNodeOptions.js.map +1 -0
  153. package/lib/commonjs/web-core/OfflineAudioContext.js +12 -0
  154. package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
  155. package/lib/module/api.js +16 -15
  156. package/lib/module/api.js.map +1 -1
  157. package/lib/module/api.web.js +1 -0
  158. package/lib/module/api.web.js.map +1 -1
  159. package/lib/module/core/AudioContext.js +2 -2
  160. package/lib/module/core/AudioContext.js.map +1 -1
  161. package/lib/module/core/AudioRecorder.js +12 -157
  162. package/lib/module/core/AudioRecorder.js.map +1 -1
  163. package/lib/module/core/BaseAudioContext.js +29 -26
  164. package/lib/module/core/BaseAudioContext.js.map +1 -1
  165. package/lib/module/core/ConvolverNode.js +31 -0
  166. package/lib/module/core/ConvolverNode.js.map +1 -0
  167. package/lib/module/core/OfflineAudioContext.js +2 -2
  168. package/lib/module/core/OfflineAudioContext.js.map +1 -1
  169. package/lib/module/specs/NativeAudioAPIModule.js.map +1 -1
  170. package/lib/module/system/AudioManager.js +3 -0
  171. package/lib/module/system/AudioManager.js.map +1 -1
  172. package/lib/module/types.js +1 -45
  173. package/lib/module/types.js.map +1 -1
  174. package/lib/module/utils/index.js +15 -2
  175. package/lib/module/utils/index.js.map +1 -1
  176. package/lib/module/web-core/AudioContext.js +12 -0
  177. package/lib/module/web-core/AudioContext.js.map +1 -1
  178. package/lib/module/web-core/ConvolverNode.js +34 -0
  179. package/lib/module/web-core/ConvolverNode.js.map +1 -0
  180. package/lib/module/web-core/ConvolverNodeOptions.js +4 -0
  181. package/lib/module/web-core/ConvolverNodeOptions.js.map +1 -0
  182. package/lib/module/web-core/OfflineAudioContext.js +12 -0
  183. package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
  184. package/lib/typescript/api.d.ts +19 -17
  185. package/lib/typescript/api.d.ts.map +1 -1
  186. package/lib/typescript/api.web.d.ts +1 -0
  187. package/lib/typescript/api.web.d.ts.map +1 -1
  188. package/lib/typescript/core/AudioContext.d.ts.map +1 -1
  189. package/lib/typescript/core/AudioRecorder.d.ts +6 -58
  190. package/lib/typescript/core/AudioRecorder.d.ts.map +1 -1
  191. package/lib/typescript/core/BaseAudioContext.d.ts +3 -1
  192. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
  193. package/lib/typescript/core/ConvolverNode.d.ts +12 -0
  194. package/lib/typescript/core/ConvolverNode.d.ts.map +1 -0
  195. package/lib/typescript/events/types.d.ts +0 -16
  196. package/lib/typescript/events/types.d.ts.map +1 -1
  197. package/lib/typescript/interfaces.d.ts +8 -39
  198. package/lib/typescript/interfaces.d.ts.map +1 -1
  199. package/lib/typescript/specs/NativeAudioAPIModule.d.ts +1 -0
  200. package/lib/typescript/specs/NativeAudioAPIModule.d.ts.map +1 -1
  201. package/lib/typescript/system/AudioManager.d.ts +1 -0
  202. package/lib/typescript/system/AudioManager.d.ts.map +1 -1
  203. package/lib/typescript/types.d.ts +8 -74
  204. package/lib/typescript/types.d.ts.map +1 -1
  205. package/lib/typescript/utils/index.d.ts +5 -2
  206. package/lib/typescript/utils/index.d.ts.map +1 -1
  207. package/lib/typescript/web-core/AudioContext.d.ts +3 -0
  208. package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
  209. package/lib/typescript/web-core/BaseAudioContext.d.ts +2 -0
  210. package/lib/typescript/web-core/BaseAudioContext.d.ts.map +1 -1
  211. package/lib/typescript/web-core/ConvolverNode.d.ts +11 -0
  212. package/lib/typescript/web-core/ConvolverNode.d.ts.map +1 -0
  213. package/lib/typescript/web-core/ConvolverNodeOptions.d.ts +6 -0
  214. package/lib/typescript/web-core/ConvolverNodeOptions.d.ts.map +1 -0
  215. package/lib/typescript/web-core/OfflineAudioContext.d.ts +3 -0
  216. package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
  217. package/package.json +14 -5
  218. package/scripts/download-prebuilt-binaries.sh +61 -0
  219. package/scripts/rnaa_utils.rb +8 -0
  220. package/scripts/validate-worklets-version.js +28 -0
  221. package/src/api.ts +45 -18
  222. package/src/api.web.ts +1 -0
  223. package/src/core/AudioContext.ts +3 -2
  224. package/src/core/AudioRecorder.ts +20 -190
  225. package/src/core/BaseAudioContext.ts +67 -60
  226. package/src/core/ConvolverNode.ts +35 -0
  227. package/src/core/OfflineAudioContext.ts +2 -2
  228. package/src/events/types.ts +0 -18
  229. package/src/interfaces.ts +15 -47
  230. package/src/specs/NativeAudioAPIModule.ts +1 -0
  231. package/src/system/AudioManager.ts +4 -0
  232. package/src/types.ts +9 -84
  233. package/src/utils/index.ts +22 -2
  234. package/src/web-core/AudioContext.tsx +25 -0
  235. package/src/web-core/BaseAudioContext.tsx +2 -0
  236. package/src/web-core/ConvolverNode.tsx +43 -0
  237. package/src/web-core/ConvolverNodeOptions.tsx +6 -0
  238. package/src/web-core/OfflineAudioContext.tsx +25 -0
  239. package/android/src/main/cpp/audioapi/android/core/utils/AndroidFileWriterBackend.h +0 -33
  240. package/android/src/main/cpp/audioapi/android/core/utils/FileUtils.h +0 -34
  241. package/android/src/main/cpp/audioapi/android/core/utils/FileUtilts.cpp +0 -133
  242. package/android/src/main/cpp/audioapi/android/core/utils/MiniaudioImplementation.cpp +0 -3
  243. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.cpp +0 -154
  244. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.h +0 -41
  245. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.cpp +0 -431
  246. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.h +0 -112
  247. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.cpp +0 -47
  248. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.h +0 -28
  249. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.cpp +0 -237
  250. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.h +0 -46
  251. package/android/src/main/cpp/audioapi/android/system/NativeFileInfo.hpp +0 -31
  252. package/android/src/main/java/com/swmansion/audioapi/system/NativeFileInfo.kt +0 -18
  253. package/android/src/main/jniLibs/arm64-v8a/libavcodec.so +0 -0
  254. package/android/src/main/jniLibs/arm64-v8a/libavformat.so +0 -0
  255. package/android/src/main/jniLibs/arm64-v8a/libavutil.so +0 -0
  256. package/android/src/main/jniLibs/arm64-v8a/libswresample.so +0 -0
  257. package/android/src/main/jniLibs/armeabi-v7a/libavcodec.so +0 -0
  258. package/android/src/main/jniLibs/armeabi-v7a/libavformat.so +0 -0
  259. package/android/src/main/jniLibs/armeabi-v7a/libavutil.so +0 -0
  260. package/android/src/main/jniLibs/armeabi-v7a/libswresample.so +0 -0
  261. package/android/src/main/jniLibs/x86/libavcodec.so +0 -0
  262. package/android/src/main/jniLibs/x86/libavformat.so +0 -0
  263. package/android/src/main/jniLibs/x86/libavutil.so +0 -0
  264. package/android/src/main/jniLibs/x86/libswresample.so +0 -0
  265. package/android/src/main/jniLibs/x86_64/libavcodec.so +0 -0
  266. package/android/src/main/jniLibs/x86_64/libavformat.so +0 -0
  267. package/android/src/main/jniLibs/x86_64/libavutil.so +0 -0
  268. package/android/src/main/jniLibs/x86_64/libswresample.so +0 -0
  269. package/common/cpp/audioapi/external/arm64-v8a/libcrypto.a +0 -0
  270. package/common/cpp/audioapi/external/arm64-v8a/libogg.a +0 -0
  271. package/common/cpp/audioapi/external/arm64-v8a/libopus.a +0 -0
  272. package/common/cpp/audioapi/external/arm64-v8a/libopusfile.a +0 -0
  273. package/common/cpp/audioapi/external/arm64-v8a/libssl.a +0 -0
  274. package/common/cpp/audioapi/external/arm64-v8a/libvorbis.a +0 -0
  275. package/common/cpp/audioapi/external/arm64-v8a/libvorbisenc.a +0 -0
  276. package/common/cpp/audioapi/external/arm64-v8a/libvorbisfile.a +0 -0
  277. package/common/cpp/audioapi/external/armeabi-v7a/libcrypto.a +0 -0
  278. package/common/cpp/audioapi/external/armeabi-v7a/libogg.a +0 -0
  279. package/common/cpp/audioapi/external/armeabi-v7a/libopus.a +0 -0
  280. package/common/cpp/audioapi/external/armeabi-v7a/libopusfile.a +0 -0
  281. package/common/cpp/audioapi/external/armeabi-v7a/libssl.a +0 -0
  282. package/common/cpp/audioapi/external/armeabi-v7a/libvorbis.a +0 -0
  283. package/common/cpp/audioapi/external/armeabi-v7a/libvorbisenc.a +0 -0
  284. package/common/cpp/audioapi/external/armeabi-v7a/libvorbisfile.a +0 -0
  285. package/common/cpp/audioapi/external/iphoneos/libcrypto.a +0 -0
  286. package/common/cpp/audioapi/external/iphoneos/libogg.a +0 -0
  287. package/common/cpp/audioapi/external/iphoneos/libopus.a +0 -0
  288. package/common/cpp/audioapi/external/iphoneos/libopusfile.a +0 -0
  289. package/common/cpp/audioapi/external/iphoneos/libssl.a +0 -0
  290. package/common/cpp/audioapi/external/iphoneos/libvorbis.a +0 -0
  291. package/common/cpp/audioapi/external/iphoneos/libvorbisenc.a +0 -0
  292. package/common/cpp/audioapi/external/iphoneos/libvorbisfile.a +0 -0
  293. package/common/cpp/audioapi/external/iphonesimulator/libcrypto.a +0 -0
  294. package/common/cpp/audioapi/external/iphonesimulator/libogg.a +0 -0
  295. package/common/cpp/audioapi/external/iphonesimulator/libopus.a +0 -0
  296. package/common/cpp/audioapi/external/iphonesimulator/libopusfile.a +0 -0
  297. package/common/cpp/audioapi/external/iphonesimulator/libssl.a +0 -0
  298. package/common/cpp/audioapi/external/iphonesimulator/libvorbis.a +0 -0
  299. package/common/cpp/audioapi/external/iphonesimulator/libvorbisenc.a +0 -0
  300. package/common/cpp/audioapi/external/iphonesimulator/libvorbisfile.a +0 -0
  301. package/common/cpp/audioapi/external/libavcodec.xcframework/Info.plist +0 -44
  302. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64/libavcodec.framework/Info.plist +0 -1
  303. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64/libavcodec.framework/libavcodec +0 -0
  304. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64_x86_64-simulator/libavcodec.framework/Info.plist +0 -1
  305. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64_x86_64-simulator/libavcodec.framework/libavcodec +0 -0
  306. package/common/cpp/audioapi/external/libavformat.xcframework/Info.plist +0 -44
  307. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64/libavformat.framework/Info.plist +0 -1
  308. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64/libavformat.framework/libavformat +0 -0
  309. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64_x86_64-simulator/libavformat.framework/Info.plist +0 -1
  310. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64_x86_64-simulator/libavformat.framework/libavformat +0 -0
  311. package/common/cpp/audioapi/external/libavutil.xcframework/Info.plist +0 -44
  312. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64/libavutil.framework/Info.plist +0 -1
  313. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64/libavutil.framework/libavutil +0 -0
  314. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64_x86_64-simulator/libavutil.framework/Info.plist +0 -1
  315. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64_x86_64-simulator/libavutil.framework/libavutil +0 -0
  316. package/common/cpp/audioapi/external/libswresample.xcframework/Info.plist +0 -44
  317. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64/libswresample.framework/Info.plist +0 -1
  318. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64/libswresample.framework/libswresample +0 -0
  319. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64_x86_64-simulator/libswresample.framework/Info.plist +0 -1
  320. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64_x86_64-simulator/libswresample.framework/libswresample +0 -0
  321. package/common/cpp/audioapi/external/x86/libcrypto.a +0 -0
  322. package/common/cpp/audioapi/external/x86/libogg.a +0 -0
  323. package/common/cpp/audioapi/external/x86/libopus.a +0 -0
  324. package/common/cpp/audioapi/external/x86/libopusfile.a +0 -0
  325. package/common/cpp/audioapi/external/x86/libssl.a +0 -0
  326. package/common/cpp/audioapi/external/x86/libvorbis.a +0 -0
  327. package/common/cpp/audioapi/external/x86/libvorbisenc.a +0 -0
  328. package/common/cpp/audioapi/external/x86/libvorbisfile.a +0 -0
  329. package/common/cpp/audioapi/external/x86_64/libcrypto.a +0 -0
  330. package/common/cpp/audioapi/external/x86_64/libogg.a +0 -0
  331. package/common/cpp/audioapi/external/x86_64/libopus.a +0 -0
  332. package/common/cpp/audioapi/external/x86_64/libopusfile.a +0 -0
  333. package/common/cpp/audioapi/external/x86_64/libssl.a +0 -0
  334. package/common/cpp/audioapi/external/x86_64/libvorbis.a +0 -0
  335. package/common/cpp/audioapi/external/x86_64/libvorbisenc.a +0 -0
  336. package/common/cpp/audioapi/external/x86_64/libvorbisfile.a +0 -0
  337. package/common/cpp/audioapi/libs/ffmpeg/INSTRUCTIONS.md +0 -32
  338. package/common/cpp/audioapi/libs/ffmpeg/create_xcframework.sh +0 -111
  339. package/common/cpp/audioapi/libs/ffmpeg/ffmpeg_setup.sh +0 -391
  340. package/ios/audioapi/ios/core/IOSAudioFileOptions.h +0 -35
  341. package/ios/audioapi/ios/core/IOSAudioFileOptions.mm +0 -135
  342. package/ios/audioapi/ios/core/IOSAudioFileWriter.h +0 -38
  343. package/ios/audioapi/ios/core/IOSAudioFileWriter.mm +0 -187
  344. package/lib/commonjs/utils/bitEnums.js +0 -33
  345. package/lib/commonjs/utils/bitEnums.js.map +0 -1
  346. package/lib/module/utils/bitEnums.js +0 -27
  347. package/lib/module/utils/bitEnums.js.map +0 -1
  348. package/lib/typescript/utils/bitEnums.d.ts +0 -4
  349. package/lib/typescript/utils/bitEnums.d.ts.map +0 -1
  350. package/src/utils/bitEnums.ts +0 -51
package/src/api.ts CHANGED
@@ -1,12 +1,13 @@
1
+ import { NativeAudioAPIModule } from './specs';
2
+ import { AudioRecorderOptions } from './types';
1
3
  import type {
2
4
  IAudioContext,
3
5
  IAudioDecoder,
4
- IAudioEventEmitter,
5
6
  IAudioRecorder,
6
7
  IAudioStretcher,
7
8
  IOfflineAudioContext,
9
+ IAudioEventEmitter,
8
10
  } from './interfaces';
9
- import { NativeAudioAPIModule } from './specs';
10
11
 
11
12
  /* eslint-disable no-var */
12
13
  declare global {
@@ -24,7 +25,7 @@ declare global {
24
25
  audioWorkletRuntime: any
25
26
  ) => IOfflineAudioContext;
26
27
 
27
- var createAudioRecorder: () => IAudioRecorder;
28
+ var createAudioRecorder: (options: AudioRecorderOptions) => IAudioRecorder;
28
29
 
29
30
  var createAudioDecoder: () => IAudioDecoder;
30
31
 
@@ -51,33 +52,59 @@ if (
51
52
  NativeAudioAPIModule.install();
52
53
  }
53
54
 
54
- export { default as AnalyserNode } from './core/AnalyserNode';
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';
55
59
  export { default as AudioBuffer } from './core/AudioBuffer';
56
- export { default as AudioBufferQueueSourceNode } from './core/AudioBufferQueueSourceNode';
57
60
  export { default as AudioBufferSourceNode } from './core/AudioBufferSourceNode';
61
+ export { default as AudioBufferQueueSourceNode } from './core/AudioBufferQueueSourceNode';
58
62
  export { default as AudioContext } from './core/AudioContext';
59
- export { decodeAudioData, decodePCMInBase64 } from './core/AudioDecoder';
63
+ export { default as OfflineAudioContext } from './core/OfflineAudioContext';
60
64
  export { default as AudioDestinationNode } from './core/AudioDestinationNode';
61
65
  export { default as AudioNode } from './core/AudioNode';
66
+ export { default as AnalyserNode } from './core/AnalyserNode';
62
67
  export { default as AudioParam } from './core/AudioParam';
63
- export { default as AudioRecorder } from './core/AudioRecorder';
64
68
  export { default as AudioScheduledSourceNode } from './core/AudioScheduledSourceNode';
65
- export { default as changePlaybackSpeed } from './core/AudioStretcher';
66
69
  export { default as BaseAudioContext } from './core/BaseAudioContext';
67
70
  export { default as BiquadFilterNode } from './core/BiquadFilterNode';
68
- export { default as ConstantSourceNode } from './core/ConstantSourceNode';
69
71
  export { default as GainNode } from './core/GainNode';
70
- export { default as OfflineAudioContext } from './core/OfflineAudioContext';
71
72
  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';
74
75
  export { default as StreamerNode } from './core/StreamerNode';
75
- export { default as WorkletNode } from './core/WorkletNode';
76
- export { default as WorkletProcessingNode } from './core/WorkletProcessingNode';
77
- export { default as WorkletSourceNode } from './core/WorkletSourceNode';
78
- export { default as useSystemVolume } from './hooks/useSystemVolume';
76
+ export { default as ConstantSourceNode } from './core/ConstantSourceNode';
79
77
  export { default as AudioManager } from './system';
78
+ export { default as ConvolverNode } from './core/ConvolverNode';
79
+ 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';
80
103
 
81
- export * from './errors';
82
- export * from './system/types';
83
- export * from './types';
104
+ export {
105
+ IndexSizeError,
106
+ InvalidAccessError,
107
+ InvalidStateError,
108
+ RangeError,
109
+ NotSupportedError,
110
+ } from './errors';
package/src/api.web.ts CHANGED
@@ -13,6 +13,7 @@ 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';
16
17
 
17
18
  export * from './web-core/custom';
18
19
 
@@ -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 { isWorkletsAvailable, workletsModule } from '../utils';
6
+ import { isWorkletsVersionSupported, workletsModule } from '../utils';
7
7
 
8
8
  export default class AudioContext extends BaseAudioContext {
9
9
  constructor(options?: AudioContextOptions) {
@@ -17,7 +17,8 @@ export default class AudioContext extends BaseAudioContext {
17
17
  );
18
18
  }
19
19
  let audioRuntime = null;
20
- if (isWorkletsAvailable) {
20
+
21
+ if (isWorkletsVersionSupported) {
21
22
  audioRuntime = workletsModule.createWorkletRuntime('AudioWorkletRuntime');
22
23
  }
23
24
 
@@ -1,134 +1,30 @@
1
- import { AudioEventEmitter, AudioEventSubscription } from '../events';
2
- import { OnAudioReadyEventType } from '../events/types';
3
1
  import { IAudioRecorder } from '../interfaces';
4
- import {
5
- AndroidFormat,
6
- AudioRecorderCallbackOptions,
7
- AudioRecorderFileOptions,
8
- BitDepth,
9
- FileDirectory,
10
- IOSAudioQuality,
11
- IOSFormat,
12
- } from '../types';
13
- import { encodeFlags } from '../utils';
2
+ import { AudioRecorderOptions } from '../types';
14
3
  import AudioBuffer from './AudioBuffer';
4
+ import { OnAudioReadyEventType } from '../events/types';
5
+ import { AudioEventEmitter } from '../events';
15
6
  import RecorderAdapterNode from './RecorderAdapterNode';
16
7
 
17
- function withDefaultOptions(inOptions: AudioRecorderFileOptions) {
18
- return {
19
- directory: FileDirectory.Cache,
20
- sampleRate: 48000,
21
- channels: 2,
22
- bitRate: 128000,
23
- bitDepth: BitDepth.Bit24,
24
- ...inOptions,
25
- ios: {
26
- format: IOSFormat.M4A,
27
- quality: IOSAudioQuality.High,
28
- ...(inOptions.ios ?? {}),
29
- },
30
- android: {
31
- format: AndroidFormat.M4A,
32
- ...(inOptions.android ?? {}),
33
- },
34
- };
35
- }
36
-
37
- function parseFileOptions(inOptions: AudioRecorderFileOptions) {
38
- const { sampleRate, channels, bitRate, directory, bitDepth, ios, android } =
39
- withDefaultOptions(inOptions);
40
-
41
- const iosFlags = encodeFlags(
42
- ios.format,
43
- ios.quality,
44
- ios.flacCompressionLevel || 0,
45
- directory,
46
- bitDepth
47
- );
48
-
49
- // TODO: ensure directory and bitDepth are last in the bitmask
50
- const androidFlags = encodeFlags(android.format, directory, bitDepth);
51
-
52
- return {
53
- sampleRate,
54
- channels,
55
- bitRate,
56
- ios: iosFlags,
57
- android: androidFlags,
58
- };
59
- }
60
-
61
8
  export default class AudioRecorder {
62
- protected onAudioReadySubscription: AudioEventSubscription | null = null;
63
9
  protected readonly recorder: IAudioRecorder;
64
- protected options_: AudioRecorderFileOptions | null = null;
65
10
 
66
- protected readonly audioEventEmitter = new AudioEventEmitter(
11
+ private readonly audioEventEmitter = new AudioEventEmitter(
67
12
  global.AudioEventEmitter
68
13
  );
69
14
 
70
- constructor() {
71
- this.recorder = global.createAudioRecorder();
15
+ constructor(options: AudioRecorderOptions) {
16
+ this.recorder = global.createAudioRecorder(options);
72
17
  }
73
18
 
74
- enableFileOutput(options: AudioRecorderFileOptions): void {
75
- if (this.recorder.isRecording()) {
76
- throw new Error(
77
- 'Cannot enable file output while recording is in progress. Please stop the recorder before changing output options.'
78
- );
79
- }
80
-
81
- this.options_ = options;
82
-
83
- const parsedOptions = parseFileOptions(options);
84
- this.recorder.enableFileOutput(parsedOptions);
85
- }
86
-
87
- public get options(): AudioRecorderFileOptions | null {
88
- return this.options_;
89
- }
90
-
91
- disableFileOutput(): void {
92
- this.options_ = null;
93
- this.recorder.disableFileOutput();
94
- }
95
-
96
- /** Starts the audio recording process with configured output options */
97
19
  public start(): void {
98
20
  this.recorder.start();
99
21
  }
100
22
 
101
- /** Stops the audio recording process and releases internal resources */
102
- public stop(): void | string {
103
- return this.recorder.stop();
104
- }
105
-
106
- /** Pauses the audio recording process without tearing down anything */
107
- public pause(): void {
108
- this.recorder.pause();
23
+ public stop(): void {
24
+ this.recorder.stop();
109
25
  }
110
26
 
111
- /** Resumes the audio recording process after being paused */
112
- public resume(): void {
113
- this.recorder.resume();
114
- }
115
-
116
- /**
117
- * Connects a {@link RecorderAdapterNode} to the recorder’s audio graph.
118
- *
119
- * Each node can only be connected once. Attempting to connect a node multiple
120
- * times will throw an error.
121
- *
122
- * @param node - The adapter node to connect to the recorder.
123
- * @throws If the node has already been connected.
124
- */
125
27
  public connect(node: RecorderAdapterNode): void {
126
- if (this.recorder.isRecording()) {
127
- throw new Error(
128
- 'Cannot connect adapter node while recording is in progress. Please stop the recorder before connecting new nodes.'
129
- );
130
- }
131
-
132
28
  if (node.wasConnected) {
133
29
  throw new Error(
134
30
  'RecorderAdapterNode cannot be connected more than once. Refer to the documentation for more details.'
@@ -138,90 +34,24 @@ export default class AudioRecorder {
138
34
  this.recorder.connect(node.getNode());
139
35
  }
140
36
 
141
- /**
142
- * Disconnects the recorder from all connected adapter nodes.
143
- *
144
- * After calling this method, any connected {@link RecorderAdapterNode} will no
145
- * longer receive audio data until reconnected.
146
- */
147
37
  public disconnect(): void {
148
38
  this.recorder.disconnect();
149
39
  }
150
40
 
151
- /**
152
- * Registers a callback to receive raw audio data during an active recording
153
- * session.
154
- *
155
- * The callback is periodically invoked with audio buffers that match the
156
- * preferred configuration provided in `options`. These parameters (sample
157
- * rate, buffer length, and channel count) guide how audio data is chunked and
158
- * delivered, though the exact values may vary depending on device
159
- * capabilities. Values may vary depending on device capabilities.
160
- *
161
- * @param options - Preferred configuration for the audio buffers delivered to
162
- * the callback.
163
- * @param callback - Function invoked each time a new audio buffer is
164
- * available. The callback receives an {@link OnAudioReadyEventType} object
165
- * containing the audio data and associated metadata.
166
- */
167
- public onAudioReady(
168
- options: AudioRecorderCallbackOptions,
169
- callback: (event: OnAudioReadyEventType) => void
170
- ): void {
171
- if (this.recorder.isRecording()) {
172
- throw new Error(
173
- 'Cannot set onAudioReady callback while recording is in progress. Please stop the recorder before setting a new callback.'
174
- );
175
- }
176
-
177
- if (this.onAudioReadySubscription) {
178
- this.recorder.clearOnAudioReady();
179
- this.onAudioReadySubscription.remove();
180
- this.onAudioReadySubscription = null;
181
- }
182
-
183
- this.onAudioReadySubscription =
184
- this.audioEventEmitter.addAudioEventListener('audioReady', (event) => {
185
- const audioBuffer = new AudioBuffer(event.buffer);
186
- callback({
187
- ...event,
188
- buffer: audioBuffer,
189
- });
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,
190
47
  });
48
+ };
191
49
 
192
- this.recorder.setOnAudioReady({
193
- sampleRate: options.sampleRate,
194
- bufferLength: options.bufferLength,
195
- channelCount: options.channelCount,
196
- callbackId: this.onAudioReadySubscription.subscriptionId,
197
- });
198
- }
199
-
200
- /**
201
- * Removes the previously registered audio data callback, if any.
202
- *
203
- * This stops further `onAudioReady` events from being delivered during
204
- * recording. Calling this method is safe even if no callback is currently
205
- * registered.
206
- */
207
- public clearOnAudioReady(): void {
208
- if (this.recorder.isRecording()) {
209
- throw new Error(
210
- 'Cannot clear onAudioReady callback while recording is in progress. Please stop the recorder before clearing the callback.'
211
- );
212
- }
213
-
214
- if (!this.onAudioReadySubscription) {
215
- return;
216
- }
217
-
218
- this.recorder.clearOnAudioReady();
219
-
220
- this.onAudioReadySubscription.remove();
221
- this.onAudioReadySubscription = null;
222
- }
50
+ const subscription = this.audioEventEmitter.addAudioEventListener(
51
+ 'audioReady',
52
+ onAudioReadyCallback
53
+ );
223
54
 
224
- public isRecording(): boolean {
225
- return this.recorder.isRecording();
55
+ this.recorder.onAudioReady = subscription.subscriptionId;
226
56
  }
227
57
  }
@@ -5,13 +5,15 @@ import {
5
5
  ContextState,
6
6
  PeriodicWaveConstraints,
7
7
  AudioWorkletRuntime,
8
+ ConvolverNodeOptions,
8
9
  } from '../types';
9
- import { isWorkletsAvailable, workletsModule } from '../utils';
10
+ import { assertWorkletsEnabled, workletsModule } from '../utils';
10
11
  import WorkletSourceNode from './WorkletSourceNode';
11
12
  import WorkletProcessingNode from './WorkletProcessingNode';
12
13
  import AnalyserNode from './AnalyserNode';
13
14
  import AudioBuffer from './AudioBuffer';
14
15
  import AudioBufferQueueSourceNode from './AudioBufferQueueSourceNode';
16
+ import ConvolverNode from './ConvolverNode';
15
17
  import AudioBufferSourceNode from './AudioBufferSourceNode';
16
18
  import AudioDestinationNode from './AudioDestinationNode';
17
19
  import BiquadFilterNode from './BiquadFilterNode';
@@ -84,30 +86,24 @@ export default class BaseAudioContext {
84
86
  `The buffer length provided (${bufferLength}) can not be less than 1`
85
87
  );
86
88
  }
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.'
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
+ )
111
107
  );
112
108
  }
113
109
 
@@ -120,35 +116,30 @@ export default class BaseAudioContext {
120
116
  ) => void,
121
117
  workletRuntime: AudioWorkletRuntime = 'AudioRuntime'
122
118
  ): WorkletProcessingNode {
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.'
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
+ )
152
143
  );
153
144
  }
154
145
 
@@ -161,12 +152,7 @@ export default class BaseAudioContext {
161
152
  ) => void,
162
153
  workletRuntime: AudioWorkletRuntime = 'AudioRuntime'
163
154
  ): WorkletSourceNode {
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
- }
155
+ assertWorkletsEnabled();
170
156
  const shareableWorklet = workletsModule.makeShareableCloneRecursive(
171
157
  (
172
158
  audioBuffers: Array<ArrayBuffer>,
@@ -289,4 +275,25 @@ export default class BaseAudioContext {
289
275
  createAnalyser(): AnalyserNode {
290
276
  return new AnalyserNode(this, this.context.createAnalyser());
291
277
  }
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
+ }
292
299
  }
@@ -0,0 +1,35 @@
1
+ import { IConvolverNode } from '../interfaces';
2
+ import BaseAudioContext from './BaseAudioContext';
3
+ import AudioNode from './AudioNode';
4
+ import AudioBuffer from './AudioBuffer';
5
+
6
+ export default class ConvolverNode extends AudioNode {
7
+ constructor(context: BaseAudioContext, node: IConvolverNode) {
8
+ super(context, node);
9
+ this.normalize = node.normalize;
10
+ }
11
+
12
+ public get buffer(): AudioBuffer | null {
13
+ const buffer = (this.node as IConvolverNode).buffer;
14
+ if (!buffer) {
15
+ return null;
16
+ }
17
+ return new AudioBuffer(buffer);
18
+ }
19
+
20
+ public set buffer(buffer: AudioBuffer | null) {
21
+ if (!buffer) {
22
+ (this.node as IConvolverNode).buffer = null;
23
+ return;
24
+ }
25
+ (this.node as IConvolverNode).buffer = buffer.buffer;
26
+ }
27
+
28
+ public get normalize(): boolean {
29
+ return (this.node as IConvolverNode).normalize;
30
+ }
31
+
32
+ public set normalize(value: boolean) {
33
+ (this.node as IConvolverNode).normalize = value;
34
+ }
35
+ }
@@ -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 { isWorkletsAvailable, workletsModule } from '../utils';
6
+ import { isWorkletsVersionSupported, 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 (isWorkletsAvailable) {
21
+ if (isWorkletsVersionSupported) {
22
22
  audioRuntime = workletsModule.createWorkletRuntime('AudioWorkletRuntime');
23
23
  }
24
24
 
@@ -49,27 +49,9 @@ export interface OnEndedEventType extends EventEmptyType {
49
49
  isLast: boolean | undefined;
50
50
  }
51
51
 
52
- /**
53
- * Represents the data payload received by the audio recorder callback each time
54
- * a new audio buffer becomes available during recording.
55
- */
56
52
  export interface OnAudioReadyEventType {
57
- /**
58
- * The audio buffer containing the recorded PCM data. This buffer includes one
59
- * or more channels of floating-point samples in the range of -1.0 to 1.0.
60
- */
61
53
  buffer: AudioBuffer;
62
-
63
- /**
64
- * The number of audio frames contained in this buffer. A frame represents a
65
- * single sample across all channels.
66
- */
67
54
  numFrames: number;
68
-
69
- /**
70
- * The timestamp (in seconds) indicating when this buffer was captured,
71
- * relative to the start of the recording session.
72
- */
73
55
  when: number;
74
56
  }
75
57