react-native-audio-api 0.11.0-alpha.1 → 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 (355) 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 -142
  8. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +13 -40
  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 -97
  24. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +6 -18
  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 +82 -36
  37. package/common/cpp/audioapi/core/inputs/AudioRecorder.h +31 -52
  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 +10 -28
  118. package/ios/audioapi/ios/core/IOSAudioRecorder.mm +30 -117
  119. package/ios/audioapi/ios/core/NativeAudioRecorder.h +9 -4
  120. package/ios/audioapi/ios/core/NativeAudioRecorder.m +71 -29
  121. package/ios/audioapi/ios/core/utils/AudioDecoder.mm +0 -1
  122. package/ios/audioapi/ios/system/AudioEngine.mm +3 -3
  123. package/ios/audioapi/ios/system/AudioSessionManager.h +2 -0
  124. package/ios/audioapi/ios/system/AudioSessionManager.mm +24 -0
  125. package/ios/audioapi/ios/system/LockScreenManager.h +0 -1
  126. package/ios/audioapi/ios/system/LockScreenManager.mm +6 -19
  127. package/lib/commonjs/api.js +141 -76
  128. package/lib/commonjs/api.js.map +1 -1
  129. package/lib/commonjs/api.web.js +8 -0
  130. package/lib/commonjs/api.web.js.map +1 -1
  131. package/lib/commonjs/core/AudioContext.js +1 -1
  132. package/lib/commonjs/core/AudioContext.js.map +1 -1
  133. package/lib/commonjs/core/AudioRecorder.js +13 -171
  134. package/lib/commonjs/core/AudioRecorder.js.map +1 -1
  135. package/lib/commonjs/core/BaseAudioContext.js +28 -25
  136. package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
  137. package/lib/commonjs/core/ConvolverNode.js +37 -0
  138. package/lib/commonjs/core/ConvolverNode.js.map +1 -0
  139. package/lib/commonjs/core/OfflineAudioContext.js +1 -1
  140. package/lib/commonjs/core/OfflineAudioContext.js.map +1 -1
  141. package/lib/commonjs/specs/NativeAudioAPIModule.js.map +1 -1
  142. package/lib/commonjs/system/AudioManager.js +3 -0
  143. package/lib/commonjs/system/AudioManager.js.map +1 -1
  144. package/lib/commonjs/types.js +0 -46
  145. package/lib/commonjs/types.js.map +1 -1
  146. package/lib/commonjs/utils/index.js +19 -21
  147. package/lib/commonjs/utils/index.js.map +1 -1
  148. package/lib/commonjs/web-core/AudioContext.js +12 -0
  149. package/lib/commonjs/web-core/AudioContext.js.map +1 -1
  150. package/lib/commonjs/web-core/ConvolverNode.js +40 -0
  151. package/lib/commonjs/web-core/ConvolverNode.js.map +1 -0
  152. package/lib/commonjs/web-core/ConvolverNodeOptions.js +6 -0
  153. package/lib/commonjs/web-core/ConvolverNodeOptions.js.map +1 -0
  154. package/lib/commonjs/web-core/OfflineAudioContext.js +12 -0
  155. package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
  156. package/lib/module/api.js +16 -15
  157. package/lib/module/api.js.map +1 -1
  158. package/lib/module/api.web.js +1 -0
  159. package/lib/module/api.web.js.map +1 -1
  160. package/lib/module/core/AudioContext.js +2 -2
  161. package/lib/module/core/AudioContext.js.map +1 -1
  162. package/lib/module/core/AudioRecorder.js +13 -171
  163. package/lib/module/core/AudioRecorder.js.map +1 -1
  164. package/lib/module/core/BaseAudioContext.js +29 -26
  165. package/lib/module/core/BaseAudioContext.js.map +1 -1
  166. package/lib/module/core/ConvolverNode.js +31 -0
  167. package/lib/module/core/ConvolverNode.js.map +1 -0
  168. package/lib/module/core/OfflineAudioContext.js +2 -2
  169. package/lib/module/core/OfflineAudioContext.js.map +1 -1
  170. package/lib/module/specs/NativeAudioAPIModule.js.map +1 -1
  171. package/lib/module/system/AudioManager.js +3 -0
  172. package/lib/module/system/AudioManager.js.map +1 -1
  173. package/lib/module/types.js +1 -45
  174. package/lib/module/types.js.map +1 -1
  175. package/lib/module/utils/index.js +15 -2
  176. package/lib/module/utils/index.js.map +1 -1
  177. package/lib/module/web-core/AudioContext.js +12 -0
  178. package/lib/module/web-core/AudioContext.js.map +1 -1
  179. package/lib/module/web-core/ConvolverNode.js +34 -0
  180. package/lib/module/web-core/ConvolverNode.js.map +1 -0
  181. package/lib/module/web-core/ConvolverNodeOptions.js +4 -0
  182. package/lib/module/web-core/ConvolverNodeOptions.js.map +1 -0
  183. package/lib/module/web-core/OfflineAudioContext.js +12 -0
  184. package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
  185. package/lib/typescript/api.d.ts +19 -17
  186. package/lib/typescript/api.d.ts.map +1 -1
  187. package/lib/typescript/api.web.d.ts +1 -0
  188. package/lib/typescript/api.web.d.ts.map +1 -1
  189. package/lib/typescript/core/AudioContext.d.ts.map +1 -1
  190. package/lib/typescript/core/AudioRecorder.d.ts +7 -62
  191. package/lib/typescript/core/AudioRecorder.d.ts.map +1 -1
  192. package/lib/typescript/core/BaseAudioContext.d.ts +3 -1
  193. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
  194. package/lib/typescript/core/ConvolverNode.d.ts +12 -0
  195. package/lib/typescript/core/ConvolverNode.d.ts.map +1 -0
  196. package/lib/typescript/events/types.d.ts +0 -16
  197. package/lib/typescript/events/types.d.ts.map +1 -1
  198. package/lib/typescript/interfaces.d.ts +9 -42
  199. package/lib/typescript/interfaces.d.ts.map +1 -1
  200. package/lib/typescript/specs/NativeAudioAPIModule.d.ts +1 -0
  201. package/lib/typescript/specs/NativeAudioAPIModule.d.ts.map +1 -1
  202. package/lib/typescript/system/AudioManager.d.ts +1 -0
  203. package/lib/typescript/system/AudioManager.d.ts.map +1 -1
  204. package/lib/typescript/types.d.ts +8 -79
  205. package/lib/typescript/types.d.ts.map +1 -1
  206. package/lib/typescript/utils/index.d.ts +5 -2
  207. package/lib/typescript/utils/index.d.ts.map +1 -1
  208. package/lib/typescript/web-core/AudioContext.d.ts +3 -0
  209. package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
  210. package/lib/typescript/web-core/BaseAudioContext.d.ts +2 -0
  211. package/lib/typescript/web-core/BaseAudioContext.d.ts.map +1 -1
  212. package/lib/typescript/web-core/ConvolverNode.d.ts +11 -0
  213. package/lib/typescript/web-core/ConvolverNode.d.ts.map +1 -0
  214. package/lib/typescript/web-core/ConvolverNodeOptions.d.ts +6 -0
  215. package/lib/typescript/web-core/ConvolverNodeOptions.d.ts.map +1 -0
  216. package/lib/typescript/web-core/OfflineAudioContext.d.ts +3 -0
  217. package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
  218. package/package.json +14 -5
  219. package/scripts/download-prebuilt-binaries.sh +61 -0
  220. package/scripts/rnaa_utils.rb +8 -0
  221. package/scripts/validate-worklets-version.js +28 -0
  222. package/src/api.ts +45 -18
  223. package/src/api.web.ts +1 -0
  224. package/src/core/AudioContext.ts +3 -2
  225. package/src/core/AudioRecorder.ts +24 -211
  226. package/src/core/BaseAudioContext.ts +67 -60
  227. package/src/core/ConvolverNode.ts +35 -0
  228. package/src/core/OfflineAudioContext.ts +2 -2
  229. package/src/events/types.ts +0 -18
  230. package/src/interfaces.ts +16 -52
  231. package/src/specs/NativeAudioAPIModule.ts +1 -0
  232. package/src/system/AudioManager.ts +4 -0
  233. package/src/types.ts +9 -90
  234. package/src/utils/index.ts +22 -2
  235. package/src/web-core/AudioContext.tsx +25 -0
  236. package/src/web-core/BaseAudioContext.tsx +2 -0
  237. package/src/web-core/ConvolverNode.tsx +43 -0
  238. package/src/web-core/ConvolverNodeOptions.tsx +6 -0
  239. package/src/web-core/OfflineAudioContext.tsx +25 -0
  240. package/android/src/main/cpp/audioapi/android/core/utils/AndroidFileWriterBackend.h +0 -37
  241. package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.cpp +0 -187
  242. package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.h +0 -57
  243. package/android/src/main/cpp/audioapi/android/core/utils/FileUtils.h +0 -34
  244. package/android/src/main/cpp/audioapi/android/core/utils/FileUtilts.cpp +0 -133
  245. package/android/src/main/cpp/audioapi/android/core/utils/MiniaudioImplementation.cpp +0 -3
  246. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.cpp +0 -154
  247. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.h +0 -41
  248. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.cpp +0 -429
  249. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.h +0 -113
  250. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.cpp +0 -47
  251. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.h +0 -28
  252. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.cpp +0 -269
  253. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.h +0 -47
  254. package/android/src/main/cpp/audioapi/android/system/NativeFileInfo.hpp +0 -31
  255. package/android/src/main/java/com/swmansion/audioapi/system/NativeFileInfo.kt +0 -18
  256. package/android/src/main/jniLibs/arm64-v8a/libavcodec.so +0 -0
  257. package/android/src/main/jniLibs/arm64-v8a/libavformat.so +0 -0
  258. package/android/src/main/jniLibs/arm64-v8a/libavutil.so +0 -0
  259. package/android/src/main/jniLibs/arm64-v8a/libswresample.so +0 -0
  260. package/android/src/main/jniLibs/armeabi-v7a/libavcodec.so +0 -0
  261. package/android/src/main/jniLibs/armeabi-v7a/libavformat.so +0 -0
  262. package/android/src/main/jniLibs/armeabi-v7a/libavutil.so +0 -0
  263. package/android/src/main/jniLibs/armeabi-v7a/libswresample.so +0 -0
  264. package/android/src/main/jniLibs/x86/libavcodec.so +0 -0
  265. package/android/src/main/jniLibs/x86/libavformat.so +0 -0
  266. package/android/src/main/jniLibs/x86/libavutil.so +0 -0
  267. package/android/src/main/jniLibs/x86/libswresample.so +0 -0
  268. package/android/src/main/jniLibs/x86_64/libavcodec.so +0 -0
  269. package/android/src/main/jniLibs/x86_64/libavformat.so +0 -0
  270. package/android/src/main/jniLibs/x86_64/libavutil.so +0 -0
  271. package/android/src/main/jniLibs/x86_64/libswresample.so +0 -0
  272. package/common/cpp/audioapi/external/arm64-v8a/libcrypto.a +0 -0
  273. package/common/cpp/audioapi/external/arm64-v8a/libogg.a +0 -0
  274. package/common/cpp/audioapi/external/arm64-v8a/libopus.a +0 -0
  275. package/common/cpp/audioapi/external/arm64-v8a/libopusfile.a +0 -0
  276. package/common/cpp/audioapi/external/arm64-v8a/libssl.a +0 -0
  277. package/common/cpp/audioapi/external/arm64-v8a/libvorbis.a +0 -0
  278. package/common/cpp/audioapi/external/arm64-v8a/libvorbisenc.a +0 -0
  279. package/common/cpp/audioapi/external/arm64-v8a/libvorbisfile.a +0 -0
  280. package/common/cpp/audioapi/external/armeabi-v7a/libcrypto.a +0 -0
  281. package/common/cpp/audioapi/external/armeabi-v7a/libogg.a +0 -0
  282. package/common/cpp/audioapi/external/armeabi-v7a/libopus.a +0 -0
  283. package/common/cpp/audioapi/external/armeabi-v7a/libopusfile.a +0 -0
  284. package/common/cpp/audioapi/external/armeabi-v7a/libssl.a +0 -0
  285. package/common/cpp/audioapi/external/armeabi-v7a/libvorbis.a +0 -0
  286. package/common/cpp/audioapi/external/armeabi-v7a/libvorbisenc.a +0 -0
  287. package/common/cpp/audioapi/external/armeabi-v7a/libvorbisfile.a +0 -0
  288. package/common/cpp/audioapi/external/iphoneos/libcrypto.a +0 -0
  289. package/common/cpp/audioapi/external/iphoneos/libogg.a +0 -0
  290. package/common/cpp/audioapi/external/iphoneos/libopus.a +0 -0
  291. package/common/cpp/audioapi/external/iphoneos/libopusfile.a +0 -0
  292. package/common/cpp/audioapi/external/iphoneos/libssl.a +0 -0
  293. package/common/cpp/audioapi/external/iphoneos/libvorbis.a +0 -0
  294. package/common/cpp/audioapi/external/iphoneos/libvorbisenc.a +0 -0
  295. package/common/cpp/audioapi/external/iphoneos/libvorbisfile.a +0 -0
  296. package/common/cpp/audioapi/external/iphonesimulator/libcrypto.a +0 -0
  297. package/common/cpp/audioapi/external/iphonesimulator/libogg.a +0 -0
  298. package/common/cpp/audioapi/external/iphonesimulator/libopus.a +0 -0
  299. package/common/cpp/audioapi/external/iphonesimulator/libopusfile.a +0 -0
  300. package/common/cpp/audioapi/external/iphonesimulator/libssl.a +0 -0
  301. package/common/cpp/audioapi/external/iphonesimulator/libvorbis.a +0 -0
  302. package/common/cpp/audioapi/external/iphonesimulator/libvorbisenc.a +0 -0
  303. package/common/cpp/audioapi/external/iphonesimulator/libvorbisfile.a +0 -0
  304. package/common/cpp/audioapi/external/libavcodec.xcframework/Info.plist +0 -44
  305. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64/libavcodec.framework/Info.plist +0 -1
  306. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64/libavcodec.framework/libavcodec +0 -0
  307. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64_x86_64-simulator/libavcodec.framework/Info.plist +0 -1
  308. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64_x86_64-simulator/libavcodec.framework/libavcodec +0 -0
  309. package/common/cpp/audioapi/external/libavformat.xcframework/Info.plist +0 -44
  310. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64/libavformat.framework/Info.plist +0 -1
  311. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64/libavformat.framework/libavformat +0 -0
  312. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64_x86_64-simulator/libavformat.framework/Info.plist +0 -1
  313. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64_x86_64-simulator/libavformat.framework/libavformat +0 -0
  314. package/common/cpp/audioapi/external/libavutil.xcframework/Info.plist +0 -44
  315. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64/libavutil.framework/Info.plist +0 -1
  316. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64/libavutil.framework/libavutil +0 -0
  317. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64_x86_64-simulator/libavutil.framework/Info.plist +0 -1
  318. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64_x86_64-simulator/libavutil.framework/libavutil +0 -0
  319. package/common/cpp/audioapi/external/libswresample.xcframework/Info.plist +0 -44
  320. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64/libswresample.framework/Info.plist +0 -1
  321. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64/libswresample.framework/libswresample +0 -0
  322. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64_x86_64-simulator/libswresample.framework/Info.plist +0 -1
  323. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64_x86_64-simulator/libswresample.framework/libswresample +0 -0
  324. package/common/cpp/audioapi/external/x86/libcrypto.a +0 -0
  325. package/common/cpp/audioapi/external/x86/libogg.a +0 -0
  326. package/common/cpp/audioapi/external/x86/libopus.a +0 -0
  327. package/common/cpp/audioapi/external/x86/libopusfile.a +0 -0
  328. package/common/cpp/audioapi/external/x86/libssl.a +0 -0
  329. package/common/cpp/audioapi/external/x86/libvorbis.a +0 -0
  330. package/common/cpp/audioapi/external/x86/libvorbisenc.a +0 -0
  331. package/common/cpp/audioapi/external/x86/libvorbisfile.a +0 -0
  332. package/common/cpp/audioapi/external/x86_64/libcrypto.a +0 -0
  333. package/common/cpp/audioapi/external/x86_64/libogg.a +0 -0
  334. package/common/cpp/audioapi/external/x86_64/libopus.a +0 -0
  335. package/common/cpp/audioapi/external/x86_64/libopusfile.a +0 -0
  336. package/common/cpp/audioapi/external/x86_64/libssl.a +0 -0
  337. package/common/cpp/audioapi/external/x86_64/libvorbis.a +0 -0
  338. package/common/cpp/audioapi/external/x86_64/libvorbisenc.a +0 -0
  339. package/common/cpp/audioapi/external/x86_64/libvorbisfile.a +0 -0
  340. package/common/cpp/audioapi/libs/ffmpeg/INSTRUCTIONS.md +0 -32
  341. package/common/cpp/audioapi/libs/ffmpeg/create_xcframework.sh +0 -111
  342. package/common/cpp/audioapi/libs/ffmpeg/ffmpeg_setup.sh +0 -391
  343. package/ios/audioapi/ios/core/IOSAudioFileOptions.h +0 -36
  344. package/ios/audioapi/ios/core/IOSAudioFileOptions.mm +0 -140
  345. package/ios/audioapi/ios/core/IOSAudioFileWriter.h +0 -51
  346. package/ios/audioapi/ios/core/IOSAudioFileWriter.mm +0 -223
  347. package/ios/audioapi/ios/core/IOSRecorderCallback.h +0 -57
  348. package/ios/audioapi/ios/core/IOSRecorderCallback.mm +0 -189
  349. package/lib/commonjs/utils/bitEnums.js +0 -33
  350. package/lib/commonjs/utils/bitEnums.js.map +0 -1
  351. package/lib/module/utils/bitEnums.js +0 -27
  352. package/lib/module/utils/bitEnums.js.map +0 -1
  353. package/lib/typescript/utils/bitEnums.d.ts +0 -4
  354. package/lib/typescript/utils/bitEnums.d.ts.map +0 -1
  355. package/src/utils/bitEnums.ts +0 -51
@@ -1,6 +1,7 @@
1
1
  package com.swmansion.audioapi
2
2
 
3
3
  import com.facebook.jni.HybridData
4
+ import com.facebook.react.bridge.LifecycleEventListener
4
5
  import com.facebook.react.bridge.Promise
5
6
  import com.facebook.react.bridge.ReactApplicationContext
6
7
  import com.facebook.react.bridge.ReadableArray
@@ -9,7 +10,6 @@ import com.facebook.react.common.annotations.FrameworkAPI
9
10
  import com.facebook.react.module.annotations.ReactModule
10
11
  import com.facebook.react.turbomodule.core.CallInvokerHolderImpl
11
12
  import com.swmansion.audioapi.system.MediaSessionManager
12
- import com.swmansion.audioapi.system.NativeFileInfo
13
13
  import com.swmansion.audioapi.system.PermissionRequestListener
14
14
  import java.lang.ref.WeakReference
15
15
 
@@ -17,7 +17,8 @@ import java.lang.ref.WeakReference
17
17
  @ReactModule(name = AudioAPIModule.NAME)
18
18
  class AudioAPIModule(
19
19
  reactContext: ReactApplicationContext,
20
- ) : NativeAudioAPIModuleSpec(reactContext) {
20
+ ) : NativeAudioAPIModuleSpec(reactContext),
21
+ LifecycleEventListener {
21
22
  companion object {
22
23
  const val NAME = NativeAudioAPIModuleSpec.NAME
23
24
  }
@@ -39,6 +40,8 @@ class AudioAPIModule(
39
40
  eventBody: Map<String, Any>,
40
41
  )
41
42
 
43
+ private external fun closeAllContexts()
44
+
42
45
  init {
43
46
  try {
44
47
  System.loadLibrary("react-native-audio-api")
@@ -60,12 +63,33 @@ class AudioAPIModule(
60
63
 
61
64
  override fun install(): Boolean {
62
65
  MediaSessionManager.initialize(WeakReference(this), reactContext)
63
- NativeFileInfo.initialize(reactContext)
64
66
  injectJSIBindings()
65
67
 
66
68
  return true
67
69
  }
68
70
 
71
+ override fun onHostResume() {
72
+ // do nothing
73
+ }
74
+
75
+ override fun onHostPause() {
76
+ // do nothing
77
+ }
78
+
79
+ override fun onHostDestroy() {
80
+ closeAllContexts()
81
+ }
82
+
83
+ override fun initialize() {
84
+ reactContext.get()?.addLifecycleEventListener(this)
85
+ }
86
+
87
+ override fun invalidate() {
88
+ closeAllContexts()
89
+ reactContext.get()?.removeLifecycleEventListener(this)
90
+ // think about cleaning up resources, singletons etc.
91
+ }
92
+
69
93
  override fun getDevicePreferredSampleRate(): Double = MediaSessionManager.getDevicePreferredSampleRate()
70
94
 
71
95
  override fun setAudioSessionActivity(
@@ -84,6 +108,10 @@ class AudioAPIModule(
84
108
  // noting to do here
85
109
  }
86
110
 
111
+ override fun disableSessionManagement() {
112
+ // nothing to do here
113
+ }
114
+
87
115
  override fun setLockScreenInfo(info: ReadableMap?) {
88
116
  MediaSessionManager.setLockScreenInfo(info)
89
117
  }
@@ -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,97 +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),
39
- JSI_EXPORT_FUNCTION(AudioRecorderHostObject, getCurrentDuration));
40
- }
41
-
42
- JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, start) {
43
- std::string filePath = audioRecorder_->start();
44
-
45
- return jsi::Value(runtime, jsi::String::createFromUtf8(runtime, filePath));
46
- }
47
-
48
- JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, stop) {
49
- auto [path, size, duration] = audioRecorder_->stop();
50
- auto result = jsi::Object(runtime);
51
-
52
- result.setProperty(
53
- runtime, "path", jsi::String::createFromUtf8(runtime, path));
54
- result.setProperty(runtime, "size", size);
55
- result.setProperty(runtime, "duration", duration);
56
-
57
- return result;
58
- }
59
-
60
- JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, isRecording) {
61
- return jsi::Value(audioRecorder_->isRecording());
34
+ JSI_EXPORT_FUNCTION(AudioRecorderHostObject, disconnect));
62
35
  }
63
36
 
64
- JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, isPaused) {
65
- return jsi::Value(audioRecorder_->isPaused());
66
- }
67
-
68
- JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, enableFileOutput) {
69
- auto options = args[0].getObject(runtime);
70
-
71
- auto sampleRate = static_cast<float>(
72
- options.getProperty(runtime, "sampleRate").getNumber());
73
- auto channelCount =
74
- static_cast<size_t>(options.getProperty(runtime, "channels").getNumber());
75
- auto bitRate =
76
- static_cast<size_t>(options.getProperty(runtime, "bitRate").getNumber());
77
- auto iosFlags =
78
- static_cast<size_t>(options.getProperty(runtime, "ios").getNumber());
79
- auto androidFlags =
80
- static_cast<size_t>(options.getProperty(runtime, "android").getNumber());
81
-
82
- audioRecorder_->enableFileOutput(
83
- sampleRate, channelCount, bitRate, iosFlags, androidFlags);
84
- return jsi::Value::undefined();
85
- }
86
-
87
- JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, disableFileOutput) {
88
- audioRecorder_->disableFileOutput();
89
- return jsi::Value::undefined();
90
- }
91
-
92
- JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, pause) {
93
- audioRecorder_->pause();
94
-
95
- return jsi::Value::undefined();
96
- }
97
-
98
- JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, resume) {
99
- audioRecorder_->resume();
100
- return jsi::Value::undefined();
37
+ JSI_PROPERTY_SETTER_IMPL(AudioRecorderHostObject, onAudioReady) {
38
+ audioRecorder_->setOnAudioReadyCallbackId(
39
+ std::stoull(value.getString(runtime).utf8(runtime)));
101
40
  }
102
41
 
103
42
  JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, connect) {
104
43
  auto adapterNodeHostObject =
105
44
  args[0].getObject(runtime).getHostObject<RecorderAdapterNodeHostObject>(
106
45
  runtime);
107
-
108
46
  audioRecorder_->connect(
109
47
  std::static_pointer_cast<RecorderAdapterNode>(
110
48
  adapterNodeHostObject->node_));
@@ -113,36 +51,19 @@ JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, connect) {
113
51
 
114
52
  JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, disconnect) {
115
53
  audioRecorder_->disconnect();
116
-
117
54
  return jsi::Value::undefined();
118
55
  }
119
56
 
120
- JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, setOnAudioReady) {
121
- auto options = args[0].getObject(runtime);
122
-
123
- auto sampleRate = static_cast<float>(
124
- options.getProperty(runtime, "sampleRate").getNumber());
125
- auto bufferLength = static_cast<size_t>(
126
- options.getProperty(runtime, "bufferLength").getNumber());
127
- auto channelCount = static_cast<size_t>(
128
- options.getProperty(runtime, "channelCount").getNumber());
129
- uint64_t callbackId = std::stoull(options.getProperty(runtime, "callbackId")
130
- .getString(runtime)
131
- .utf8(runtime));
57
+ JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, start) {
58
+ audioRecorder_->start();
132
59
 
133
- audioRecorder_->setOnAudioReadyCallback(
134
- sampleRate, bufferLength, channelCount, callbackId);
135
60
  return jsi::Value::undefined();
136
61
  }
137
62
 
138
- JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, clearOnAudioReady) {
139
- audioRecorder_->clearOnAudioReadyCallback();
140
- return jsi::Value::undefined();
141
- }
63
+ JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, stop) {
64
+ audioRecorder_->stop();
142
65
 
143
- JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, getCurrentDuration) {
144
- double duration = audioRecorder_->getCurrentDuration();
145
- return jsi::Value(duration);
66
+ return jsi::Value::undefined();
146
67
  }
147
68
 
148
69
  } // namespace audioapi
@@ -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,29 +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
- JSI_HOST_FUNCTION_DECL(isPaused);
26
-
27
- JSI_HOST_FUNCTION_DECL(enableFileOutput);
28
- JSI_HOST_FUNCTION_DECL(disableFileOutput);
29
-
30
- JSI_HOST_FUNCTION_DECL(pause);
31
- JSI_HOST_FUNCTION_DECL(resume);
23
+ JSI_PROPERTY_SETTER_DECL(onAudioReady);
32
24
 
33
25
  JSI_HOST_FUNCTION_DECL(connect);
34
26
  JSI_HOST_FUNCTION_DECL(disconnect);
35
-
36
- JSI_HOST_FUNCTION_DECL(setOnAudioReady);
37
- JSI_HOST_FUNCTION_DECL(clearOnAudioReady);
38
-
39
- JSI_HOST_FUNCTION_DECL(getCurrentDuration);
27
+ JSI_HOST_FUNCTION_DECL(start);
28
+ JSI_HOST_FUNCTION_DECL(stop);
40
29
 
41
30
  private:
42
31
  std::shared_ptr<AudioRecorder> audioRecorder_;
43
32
  };
44
-
45
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