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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (350) hide show
  1. package/README.md +13 -11
  2. package/RNAudioAPI.podspec +20 -15
  3. package/android/build.gradle +33 -3
  4. package/android/src/main/cpp/audioapi/CMakeLists.txt +6 -3
  5. package/android/src/main/cpp/audioapi/android/AudioAPIModule.cpp +5 -0
  6. package/android/src/main/cpp/audioapi/android/AudioAPIModule.h +1 -0
  7. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.cpp +30 -94
  8. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +14 -28
  9. package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +4 -2
  10. package/android/src/main/cpp/audioapi/android/core/NativeAudioRecorder.hpp +9 -9
  11. package/android/src/main/cpp/audioapi/android/core/utils/AudioDecoder.cpp +6 -0
  12. package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +31 -3
  13. package/android/src/main/java/com/swmansion/audioapi/system/AudioFocusListener.kt +21 -9
  14. package/android/src/main/java/com/swmansion/audioapi/system/LockScreenManager.kt +27 -6
  15. package/android/src/main/java/com/swmansion/audioapi/system/MediaNotificationManager.kt +11 -0
  16. package/android/src/oldarch/NativeAudioAPIModuleSpec.java +4 -0
  17. package/common/cpp/audioapi/AudioAPIModuleInstaller.h +30 -2
  18. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +18 -0
  19. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +1 -0
  20. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp +1 -1
  21. package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.cpp +47 -0
  22. package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.h +20 -0
  23. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.cpp +18 -80
  24. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +6 -15
  25. package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.cpp +1 -1
  26. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.cpp +1 -1
  27. package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.cpp +1 -1
  28. package/common/cpp/audioapi/core/AudioNode.h +3 -2
  29. package/common/cpp/audioapi/core/AudioParam.cpp +2 -2
  30. package/common/cpp/audioapi/core/BaseAudioContext.cpp +10 -0
  31. package/common/cpp/audioapi/core/BaseAudioContext.h +2 -0
  32. package/common/cpp/audioapi/core/effects/BiquadFilterNode.cpp +69 -32
  33. package/common/cpp/audioapi/core/effects/BiquadFilterNode.h +37 -1
  34. package/common/cpp/audioapi/core/effects/ConvolverNode.cpp +210 -0
  35. package/common/cpp/audioapi/core/effects/ConvolverNode.h +55 -0
  36. package/common/cpp/audioapi/core/inputs/AudioRecorder.cpp +49 -102
  37. package/common/cpp/audioapi/core/inputs/AudioRecorder.h +28 -46
  38. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +14 -17
  39. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +0 -1
  40. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +8 -14
  41. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +0 -1
  42. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +14 -18
  43. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +2 -2
  44. package/common/cpp/audioapi/core/sources/StreamerNode.cpp +64 -64
  45. package/common/cpp/audioapi/core/sources/StreamerNode.h +38 -10
  46. package/common/cpp/audioapi/core/utils/AudioNodeManager.cpp +5 -0
  47. package/common/cpp/audioapi/core/utils/Constants.h +2 -1
  48. package/common/cpp/audioapi/core/utils/worklets/SafeIncludes.h +12 -8
  49. package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.cpp +3 -3
  50. package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.h +1 -1
  51. package/common/cpp/audioapi/dsp/AudioUtils.cpp +1 -1
  52. package/common/cpp/audioapi/dsp/Convolver.cpp +213 -0
  53. package/common/cpp/audioapi/dsp/Convolver.h +45 -0
  54. package/common/cpp/audioapi/dsp/FFT.cpp +0 -26
  55. package/common/cpp/audioapi/dsp/FFT.h +26 -2
  56. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +1 -1
  57. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/avcodec.h +4 -4
  58. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec.h +1 -1
  59. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_desc.h +1 -1
  60. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_id.h +3 -1
  61. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_par.h +2 -2
  62. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/defs.h +3 -0
  63. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/packet.h +1 -1
  64. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/smpte_436m.h +254 -0
  65. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/version.h +1 -1
  66. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/avformat.h +6 -6
  67. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version.h +2 -2
  68. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version_major.h +2 -0
  69. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avassert.h +5 -2
  70. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avutil.h +2 -2
  71. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/channel_layout.h +2 -2
  72. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/csp.h +1 -1
  73. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/dict.h +1 -1
  74. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/ffversion.h +1 -1
  75. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/film_grain_params.h +1 -1
  76. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/frame.h +1 -1
  77. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hdr_dynamic_vivid_metadata.h +3 -3
  78. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext.h +1 -1
  79. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_opencl.h +1 -1
  80. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_qsv.h +0 -1
  81. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_vulkan.h +1 -1
  82. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/iamf.h +2 -2
  83. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/lfg.h +2 -2
  84. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/log.h +2 -2
  85. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/mathematics.h +1 -1
  86. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/opt.h +4 -4
  87. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rational.h +1 -1
  88. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rc4.h +1 -1
  89. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/refstruct.h +1 -1
  90. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/spherical.h +6 -0
  91. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tdrdi.h +1 -1
  92. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tx.h +1 -1
  93. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/version.h +3 -3
  94. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/video_hint.h +1 -1
  95. package/common/cpp/audioapi/external/ffmpeg_include/libswresample/swresample.h +1 -1
  96. package/common/cpp/audioapi/external/ffmpeg_include/libswresample/version.h +1 -1
  97. package/common/cpp/audioapi/libs/ffmpeg/FFmpegDecoding.cpp +2 -3
  98. package/common/cpp/audioapi/libs/ffmpeg/relinking.md +24 -0
  99. package/common/cpp/audioapi/utils/AlignedAllocator.hpp +50 -0
  100. package/common/cpp/audioapi/utils/AudioBus.cpp +28 -0
  101. package/common/cpp/audioapi/utils/AudioBus.h +3 -0
  102. package/common/cpp/audioapi/utils/ThreadPool.hpp +59 -1
  103. package/common/cpp/test/CMakeLists.txt +19 -14
  104. package/common/cpp/test/src/AudioParamTest.cpp +1 -1
  105. package/common/cpp/test/src/AudioScheduledSourceTest.cpp +134 -0
  106. package/common/cpp/test/src/ConstantSourceTest.cpp +1 -1
  107. package/common/cpp/test/src/GainTest.cpp +1 -1
  108. package/common/cpp/test/src/MockAudioEventHandlerRegistry.h +4 -4
  109. package/common/cpp/test/src/OscillatorTest.cpp +1 -1
  110. package/common/cpp/test/src/StereoPannerTest.cpp +1 -1
  111. package/common/cpp/test/src/biquad/BiquadFilterChromium.cpp +389 -0
  112. package/common/cpp/test/src/biquad/BiquadFilterChromium.h +64 -0
  113. package/common/cpp/test/src/biquad/BiquadFilterTest.cpp +284 -0
  114. package/common/cpp/test/src/biquad/BiquadFilterTest.h +40 -0
  115. package/ios/audioapi/ios/AudioAPIModule.h +2 -1
  116. package/ios/audioapi/ios/AudioAPIModule.mm +13 -0
  117. package/ios/audioapi/ios/core/IOSAudioRecorder.h +9 -18
  118. package/ios/audioapi/ios/core/IOSAudioRecorder.mm +28 -70
  119. package/ios/audioapi/ios/core/NativeAudioRecorder.h +6 -2
  120. package/ios/audioapi/ios/core/NativeAudioRecorder.m +73 -5
  121. package/ios/audioapi/ios/system/AudioEngine.mm +3 -3
  122. package/ios/audioapi/ios/system/AudioSessionManager.h +2 -0
  123. package/ios/audioapi/ios/system/AudioSessionManager.mm +24 -0
  124. package/ios/audioapi/ios/system/LockScreenManager.h +0 -1
  125. package/ios/audioapi/ios/system/LockScreenManager.mm +6 -19
  126. package/lib/commonjs/api.js +141 -76
  127. package/lib/commonjs/api.js.map +1 -1
  128. package/lib/commonjs/api.web.js +8 -0
  129. package/lib/commonjs/api.web.js.map +1 -1
  130. package/lib/commonjs/core/AudioContext.js +1 -1
  131. package/lib/commonjs/core/AudioContext.js.map +1 -1
  132. package/lib/commonjs/core/AudioRecorder.js +12 -157
  133. package/lib/commonjs/core/AudioRecorder.js.map +1 -1
  134. package/lib/commonjs/core/BaseAudioContext.js +28 -25
  135. package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
  136. package/lib/commonjs/core/ConvolverNode.js +37 -0
  137. package/lib/commonjs/core/ConvolverNode.js.map +1 -0
  138. package/lib/commonjs/core/OfflineAudioContext.js +1 -1
  139. package/lib/commonjs/core/OfflineAudioContext.js.map +1 -1
  140. package/lib/commonjs/specs/NativeAudioAPIModule.js.map +1 -1
  141. package/lib/commonjs/system/AudioManager.js +3 -0
  142. package/lib/commonjs/system/AudioManager.js.map +1 -1
  143. package/lib/commonjs/types.js +0 -46
  144. package/lib/commonjs/types.js.map +1 -1
  145. package/lib/commonjs/utils/index.js +19 -21
  146. package/lib/commonjs/utils/index.js.map +1 -1
  147. package/lib/commonjs/web-core/AudioContext.js +12 -0
  148. package/lib/commonjs/web-core/AudioContext.js.map +1 -1
  149. package/lib/commonjs/web-core/ConvolverNode.js +40 -0
  150. package/lib/commonjs/web-core/ConvolverNode.js.map +1 -0
  151. package/lib/commonjs/web-core/ConvolverNodeOptions.js +6 -0
  152. package/lib/commonjs/web-core/ConvolverNodeOptions.js.map +1 -0
  153. package/lib/commonjs/web-core/OfflineAudioContext.js +12 -0
  154. package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
  155. package/lib/module/api.js +16 -15
  156. package/lib/module/api.js.map +1 -1
  157. package/lib/module/api.web.js +1 -0
  158. package/lib/module/api.web.js.map +1 -1
  159. package/lib/module/core/AudioContext.js +2 -2
  160. package/lib/module/core/AudioContext.js.map +1 -1
  161. package/lib/module/core/AudioRecorder.js +12 -157
  162. package/lib/module/core/AudioRecorder.js.map +1 -1
  163. package/lib/module/core/BaseAudioContext.js +29 -26
  164. package/lib/module/core/BaseAudioContext.js.map +1 -1
  165. package/lib/module/core/ConvolverNode.js +31 -0
  166. package/lib/module/core/ConvolverNode.js.map +1 -0
  167. package/lib/module/core/OfflineAudioContext.js +2 -2
  168. package/lib/module/core/OfflineAudioContext.js.map +1 -1
  169. package/lib/module/specs/NativeAudioAPIModule.js.map +1 -1
  170. package/lib/module/system/AudioManager.js +3 -0
  171. package/lib/module/system/AudioManager.js.map +1 -1
  172. package/lib/module/types.js +1 -45
  173. package/lib/module/types.js.map +1 -1
  174. package/lib/module/utils/index.js +15 -2
  175. package/lib/module/utils/index.js.map +1 -1
  176. package/lib/module/web-core/AudioContext.js +12 -0
  177. package/lib/module/web-core/AudioContext.js.map +1 -1
  178. package/lib/module/web-core/ConvolverNode.js +34 -0
  179. package/lib/module/web-core/ConvolverNode.js.map +1 -0
  180. package/lib/module/web-core/ConvolverNodeOptions.js +4 -0
  181. package/lib/module/web-core/ConvolverNodeOptions.js.map +1 -0
  182. package/lib/module/web-core/OfflineAudioContext.js +12 -0
  183. package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
  184. package/lib/typescript/api.d.ts +19 -17
  185. package/lib/typescript/api.d.ts.map +1 -1
  186. package/lib/typescript/api.web.d.ts +1 -0
  187. package/lib/typescript/api.web.d.ts.map +1 -1
  188. package/lib/typescript/core/AudioContext.d.ts.map +1 -1
  189. package/lib/typescript/core/AudioRecorder.d.ts +6 -58
  190. package/lib/typescript/core/AudioRecorder.d.ts.map +1 -1
  191. package/lib/typescript/core/BaseAudioContext.d.ts +3 -1
  192. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
  193. package/lib/typescript/core/ConvolverNode.d.ts +12 -0
  194. package/lib/typescript/core/ConvolverNode.d.ts.map +1 -0
  195. package/lib/typescript/events/types.d.ts +0 -16
  196. package/lib/typescript/events/types.d.ts.map +1 -1
  197. package/lib/typescript/interfaces.d.ts +8 -39
  198. package/lib/typescript/interfaces.d.ts.map +1 -1
  199. package/lib/typescript/specs/NativeAudioAPIModule.d.ts +1 -0
  200. package/lib/typescript/specs/NativeAudioAPIModule.d.ts.map +1 -1
  201. package/lib/typescript/system/AudioManager.d.ts +1 -0
  202. package/lib/typescript/system/AudioManager.d.ts.map +1 -1
  203. package/lib/typescript/types.d.ts +8 -74
  204. package/lib/typescript/types.d.ts.map +1 -1
  205. package/lib/typescript/utils/index.d.ts +5 -2
  206. package/lib/typescript/utils/index.d.ts.map +1 -1
  207. package/lib/typescript/web-core/AudioContext.d.ts +3 -0
  208. package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
  209. package/lib/typescript/web-core/BaseAudioContext.d.ts +2 -0
  210. package/lib/typescript/web-core/BaseAudioContext.d.ts.map +1 -1
  211. package/lib/typescript/web-core/ConvolverNode.d.ts +11 -0
  212. package/lib/typescript/web-core/ConvolverNode.d.ts.map +1 -0
  213. package/lib/typescript/web-core/ConvolverNodeOptions.d.ts +6 -0
  214. package/lib/typescript/web-core/ConvolverNodeOptions.d.ts.map +1 -0
  215. package/lib/typescript/web-core/OfflineAudioContext.d.ts +3 -0
  216. package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
  217. package/package.json +14 -5
  218. package/scripts/download-prebuilt-binaries.sh +61 -0
  219. package/scripts/rnaa_utils.rb +8 -0
  220. package/scripts/validate-worklets-version.js +28 -0
  221. package/src/api.ts +45 -18
  222. package/src/api.web.ts +1 -0
  223. package/src/core/AudioContext.ts +3 -2
  224. package/src/core/AudioRecorder.ts +20 -190
  225. package/src/core/BaseAudioContext.ts +67 -60
  226. package/src/core/ConvolverNode.ts +35 -0
  227. package/src/core/OfflineAudioContext.ts +2 -2
  228. package/src/events/types.ts +0 -18
  229. package/src/interfaces.ts +15 -47
  230. package/src/specs/NativeAudioAPIModule.ts +1 -0
  231. package/src/system/AudioManager.ts +4 -0
  232. package/src/types.ts +9 -84
  233. package/src/utils/index.ts +22 -2
  234. package/src/web-core/AudioContext.tsx +25 -0
  235. package/src/web-core/BaseAudioContext.tsx +2 -0
  236. package/src/web-core/ConvolverNode.tsx +43 -0
  237. package/src/web-core/ConvolverNodeOptions.tsx +6 -0
  238. package/src/web-core/OfflineAudioContext.tsx +25 -0
  239. package/android/src/main/cpp/audioapi/android/core/utils/AndroidFileWriterBackend.h +0 -33
  240. package/android/src/main/cpp/audioapi/android/core/utils/FileUtils.h +0 -34
  241. package/android/src/main/cpp/audioapi/android/core/utils/FileUtilts.cpp +0 -133
  242. package/android/src/main/cpp/audioapi/android/core/utils/MiniaudioImplementation.cpp +0 -3
  243. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.cpp +0 -154
  244. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.h +0 -41
  245. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.cpp +0 -431
  246. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.h +0 -112
  247. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.cpp +0 -47
  248. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.h +0 -28
  249. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.cpp +0 -237
  250. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.h +0 -46
  251. package/android/src/main/cpp/audioapi/android/system/NativeFileInfo.hpp +0 -31
  252. package/android/src/main/java/com/swmansion/audioapi/system/NativeFileInfo.kt +0 -18
  253. package/android/src/main/jniLibs/arm64-v8a/libavcodec.so +0 -0
  254. package/android/src/main/jniLibs/arm64-v8a/libavformat.so +0 -0
  255. package/android/src/main/jniLibs/arm64-v8a/libavutil.so +0 -0
  256. package/android/src/main/jniLibs/arm64-v8a/libswresample.so +0 -0
  257. package/android/src/main/jniLibs/armeabi-v7a/libavcodec.so +0 -0
  258. package/android/src/main/jniLibs/armeabi-v7a/libavformat.so +0 -0
  259. package/android/src/main/jniLibs/armeabi-v7a/libavutil.so +0 -0
  260. package/android/src/main/jniLibs/armeabi-v7a/libswresample.so +0 -0
  261. package/android/src/main/jniLibs/x86/libavcodec.so +0 -0
  262. package/android/src/main/jniLibs/x86/libavformat.so +0 -0
  263. package/android/src/main/jniLibs/x86/libavutil.so +0 -0
  264. package/android/src/main/jniLibs/x86/libswresample.so +0 -0
  265. package/android/src/main/jniLibs/x86_64/libavcodec.so +0 -0
  266. package/android/src/main/jniLibs/x86_64/libavformat.so +0 -0
  267. package/android/src/main/jniLibs/x86_64/libavutil.so +0 -0
  268. package/android/src/main/jniLibs/x86_64/libswresample.so +0 -0
  269. package/common/cpp/audioapi/external/arm64-v8a/libcrypto.a +0 -0
  270. package/common/cpp/audioapi/external/arm64-v8a/libogg.a +0 -0
  271. package/common/cpp/audioapi/external/arm64-v8a/libopus.a +0 -0
  272. package/common/cpp/audioapi/external/arm64-v8a/libopusfile.a +0 -0
  273. package/common/cpp/audioapi/external/arm64-v8a/libssl.a +0 -0
  274. package/common/cpp/audioapi/external/arm64-v8a/libvorbis.a +0 -0
  275. package/common/cpp/audioapi/external/arm64-v8a/libvorbisenc.a +0 -0
  276. package/common/cpp/audioapi/external/arm64-v8a/libvorbisfile.a +0 -0
  277. package/common/cpp/audioapi/external/armeabi-v7a/libcrypto.a +0 -0
  278. package/common/cpp/audioapi/external/armeabi-v7a/libogg.a +0 -0
  279. package/common/cpp/audioapi/external/armeabi-v7a/libopus.a +0 -0
  280. package/common/cpp/audioapi/external/armeabi-v7a/libopusfile.a +0 -0
  281. package/common/cpp/audioapi/external/armeabi-v7a/libssl.a +0 -0
  282. package/common/cpp/audioapi/external/armeabi-v7a/libvorbis.a +0 -0
  283. package/common/cpp/audioapi/external/armeabi-v7a/libvorbisenc.a +0 -0
  284. package/common/cpp/audioapi/external/armeabi-v7a/libvorbisfile.a +0 -0
  285. package/common/cpp/audioapi/external/iphoneos/libcrypto.a +0 -0
  286. package/common/cpp/audioapi/external/iphoneos/libogg.a +0 -0
  287. package/common/cpp/audioapi/external/iphoneos/libopus.a +0 -0
  288. package/common/cpp/audioapi/external/iphoneos/libopusfile.a +0 -0
  289. package/common/cpp/audioapi/external/iphoneos/libssl.a +0 -0
  290. package/common/cpp/audioapi/external/iphoneos/libvorbis.a +0 -0
  291. package/common/cpp/audioapi/external/iphoneos/libvorbisenc.a +0 -0
  292. package/common/cpp/audioapi/external/iphoneos/libvorbisfile.a +0 -0
  293. package/common/cpp/audioapi/external/iphonesimulator/libcrypto.a +0 -0
  294. package/common/cpp/audioapi/external/iphonesimulator/libogg.a +0 -0
  295. package/common/cpp/audioapi/external/iphonesimulator/libopus.a +0 -0
  296. package/common/cpp/audioapi/external/iphonesimulator/libopusfile.a +0 -0
  297. package/common/cpp/audioapi/external/iphonesimulator/libssl.a +0 -0
  298. package/common/cpp/audioapi/external/iphonesimulator/libvorbis.a +0 -0
  299. package/common/cpp/audioapi/external/iphonesimulator/libvorbisenc.a +0 -0
  300. package/common/cpp/audioapi/external/iphonesimulator/libvorbisfile.a +0 -0
  301. package/common/cpp/audioapi/external/libavcodec.xcframework/Info.plist +0 -44
  302. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64/libavcodec.framework/Info.plist +0 -1
  303. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64/libavcodec.framework/libavcodec +0 -0
  304. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64_x86_64-simulator/libavcodec.framework/Info.plist +0 -1
  305. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64_x86_64-simulator/libavcodec.framework/libavcodec +0 -0
  306. package/common/cpp/audioapi/external/libavformat.xcframework/Info.plist +0 -44
  307. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64/libavformat.framework/Info.plist +0 -1
  308. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64/libavformat.framework/libavformat +0 -0
  309. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64_x86_64-simulator/libavformat.framework/Info.plist +0 -1
  310. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64_x86_64-simulator/libavformat.framework/libavformat +0 -0
  311. package/common/cpp/audioapi/external/libavutil.xcframework/Info.plist +0 -44
  312. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64/libavutil.framework/Info.plist +0 -1
  313. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64/libavutil.framework/libavutil +0 -0
  314. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64_x86_64-simulator/libavutil.framework/Info.plist +0 -1
  315. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64_x86_64-simulator/libavutil.framework/libavutil +0 -0
  316. package/common/cpp/audioapi/external/libswresample.xcframework/Info.plist +0 -44
  317. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64/libswresample.framework/Info.plist +0 -1
  318. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64/libswresample.framework/libswresample +0 -0
  319. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64_x86_64-simulator/libswresample.framework/Info.plist +0 -1
  320. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64_x86_64-simulator/libswresample.framework/libswresample +0 -0
  321. package/common/cpp/audioapi/external/x86/libcrypto.a +0 -0
  322. package/common/cpp/audioapi/external/x86/libogg.a +0 -0
  323. package/common/cpp/audioapi/external/x86/libopus.a +0 -0
  324. package/common/cpp/audioapi/external/x86/libopusfile.a +0 -0
  325. package/common/cpp/audioapi/external/x86/libssl.a +0 -0
  326. package/common/cpp/audioapi/external/x86/libvorbis.a +0 -0
  327. package/common/cpp/audioapi/external/x86/libvorbisenc.a +0 -0
  328. package/common/cpp/audioapi/external/x86/libvorbisfile.a +0 -0
  329. package/common/cpp/audioapi/external/x86_64/libcrypto.a +0 -0
  330. package/common/cpp/audioapi/external/x86_64/libogg.a +0 -0
  331. package/common/cpp/audioapi/external/x86_64/libopus.a +0 -0
  332. package/common/cpp/audioapi/external/x86_64/libopusfile.a +0 -0
  333. package/common/cpp/audioapi/external/x86_64/libssl.a +0 -0
  334. package/common/cpp/audioapi/external/x86_64/libvorbis.a +0 -0
  335. package/common/cpp/audioapi/external/x86_64/libvorbisenc.a +0 -0
  336. package/common/cpp/audioapi/external/x86_64/libvorbisfile.a +0 -0
  337. package/common/cpp/audioapi/libs/ffmpeg/INSTRUCTIONS.md +0 -32
  338. package/common/cpp/audioapi/libs/ffmpeg/create_xcframework.sh +0 -111
  339. package/common/cpp/audioapi/libs/ffmpeg/ffmpeg_setup.sh +0 -391
  340. package/ios/audioapi/ios/core/IOSAudioFileOptions.h +0 -35
  341. package/ios/audioapi/ios/core/IOSAudioFileOptions.mm +0 -135
  342. package/ios/audioapi/ios/core/IOSAudioFileWriter.h +0 -38
  343. package/ios/audioapi/ios/core/IOSAudioFileWriter.mm +0 -187
  344. package/lib/commonjs/utils/bitEnums.js +0 -33
  345. package/lib/commonjs/utils/bitEnums.js.map +0 -1
  346. package/lib/module/utils/bitEnums.js +0 -27
  347. package/lib/module/utils/bitEnums.js.map +0 -1
  348. package/lib/typescript/utils/bitEnums.d.ts +0 -4
  349. package/lib/typescript/utils/bitEnums.d.ts.map +0 -1
  350. package/src/utils/bitEnums.ts +0 -51
@@ -1,112 +0,0 @@
1
- #pragma once
2
-
3
- extern "C" {
4
- #include <libavutil/opt.h>
5
- #include <libavcodec/avcodec.h>
6
- #include <libavutil/audio_fifo.h>
7
- #include <libavformat/avformat.h>
8
- #include <libswresample/swresample.h>
9
- #include <libavutil/channel_layout.h>
10
- }
11
-
12
- #include <audioapi/android/core/utils/AndroidFileWriterBackend.h>
13
-
14
- #include <string>
15
- #include <memory>
16
-
17
- namespace audioapi {
18
-
19
- class FFmpegAudioFileOptions;
20
-
21
- struct AVCodecContextDTOR {
22
- void operator()(AVCodecContext* ctx) const {
23
- if (ctx) {
24
- avcodec_free_context(&ctx);
25
- }
26
- }
27
- };
28
-
29
- struct AVFormatContextDTOR {
30
- void operator()(AVFormatContext* ctx) const {
31
- if (ctx) {
32
- avformat_free_context(ctx);
33
- }
34
- }
35
- };
36
-
37
- struct AVFrameDTOR {
38
- void operator()(AVFrame* frame) const {
39
- if (frame) {
40
- av_frame_free(&frame);
41
- }
42
- }
43
- };
44
-
45
- struct AVPacketDTOR {
46
- void operator()(AVPacket* packet) const {
47
- if (packet) {
48
- av_packet_free(&packet);
49
- }
50
- }
51
- };
52
-
53
- struct SwrContextDTOR {
54
- void operator()(SwrContext* ctx) const {
55
- if (ctx) {
56
- swr_free(&ctx);
57
- }
58
- }
59
- };
60
-
61
- struct AVAudioFifoDTOR {
62
- void operator()(AVAudioFifo* fifo) const {
63
- if (fifo) {
64
- av_audio_fifo_free(fifo);
65
- }
66
- }
67
- };
68
-
69
- using AVCodecContextPtr = std::unique_ptr<AVCodecContext, AVCodecContextDTOR>;
70
- using AVFormatContextPtr = std::unique_ptr<AVFormatContext, AVFormatContextDTOR>;
71
- using AVFramePtr = std::unique_ptr<AVFrame, AVFrameDTOR>;
72
- using AVPacketPtr = std::unique_ptr<AVPacket, AVPacketDTOR>;
73
- using SwrContextPtr = std::unique_ptr<SwrContext, SwrContextDTOR>;
74
- using AVAudioFifoPtr = std::unique_ptr<AVAudioFifo, AVAudioFifoDTOR>;
75
-
76
- class FFmpegAudioFileWriter : public AndroidFileWriterBackend {
77
- public:
78
- FFmpegAudioFileWriter(
79
- float sampleRate,
80
- size_t channelCount,
81
- size_t bitRate,
82
- size_t androidFlags);
83
- ~FFmpegAudioFileWriter() override;
84
-
85
- void openFile(int32_t streamSampleRate, int32_t streamChannelCount, int32_t streamMaxBufferSize) override;
86
- std::string closeFile() override;
87
-
88
- bool writeAudioData(void *data, int numFrames) override;
89
-
90
- private:
91
- std::shared_ptr<FFmpegAudioFileOptions> fileOptions_;
92
-
93
- std::atomic<bool> isFileOpen_{false};
94
- std::atomic<bool> isConverterRequired_{false};
95
-
96
- AVCodecContextPtr encoderCtx_{nullptr};
97
- AVFormatContextPtr formatCtx_{nullptr};
98
- SwrContextPtr resampleCtx_{nullptr};
99
- AVPacketPtr packet_{nullptr};
100
- AVFramePtr frame_{nullptr};
101
- AVStream* stream_{nullptr};
102
- AVAudioFifoPtr audioFifo_{nullptr};
103
- int64_t nextPts_;
104
-
105
- bool initializeConverterIfNeeded();
106
- bool initializeEncoder();
107
-
108
- bool isFileOpen();
109
- bool isConverterRequired();
110
- };
111
-
112
- } // namespace audioapi
@@ -1,47 +0,0 @@
1
-
2
- #include <audioapi/android/core/utils/FileUtils.h>
3
- #include <audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.h>
4
-
5
- namespace audioapi {
6
-
7
- MiniAudioFileOptions::MiniAudioFileOptions(
8
- float sampleRate,
9
- size_t channelCount,
10
- size_t bitRate,
11
- size_t flags)
12
- : sampleRate_(sampleRate), channelCount_(channelCount), flags_(flags) {};
13
-
14
- ma_encoding_format MiniAudioFileOptions::getFormat() const {
15
- return ma_encoding_format_wav;
16
- }
17
-
18
- std::string MiniAudioFileOptions::getFilePath(
19
- const std::string &baseFileName) const {
20
- return android::fileutils::getFilePath(
21
- android::fileutils::directoryFromFlags(flags_), baseFileName, "wav");
22
- }
23
-
24
- float MiniAudioFileOptions::getSampleRate() const {
25
- return sampleRate_;
26
- }
27
-
28
- size_t MiniAudioFileOptions::getChannelCount() const {
29
- return channelCount_;
30
- }
31
-
32
- ma_format MiniAudioFileOptions::getDataFormat() const {
33
- android::fileutils::BitDepth bitDepth =
34
- android::fileutils::bitDepthFromFlags(flags_);
35
- switch (bitDepth) {
36
- case android::fileutils::BitDepth::BIT_16:
37
- return ma_format_s16;
38
- case android::fileutils::BitDepth::BIT_24:
39
- return ma_format_s24;
40
- case android::fileutils::BitDepth::BIT_32:
41
- return ma_format_f32;
42
- default:
43
- return ma_format_f32;
44
- }
45
- }
46
-
47
- } // namespace audioapi
@@ -1,28 +0,0 @@
1
- #pragma once
2
-
3
- #include <audioapi/libs/miniaudio/miniaudio.h>
4
- #include <cstddef>
5
- #include <cstdint>
6
- #include <string>
7
-
8
- namespace audioapi {
9
-
10
- class MiniAudioFileOptions {
11
- public:
12
- MiniAudioFileOptions(float sampleRate, size_t channelCount, size_t bitRate, size_t flags);
13
- ~MiniAudioFileOptions() = default;
14
-
15
- ma_encoding_format getFormat() const;
16
- std::string getFilePath(const std::string &baseFileName) const;
17
-
18
- float getSampleRate() const;
19
- size_t getChannelCount() const;
20
- ma_format getDataFormat() const;
21
-
22
- private:
23
- float sampleRate_;
24
- size_t channelCount_;
25
- size_t flags_;
26
- };
27
-
28
- } // namespace audioapi
@@ -1,237 +0,0 @@
1
- #include <android/log.h>
2
- #include <audioapi/android/core/utils/AndroidFileWriterBackend.h>
3
- #include <audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.h>
4
- #include <audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.h>
5
- #include <audioapi/libs/miniaudio/miniaudio.h>
6
-
7
- namespace audioapi {
8
-
9
- MiniAudioFileWriter::MiniAudioFileWriter(
10
- float sampleRate,
11
- size_t channelCount,
12
- size_t bitRate,
13
- size_t androidFlags)
14
- : AndroidFileWriterBackend(
15
- sampleRate,
16
- channelCount,
17
- bitRate,
18
- androidFlags) {
19
- fileOptions_ = std::make_shared<MiniAudioFileOptions>(
20
- sampleRate, channelCount, bitRate, androidFlags);
21
- }
22
-
23
- MiniAudioFileWriter::~MiniAudioFileWriter() {
24
- isFileOpen_.store(false);
25
- fileOptions_.reset();
26
-
27
- if (encoder_ != nullptr) {
28
- ma_encoder_uninit(encoder_.get());
29
- encoder_.reset();
30
- }
31
-
32
- if (converter_ != nullptr) {
33
- ma_data_converter_uninit(converter_.get(), NULL);
34
- converter_.reset();
35
- }
36
-
37
- if (processingBuffer_ != nullptr) {
38
- ma_free(processingBuffer_, NULL);
39
- processingBuffer_ = nullptr;
40
- processingBufferLength_ = 0;
41
- }
42
- }
43
-
44
- void MiniAudioFileWriter::openFile(
45
- int32_t streamSampleRate,
46
- int32_t streamChannelCount,
47
- int32_t streamMaxBufferSize) {
48
- streamSampleRate_ = streamSampleRate;
49
- streamChannelCount_ = streamChannelCount;
50
- streamMaxBufferSize_ = streamMaxBufferSize;
51
- bool success = false;
52
-
53
- isConverterRequired_.store(
54
- (streamSampleRate_ != fileOptions_->getSampleRate()) ||
55
- (streamChannelCount_ != fileOptions_->getChannelCount()) ||
56
- (fileOptions_->getDataFormat() != ma_format_f32));
57
-
58
- success = initializeConverterIfNeeded();
59
-
60
- if (!success) {
61
- return;
62
- }
63
-
64
- success = initializeEncoder();
65
-
66
- if (!success) {
67
- return;
68
- }
69
-
70
- isFileOpen_.store(true);
71
- }
72
-
73
- std::string MiniAudioFileWriter::closeFile() {
74
- if (!isFileOpen()) {
75
- return "";
76
- }
77
-
78
- isFileOpen_.store(false);
79
-
80
- if (encoder_ != nullptr) {
81
- ma_encoder_uninit(encoder_.get());
82
- encoder_.reset();
83
- }
84
-
85
- if (converter_ != nullptr) {
86
- ma_data_converter_uninit(converter_.get(), NULL);
87
- converter_.reset();
88
- }
89
-
90
- if (processingBuffer_ != nullptr) {
91
- ma_free(processingBuffer_, NULL);
92
- processingBuffer_ = nullptr;
93
- processingBufferLength_ = 0;
94
- }
95
-
96
- std::string closedFilePath = filePath_;
97
- filePath_ = "";
98
-
99
- return closedFilePath;
100
- }
101
-
102
- bool MiniAudioFileWriter::writeAudioData(void *data, int numFrames) {
103
- ma_uint64 framesWritten = 0;
104
- ma_result result;
105
-
106
- if (!isFileOpen()) {
107
- return false;
108
- }
109
-
110
- if (!isConverterRequired()) {
111
- result = ma_encoder_write_pcm_frames(
112
- encoder_.get(), data, numFrames, &framesWritten);
113
-
114
- __android_log_print(
115
- ANDROID_LOG_DEBUG,
116
- "MiniAudioFileWriter",
117
- "Writing %llu frames without conversion to file: %s",
118
- framesWritten,
119
- filePath_.c_str());
120
-
121
- if (result != MA_SUCCESS) {
122
- __android_log_print(
123
- ANDROID_LOG_ERROR,
124
- "MiniAudioFileWriter",
125
- "Failed to write audio data to file: %s",
126
- filePath_.c_str());
127
- }
128
-
129
- return result == MA_SUCCESS;
130
- }
131
-
132
- ma_uint64 convertedFrameCount = convertBuffer(data, numFrames);
133
-
134
- result = ma_encoder_write_pcm_frames(
135
- encoder_.get(), processingBuffer_, convertedFrameCount, &framesWritten);
136
-
137
- if (result != MA_SUCCESS) {
138
- __android_log_print(
139
- ANDROID_LOG_ERROR,
140
- "MiniAudioFileWriter",
141
- "Failed to write converted audio data to file: %s",
142
- filePath_.c_str());
143
- }
144
-
145
- return result == MA_SUCCESS;
146
- }
147
-
148
- ma_uint64 MiniAudioFileWriter::convertBuffer(void *data, int numFrames) {
149
- ma_uint64 inputFrameCount = numFrames;
150
- ma_uint64 outputFrameCount = 0;
151
-
152
- ma_data_converter_get_expected_output_frame_count(
153
- converter_.get(), inputFrameCount, &outputFrameCount);
154
-
155
- ma_data_converter_process_pcm_frames(
156
- converter_.get(),
157
- data,
158
- &inputFrameCount,
159
- processingBuffer_,
160
- &outputFrameCount);
161
-
162
- return outputFrameCount;
163
- }
164
-
165
- bool MiniAudioFileWriter::initializeConverterIfNeeded() {
166
- if (!isConverterRequired_) {
167
- return true;
168
- }
169
-
170
- ma_result result;
171
-
172
- ma_data_converter_config converterConfig = ma_data_converter_config_init(
173
- ma_format_f32,
174
- fileOptions_->getDataFormat(),
175
- streamChannelCount_,
176
- fileOptions_->getChannelCount(),
177
- streamSampleRate_,
178
- fileOptions_->getSampleRate());
179
-
180
- converter_ = std::make_unique<ma_data_converter>();
181
- result = ma_data_converter_init(&converterConfig, NULL, converter_.get());
182
-
183
- if (result != MA_SUCCESS) {
184
- __android_log_print(
185
- ANDROID_LOG_ERROR,
186
- "MiniAudioFileWriter",
187
- "Failed to initialize miniaudio data converter for file: %s",
188
- filePath_.c_str());
189
- return false;
190
- }
191
-
192
- ma_data_converter_get_expected_output_frame_count(
193
- converter_.get(), streamMaxBufferSize_, &processingBufferLength_);
194
-
195
- processingBuffer_ = ma_malloc(
196
- processingBufferLength_ * fileOptions_->getChannelCount() *
197
- ma_get_bytes_per_sample(fileOptions_->getDataFormat()),
198
- NULL);
199
-
200
- return true;
201
- }
202
-
203
- bool MiniAudioFileWriter::initializeEncoder() {
204
- filePath_ = fileOptions_->getFilePath("audio");
205
-
206
- ma_result result;
207
-
208
- ma_encoder_config config = ma_encoder_config_init(
209
- fileOptions_->getFormat(),
210
- fileOptions_->getDataFormat(),
211
- fileOptions_->getChannelCount(),
212
- fileOptions_->getSampleRate());
213
-
214
- encoder_ = std::make_unique<ma_encoder>();
215
- result = ma_encoder_init_file(filePath_.c_str(), &config, encoder_.get());
216
-
217
- if (result != MA_SUCCESS) {
218
- __android_log_print(
219
- ANDROID_LOG_ERROR,
220
- "MiniAudioFileWriter",
221
- "Failed to initialize miniaudio encoder for file: %s",
222
- filePath_.c_str());
223
- return false;
224
- }
225
-
226
- return true;
227
- }
228
-
229
- bool MiniAudioFileWriter::isFileOpen() {
230
- return isFileOpen_.load();
231
- }
232
-
233
- bool MiniAudioFileWriter::isConverterRequired() {
234
- return isConverterRequired_.load();
235
- }
236
-
237
- } // namespace audioapi
@@ -1,46 +0,0 @@
1
- #pragma once
2
-
3
- #include <audioapi/android/core/utils/AndroidFileWriterBackend.h>
4
- #include <audioapi/libs/miniaudio/miniaudio.h>
5
-
6
- #include <string>
7
- #include <memory>
8
-
9
- namespace audioapi {
10
-
11
- class MiniAudioFileOptions;
12
-
13
- class MiniAudioFileWriter : public AndroidFileWriterBackend {
14
- public:
15
- MiniAudioFileWriter(
16
- float sampleRate,
17
- size_t channelCount,
18
- size_t bitRate,
19
- size_t androidFlags);
20
- ~MiniAudioFileWriter() override;
21
-
22
- void openFile(int32_t streamSampleRate, int32_t streamChannelCount, int32_t streamMaxBufferSize) override;
23
- std::string closeFile() override;
24
-
25
- bool writeAudioData(void *data, int numFrames) override;
26
-
27
- private:
28
- std::shared_ptr<MiniAudioFileOptions> fileOptions_;
29
-
30
- std::atomic<bool> isFileOpen_{false};
31
- std::atomic<bool> isConverterRequired_{false};
32
-
33
- std::unique_ptr<ma_encoder> encoder_{nullptr};
34
- std::unique_ptr<ma_data_converter> converter_{nullptr};
35
- void *processingBuffer_{nullptr};
36
- ma_uint64 processingBufferLength_{0};
37
-
38
- bool initializeConverterIfNeeded();
39
- bool initializeEncoder();
40
- ma_uint64 convertBuffer(void *data, int numFrames);
41
-
42
- bool isFileOpen();
43
- bool isConverterRequired();
44
- };
45
-
46
- } // namespace audioapi
@@ -1,31 +0,0 @@
1
- #pragma once
2
-
3
- #include <fbjni/fbjni.h>
4
- #include <react/jni/CxxModuleWrapper.h>
5
- #include <react/jni/JMessageQueueThread.h>
6
- #include <memory>
7
- #include <utility>
8
- #include <unordered_map>
9
-
10
- namespace audioapi {
11
-
12
- using namespace facebook;
13
- using namespace react;
14
-
15
- class NativeFileInfo : public jni::JavaClass<NativeFileInfo> {
16
- public:
17
- static auto constexpr kJavaDescriptor =
18
- "Lcom/swmansion/audioapi/system/NativeFileInfo;";
19
-
20
- static std::string getFilesDir() {
21
- static const auto method = javaClassStatic()->getStaticMethod<jni::JString()>("getFilesDir");
22
- return method(javaClassStatic())->toStdString();
23
- }
24
-
25
- static std::string getCacheDir() {
26
- static const auto method = javaClassStatic()->getStaticMethod<jni::JString()>("getCacheDir");
27
- return method(javaClassStatic())->toStdString();
28
- }
29
- };
30
-
31
- }
@@ -1,18 +0,0 @@
1
- package com.swmansion.audioapi.system
2
-
3
- import com.facebook.react.bridge.ReactApplicationContext
4
- import java.lang.ref.WeakReference
5
-
6
- object NativeFileInfo {
7
- private lateinit var reactContext: WeakReference<ReactApplicationContext>
8
-
9
- fun initialize(reactContext: WeakReference<ReactApplicationContext>) {
10
- this.reactContext = reactContext
11
- }
12
-
13
- @JvmStatic
14
- fun getFilesDir(): String = reactContext.get()?.filesDir?.absolutePath ?: ""
15
-
16
- @JvmStatic
17
- fun getCacheDir(): String = reactContext.get()?.cacheDir?.absolutePath ?: ""
18
- }