react-native-audio-api 0.11.0-alpha.1 → 0.11.0-nightly-9f40b78-20251108

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 (362) 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/AudioContextHostObject.cpp +12 -17
  19. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +18 -0
  20. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +1 -0
  21. package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.cpp +26 -30
  22. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp +1 -1
  23. package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.cpp +47 -0
  24. package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.h +20 -0
  25. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.cpp +18 -97
  26. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +6 -18
  27. package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.cpp +1 -1
  28. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.cpp +1 -1
  29. package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.cpp +1 -1
  30. package/common/cpp/audioapi/HostObjects/utils/AudioStretcherHostObject.cpp +15 -26
  31. package/common/cpp/audioapi/core/AudioNode.h +3 -2
  32. package/common/cpp/audioapi/core/AudioParam.cpp +2 -2
  33. package/common/cpp/audioapi/core/BaseAudioContext.cpp +10 -0
  34. package/common/cpp/audioapi/core/BaseAudioContext.h +2 -0
  35. package/common/cpp/audioapi/core/effects/BiquadFilterNode.cpp +69 -32
  36. package/common/cpp/audioapi/core/effects/BiquadFilterNode.h +37 -1
  37. package/common/cpp/audioapi/core/effects/ConvolverNode.cpp +210 -0
  38. package/common/cpp/audioapi/core/effects/ConvolverNode.h +55 -0
  39. package/common/cpp/audioapi/core/inputs/AudioRecorder.cpp +82 -36
  40. package/common/cpp/audioapi/core/inputs/AudioRecorder.h +31 -52
  41. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +14 -17
  42. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +0 -1
  43. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +7 -0
  44. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +1 -0
  45. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +8 -14
  46. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +0 -1
  47. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +14 -19
  48. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +3 -3
  49. package/common/cpp/audioapi/core/sources/StreamerNode.cpp +64 -64
  50. package/common/cpp/audioapi/core/sources/StreamerNode.h +38 -10
  51. package/common/cpp/audioapi/core/utils/AudioNodeManager.cpp +5 -0
  52. package/common/cpp/audioapi/core/utils/Constants.h +2 -1
  53. package/common/cpp/audioapi/core/utils/worklets/SafeIncludes.h +12 -8
  54. package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.cpp +3 -3
  55. package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.h +1 -1
  56. package/common/cpp/audioapi/dsp/AudioUtils.cpp +1 -1
  57. package/common/cpp/audioapi/dsp/Convolver.cpp +213 -0
  58. package/common/cpp/audioapi/dsp/Convolver.h +45 -0
  59. package/common/cpp/audioapi/dsp/FFT.cpp +0 -26
  60. package/common/cpp/audioapi/dsp/FFT.h +26 -2
  61. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +1 -1
  62. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/avcodec.h +4 -4
  63. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec.h +1 -1
  64. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_desc.h +1 -1
  65. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_id.h +3 -1
  66. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_par.h +2 -2
  67. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/defs.h +3 -0
  68. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/packet.h +1 -1
  69. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/smpte_436m.h +254 -0
  70. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/version.h +1 -1
  71. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/avformat.h +6 -6
  72. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version.h +2 -2
  73. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version_major.h +2 -0
  74. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avassert.h +5 -2
  75. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avutil.h +2 -2
  76. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/channel_layout.h +2 -2
  77. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/csp.h +1 -1
  78. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/dict.h +1 -1
  79. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/ffversion.h +1 -1
  80. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/film_grain_params.h +1 -1
  81. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/frame.h +1 -1
  82. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hdr_dynamic_vivid_metadata.h +3 -3
  83. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext.h +1 -1
  84. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_opencl.h +1 -1
  85. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_qsv.h +0 -1
  86. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_vulkan.h +1 -1
  87. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/iamf.h +2 -2
  88. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/lfg.h +2 -2
  89. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/log.h +2 -2
  90. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/mathematics.h +1 -1
  91. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/opt.h +4 -4
  92. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rational.h +1 -1
  93. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rc4.h +1 -1
  94. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/refstruct.h +1 -1
  95. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/spherical.h +6 -0
  96. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tdrdi.h +1 -1
  97. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tx.h +1 -1
  98. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/version.h +3 -3
  99. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/video_hint.h +1 -1
  100. package/common/cpp/audioapi/external/ffmpeg_include/libswresample/swresample.h +1 -1
  101. package/common/cpp/audioapi/external/ffmpeg_include/libswresample/version.h +1 -1
  102. package/common/cpp/audioapi/jsi/JsiPromise.cpp +33 -56
  103. package/common/cpp/audioapi/jsi/JsiPromise.h +41 -11
  104. package/common/cpp/audioapi/libs/ffmpeg/FFmpegDecoding.cpp +2 -3
  105. package/common/cpp/audioapi/libs/ffmpeg/relinking.md +24 -0
  106. package/common/cpp/audioapi/utils/AlignedAllocator.hpp +50 -0
  107. package/common/cpp/audioapi/utils/AudioBus.cpp +28 -0
  108. package/common/cpp/audioapi/utils/AudioBus.h +3 -0
  109. package/common/cpp/audioapi/utils/ThreadPool.hpp +59 -1
  110. package/common/cpp/test/CMakeLists.txt +19 -14
  111. package/common/cpp/test/src/AudioParamTest.cpp +1 -1
  112. package/common/cpp/test/src/AudioScheduledSourceTest.cpp +134 -0
  113. package/common/cpp/test/src/ConstantSourceTest.cpp +1 -1
  114. package/common/cpp/test/src/GainTest.cpp +1 -1
  115. package/common/cpp/test/src/MockAudioEventHandlerRegistry.h +4 -4
  116. package/common/cpp/test/src/OscillatorTest.cpp +1 -1
  117. package/common/cpp/test/src/StereoPannerTest.cpp +1 -1
  118. package/common/cpp/test/src/biquad/BiquadFilterChromium.cpp +389 -0
  119. package/common/cpp/test/src/biquad/BiquadFilterChromium.h +64 -0
  120. package/common/cpp/test/src/biquad/BiquadFilterTest.cpp +284 -0
  121. package/common/cpp/test/src/biquad/BiquadFilterTest.h +40 -0
  122. package/ios/audioapi/ios/AudioAPIModule.h +2 -1
  123. package/ios/audioapi/ios/AudioAPIModule.mm +34 -9
  124. package/ios/audioapi/ios/core/IOSAudioRecorder.h +10 -28
  125. package/ios/audioapi/ios/core/IOSAudioRecorder.mm +30 -117
  126. package/ios/audioapi/ios/core/NativeAudioRecorder.h +9 -4
  127. package/ios/audioapi/ios/core/NativeAudioRecorder.m +71 -29
  128. package/ios/audioapi/ios/core/utils/AudioDecoder.mm +0 -1
  129. package/ios/audioapi/ios/system/AudioEngine.mm +3 -3
  130. package/ios/audioapi/ios/system/AudioSessionManager.h +2 -0
  131. package/ios/audioapi/ios/system/AudioSessionManager.mm +24 -0
  132. package/ios/audioapi/ios/system/LockScreenManager.h +0 -1
  133. package/ios/audioapi/ios/system/LockScreenManager.mm +6 -19
  134. package/lib/commonjs/api.js +141 -76
  135. package/lib/commonjs/api.js.map +1 -1
  136. package/lib/commonjs/api.web.js +8 -0
  137. package/lib/commonjs/api.web.js.map +1 -1
  138. package/lib/commonjs/core/AudioContext.js +1 -1
  139. package/lib/commonjs/core/AudioContext.js.map +1 -1
  140. package/lib/commonjs/core/AudioRecorder.js +13 -171
  141. package/lib/commonjs/core/AudioRecorder.js.map +1 -1
  142. package/lib/commonjs/core/BaseAudioContext.js +28 -25
  143. package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
  144. package/lib/commonjs/core/ConvolverNode.js +37 -0
  145. package/lib/commonjs/core/ConvolverNode.js.map +1 -0
  146. package/lib/commonjs/core/OfflineAudioContext.js +1 -1
  147. package/lib/commonjs/core/OfflineAudioContext.js.map +1 -1
  148. package/lib/commonjs/specs/NativeAudioAPIModule.js.map +1 -1
  149. package/lib/commonjs/system/AudioManager.js +3 -0
  150. package/lib/commonjs/system/AudioManager.js.map +1 -1
  151. package/lib/commonjs/types.js +0 -46
  152. package/lib/commonjs/types.js.map +1 -1
  153. package/lib/commonjs/utils/index.js +19 -21
  154. package/lib/commonjs/utils/index.js.map +1 -1
  155. package/lib/commonjs/web-core/AudioContext.js +12 -0
  156. package/lib/commonjs/web-core/AudioContext.js.map +1 -1
  157. package/lib/commonjs/web-core/ConvolverNode.js +40 -0
  158. package/lib/commonjs/web-core/ConvolverNode.js.map +1 -0
  159. package/lib/commonjs/web-core/ConvolverNodeOptions.js +6 -0
  160. package/lib/commonjs/web-core/ConvolverNodeOptions.js.map +1 -0
  161. package/lib/commonjs/web-core/OfflineAudioContext.js +12 -0
  162. package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
  163. package/lib/module/api.js +16 -15
  164. package/lib/module/api.js.map +1 -1
  165. package/lib/module/api.web.js +1 -0
  166. package/lib/module/api.web.js.map +1 -1
  167. package/lib/module/core/AudioContext.js +2 -2
  168. package/lib/module/core/AudioContext.js.map +1 -1
  169. package/lib/module/core/AudioRecorder.js +13 -171
  170. package/lib/module/core/AudioRecorder.js.map +1 -1
  171. package/lib/module/core/BaseAudioContext.js +29 -26
  172. package/lib/module/core/BaseAudioContext.js.map +1 -1
  173. package/lib/module/core/ConvolverNode.js +31 -0
  174. package/lib/module/core/ConvolverNode.js.map +1 -0
  175. package/lib/module/core/OfflineAudioContext.js +2 -2
  176. package/lib/module/core/OfflineAudioContext.js.map +1 -1
  177. package/lib/module/specs/NativeAudioAPIModule.js.map +1 -1
  178. package/lib/module/system/AudioManager.js +3 -0
  179. package/lib/module/system/AudioManager.js.map +1 -1
  180. package/lib/module/types.js +1 -45
  181. package/lib/module/types.js.map +1 -1
  182. package/lib/module/utils/index.js +15 -2
  183. package/lib/module/utils/index.js.map +1 -1
  184. package/lib/module/web-core/AudioContext.js +12 -0
  185. package/lib/module/web-core/AudioContext.js.map +1 -1
  186. package/lib/module/web-core/ConvolverNode.js +34 -0
  187. package/lib/module/web-core/ConvolverNode.js.map +1 -0
  188. package/lib/module/web-core/ConvolverNodeOptions.js +4 -0
  189. package/lib/module/web-core/ConvolverNodeOptions.js.map +1 -0
  190. package/lib/module/web-core/OfflineAudioContext.js +12 -0
  191. package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
  192. package/lib/typescript/api.d.ts +19 -17
  193. package/lib/typescript/api.d.ts.map +1 -1
  194. package/lib/typescript/api.web.d.ts +1 -0
  195. package/lib/typescript/api.web.d.ts.map +1 -1
  196. package/lib/typescript/core/AudioContext.d.ts.map +1 -1
  197. package/lib/typescript/core/AudioRecorder.d.ts +7 -62
  198. package/lib/typescript/core/AudioRecorder.d.ts.map +1 -1
  199. package/lib/typescript/core/BaseAudioContext.d.ts +3 -1
  200. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
  201. package/lib/typescript/core/ConvolverNode.d.ts +12 -0
  202. package/lib/typescript/core/ConvolverNode.d.ts.map +1 -0
  203. package/lib/typescript/events/types.d.ts +0 -16
  204. package/lib/typescript/events/types.d.ts.map +1 -1
  205. package/lib/typescript/interfaces.d.ts +9 -42
  206. package/lib/typescript/interfaces.d.ts.map +1 -1
  207. package/lib/typescript/specs/NativeAudioAPIModule.d.ts +1 -0
  208. package/lib/typescript/specs/NativeAudioAPIModule.d.ts.map +1 -1
  209. package/lib/typescript/system/AudioManager.d.ts +1 -0
  210. package/lib/typescript/system/AudioManager.d.ts.map +1 -1
  211. package/lib/typescript/types.d.ts +8 -79
  212. package/lib/typescript/types.d.ts.map +1 -1
  213. package/lib/typescript/utils/index.d.ts +5 -2
  214. package/lib/typescript/utils/index.d.ts.map +1 -1
  215. package/lib/typescript/web-core/AudioContext.d.ts +3 -0
  216. package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
  217. package/lib/typescript/web-core/BaseAudioContext.d.ts +2 -0
  218. package/lib/typescript/web-core/BaseAudioContext.d.ts.map +1 -1
  219. package/lib/typescript/web-core/ConvolverNode.d.ts +11 -0
  220. package/lib/typescript/web-core/ConvolverNode.d.ts.map +1 -0
  221. package/lib/typescript/web-core/ConvolverNodeOptions.d.ts +6 -0
  222. package/lib/typescript/web-core/ConvolverNodeOptions.d.ts.map +1 -0
  223. package/lib/typescript/web-core/OfflineAudioContext.d.ts +3 -0
  224. package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
  225. package/package.json +14 -5
  226. package/scripts/download-prebuilt-binaries.sh +61 -0
  227. package/scripts/rnaa_utils.rb +8 -0
  228. package/scripts/validate-worklets-version.js +28 -0
  229. package/src/api.ts +45 -18
  230. package/src/api.web.ts +1 -0
  231. package/src/core/AudioContext.ts +3 -2
  232. package/src/core/AudioRecorder.ts +24 -211
  233. package/src/core/BaseAudioContext.ts +67 -60
  234. package/src/core/ConvolverNode.ts +35 -0
  235. package/src/core/OfflineAudioContext.ts +2 -2
  236. package/src/events/types.ts +0 -18
  237. package/src/interfaces.ts +16 -52
  238. package/src/specs/NativeAudioAPIModule.ts +1 -0
  239. package/src/system/AudioManager.ts +4 -0
  240. package/src/types.ts +9 -90
  241. package/src/utils/index.ts +22 -2
  242. package/src/web-core/AudioContext.tsx +25 -0
  243. package/src/web-core/BaseAudioContext.tsx +2 -0
  244. package/src/web-core/ConvolverNode.tsx +43 -0
  245. package/src/web-core/ConvolverNodeOptions.tsx +6 -0
  246. package/src/web-core/OfflineAudioContext.tsx +25 -0
  247. package/android/src/main/cpp/audioapi/android/core/utils/AndroidFileWriterBackend.h +0 -37
  248. package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.cpp +0 -187
  249. package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.h +0 -57
  250. package/android/src/main/cpp/audioapi/android/core/utils/FileUtils.h +0 -34
  251. package/android/src/main/cpp/audioapi/android/core/utils/FileUtilts.cpp +0 -133
  252. package/android/src/main/cpp/audioapi/android/core/utils/MiniaudioImplementation.cpp +0 -3
  253. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.cpp +0 -154
  254. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.h +0 -41
  255. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.cpp +0 -429
  256. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.h +0 -113
  257. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.cpp +0 -47
  258. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.h +0 -28
  259. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.cpp +0 -269
  260. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.h +0 -47
  261. package/android/src/main/cpp/audioapi/android/system/NativeFileInfo.hpp +0 -31
  262. package/android/src/main/java/com/swmansion/audioapi/system/NativeFileInfo.kt +0 -18
  263. package/android/src/main/jniLibs/arm64-v8a/libavcodec.so +0 -0
  264. package/android/src/main/jniLibs/arm64-v8a/libavformat.so +0 -0
  265. package/android/src/main/jniLibs/arm64-v8a/libavutil.so +0 -0
  266. package/android/src/main/jniLibs/arm64-v8a/libswresample.so +0 -0
  267. package/android/src/main/jniLibs/armeabi-v7a/libavcodec.so +0 -0
  268. package/android/src/main/jniLibs/armeabi-v7a/libavformat.so +0 -0
  269. package/android/src/main/jniLibs/armeabi-v7a/libavutil.so +0 -0
  270. package/android/src/main/jniLibs/armeabi-v7a/libswresample.so +0 -0
  271. package/android/src/main/jniLibs/x86/libavcodec.so +0 -0
  272. package/android/src/main/jniLibs/x86/libavformat.so +0 -0
  273. package/android/src/main/jniLibs/x86/libavutil.so +0 -0
  274. package/android/src/main/jniLibs/x86/libswresample.so +0 -0
  275. package/android/src/main/jniLibs/x86_64/libavcodec.so +0 -0
  276. package/android/src/main/jniLibs/x86_64/libavformat.so +0 -0
  277. package/android/src/main/jniLibs/x86_64/libavutil.so +0 -0
  278. package/android/src/main/jniLibs/x86_64/libswresample.so +0 -0
  279. package/common/cpp/audioapi/external/arm64-v8a/libcrypto.a +0 -0
  280. package/common/cpp/audioapi/external/arm64-v8a/libogg.a +0 -0
  281. package/common/cpp/audioapi/external/arm64-v8a/libopus.a +0 -0
  282. package/common/cpp/audioapi/external/arm64-v8a/libopusfile.a +0 -0
  283. package/common/cpp/audioapi/external/arm64-v8a/libssl.a +0 -0
  284. package/common/cpp/audioapi/external/arm64-v8a/libvorbis.a +0 -0
  285. package/common/cpp/audioapi/external/arm64-v8a/libvorbisenc.a +0 -0
  286. package/common/cpp/audioapi/external/arm64-v8a/libvorbisfile.a +0 -0
  287. package/common/cpp/audioapi/external/armeabi-v7a/libcrypto.a +0 -0
  288. package/common/cpp/audioapi/external/armeabi-v7a/libogg.a +0 -0
  289. package/common/cpp/audioapi/external/armeabi-v7a/libopus.a +0 -0
  290. package/common/cpp/audioapi/external/armeabi-v7a/libopusfile.a +0 -0
  291. package/common/cpp/audioapi/external/armeabi-v7a/libssl.a +0 -0
  292. package/common/cpp/audioapi/external/armeabi-v7a/libvorbis.a +0 -0
  293. package/common/cpp/audioapi/external/armeabi-v7a/libvorbisenc.a +0 -0
  294. package/common/cpp/audioapi/external/armeabi-v7a/libvorbisfile.a +0 -0
  295. package/common/cpp/audioapi/external/iphoneos/libcrypto.a +0 -0
  296. package/common/cpp/audioapi/external/iphoneos/libogg.a +0 -0
  297. package/common/cpp/audioapi/external/iphoneos/libopus.a +0 -0
  298. package/common/cpp/audioapi/external/iphoneos/libopusfile.a +0 -0
  299. package/common/cpp/audioapi/external/iphoneos/libssl.a +0 -0
  300. package/common/cpp/audioapi/external/iphoneos/libvorbis.a +0 -0
  301. package/common/cpp/audioapi/external/iphoneos/libvorbisenc.a +0 -0
  302. package/common/cpp/audioapi/external/iphoneos/libvorbisfile.a +0 -0
  303. package/common/cpp/audioapi/external/iphonesimulator/libcrypto.a +0 -0
  304. package/common/cpp/audioapi/external/iphonesimulator/libogg.a +0 -0
  305. package/common/cpp/audioapi/external/iphonesimulator/libopus.a +0 -0
  306. package/common/cpp/audioapi/external/iphonesimulator/libopusfile.a +0 -0
  307. package/common/cpp/audioapi/external/iphonesimulator/libssl.a +0 -0
  308. package/common/cpp/audioapi/external/iphonesimulator/libvorbis.a +0 -0
  309. package/common/cpp/audioapi/external/iphonesimulator/libvorbisenc.a +0 -0
  310. package/common/cpp/audioapi/external/iphonesimulator/libvorbisfile.a +0 -0
  311. package/common/cpp/audioapi/external/libavcodec.xcframework/Info.plist +0 -44
  312. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64/libavcodec.framework/Info.plist +0 -1
  313. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64/libavcodec.framework/libavcodec +0 -0
  314. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64_x86_64-simulator/libavcodec.framework/Info.plist +0 -1
  315. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64_x86_64-simulator/libavcodec.framework/libavcodec +0 -0
  316. package/common/cpp/audioapi/external/libavformat.xcframework/Info.plist +0 -44
  317. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64/libavformat.framework/Info.plist +0 -1
  318. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64/libavformat.framework/libavformat +0 -0
  319. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64_x86_64-simulator/libavformat.framework/Info.plist +0 -1
  320. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64_x86_64-simulator/libavformat.framework/libavformat +0 -0
  321. package/common/cpp/audioapi/external/libavutil.xcframework/Info.plist +0 -44
  322. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64/libavutil.framework/Info.plist +0 -1
  323. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64/libavutil.framework/libavutil +0 -0
  324. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64_x86_64-simulator/libavutil.framework/Info.plist +0 -1
  325. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64_x86_64-simulator/libavutil.framework/libavutil +0 -0
  326. package/common/cpp/audioapi/external/libswresample.xcframework/Info.plist +0 -44
  327. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64/libswresample.framework/Info.plist +0 -1
  328. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64/libswresample.framework/libswresample +0 -0
  329. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64_x86_64-simulator/libswresample.framework/Info.plist +0 -1
  330. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64_x86_64-simulator/libswresample.framework/libswresample +0 -0
  331. package/common/cpp/audioapi/external/x86/libcrypto.a +0 -0
  332. package/common/cpp/audioapi/external/x86/libogg.a +0 -0
  333. package/common/cpp/audioapi/external/x86/libopus.a +0 -0
  334. package/common/cpp/audioapi/external/x86/libopusfile.a +0 -0
  335. package/common/cpp/audioapi/external/x86/libssl.a +0 -0
  336. package/common/cpp/audioapi/external/x86/libvorbis.a +0 -0
  337. package/common/cpp/audioapi/external/x86/libvorbisenc.a +0 -0
  338. package/common/cpp/audioapi/external/x86/libvorbisfile.a +0 -0
  339. package/common/cpp/audioapi/external/x86_64/libcrypto.a +0 -0
  340. package/common/cpp/audioapi/external/x86_64/libogg.a +0 -0
  341. package/common/cpp/audioapi/external/x86_64/libopus.a +0 -0
  342. package/common/cpp/audioapi/external/x86_64/libopusfile.a +0 -0
  343. package/common/cpp/audioapi/external/x86_64/libssl.a +0 -0
  344. package/common/cpp/audioapi/external/x86_64/libvorbis.a +0 -0
  345. package/common/cpp/audioapi/external/x86_64/libvorbisenc.a +0 -0
  346. package/common/cpp/audioapi/external/x86_64/libvorbisfile.a +0 -0
  347. package/common/cpp/audioapi/libs/ffmpeg/INSTRUCTIONS.md +0 -32
  348. package/common/cpp/audioapi/libs/ffmpeg/create_xcframework.sh +0 -111
  349. package/common/cpp/audioapi/libs/ffmpeg/ffmpeg_setup.sh +0 -391
  350. package/ios/audioapi/ios/core/IOSAudioFileOptions.h +0 -36
  351. package/ios/audioapi/ios/core/IOSAudioFileOptions.mm +0 -140
  352. package/ios/audioapi/ios/core/IOSAudioFileWriter.h +0 -51
  353. package/ios/audioapi/ios/core/IOSAudioFileWriter.mm +0 -223
  354. package/ios/audioapi/ios/core/IOSRecorderCallback.h +0 -57
  355. package/ios/audioapi/ios/core/IOSRecorderCallback.mm +0 -189
  356. package/lib/commonjs/utils/bitEnums.js +0 -33
  357. package/lib/commonjs/utils/bitEnums.js.map +0 -1
  358. package/lib/module/utils/bitEnums.js +0 -27
  359. package/lib/module/utils/bitEnums.js.map +0 -1
  360. package/lib/typescript/utils/bitEnums.d.ts +0 -4
  361. package/lib/typescript/utils/bitEnums.d.ts.map +0 -1
  362. 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);
@@ -17,12 +17,12 @@ AudioContextHostObject::AudioContextHostObject(
17
17
 
18
18
  JSI_HOST_FUNCTION_IMPL(AudioContextHostObject, close) {
19
19
  auto audioContext = std::static_pointer_cast<AudioContext>(context_);
20
- auto promise = promiseVendor_->createPromise(
21
- [audioContext](const std::shared_ptr<Promise> &promise) {
22
- audioContext->close();
23
-
24
- promise->resolve(
25
- [](jsi::Runtime &runtime) { return jsi::Value::undefined(); });
20
+ auto promise = promiseVendor_->createAsyncPromise(
21
+ [audioContext = std::move(audioContext)]() {
22
+ return [audioContext](jsi::Runtime &runtime) {
23
+ audioContext->close();
24
+ return jsi::Value::undefined();
25
+ };
26
26
  });
27
27
 
28
28
  return promise;
@@ -30,25 +30,20 @@ JSI_HOST_FUNCTION_IMPL(AudioContextHostObject, close) {
30
30
 
31
31
  JSI_HOST_FUNCTION_IMPL(AudioContextHostObject, resume) {
32
32
  auto audioContext = std::static_pointer_cast<AudioContext>(context_);
33
- auto promise = promiseVendor_->createPromise(
34
- [audioContext](const std::shared_ptr<Promise> &promise) {
33
+ auto promise = promiseVendor_->createAsyncPromise(
34
+ [audioContext = std::move(audioContext)]() {
35
35
  auto result = audioContext->resume();
36
-
37
- promise->resolve(
38
- [result](jsi::Runtime &runtime) { return jsi::Value(result); });
36
+ return [result](jsi::Runtime &runtime) { return jsi::Value(result); };
39
37
  });
40
-
41
38
  return promise;
42
39
  }
43
40
 
44
41
  JSI_HOST_FUNCTION_IMPL(AudioContextHostObject, suspend) {
45
42
  auto audioContext = std::static_pointer_cast<AudioContext>(context_);
46
- auto promise = promiseVendor_->createPromise(
47
- [audioContext](const std::shared_ptr<Promise> &promise) {
43
+ auto promise = promiseVendor_->createAsyncPromise(
44
+ [audioContext = std::move(audioContext)]() {
48
45
  auto result = audioContext->suspend();
49
-
50
- promise->resolve(
51
- [result](jsi::Runtime &runtime) { return jsi::Value(result); });
46
+ return [result](jsi::Runtime &runtime) { return jsi::Value(result); };
52
47
  });
53
48
 
54
49
  return promise;
@@ -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
 
@@ -17,49 +17,45 @@ OfflineAudioContextHostObject::OfflineAudioContextHostObject(
17
17
  }
18
18
 
19
19
  JSI_HOST_FUNCTION_IMPL(OfflineAudioContextHostObject, resume) {
20
- auto promise = promiseVendor_->createPromise(
21
- [this](const std::shared_ptr<Promise> &promise) {
22
- auto audioContext =
23
- std::static_pointer_cast<OfflineAudioContext>(context_);
24
- audioContext->resume();
25
- });
20
+ auto audioContext = std::static_pointer_cast<OfflineAudioContext>(context_);
21
+ auto promise = promiseVendor_->createAsyncPromise([audioContext]() {
22
+ audioContext->resume();
23
+ return [](jsi::Runtime &runtime) { return jsi::Value::undefined(); };
24
+ });
26
25
 
27
26
  return promise;
28
27
  }
29
28
 
30
29
  JSI_HOST_FUNCTION_IMPL(OfflineAudioContextHostObject, suspend) {
31
30
  double when = args[0].getNumber();
31
+ auto audioContext = std::static_pointer_cast<OfflineAudioContext>(context_);
32
32
 
33
- auto promise = promiseVendor_->createPromise(
34
- [this, when](const std::shared_ptr<Promise> &promise) {
35
- auto audioContext =
36
- std::static_pointer_cast<OfflineAudioContext>(context_);
37
- OfflineAudioContextSuspendCallback callback = [promise]() {
38
- promise->resolve(
39
- [](jsi::Runtime &runtime) { return jsi::Value::undefined(); });
40
- };
41
- audioContext->suspend(when, callback);
42
- });
33
+ auto promise = promiseVendor_->createAsyncPromise([=](Promise &&promise) {
34
+ OfflineAudioContextSuspendCallback callback = [promise =
35
+ std::move(promise)]() {
36
+ promise.resolve(
37
+ [](jsi::Runtime &runtime) { return jsi::Value::undefined(); });
38
+ };
39
+ audioContext->suspend(when, callback);
40
+ });
43
41
 
44
42
  return promise;
45
43
  }
46
44
 
47
45
  JSI_HOST_FUNCTION_IMPL(OfflineAudioContextHostObject, startRendering) {
48
- auto promise = promiseVendor_->createPromise(
49
- [this](const std::shared_ptr<Promise> &promise) {
50
- auto audioContext =
51
- std::static_pointer_cast<OfflineAudioContext>(context_);
52
-
46
+ auto audioContext = std::static_pointer_cast<OfflineAudioContext>(context_);
47
+ auto promise =
48
+ promiseVendor_->createAsyncPromise([audioContext](Promise &&promise) {
53
49
  OfflineAudioContextResultCallback callback =
54
- [promise](const std::shared_ptr<AudioBuffer> &audioBuffer) -> void {
55
- auto audioBufferHostObject =
56
- std::make_shared<AudioBufferHostObject>(audioBuffer);
57
- promise->resolve([audioBufferHostObject = std::move(
58
- audioBufferHostObject)](jsi::Runtime &runtime) {
59
- return jsi::Object::createFromHostObject(
60
- runtime, audioBufferHostObject);
61
- });
62
- };
50
+ [promise = std::move(promise)](
51
+ const std::shared_ptr<AudioBuffer> &audioBuffer) {
52
+ auto audioBufferHostObject =
53
+ std::make_shared<AudioBufferHostObject>(audioBuffer);
54
+ promise.resolve([audioBufferHostObject](jsi::Runtime &runtime) {
55
+ return jsi::Object::createFromHostObject(
56
+ runtime, audioBufferHostObject);
57
+ });
58
+ };
63
59
 
64
60
  audioContext->startRendering(callback);
65
61
  });
@@ -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