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
@@ -13,12 +13,14 @@ class AudioFocusListener(
13
13
  private val audioAPIModule: WeakReference<AudioAPIModule>,
14
14
  private val lockScreenManager: WeakReference<LockScreenManager>,
15
15
  ) : AudioManager.OnAudioFocusChangeListener {
16
+ private var playOnAudioFocus: Boolean = false
16
17
  private var focusRequest: AudioFocusRequest? = null
17
18
 
18
19
  override fun onAudioFocusChange(focusChange: Int) {
19
20
  Log.d("AudioFocusListener", "onAudioFocusChange: $focusChange")
20
21
  when (focusChange) {
21
22
  AudioManager.AUDIOFOCUS_LOSS -> {
23
+ playOnAudioFocus = false
22
24
  val body =
23
25
  HashMap<String, Any>().apply {
24
26
  put("type", "began")
@@ -26,23 +28,33 @@ class AudioFocusListener(
26
28
  }
27
29
  audioAPIModule.get()?.invokeHandlerWithEventNameAndEventBody("interruption", body)
28
30
  }
29
-
30
31
  AudioManager.AUDIOFOCUS_LOSS_TRANSIENT -> {
32
+ playOnAudioFocus = lockScreenManager.get()?.isPlaying == true
31
33
  val body =
32
34
  HashMap<String, Any>().apply {
33
35
  put("type", "began")
34
- put("shouldResume", false)
36
+ put("shouldResume", playOnAudioFocus)
35
37
  }
36
38
  audioAPIModule.get()?.invokeHandlerWithEventNameAndEventBody("interruption", body)
37
39
  }
38
-
39
40
  AudioManager.AUDIOFOCUS_GAIN -> {
40
- val body =
41
- HashMap<String, Any>().apply {
42
- put("type", "ended")
43
- put("shouldResume", true)
44
- }
45
- audioAPIModule.get()?.invokeHandlerWithEventNameAndEventBody("interruption", body)
41
+ if (playOnAudioFocus) {
42
+ val body =
43
+ HashMap<String, Any>().apply {
44
+ put("type", "ended")
45
+ put("shouldResume", true)
46
+ }
47
+ audioAPIModule.get()?.invokeHandlerWithEventNameAndEventBody("interruption", body)
48
+ } else {
49
+ val body =
50
+ HashMap<String, Any>().apply {
51
+ put("type", "ended")
52
+ put("shouldResume", false)
53
+ }
54
+ audioAPIModule.get()?.invokeHandlerWithEventNameAndEventBody("interruption", body)
55
+ }
56
+
57
+ playOnAudioFocus = false
46
58
  }
47
59
  }
48
60
  }
@@ -42,13 +42,11 @@ class LockScreenManager(
42
42
  private var playbackState: Int = PlaybackStateCompat.STATE_PAUSED
43
43
 
44
44
  init {
45
- this.pb.setActions(controls)
46
-
47
- this.nb.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
48
- this.nb.setPriority(NotificationCompat.PRIORITY_HIGH)
45
+ pb.setActions(controls)
46
+ nb.setPriority(NotificationCompat.PRIORITY_HIGH)
47
+ nb.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
49
48
 
50
49
  updateNotificationMediaStyle()
51
-
52
50
  mediaNotificationManager.get()?.updateActions(controls)
53
51
  }
54
52
 
@@ -174,8 +172,31 @@ class LockScreenManager(
174
172
  if (artworkThread != null && artworkThread!!.isAlive) artworkThread!!.interrupt()
175
173
  artworkThread = null
176
174
 
177
- mediaNotificationManager.get()?.cancelNotification()
175
+ title = null
176
+ artist = null
177
+ album = null
178
+ description = null
179
+ duration = 0L
180
+ speed = 1.0F
181
+ elapsedTime = 0L
182
+ artwork = null
183
+ playbackState = PlaybackStateCompat.STATE_PAUSED
184
+ isPlaying = false
185
+
186
+ val emptyMetadata = MediaMetadataCompat.Builder().build()
187
+ mediaSession.get()?.setMetadata(emptyMetadata)
188
+
189
+ pb.setState(PlaybackStateCompat.STATE_NONE, 0, 0f)
190
+ pb.setActions(controls)
191
+ state = pb.build()
192
+ mediaSession.get()?.setPlaybackState(state)
178
193
  mediaSession.get()?.setActive(false)
194
+
195
+ nb.setContentTitle("")
196
+ nb.setContentText("")
197
+ nb.setContentInfo("")
198
+
199
+ mediaNotificationManager.get()?.updateNotification(nb, isPlaying)
179
200
  }
180
201
 
181
202
  fun enableRemoteCommand(
@@ -258,5 +258,16 @@ class MediaNotificationManager(
258
258
  }
259
259
  super.onDestroy()
260
260
  }
261
+
262
+ override fun onTimeout(startId: Int) {
263
+ stopForegroundService()
264
+ }
265
+
266
+ override fun onTimeout(
267
+ startId: Int,
268
+ fgsType: Int,
269
+ ) {
270
+ stopForegroundService()
271
+ }
261
272
  }
262
273
  }
@@ -50,6 +50,10 @@
50
50
  @DoNotStrip
51
51
  public abstract void setAudioSessionOptions(String category, String mode, ReadableArray options, boolean allowHaptics);
52
52
 
53
+ @ReactMethod
54
+ @DoNotStrip
55
+ public abstract void disableSessionManagement();
56
+
53
57
  @ReactMethod
54
58
  @DoNotStrip
55
59
  public abstract void setLockScreenInfo(ReadableMap info);
@@ -16,13 +16,16 @@
16
16
  #include <audioapi/core/utils/worklets/SafeIncludes.h>
17
17
 
18
18
  #include <memory>
19
- #include <string>
19
+ #include <vector>
20
20
 
21
21
  namespace audioapi {
22
22
 
23
23
  using namespace facebook;
24
24
 
25
25
  class AudioAPIModuleInstaller {
26
+ private:
27
+ inline static std::vector<std::weak_ptr<AudioContext>> contexts_ = {};
28
+
26
29
  public:
27
30
  static void injectJSIBindings(
28
31
  jsi::Runtime *jsiRuntime,
@@ -62,6 +65,19 @@ class AudioAPIModuleInstaller {
62
65
  *jsiRuntime, audioEventHandlerRegistryHostObject));
63
66
  }
64
67
 
68
+ static void closeAllContexts() {
69
+ for (auto it = contexts_.begin(); it != contexts_.end(); ++it) {
70
+ auto weakContext = *it;
71
+
72
+ if (auto context = weakContext.lock()) {
73
+ context->close();
74
+ }
75
+
76
+ it = contexts_.erase(it);
77
+ --it;
78
+ }
79
+ }
80
+
65
81
  private:
66
82
  static jsi::Function getCreateAudioContextFunction(
67
83
  jsi::Runtime *jsiRuntime,
@@ -96,6 +112,8 @@ class AudioAPIModuleInstaller {
96
112
  initSuspended,
97
113
  audioEventHandlerRegistry,
98
114
  runtimeRegistry);
115
+ AudioAPIModuleInstaller::contexts_.push_back(audioContext);
116
+
99
117
  auto audioContextHostObject =
100
118
  std::make_shared<AudioContextHostObject>(
101
119
  audioContext, &runtime, jsCallInvoker);
@@ -139,6 +157,7 @@ class AudioAPIModuleInstaller {
139
157
  sampleRate,
140
158
  audioEventHandlerRegistry,
141
159
  runtimeRegistry);
160
+
142
161
  auto audioContextHostObject =
143
162
  std::make_shared<OfflineAudioContextHostObject>(
144
163
  offlineAudioContext, &runtime, jsCallInvoker);
@@ -161,8 +180,17 @@ class AudioAPIModuleInstaller {
161
180
  const jsi::Value &thisValue,
162
181
  const jsi::Value *args,
163
182
  size_t count) -> jsi::Value {
183
+ auto options = args[0].getObject(runtime);
184
+
185
+ auto sampleRate = static_cast<float>(
186
+ options.getProperty(runtime, "sampleRate").getNumber());
187
+ auto bufferLength = static_cast<int>(
188
+ options.getProperty(runtime, "bufferLengthInSamples")
189
+ .getNumber());
190
+
164
191
  auto audioRecorderHostObject =
165
- std::make_shared<AudioRecorderHostObject>(audioEventHandlerRegistry);
192
+ std::make_shared<AudioRecorderHostObject>(
193
+ audioEventHandlerRegistry, sampleRate, bufferLength);
166
194
 
167
195
  return jsi::Object::createFromHostObject(
168
196
  runtime, audioRecorderHostObject);
@@ -5,6 +5,7 @@
5
5
  #include <audioapi/HostObjects/analysis/AnalyserNodeHostObject.h>
6
6
  #include <audioapi/HostObjects/destinations/AudioDestinationNodeHostObject.h>
7
7
  #include <audioapi/HostObjects/effects/BiquadFilterNodeHostObject.h>
8
+ #include <audioapi/HostObjects/effects/ConvolverNodeHostObject.h>
8
9
  #include <audioapi/HostObjects/effects/GainNodeHostObject.h>
9
10
  #include <audioapi/HostObjects/effects/PeriodicWaveHostObject.h>
10
11
  #include <audioapi/HostObjects/effects/StereoPannerNodeHostObject.h>
@@ -49,6 +50,7 @@ BaseAudioContextHostObject::BaseAudioContextHostObject(
49
50
  JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createBufferQueueSource),
50
51
  JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createBuffer),
51
52
  JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createPeriodicWave),
53
+ JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createConvolver),
52
54
  JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createAnalyser));
53
55
  }
54
56
 
@@ -269,4 +271,20 @@ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createAnalyser) {
269
271
  auto analyserHostObject = std::make_shared<AnalyserNodeHostObject>(analyser);
270
272
  return jsi::Object::createFromHostObject(runtime, analyserHostObject);
271
273
  }
274
+
275
+ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createConvolver) {
276
+ auto disableNormalization = args[1].getBool();
277
+ std::shared_ptr<ConvolverNode> convolver;
278
+ if (args[0].isUndefined()) {
279
+ convolver = context_->createConvolver(nullptr, disableNormalization);
280
+ } else {
281
+ auto bufferHostObject =
282
+ args[0].getObject(runtime).asHostObject<AudioBufferHostObject>(runtime);
283
+ convolver = context_->createConvolver(
284
+ bufferHostObject->audioBuffer_, disableNormalization);
285
+ }
286
+ auto convolverHostObject =
287
+ std::make_shared<ConvolverNodeHostObject>(convolver);
288
+ return jsi::Object::createFromHostObject(runtime, convolverHostObject);
289
+ }
272
290
  } // namespace audioapi
@@ -41,6 +41,7 @@ class BaseAudioContextHostObject : public JsiHostObject {
41
41
  JSI_HOST_FUNCTION_DECL(createBuffer);
42
42
  JSI_HOST_FUNCTION_DECL(createPeriodicWave);
43
43
  JSI_HOST_FUNCTION_DECL(createAnalyser);
44
+ JSI_HOST_FUNCTION_DECL(createConvolver);
44
45
 
45
46
  std::shared_ptr<BaseAudioContext> context_;
46
47
 
@@ -67,7 +67,7 @@ JSI_HOST_FUNCTION_IMPL(BiquadFilterNodeHostObject, getFrequencyResponse) {
67
67
  .getArrayBuffer(runtime);
68
68
  auto frequencyArray =
69
69
  reinterpret_cast<float *>(arrayBufferFrequency.data(runtime));
70
- auto length = static_cast<int>(arrayBufferFrequency.size(runtime));
70
+ auto length = static_cast<size_t>(arrayBufferFrequency.size(runtime));
71
71
 
72
72
  auto arrayBufferMag = args[1]
73
73
  .getObject(runtime)
@@ -0,0 +1,47 @@
1
+ #include <audioapi/HostObjects/effects/ConvolverNodeHostObject.h>
2
+
3
+ #include <audioapi/HostObjects/sources/AudioBufferHostObject.h>
4
+ #include <audioapi/core/effects/ConvolverNode.h>
5
+
6
+ namespace audioapi {
7
+
8
+ ConvolverNodeHostObject::ConvolverNodeHostObject(
9
+ const std::shared_ptr<ConvolverNode> &node)
10
+ : AudioNodeHostObject(node) {
11
+ addGetters(
12
+ JSI_EXPORT_PROPERTY_GETTER(ConvolverNodeHostObject, normalize),
13
+ JSI_EXPORT_PROPERTY_GETTER(ConvolverNodeHostObject, buffer));
14
+ addSetters(
15
+ JSI_EXPORT_PROPERTY_SETTER(ConvolverNodeHostObject, normalize),
16
+ JSI_EXPORT_PROPERTY_SETTER(ConvolverNodeHostObject, buffer));
17
+ }
18
+
19
+ JSI_PROPERTY_GETTER_IMPL(ConvolverNodeHostObject, normalize) {
20
+ auto convolverNode = std::static_pointer_cast<ConvolverNode>(node_);
21
+ return {convolverNode->getNormalize_()};
22
+ }
23
+
24
+ JSI_PROPERTY_GETTER_IMPL(ConvolverNodeHostObject, buffer) {
25
+ auto convolverNode = std::static_pointer_cast<ConvolverNode>(node_);
26
+ auto buffer = convolverNode->getBuffer();
27
+ auto bufferHostObject = std::make_shared<AudioBufferHostObject>(buffer);
28
+ return jsi::Object::createFromHostObject(runtime, bufferHostObject);
29
+ }
30
+
31
+ JSI_PROPERTY_SETTER_IMPL(ConvolverNodeHostObject, normalize) {
32
+ auto convolverNode = std::static_pointer_cast<ConvolverNode>(node_);
33
+ convolverNode->setNormalize(value.getBool());
34
+ }
35
+
36
+ JSI_PROPERTY_SETTER_IMPL(ConvolverNodeHostObject, buffer) {
37
+ auto convolverNode = std::static_pointer_cast<ConvolverNode>(node_);
38
+ if (value.isNull()) {
39
+ convolverNode->setBuffer(nullptr);
40
+ return;
41
+ }
42
+
43
+ auto bufferHostObject =
44
+ value.getObject(runtime).asHostObject<AudioBufferHostObject>(runtime);
45
+ convolverNode->setBuffer(bufferHostObject->audioBuffer_);
46
+ }
47
+ } // namespace audioapi
@@ -0,0 +1,20 @@
1
+ #pragma once
2
+
3
+ #include <audioapi/HostObjects/AudioNodeHostObject.h>
4
+
5
+ #include <memory>
6
+
7
+ namespace audioapi {
8
+ using namespace facebook;
9
+
10
+ class ConvolverNode;
11
+
12
+ class ConvolverNodeHostObject : public AudioNodeHostObject {
13
+ public:
14
+ explicit ConvolverNodeHostObject(const std::shared_ptr<ConvolverNode> &node);
15
+ JSI_PROPERTY_GETTER_DECL(normalize);
16
+ JSI_PROPERTY_GETTER_DECL(buffer);
17
+ JSI_PROPERTY_SETTER_DECL(normalize);
18
+ JSI_PROPERTY_SETTER_DECL(buffer);
19
+ };
20
+ } // namespace audioapi
@@ -14,86 +14,35 @@
14
14
  namespace audioapi {
15
15
 
16
16
  AudioRecorderHostObject::AudioRecorderHostObject(
17
- const std::shared_ptr<AudioEventHandlerRegistry>
18
- &audioEventHandlerRegistry) {
17
+ const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
18
+ float sampleRate,
19
+ int bufferLength) {
19
20
  #ifdef ANDROID
20
- audioRecorder_ =
21
- std::make_shared<AndroidAudioRecorder>(audioEventHandlerRegistry);
21
+ audioRecorder_ = std::make_shared<AndroidAudioRecorder>(
22
+ sampleRate, bufferLength, audioEventHandlerRegistry);
22
23
  #else
23
- audioRecorder_ =
24
- std::make_shared<IOSAudioRecorder>(audioEventHandlerRegistry);
24
+ audioRecorder_ = std::make_shared<IOSAudioRecorder>(
25
+ sampleRate, bufferLength, audioEventHandlerRegistry);
25
26
  #endif
26
27
 
28
+ addSetters(JSI_EXPORT_PROPERTY_SETTER(AudioRecorderHostObject, onAudioReady));
29
+
27
30
  addFunctions(
28
31
  JSI_EXPORT_FUNCTION(AudioRecorderHostObject, start),
29
32
  JSI_EXPORT_FUNCTION(AudioRecorderHostObject, stop),
30
- JSI_EXPORT_FUNCTION(AudioRecorderHostObject, isRecording),
31
- JSI_EXPORT_FUNCTION(AudioRecorderHostObject, enableFileOutput),
32
- JSI_EXPORT_FUNCTION(AudioRecorderHostObject, disableFileOutput),
33
- JSI_EXPORT_FUNCTION(AudioRecorderHostObject, pause),
34
- JSI_EXPORT_FUNCTION(AudioRecorderHostObject, resume),
35
33
  JSI_EXPORT_FUNCTION(AudioRecorderHostObject, connect),
36
- JSI_EXPORT_FUNCTION(AudioRecorderHostObject, disconnect),
37
- JSI_EXPORT_FUNCTION(AudioRecorderHostObject, setOnAudioReady),
38
- JSI_EXPORT_FUNCTION(AudioRecorderHostObject, clearOnAudioReady));
34
+ JSI_EXPORT_FUNCTION(AudioRecorderHostObject, disconnect));
39
35
  }
40
36
 
41
- JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, start) {
42
- audioRecorder_->start();
43
-
44
- return jsi::Value::undefined();
45
- }
46
-
47
- JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, stop) {
48
- std::string filePath = audioRecorder_->stop();
49
-
50
- return jsi::Value(runtime, jsi::String::createFromUtf8(runtime, filePath));
51
- }
52
-
53
- JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, isRecording) {
54
- return jsi::Value(audioRecorder_->isRecording());
55
- }
56
-
57
- JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, enableFileOutput) {
58
- auto options = args[0].getObject(runtime);
59
-
60
- auto sampleRate = static_cast<float>(
61
- options.getProperty(runtime, "sampleRate").getNumber());
62
- auto channelCount =
63
- static_cast<size_t>(options.getProperty(runtime, "channels").getNumber());
64
- auto bitRate =
65
- static_cast<size_t>(options.getProperty(runtime, "bitRate").getNumber());
66
- auto iosFlags =
67
- static_cast<size_t>(options.getProperty(runtime, "ios").getNumber());
68
- auto androidFlags =
69
- static_cast<size_t>(options.getProperty(runtime, "android").getNumber());
70
-
71
- audioRecorder_->enableFileOutput(
72
- sampleRate, channelCount, bitRate, iosFlags, androidFlags);
73
- return jsi::Value::undefined();
74
- }
75
-
76
- JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, disableFileOutput) {
77
- audioRecorder_->disableFileOutput();
78
- return jsi::Value::undefined();
79
- }
80
-
81
- JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, pause) {
82
- audioRecorder_->pause();
83
-
84
- return jsi::Value::undefined();
85
- }
86
-
87
- JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, resume) {
88
- audioRecorder_->resume();
89
- return jsi::Value::undefined();
37
+ JSI_PROPERTY_SETTER_IMPL(AudioRecorderHostObject, onAudioReady) {
38
+ audioRecorder_->setOnAudioReadyCallbackId(
39
+ std::stoull(value.getString(runtime).utf8(runtime)));
90
40
  }
91
41
 
92
42
  JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, connect) {
93
43
  auto adapterNodeHostObject =
94
44
  args[0].getObject(runtime).getHostObject<RecorderAdapterNodeHostObject>(
95
45
  runtime);
96
-
97
46
  audioRecorder_->connect(
98
47
  std::static_pointer_cast<RecorderAdapterNode>(
99
48
  adapterNodeHostObject->node_));
@@ -102,29 +51,18 @@ JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, connect) {
102
51
 
103
52
  JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, disconnect) {
104
53
  audioRecorder_->disconnect();
105
-
106
54
  return jsi::Value::undefined();
107
55
  }
108
56
 
109
- JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, setOnAudioReady) {
110
- auto options = args[0].getObject(runtime);
111
-
112
- auto sampleRate = static_cast<float>(
113
- options.getProperty(runtime, "sampleRate").getNumber());
114
- auto bufferLength = static_cast<size_t>(
115
- options.getProperty(runtime, "bufferLength").getNumber());
116
- auto channelCount = static_cast<size_t>(
117
- options.getProperty(runtime, "channelCount").getNumber());
118
- auto callbackId = static_cast<uint64_t>(
119
- options.getProperty(runtime, "callbackId").getNumber());
57
+ JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, start) {
58
+ audioRecorder_->start();
120
59
 
121
- audioRecorder_->setOnAudioReadyCallback(
122
- sampleRate, bufferLength, channelCount, callbackId);
123
60
  return jsi::Value::undefined();
124
61
  }
125
62
 
126
- JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, clearOnAudioReady) {
127
- audioRecorder_->clearOnAudioReadyCallback();
63
+ JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, stop) {
64
+ audioRecorder_->stop();
65
+
128
66
  return jsi::Value::undefined();
129
67
  }
130
68
 
@@ -6,7 +6,6 @@
6
6
  #include <utility>
7
7
  #include <vector>
8
8
  #include <cstdio>
9
- #include <string>
10
9
 
11
10
  namespace audioapi {
12
11
  using namespace facebook;
@@ -17,26 +16,18 @@ class AudioEventHandlerRegistry;
17
16
  class AudioRecorderHostObject : public JsiHostObject {
18
17
  public:
19
18
  explicit AudioRecorderHostObject(
20
- const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry);
19
+ const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
20
+ float sampleRate,
21
+ int bufferLength);
21
22
 
22
- JSI_HOST_FUNCTION_DECL(start);
23
- JSI_HOST_FUNCTION_DECL(stop);
24
- JSI_HOST_FUNCTION_DECL(isRecording);
25
-
26
- JSI_HOST_FUNCTION_DECL(enableFileOutput);
27
- JSI_HOST_FUNCTION_DECL(disableFileOutput);
28
-
29
- JSI_HOST_FUNCTION_DECL(pause);
30
- JSI_HOST_FUNCTION_DECL(resume);
23
+ JSI_PROPERTY_SETTER_DECL(onAudioReady);
31
24
 
32
25
  JSI_HOST_FUNCTION_DECL(connect);
33
26
  JSI_HOST_FUNCTION_DECL(disconnect);
34
-
35
- JSI_HOST_FUNCTION_DECL(setOnAudioReady);
36
- JSI_HOST_FUNCTION_DECL(clearOnAudioReady);
27
+ JSI_HOST_FUNCTION_DECL(start);
28
+ JSI_HOST_FUNCTION_DECL(stop);
37
29
 
38
30
  private:
39
31
  std::shared_ptr<AudioRecorder> audioRecorder_;
40
32
  };
41
-
42
33
  } // namespace audioapi
@@ -28,7 +28,7 @@ AudioBufferBaseSourceNodeHostObject::~AudioBufferBaseSourceNodeHostObject() {
28
28
  // When JSI object is garbage collected (together with the eventual callback),
29
29
  // underlying source node might still be active and try to call the
30
30
  // non-existing callback.
31
- sourceNode->clearOnPositionChangedCallback();
31
+ sourceNode->setOnPositionChangedCallbackId(0);
32
32
  }
33
33
 
34
34
  JSI_PROPERTY_GETTER_IMPL(AudioBufferBaseSourceNodeHostObject, detune) {
@@ -37,7 +37,7 @@ AudioBufferSourceNodeHostObject::~AudioBufferSourceNodeHostObject() {
37
37
  // When JSI object is garbage collected (together with the eventual callback),
38
38
  // underlying source node might still be active and try to call the
39
39
  // non-existing callback.
40
- audioBufferSourceNode->clearOnLoopEndedCallback();
40
+ audioBufferSourceNode->setOnLoopEndedCallbackId(0);
41
41
  }
42
42
 
43
43
  JSI_PROPERTY_GETTER_IMPL(AudioBufferSourceNodeHostObject, loop) {
@@ -22,7 +22,7 @@ AudioScheduledSourceNodeHostObject::~AudioScheduledSourceNodeHostObject() {
22
22
  // When JSI object is garbage collected (together with the eventual callback),
23
23
  // underlying source node might still be active and try to call the
24
24
  // non-existing callback.
25
- audioScheduledSourceNode->clearOnEndedCallback();
25
+ audioScheduledSourceNode->setOnEndedCallbackId(0);
26
26
  }
27
27
 
28
28
  JSI_PROPERTY_SETTER_IMPL(AudioScheduledSourceNodeHostObject, onEnded) {
@@ -41,6 +41,7 @@ class AudioNode : public std::enable_shared_from_this<AudioNode> {
41
41
  protected:
42
42
  friend class AudioNodeManager;
43
43
  friend class AudioDestinationNode;
44
+ friend class ConvolverNode;
44
45
 
45
46
  BaseAudioContext *context_;
46
47
  std::shared_ptr<AudioBus> audioBus_;
@@ -68,10 +69,10 @@ class AudioNode : public std::enable_shared_from_this<AudioNode> {
68
69
  static std::string toString(ChannelCountMode mode);
69
70
  static std::string toString(ChannelInterpretation interpretation);
70
71
 
72
+ virtual std::shared_ptr<AudioBus> processInputs(const std::shared_ptr<AudioBus>& outputBus, int framesToProcess, bool checkIsAlreadyProcessed);
71
73
  virtual std::shared_ptr<AudioBus> processNode(const std::shared_ptr<AudioBus>&, int) = 0;
72
74
 
73
75
  bool isAlreadyProcessed();
74
- std::shared_ptr<AudioBus> processInputs(const std::shared_ptr<AudioBus>& outputBus, int framesToProcess, bool checkIsAlreadyProcessed);
75
76
  std::shared_ptr<AudioBus> applyChannelCountMode(const std::shared_ptr<AudioBus> &processingBus);
76
77
  void mixInputsBuses(const std::shared_ptr<AudioBus>& processingBus);
77
78
 
@@ -81,7 +82,7 @@ class AudioNode : public std::enable_shared_from_this<AudioNode> {
81
82
  void disconnectParam(const std::shared_ptr<AudioParam> &param);
82
83
 
83
84
  void onInputEnabled();
84
- void onInputDisabled();
85
+ virtual void onInputDisabled();
85
86
  void onInputConnected(AudioNode *node);
86
87
  void onInputDisconnected(AudioNode *node);
87
88
 
@@ -56,7 +56,7 @@ float AudioParam::getValueAtTime(double time) {
56
56
  void AudioParam::setValueAtTime(float value, double startTime) {
57
57
  auto event = [value, startTime](AudioParam &param) {
58
58
  // Ignore events scheduled before the end of existing automation
59
- if (startTime <= param.getQueueEndTime()) {
59
+ if (startTime < param.getQueueEndTime()) {
60
60
  return;
61
61
  }
62
62
 
@@ -87,7 +87,7 @@ void AudioParam::setValueAtTime(float value, double startTime) {
87
87
  void AudioParam::linearRampToValueAtTime(float value, double endTime) {
88
88
  auto event = [value, endTime](AudioParam &param) {
89
89
  // Ignore events scheduled before the end of existing automation
90
- if (endTime <= param.getQueueEndTime()) {
90
+ if (endTime < param.getQueueEndTime()) {
91
91
  return;
92
92
  }
93
93
 
@@ -2,6 +2,7 @@
2
2
  #include <audioapi/core/analysis/AnalyserNode.h>
3
3
  #include <audioapi/core/destinations/AudioDestinationNode.h>
4
4
  #include <audioapi/core/effects/BiquadFilterNode.h>
5
+ #include <audioapi/core/effects/ConvolverNode.h>
5
6
  #include <audioapi/core/effects/GainNode.h>
6
7
  #include <audioapi/core/effects/StereoPannerNode.h>
7
8
  #include <audioapi/core/effects/WorkletNode.h>
@@ -182,6 +183,15 @@ std::shared_ptr<AnalyserNode> BaseAudioContext::createAnalyser() {
182
183
  return analyser;
183
184
  }
184
185
 
186
+ std::shared_ptr<ConvolverNode> BaseAudioContext::createConvolver(
187
+ std::shared_ptr<AudioBuffer> buffer,
188
+ bool disableNormalization) {
189
+ auto convolver =
190
+ std::make_shared<ConvolverNode>(this, buffer, disableNormalization);
191
+ nodeManager_->addProcessingNode(convolver);
192
+ return convolver;
193
+ }
194
+
185
195
  AudioNodeManager *BaseAudioContext::getNodeManager() {
186
196
  return nodeManager_.get();
187
197
  }
@@ -28,6 +28,7 @@ class AudioBufferSourceNode;
28
28
  class AudioBufferQueueSourceNode;
29
29
  class AnalyserNode;
30
30
  class AudioEventHandlerRegistry;
31
+ class ConvolverNode;
31
32
  class IAudioEventHandlerRegistry;
32
33
  class RecorderAdapterNode;
33
34
  class WorkletSourceNode;
@@ -76,6 +77,7 @@ class BaseAudioContext {
76
77
  bool disableNormalization,
77
78
  int length);
78
79
  std::shared_ptr<AnalyserNode> createAnalyser();
80
+ std::shared_ptr<ConvolverNode> createConvolver(std::shared_ptr<AudioBuffer> buffer, bool disableNormalization);
79
81
 
80
82
  std::shared_ptr<PeriodicWave> getBasicWaveForm(OscillatorType type);
81
83
  [[nodiscard]] float getNyquistFrequency() const;