react-native-audio-api 0.11.0-alpha.1 → 0.11.0-alpha.11

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 (623) hide show
  1. package/README.md +13 -11
  2. package/RNAudioAPI.podspec +25 -18
  3. package/android/build.gradle +41 -5
  4. package/android/src/main/cpp/audioapi/CMakeLists.txt +6 -3
  5. package/android/src/main/cpp/audioapi/android/AudioAPIModule.cpp +10 -16
  6. package/android/src/main/cpp/audioapi/android/OnLoad.cpp +1 -2
  7. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.cpp +315 -84
  8. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +23 -23
  9. package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +13 -20
  10. package/android/src/main/cpp/audioapi/android/core/utils/AndroidFileWriterBackend.h +14 -18
  11. package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.cpp +72 -89
  12. package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.h +12 -23
  13. package/android/src/main/cpp/audioapi/android/core/utils/AudioDecoder.cpp +46 -58
  14. package/android/src/main/cpp/audioapi/android/core/utils/FileOptions.cpp +83 -0
  15. package/android/src/main/cpp/audioapi/android/core/utils/FileOptions.h +22 -0
  16. package/android/src/main/cpp/audioapi/android/core/utils/MiniaudioImplementation.cpp +5 -0
  17. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.cpp +363 -299
  18. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.h +48 -91
  19. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/ptrs.hpp +56 -0
  20. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/utils.cpp +114 -0
  21. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/utils.h +34 -0
  22. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.cpp +132 -105
  23. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.h +9 -16
  24. package/android/src/main/cpp/audioapi/android/system/NativeFileInfo.hpp +2 -1
  25. package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +189 -14
  26. package/android/src/main/java/com/swmansion/audioapi/core/NativeAudioPlayer.kt +10 -8
  27. package/android/src/main/java/com/swmansion/audioapi/core/NativeAudioRecorder.kt +10 -8
  28. package/android/src/main/java/com/swmansion/audioapi/system/AudioFocusListener.kt +5 -2
  29. package/android/src/main/java/com/swmansion/audioapi/system/CentralizedForegroundService.kt +128 -0
  30. package/android/src/main/java/com/swmansion/audioapi/system/ForegroundServiceManager.kt +116 -0
  31. package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionManager.kt +115 -107
  32. package/android/src/main/java/com/swmansion/audioapi/system/PermissionRequestListener.kt +2 -1
  33. package/android/src/main/java/com/swmansion/audioapi/system/notification/BaseNotification.kt +47 -0
  34. package/android/src/main/java/com/swmansion/audioapi/system/notification/NotificationRegistry.kt +191 -0
  35. package/android/src/main/java/com/swmansion/audioapi/system/notification/PlaybackNotification.kt +669 -0
  36. package/android/src/main/java/com/swmansion/audioapi/system/notification/PlaybackNotificationReceiver.kt +33 -0
  37. package/android/src/main/java/com/swmansion/audioapi/system/notification/RecordingNotification.kt +303 -0
  38. package/android/src/main/java/com/swmansion/audioapi/system/notification/RecordingNotificationReceiver.kt +45 -0
  39. package/android/src/main/java/com/swmansion/audioapi/system/notification/SimpleNotification.kt +119 -0
  40. package/android/src/main/jniLibs/arm64-v8a/libavcodec.so +0 -0
  41. package/android/src/main/jniLibs/arm64-v8a/libavformat.so +0 -0
  42. package/android/src/main/jniLibs/arm64-v8a/libavutil.so +0 -0
  43. package/android/src/main/jniLibs/arm64-v8a/libswresample.so +0 -0
  44. package/android/src/main/jniLibs/armeabi-v7a/libavcodec.so +0 -0
  45. package/android/src/main/jniLibs/armeabi-v7a/libavformat.so +0 -0
  46. package/android/src/main/jniLibs/armeabi-v7a/libavutil.so +0 -0
  47. package/android/src/main/jniLibs/armeabi-v7a/libswresample.so +0 -0
  48. package/android/src/main/jniLibs/x86/libavcodec.so +0 -0
  49. package/android/src/main/jniLibs/x86/libavformat.so +0 -0
  50. package/android/src/main/jniLibs/x86/libavutil.so +0 -0
  51. package/android/src/main/jniLibs/x86/libswresample.so +0 -0
  52. package/android/src/main/jniLibs/x86_64/libavcodec.so +0 -0
  53. package/android/src/main/jniLibs/x86_64/libavformat.so +0 -0
  54. package/android/src/main/jniLibs/x86_64/libavutil.so +0 -0
  55. package/android/src/main/jniLibs/x86_64/libswresample.so +0 -0
  56. package/android/src/oldarch/NativeAudioAPIModuleSpec.java +100 -76
  57. package/common/cpp/audioapi/AudioAPIModuleInstaller.h +45 -70
  58. package/common/cpp/audioapi/HostObjects/AudioContextHostObject.cpp +20 -22
  59. package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.cpp +3 -4
  60. package/common/cpp/audioapi/HostObjects/AudioParamHostObject.cpp +6 -8
  61. package/common/cpp/audioapi/HostObjects/AudioParamHostObject.h +2 -2
  62. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +102 -63
  63. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +4 -1
  64. package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.cpp +25 -31
  65. package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.h +3 -3
  66. package/common/cpp/audioapi/HostObjects/WorkletNodeHostObject.h +1 -2
  67. package/common/cpp/audioapi/HostObjects/WorkletProcessingNodeHostObject.h +1 -2
  68. package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.cpp +10 -18
  69. package/common/cpp/audioapi/HostObjects/destinations/AudioDestinationNodeHostObject.h +2 -3
  70. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp +18 -30
  71. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.h +1 -2
  72. package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.cpp +50 -0
  73. package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.h +20 -0
  74. package/common/cpp/audioapi/HostObjects/effects/DelayNodeHostObject.cpp +27 -0
  75. package/common/cpp/audioapi/HostObjects/effects/DelayNodeHostObject.h +21 -0
  76. package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.cpp +2 -2
  77. package/common/cpp/audioapi/HostObjects/effects/IIRFilterNodeHostObject.cpp +33 -0
  78. package/common/cpp/audioapi/HostObjects/effects/IIRFilterNodeHostObject.h +20 -0
  79. package/common/cpp/audioapi/HostObjects/effects/PeriodicWaveHostObject.h +1 -2
  80. package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.cpp +2 -2
  81. package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.h +1 -2
  82. package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.cpp +6 -12
  83. package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.h +7 -7
  84. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.cpp +98 -50
  85. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +5 -2
  86. package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.cpp +27 -22
  87. package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.h +12 -10
  88. package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.cpp +17 -22
  89. package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.h +5 -7
  90. package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.cpp +25 -11
  91. package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.h +8 -8
  92. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.cpp +19 -30
  93. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.h +2 -4
  94. package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.cpp +7 -11
  95. package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.cpp +2 -2
  96. package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.h +1 -2
  97. package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.cpp +6 -8
  98. package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.h +1 -2
  99. package/common/cpp/audioapi/HostObjects/sources/RecorderAdapterNodeHostObject.h +4 -5
  100. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.cpp +6 -2
  101. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.h +5 -6
  102. package/common/cpp/audioapi/HostObjects/sources/WorkletSourceNodeHostObject.h +1 -2
  103. package/common/cpp/audioapi/HostObjects/utils/AudioDecoderHostObject.cpp +39 -60
  104. package/common/cpp/audioapi/HostObjects/utils/AudioStretcherHostObject.cpp +15 -30
  105. package/common/cpp/audioapi/core/AudioContext.cpp +23 -28
  106. package/common/cpp/audioapi/core/AudioContext.h +6 -3
  107. package/common/cpp/audioapi/core/AudioNode.cpp +17 -19
  108. package/common/cpp/audioapi/core/AudioNode.h +19 -8
  109. package/common/cpp/audioapi/core/AudioParam.cpp +68 -100
  110. package/common/cpp/audioapi/core/AudioParam.h +20 -12
  111. package/common/cpp/audioapi/core/BaseAudioContext.cpp +52 -34
  112. package/common/cpp/audioapi/core/BaseAudioContext.h +26 -14
  113. package/common/cpp/audioapi/core/OfflineAudioContext.cpp +12 -17
  114. package/common/cpp/audioapi/core/OfflineAudioContext.h +10 -5
  115. package/common/cpp/audioapi/core/analysis/AnalyserNode.cpp +13 -21
  116. package/common/cpp/audioapi/core/analysis/AnalyserNode.h +8 -6
  117. package/common/cpp/audioapi/core/destinations/AudioDestinationNode.cpp +1 -0
  118. package/common/cpp/audioapi/core/destinations/AudioDestinationNode.h +5 -3
  119. package/common/cpp/audioapi/core/effects/BiquadFilterNode.cpp +96 -74
  120. package/common/cpp/audioapi/core/effects/BiquadFilterNode.h +44 -15
  121. package/common/cpp/audioapi/core/effects/ConvolverNode.cpp +201 -0
  122. package/common/cpp/audioapi/core/effects/ConvolverNode.h +64 -0
  123. package/common/cpp/audioapi/core/effects/DelayNode.cpp +101 -0
  124. package/common/cpp/audioapi/core/effects/DelayNode.h +39 -0
  125. package/common/cpp/audioapi/core/effects/GainNode.cpp +1 -0
  126. package/common/cpp/audioapi/core/effects/GainNode.h +3 -1
  127. package/common/cpp/audioapi/core/effects/IIRFilterNode.cpp +166 -0
  128. package/common/cpp/audioapi/core/effects/IIRFilterNode.h +74 -0
  129. package/common/cpp/audioapi/core/effects/PeriodicWave.cpp +22 -35
  130. package/common/cpp/audioapi/core/effects/PeriodicWave.h +4 -9
  131. package/common/cpp/audioapi/core/effects/StereoPannerNode.cpp +4 -5
  132. package/common/cpp/audioapi/core/effects/StereoPannerNode.h +4 -2
  133. package/common/cpp/audioapi/core/effects/WorkletNode.cpp +11 -13
  134. package/common/cpp/audioapi/core/effects/WorkletNode.h +15 -12
  135. package/common/cpp/audioapi/core/effects/WorkletProcessingNode.cpp +4 -4
  136. package/common/cpp/audioapi/core/effects/WorkletProcessingNode.h +15 -14
  137. package/common/cpp/audioapi/core/inputs/AudioRecorder.cpp +66 -36
  138. package/common/cpp/audioapi/core/inputs/AudioRecorder.h +42 -44
  139. package/common/cpp/audioapi/core/sources/AudioBuffer.cpp +4 -6
  140. package/common/cpp/audioapi/core/sources/AudioBuffer.h +4 -7
  141. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +48 -57
  142. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +37 -34
  143. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +55 -17
  144. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +35 -28
  145. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +41 -49
  146. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +8 -6
  147. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +29 -24
  148. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +6 -6
  149. package/common/cpp/audioapi/core/sources/ConstantSourceNode.cpp +3 -4
  150. package/common/cpp/audioapi/core/sources/ConstantSourceNode.h +3 -1
  151. package/common/cpp/audioapi/core/sources/OscillatorNode.cpp +12 -23
  152. package/common/cpp/audioapi/core/sources/OscillatorNode.h +6 -4
  153. package/common/cpp/audioapi/core/sources/RecorderAdapterNode.cpp +43 -16
  154. package/common/cpp/audioapi/core/sources/RecorderAdapterNode.h +22 -17
  155. package/common/cpp/audioapi/core/sources/StreamerNode.cpp +105 -87
  156. package/common/cpp/audioapi/core/sources/StreamerNode.h +67 -33
  157. package/common/cpp/audioapi/core/sources/WorkletSourceNode.cpp +5 -7
  158. package/common/cpp/audioapi/core/sources/WorkletSourceNode.h +15 -13
  159. package/common/cpp/audioapi/core/types/AudioFormat.h +1 -11
  160. package/common/cpp/audioapi/core/utils/AudioDecoder.h +15 -6
  161. package/common/cpp/audioapi/core/utils/AudioFileWriter.cpp +41 -0
  162. package/common/cpp/audioapi/core/utils/AudioFileWriter.h +44 -0
  163. package/common/cpp/audioapi/core/utils/AudioNodeDestructor.cpp +5 -6
  164. package/common/cpp/audioapi/core/utils/AudioNodeDestructor.h +7 -10
  165. package/common/cpp/audioapi/core/utils/AudioNodeManager.cpp +17 -19
  166. package/common/cpp/audioapi/core/utils/AudioNodeManager.h +8 -11
  167. package/common/cpp/audioapi/core/utils/AudioParamEventQueue.cpp +3 -3
  168. package/common/cpp/audioapi/core/utils/AudioParamEventQueue.h +5 -5
  169. package/common/cpp/audioapi/core/utils/AudioRecorderCallback.cpp +101 -0
  170. package/common/cpp/audioapi/core/utils/AudioRecorderCallback.h +52 -0
  171. package/common/cpp/audioapi/core/utils/AudioStretcher.cpp +6 -6
  172. package/common/cpp/audioapi/core/utils/Constants.h +7 -3
  173. package/common/cpp/audioapi/core/utils/ParamChangeEvent.cpp +1 -0
  174. package/common/cpp/audioapi/core/utils/ParamChangeEvent.h +9 -9
  175. package/common/cpp/audioapi/core/utils/worklets/SafeIncludes.h +33 -34
  176. package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.cpp +17 -19
  177. package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.h +23 -19
  178. package/common/cpp/audioapi/dsp/AudioUtils.cpp +4 -10
  179. package/common/cpp/audioapi/dsp/AudioUtils.h +1 -1
  180. package/common/cpp/audioapi/dsp/Convolver.cpp +201 -0
  181. package/common/cpp/audioapi/dsp/Convolver.h +47 -0
  182. package/common/cpp/audioapi/dsp/FFT.cpp +1 -27
  183. package/common/cpp/audioapi/dsp/FFT.h +19 -3
  184. package/common/cpp/audioapi/dsp/VectorMath.cpp +24 -58
  185. package/common/cpp/audioapi/dsp/VectorMath.h +35 -8
  186. package/common/cpp/audioapi/dsp/Windows.cpp +4 -9
  187. package/common/cpp/audioapi/dsp/Windows.h +24 -23
  188. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.cpp +12 -17
  189. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +45 -40
  190. package/common/cpp/audioapi/events/IAudioEventHandlerRegistry.h +15 -7
  191. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/avcodec.h +4 -4
  192. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec.h +1 -1
  193. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_desc.h +1 -1
  194. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_id.h +3 -1
  195. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_par.h +2 -2
  196. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/defs.h +3 -0
  197. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/packet.h +1 -1
  198. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/smpte_436m.h +254 -0
  199. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/version.h +1 -1
  200. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/avformat.h +6 -6
  201. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version.h +2 -2
  202. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version_major.h +2 -0
  203. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avassert.h +5 -2
  204. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avutil.h +2 -2
  205. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/channel_layout.h +2 -2
  206. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/csp.h +1 -1
  207. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/dict.h +1 -1
  208. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/ffversion.h +1 -1
  209. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/film_grain_params.h +1 -1
  210. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/frame.h +1 -1
  211. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hdr_dynamic_vivid_metadata.h +3 -3
  212. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext.h +1 -1
  213. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_opencl.h +1 -1
  214. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_qsv.h +0 -1
  215. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_vulkan.h +1 -1
  216. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/iamf.h +2 -2
  217. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/lfg.h +2 -2
  218. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/log.h +2 -2
  219. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/mathematics.h +1 -1
  220. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/opt.h +4 -4
  221. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rational.h +1 -1
  222. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rc4.h +1 -1
  223. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/refstruct.h +1 -1
  224. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/spherical.h +6 -0
  225. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tdrdi.h +1 -1
  226. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tx.h +1 -1
  227. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/version.h +3 -3
  228. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/video_hint.h +1 -1
  229. package/common/cpp/audioapi/external/ffmpeg_include/libswresample/swresample.h +1 -1
  230. package/common/cpp/audioapi/external/ffmpeg_include/libswresample/version.h +1 -1
  231. package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64/libavcodec.framework/libavcodec +0 -0
  232. package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64_x86_64-simulator/libavcodec.framework/libavcodec +0 -0
  233. package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64/libavformat.framework/libavformat +0 -0
  234. package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64_x86_64-simulator/libavformat.framework/libavformat +0 -0
  235. package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64/libavutil.framework/libavutil +0 -0
  236. package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64_x86_64-simulator/libavutil.framework/libavutil +0 -0
  237. package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64/libswresample.framework/libswresample +0 -0
  238. package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64_x86_64-simulator/libswresample.framework/libswresample +0 -0
  239. package/common/cpp/audioapi/jsi/AudioArrayBuffer.h +4 -5
  240. package/common/cpp/audioapi/jsi/JsiHostObject.cpp +11 -13
  241. package/common/cpp/audioapi/jsi/JsiHostObject.h +26 -33
  242. package/common/cpp/audioapi/jsi/JsiPromise.cpp +34 -67
  243. package/common/cpp/audioapi/jsi/JsiPromise.h +65 -26
  244. package/common/cpp/audioapi/jsi/RuntimeLifecycleMonitor.cpp +7 -10
  245. package/common/cpp/audioapi/jsi/RuntimeLifecycleMonitor.h +1 -3
  246. package/common/cpp/audioapi/libs/ffmpeg/FFmpegDecoding.cpp +4 -3
  247. package/common/cpp/audioapi/libs/ffmpeg/relinking.md +24 -0
  248. package/common/cpp/audioapi/utils/AlignedAllocator.hpp +53 -0
  249. package/common/cpp/audioapi/utils/AudioArray.cpp +3 -8
  250. package/common/cpp/audioapi/utils/AudioArray.h +3 -11
  251. package/common/cpp/audioapi/utils/AudioBus.cpp +79 -149
  252. package/common/cpp/audioapi/utils/AudioBus.h +17 -14
  253. package/common/cpp/audioapi/utils/AudioFileProperties.cpp +92 -0
  254. package/common/cpp/audioapi/utils/AudioFileProperties.h +76 -0
  255. package/common/cpp/audioapi/utils/Benchmark.hpp +50 -47
  256. package/common/cpp/audioapi/utils/CircularAudioArray.cpp +6 -18
  257. package/common/cpp/audioapi/utils/CircularOverflowableAudioArray.cpp +6 -10
  258. package/common/cpp/audioapi/utils/CircularOverflowableAudioArray.h +2 -2
  259. package/common/cpp/audioapi/utils/CrossThreadEventScheduler.hpp +12 -9
  260. package/common/cpp/audioapi/utils/MoveOnlyFunction.hpp +17 -15
  261. package/common/cpp/audioapi/utils/Result.hpp +323 -0
  262. package/common/cpp/audioapi/utils/RingBiDirectionalBuffer.hpp +22 -28
  263. package/common/cpp/audioapi/utils/SpscChannel.hpp +329 -305
  264. package/common/cpp/audioapi/utils/ThreadPool.hpp +104 -20
  265. package/common/cpp/audioapi/utils/UnitConversion.h +9 -0
  266. package/common/cpp/test/CMakeLists.txt +15 -15
  267. package/common/cpp/test/src/AudioParamTest.cpp +4 -3
  268. package/common/cpp/test/src/AudioScheduledSourceTest.cpp +113 -0
  269. package/common/cpp/test/src/ConstantSourceTest.cpp +5 -7
  270. package/common/cpp/test/src/DelayTest.cpp +108 -0
  271. package/common/cpp/test/src/GainTest.cpp +4 -5
  272. package/common/cpp/test/src/IIRFilterTest.cpp +153 -0
  273. package/common/cpp/test/src/MockAudioEventHandlerRegistry.h +19 -11
  274. package/common/cpp/test/src/OscillatorTest.cpp +2 -1
  275. package/common/cpp/test/src/StereoPannerTest.cpp +6 -9
  276. package/common/cpp/test/src/biquad/BiquadFilterChromium.cpp +372 -0
  277. package/common/cpp/test/src/biquad/BiquadFilterChromium.h +65 -0
  278. package/common/cpp/test/src/biquad/BiquadFilterTest.cpp +272 -0
  279. package/common/cpp/test/src/biquad/BiquadFilterTest.h +47 -0
  280. package/ios/audioapi/ios/AudioAPIModule.h +4 -3
  281. package/ios/audioapi/ios/AudioAPIModule.mm +148 -34
  282. package/ios/audioapi/ios/core/IOSAudioPlayer.h +2 -2
  283. package/ios/audioapi/ios/core/IOSAudioPlayer.mm +7 -6
  284. package/ios/audioapi/ios/core/IOSAudioRecorder.h +26 -18
  285. package/ios/audioapi/ios/core/IOSAudioRecorder.mm +244 -54
  286. package/ios/audioapi/ios/core/NativeAudioPlayer.m +17 -14
  287. package/ios/audioapi/ios/core/NativeAudioRecorder.h +4 -0
  288. package/ios/audioapi/ios/core/NativeAudioRecorder.m +49 -7
  289. package/ios/audioapi/ios/core/utils/AudioDecoder.mm +21 -4
  290. package/ios/audioapi/ios/core/utils/FileOptions.h +33 -0
  291. package/ios/audioapi/ios/core/utils/FileOptions.mm +195 -0
  292. package/ios/audioapi/ios/core/{IOSAudioFileWriter.h → utils/IOSFileWriter.h} +16 -14
  293. package/ios/audioapi/ios/core/utils/IOSFileWriter.mm +239 -0
  294. package/ios/audioapi/ios/core/{IOSRecorderCallback.h → utils/IOSRecorderCallback.h} +7 -17
  295. package/ios/audioapi/ios/core/utils/IOSRecorderCallback.mm +185 -0
  296. package/ios/audioapi/ios/system/AudioEngine.h +21 -16
  297. package/ios/audioapi/ios/system/AudioEngine.mm +153 -132
  298. package/ios/audioapi/ios/system/AudioSessionManager.h +25 -11
  299. package/ios/audioapi/ios/system/AudioSessionManager.mm +277 -203
  300. package/ios/audioapi/ios/system/NotificationManager.mm +47 -53
  301. package/ios/audioapi/ios/system/notification/BaseNotification.h +58 -0
  302. package/ios/audioapi/ios/system/notification/NotificationRegistry.h +70 -0
  303. package/ios/audioapi/ios/system/notification/NotificationRegistry.mm +172 -0
  304. package/ios/audioapi/ios/system/notification/PlaybackNotification.h +27 -0
  305. package/ios/audioapi/ios/system/notification/PlaybackNotification.mm +427 -0
  306. package/lib/commonjs/AudioAPIModule/AudioAPIModule.js +90 -0
  307. package/lib/commonjs/AudioAPIModule/AudioAPIModule.js.map +1 -0
  308. package/lib/commonjs/AudioAPIModule/globals.d.js +6 -0
  309. package/lib/commonjs/AudioAPIModule/globals.d.js.map +1 -0
  310. package/lib/commonjs/AudioAPIModule/index.js +14 -0
  311. package/lib/commonjs/AudioAPIModule/index.js.map +1 -0
  312. package/lib/commonjs/api.js +89 -12
  313. package/lib/commonjs/api.js.map +1 -1
  314. package/lib/commonjs/api.web.js +35 -14
  315. package/lib/commonjs/api.web.js.map +1 -1
  316. package/lib/commonjs/core/AudioBufferBaseSourceNode.js +3 -0
  317. package/lib/commonjs/core/AudioBufferBaseSourceNode.js.map +1 -1
  318. package/lib/commonjs/core/AudioBufferQueueSourceNode.js +5 -2
  319. package/lib/commonjs/core/AudioBufferQueueSourceNode.js.map +1 -1
  320. package/lib/commonjs/core/AudioContext.js +5 -8
  321. package/lib/commonjs/core/AudioContext.js.map +1 -1
  322. package/lib/commonjs/core/AudioNode.js +1 -1
  323. package/lib/commonjs/core/AudioNode.js.map +1 -1
  324. package/lib/commonjs/core/AudioParam.js +18 -11
  325. package/lib/commonjs/core/AudioParam.js.map +1 -1
  326. package/lib/commonjs/core/AudioRecorder.js +43 -55
  327. package/lib/commonjs/core/AudioRecorder.js.map +1 -1
  328. package/lib/commonjs/core/BaseAudioContext.js +61 -30
  329. package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
  330. package/lib/commonjs/core/ConvolverNode.js +37 -0
  331. package/lib/commonjs/core/ConvolverNode.js.map +1 -0
  332. package/lib/commonjs/core/DelayNode.js +17 -0
  333. package/lib/commonjs/core/DelayNode.js.map +1 -0
  334. package/lib/commonjs/core/IIRFilterNode.js +19 -0
  335. package/lib/commonjs/core/IIRFilterNode.js.map +1 -0
  336. package/lib/commonjs/core/OfflineAudioContext.js +3 -6
  337. package/lib/commonjs/core/OfflineAudioContext.js.map +1 -1
  338. package/lib/commonjs/plugin/withAudioAPI.js +46 -0
  339. package/lib/commonjs/plugin/withAudioAPI.js.map +1 -1
  340. package/lib/commonjs/specs/NativeAudioAPIModule.js.map +1 -1
  341. package/lib/commonjs/system/AudioManager.js +9 -15
  342. package/lib/commonjs/system/AudioManager.js.map +1 -1
  343. package/lib/commonjs/system/index.js +13 -0
  344. package/lib/commonjs/system/index.js.map +1 -1
  345. package/lib/commonjs/system/notification/PlaybackNotificationManager.js +138 -0
  346. package/lib/commonjs/system/notification/PlaybackNotificationManager.js.map +1 -0
  347. package/lib/commonjs/system/notification/RecordingNotificationManager.js +185 -0
  348. package/lib/commonjs/system/notification/RecordingNotificationManager.js.map +1 -0
  349. package/lib/commonjs/system/notification/SimpleNotificationManager.js +125 -0
  350. package/lib/commonjs/system/notification/SimpleNotificationManager.js.map +1 -0
  351. package/lib/commonjs/system/notification/index.js +45 -0
  352. package/lib/commonjs/system/notification/index.js.map +1 -0
  353. package/lib/commonjs/system/notification/types.js +6 -0
  354. package/lib/commonjs/system/notification/types.js.map +1 -0
  355. package/lib/commonjs/types.js +28 -35
  356. package/lib/commonjs/types.js.map +1 -1
  357. package/lib/commonjs/utils/filePresets.js +43 -0
  358. package/lib/commonjs/utils/filePresets.js.map +1 -0
  359. package/lib/commonjs/utils/index.js +12 -27
  360. package/lib/commonjs/utils/index.js.map +1 -1
  361. package/lib/commonjs/web-core/AudioContext.js +21 -1
  362. package/lib/commonjs/web-core/AudioContext.js.map +1 -1
  363. package/lib/commonjs/web-core/ConvolverNode.js +40 -0
  364. package/lib/commonjs/web-core/ConvolverNode.js.map +1 -0
  365. package/lib/commonjs/web-core/ConvolverNodeOptions.js +6 -0
  366. package/lib/commonjs/web-core/ConvolverNodeOptions.js.map +1 -0
  367. package/lib/commonjs/web-core/DelayNode.js +17 -0
  368. package/lib/commonjs/web-core/DelayNode.js.map +1 -0
  369. package/lib/commonjs/web-core/IIRFilterNode.js +19 -0
  370. package/lib/commonjs/web-core/IIRFilterNode.js.map +1 -0
  371. package/lib/commonjs/web-core/OfflineAudioContext.js +20 -0
  372. package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
  373. package/lib/commonjs/web-system/index.js +17 -0
  374. package/lib/commonjs/web-system/index.js.map +1 -0
  375. package/lib/commonjs/web-system/notification/PlaybackNotificationManager.js +37 -0
  376. package/lib/commonjs/web-system/notification/PlaybackNotificationManager.js.map +1 -0
  377. package/lib/commonjs/web-system/notification/RecordingNotificationManager.js +37 -0
  378. package/lib/commonjs/web-system/notification/RecordingNotificationManager.js.map +1 -0
  379. package/lib/commonjs/web-system/notification/index.js +21 -0
  380. package/lib/commonjs/web-system/notification/index.js.map +1 -0
  381. package/lib/module/AudioAPIModule/AudioAPIModule.js +87 -0
  382. package/lib/module/AudioAPIModule/AudioAPIModule.js.map +1 -0
  383. package/lib/module/AudioAPIModule/globals.d.js +4 -0
  384. package/lib/module/AudioAPIModule/globals.d.js.map +1 -0
  385. package/lib/module/AudioAPIModule/index.js +4 -0
  386. package/lib/module/AudioAPIModule/index.js.map +1 -0
  387. package/lib/module/api.js +7 -12
  388. package/lib/module/api.js.map +1 -1
  389. package/lib/module/api.web.js +4 -1
  390. package/lib/module/api.web.js.map +1 -1
  391. package/lib/module/core/AudioBufferBaseSourceNode.js +3 -0
  392. package/lib/module/core/AudioBufferBaseSourceNode.js.map +1 -1
  393. package/lib/module/core/AudioBufferQueueSourceNode.js +5 -2
  394. package/lib/module/core/AudioBufferQueueSourceNode.js.map +1 -1
  395. package/lib/module/core/AudioContext.js +5 -8
  396. package/lib/module/core/AudioContext.js.map +1 -1
  397. package/lib/module/core/AudioNode.js +1 -1
  398. package/lib/module/core/AudioNode.js.map +1 -1
  399. package/lib/module/core/AudioParam.js +18 -11
  400. package/lib/module/core/AudioParam.js.map +1 -1
  401. package/lib/module/core/AudioRecorder.js +44 -56
  402. package/lib/module/core/AudioRecorder.js.map +1 -1
  403. package/lib/module/core/BaseAudioContext.js +63 -32
  404. package/lib/module/core/BaseAudioContext.js.map +1 -1
  405. package/lib/module/core/ConvolverNode.js +31 -0
  406. package/lib/module/core/ConvolverNode.js.map +1 -0
  407. package/lib/module/core/DelayNode.js +11 -0
  408. package/lib/module/core/DelayNode.js.map +1 -0
  409. package/lib/module/core/IIRFilterNode.js +13 -0
  410. package/lib/module/core/IIRFilterNode.js.map +1 -0
  411. package/lib/module/core/OfflineAudioContext.js +3 -6
  412. package/lib/module/core/OfflineAudioContext.js.map +1 -1
  413. package/lib/module/plugin/withAudioAPI.js +47 -1
  414. package/lib/module/plugin/withAudioAPI.js.map +1 -1
  415. package/lib/module/specs/NativeAudioAPIModule.js.map +1 -1
  416. package/lib/module/system/AudioManager.js +9 -15
  417. package/lib/module/system/AudioManager.js.map +1 -1
  418. package/lib/module/system/index.js +1 -0
  419. package/lib/module/system/index.js.map +1 -1
  420. package/lib/module/system/notification/PlaybackNotificationManager.js +134 -0
  421. package/lib/module/system/notification/PlaybackNotificationManager.js.map +1 -0
  422. package/lib/module/system/notification/RecordingNotificationManager.js +181 -0
  423. package/lib/module/system/notification/RecordingNotificationManager.js.map +1 -0
  424. package/lib/module/system/notification/SimpleNotificationManager.js +121 -0
  425. package/lib/module/system/notification/SimpleNotificationManager.js.map +1 -0
  426. package/lib/module/system/notification/index.js +7 -0
  427. package/lib/module/system/notification/index.js.map +1 -0
  428. package/lib/module/system/notification/types.js +4 -0
  429. package/lib/module/system/notification/types.js.map +1 -0
  430. package/lib/module/types.js +27 -34
  431. package/lib/module/types.js.map +1 -1
  432. package/lib/module/utils/filePresets.js +39 -0
  433. package/lib/module/utils/filePresets.js.map +1 -0
  434. package/lib/module/utils/index.js +10 -10
  435. package/lib/module/utils/index.js.map +1 -1
  436. package/lib/module/web-core/AudioContext.js +21 -1
  437. package/lib/module/web-core/AudioContext.js.map +1 -1
  438. package/lib/module/web-core/ConvolverNode.js +34 -0
  439. package/lib/module/web-core/ConvolverNode.js.map +1 -0
  440. package/lib/module/web-core/ConvolverNodeOptions.js +4 -0
  441. package/lib/module/web-core/ConvolverNodeOptions.js.map +1 -0
  442. package/lib/module/web-core/DelayNode.js +11 -0
  443. package/lib/module/web-core/DelayNode.js.map +1 -0
  444. package/lib/module/web-core/IIRFilterNode.js +13 -0
  445. package/lib/module/web-core/IIRFilterNode.js.map +1 -0
  446. package/lib/module/web-core/OfflineAudioContext.js +20 -0
  447. package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
  448. package/lib/module/web-system/index.js +4 -0
  449. package/lib/module/web-system/index.js.map +1 -0
  450. package/lib/module/web-system/notification/PlaybackNotificationManager.js +33 -0
  451. package/lib/module/web-system/notification/PlaybackNotificationManager.js.map +1 -0
  452. package/lib/module/web-system/notification/RecordingNotificationManager.js +33 -0
  453. package/lib/module/web-system/notification/RecordingNotificationManager.js.map +1 -0
  454. package/lib/module/web-system/notification/index.js +5 -0
  455. package/lib/module/web-system/notification/index.js.map +1 -0
  456. package/lib/typescript/AudioAPIModule/AudioAPIModule.d.ts +36 -0
  457. package/lib/typescript/AudioAPIModule/AudioAPIModule.d.ts.map +1 -0
  458. package/lib/typescript/AudioAPIModule/index.d.ts +2 -0
  459. package/lib/typescript/AudioAPIModule/index.d.ts.map +1 -0
  460. package/lib/typescript/api.d.ts +5 -9
  461. package/lib/typescript/api.d.ts.map +1 -1
  462. package/lib/typescript/api.web.d.ts +4 -1
  463. package/lib/typescript/api.web.d.ts.map +1 -1
  464. package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts +1 -0
  465. package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts.map +1 -1
  466. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts +1 -1
  467. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts.map +1 -1
  468. package/lib/typescript/core/AudioContext.d.ts +1 -1
  469. package/lib/typescript/core/AudioContext.d.ts.map +1 -1
  470. package/lib/typescript/core/AudioNode.d.ts +2 -1
  471. package/lib/typescript/core/AudioNode.d.ts.map +1 -1
  472. package/lib/typescript/core/AudioParam.d.ts.map +1 -1
  473. package/lib/typescript/core/AudioRecorder.d.ts +13 -6
  474. package/lib/typescript/core/AudioRecorder.d.ts.map +1 -1
  475. package/lib/typescript/core/BaseAudioContext.d.ts +9 -3
  476. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
  477. package/lib/typescript/core/ConvolverNode.d.ts +12 -0
  478. package/lib/typescript/core/ConvolverNode.d.ts.map +1 -0
  479. package/lib/typescript/core/DelayNode.d.ts +9 -0
  480. package/lib/typescript/core/DelayNode.d.ts.map +1 -0
  481. package/lib/typescript/core/IIRFilterNode.d.ts +5 -0
  482. package/lib/typescript/core/IIRFilterNode.d.ts.map +1 -0
  483. package/lib/typescript/core/OfflineAudioContext.d.ts +1 -1
  484. package/lib/typescript/core/OfflineAudioContext.d.ts.map +1 -1
  485. package/lib/typescript/events/types.d.ts +6 -2
  486. package/lib/typescript/events/types.d.ts.map +1 -1
  487. package/lib/typescript/interfaces.d.ts +34 -34
  488. package/lib/typescript/interfaces.d.ts.map +1 -1
  489. package/lib/typescript/plugin/withAudioAPI.d.ts +1 -0
  490. package/lib/typescript/plugin/withAudioAPI.d.ts.map +1 -1
  491. package/lib/typescript/specs/NativeAudioAPIModule.d.ts +18 -6
  492. package/lib/typescript/specs/NativeAudioAPIModule.d.ts.map +1 -1
  493. package/lib/typescript/system/AudioManager.d.ts +5 -5
  494. package/lib/typescript/system/AudioManager.d.ts.map +1 -1
  495. package/lib/typescript/system/index.d.ts +1 -0
  496. package/lib/typescript/system/index.d.ts.map +1 -1
  497. package/lib/typescript/system/notification/PlaybackNotificationManager.d.ts +23 -0
  498. package/lib/typescript/system/notification/PlaybackNotificationManager.d.ts.map +1 -0
  499. package/lib/typescript/system/notification/RecordingNotificationManager.d.ts +24 -0
  500. package/lib/typescript/system/notification/RecordingNotificationManager.d.ts.map +1 -0
  501. package/lib/typescript/system/notification/SimpleNotificationManager.d.ts +21 -0
  502. package/lib/typescript/system/notification/SimpleNotificationManager.d.ts.map +1 -0
  503. package/lib/typescript/system/notification/index.d.ts +5 -0
  504. package/lib/typescript/system/notification/index.d.ts.map +1 -0
  505. package/lib/typescript/system/notification/types.d.ts +65 -0
  506. package/lib/typescript/system/notification/types.d.ts.map +1 -0
  507. package/lib/typescript/system/types.d.ts +0 -16
  508. package/lib/typescript/system/types.d.ts.map +1 -1
  509. package/lib/typescript/types.d.ts +57 -49
  510. package/lib/typescript/types.d.ts.map +1 -1
  511. package/lib/typescript/utils/filePresets.d.ts +9 -0
  512. package/lib/typescript/utils/filePresets.d.ts.map +1 -0
  513. package/lib/typescript/utils/index.d.ts +1 -8
  514. package/lib/typescript/utils/index.d.ts.map +1 -1
  515. package/lib/typescript/web-core/AudioContext.d.ts +9 -2
  516. package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
  517. package/lib/typescript/web-core/BaseAudioContext.d.ts +7 -1
  518. package/lib/typescript/web-core/BaseAudioContext.d.ts.map +1 -1
  519. package/lib/typescript/web-core/ConvolverNode.d.ts +11 -0
  520. package/lib/typescript/web-core/ConvolverNode.d.ts.map +1 -0
  521. package/lib/typescript/web-core/ConvolverNodeOptions.d.ts +6 -0
  522. package/lib/typescript/web-core/ConvolverNodeOptions.d.ts.map +1 -0
  523. package/lib/typescript/web-core/DelayNode.d.ts +8 -0
  524. package/lib/typescript/web-core/DelayNode.d.ts.map +1 -0
  525. package/lib/typescript/web-core/IIRFilterNode.d.ts +5 -0
  526. package/lib/typescript/web-core/IIRFilterNode.d.ts.map +1 -0
  527. package/lib/typescript/web-core/OfflineAudioContext.d.ts +8 -1
  528. package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
  529. package/lib/typescript/web-system/index.d.ts +2 -0
  530. package/lib/typescript/web-system/index.d.ts.map +1 -0
  531. package/lib/typescript/web-system/notification/PlaybackNotificationManager.d.ts +20 -0
  532. package/lib/typescript/web-system/notification/PlaybackNotificationManager.d.ts.map +1 -0
  533. package/lib/typescript/web-system/notification/RecordingNotificationManager.d.ts +20 -0
  534. package/lib/typescript/web-system/notification/RecordingNotificationManager.d.ts.map +1 -0
  535. package/lib/typescript/web-system/notification/index.d.ts +3 -0
  536. package/lib/typescript/web-system/notification/index.d.ts.map +1 -0
  537. package/package.json +11 -5
  538. package/scripts/download-prebuilt-binaries.sh +61 -0
  539. package/scripts/rnaa_utils.rb +8 -0
  540. package/scripts/validate-worklets-version.js +27 -0
  541. package/src/AudioAPIModule/AudioAPIModule.ts +122 -0
  542. package/src/AudioAPIModule/globals.d.ts +33 -0
  543. package/src/AudioAPIModule/index.ts +1 -0
  544. package/src/api.ts +21 -52
  545. package/src/api.web.ts +8 -2
  546. package/src/core/AudioBufferBaseSourceNode.ts +8 -0
  547. package/src/core/AudioBufferQueueSourceNode.ts +8 -2
  548. package/src/core/AudioContext.ts +5 -8
  549. package/src/core/AudioNode.ts +4 -3
  550. package/src/core/AudioParam.ts +18 -11
  551. package/src/core/AudioRecorder.ts +63 -78
  552. package/src/core/BaseAudioContext.ts +120 -54
  553. package/src/core/ConvolverNode.ts +35 -0
  554. package/src/core/DelayNode.ts +13 -0
  555. package/src/core/IIRFilterNode.ts +25 -0
  556. package/src/core/OfflineAudioContext.ts +4 -7
  557. package/src/events/types.ts +7 -3
  558. package/src/interfaces.ts +51 -34
  559. package/src/plugin/withAudioAPI.ts +61 -0
  560. package/src/specs/NativeAudioAPIModule.ts +26 -9
  561. package/src/system/AudioManager.ts +13 -32
  562. package/src/system/index.ts +1 -0
  563. package/src/system/notification/PlaybackNotificationManager.ts +197 -0
  564. package/src/system/notification/RecordingNotificationManager.ts +247 -0
  565. package/src/system/notification/SimpleNotificationManager.ts +175 -0
  566. package/src/system/notification/index.ts +4 -0
  567. package/src/system/notification/types.ts +111 -0
  568. package/src/system/types.ts +0 -18
  569. package/src/types.ts +59 -50
  570. package/src/utils/filePresets.ts +47 -0
  571. package/src/utils/index.ts +13 -19
  572. package/src/web-core/AudioContext.tsx +40 -1
  573. package/src/web-core/BaseAudioContext.tsx +11 -1
  574. package/src/web-core/ConvolverNode.tsx +43 -0
  575. package/src/web-core/ConvolverNodeOptions.tsx +6 -0
  576. package/src/web-core/DelayNode.tsx +12 -0
  577. package/src/web-core/IIRFilterNode.tsx +25 -0
  578. package/src/web-core/OfflineAudioContext.tsx +39 -0
  579. package/src/web-system/index.ts +1 -0
  580. package/src/web-system/notification/PlaybackNotificationManager.ts +64 -0
  581. package/src/web-system/notification/RecordingNotificationManager.ts +64 -0
  582. package/src/web-system/notification/index.ts +2 -0
  583. package/android/src/main/cpp/audioapi/android/core/utils/FileUtils.h +0 -34
  584. package/android/src/main/cpp/audioapi/android/core/utils/FileUtilts.cpp +0 -133
  585. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.cpp +0 -154
  586. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.h +0 -41
  587. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.cpp +0 -47
  588. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.h +0 -28
  589. package/android/src/main/java/com/swmansion/audioapi/system/LockScreenManager.kt +0 -325
  590. package/android/src/main/java/com/swmansion/audioapi/system/MediaNotificationManager.kt +0 -262
  591. package/android/src/main/java/com/swmansion/audioapi/system/MediaReceiver.kt +0 -57
  592. package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionCallback.kt +0 -61
  593. package/common/cpp/audioapi/libs/ffmpeg/INSTRUCTIONS.md +0 -32
  594. package/common/cpp/audioapi/libs/ffmpeg/create_xcframework.sh +0 -111
  595. package/common/cpp/audioapi/libs/ffmpeg/ffmpeg_setup.sh +0 -391
  596. package/ios/audioapi/ios/core/IOSAudioFileOptions.h +0 -36
  597. package/ios/audioapi/ios/core/IOSAudioFileOptions.mm +0 -140
  598. package/ios/audioapi/ios/core/IOSAudioFileWriter.mm +0 -223
  599. package/ios/audioapi/ios/core/IOSRecorderCallback.mm +0 -189
  600. package/ios/audioapi/ios/system/LockScreenManager.h +0 -24
  601. package/ios/audioapi/ios/system/LockScreenManager.mm +0 -310
  602. package/lib/commonjs/utils/bitEnums.js +0 -33
  603. package/lib/commonjs/utils/bitEnums.js.map +0 -1
  604. package/lib/module/utils/bitEnums.js +0 -27
  605. package/lib/module/utils/bitEnums.js.map +0 -1
  606. package/lib/typescript/utils/bitEnums.d.ts +0 -4
  607. package/lib/typescript/utils/bitEnums.d.ts.map +0 -1
  608. package/metro-config/index.d.ts +0 -5
  609. package/metro-config/index.js +0 -41
  610. package/metro-config/tsconfig.json +0 -3
  611. package/src/utils/bitEnums.ts +0 -51
  612. package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/Info.plist +5 -5
  613. package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64/libavcodec.framework/Info.plist +0 -0
  614. package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64_x86_64-simulator/libavcodec.framework/Info.plist +0 -0
  615. package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/Info.plist +0 -0
  616. package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64/libavformat.framework/Info.plist +0 -0
  617. package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64_x86_64-simulator/libavformat.framework/Info.plist +0 -0
  618. package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/Info.plist +5 -5
  619. package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64/libavutil.framework/Info.plist +0 -0
  620. package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64_x86_64-simulator/libavutil.framework/Info.plist +0 -0
  621. package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/Info.plist +5 -5
  622. /package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64/libswresample.framework/Info.plist +0 -0
  623. /package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64_x86_64-simulator/libswresample.framework/Info.plist +0 -0
@@ -1,30 +1,51 @@
1
1
  #include <android/log.h>
2
2
  #include <audioapi/android/core/utils/AndroidFileWriterBackend.h>
3
- #include <audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.h>
3
+ #include <audioapi/android/core/utils/FileOptions.h>
4
4
  #include <audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.h>
5
5
  #include <audioapi/libs/miniaudio/miniaudio.h>
6
+ #include <audioapi/utils/AudioFileProperties.h>
7
+ #include <audioapi/utils/UnitConversion.h>
6
8
 
7
- constexpr double BYTES_TO_MB = 1024.0 * 1024.0;
9
+ #include <cstdio>
10
+ #include <memory>
11
+ #include <string>
8
12
 
9
13
  namespace audioapi {
10
14
 
11
- MiniAudioFileWriter::MiniAudioFileWriter(
12
- float sampleRate,
13
- size_t channelCount,
14
- size_t bitRate,
15
- size_t androidFlags)
16
- : AndroidFileWriterBackend(
17
- sampleRate,
18
- channelCount,
19
- bitRate,
20
- androidFlags) {
21
- fileOptions_ = std::make_shared<MiniAudioFileOptions>(
22
- sampleRate, channelCount, bitRate, androidFlags);
15
+ /// @brief Get the encoding format based on the audio file properties (only WAV supported).
16
+ // Currently, miniaudio supports only WAV encoding, but out of convenience
17
+ // or potential future shenanigans, we keep this as a separate function.
18
+ inline ma_encoding_format getFormat(const std::shared_ptr<AudioFileProperties> &properties) {
19
+ return ma_encoding_format_wav;
20
+ }
21
+
22
+ /// @brief Get the data format based on the bit depth.
23
+ /// @param properties The audio file properties.
24
+ /// @return The corresponding ma_format.
25
+ inline ma_format getDataFormat(const std::shared_ptr<AudioFileProperties> &properties) {
26
+ switch (properties->bitDepth) {
27
+ case AudioFileProperties::BitDepth::Bit16:
28
+ return ma_format_s16;
29
+
30
+ case AudioFileProperties::BitDepth::Bit24:
31
+ return ma_format_s24;
32
+
33
+ case AudioFileProperties::BitDepth::Bit32:
34
+ return ma_format_f32;
35
+
36
+ default:
37
+ return ma_format_f32;
38
+ }
23
39
  }
24
40
 
41
+ MiniAudioFileWriter::MiniAudioFileWriter(
42
+ const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
43
+ const std::shared_ptr<AudioFileProperties> &fileProperties)
44
+ : AndroidFileWriterBackend(audioEventHandlerRegistry, fileProperties) {}
45
+
25
46
  MiniAudioFileWriter::~MiniAudioFileWriter() {
26
- isFileOpen_.store(false);
27
- fileOptions_.reset();
47
+ isFileOpen_.store(false, std::memory_order_release);
48
+ fileProperties_.reset();
28
49
 
29
50
  if (encoder_ != nullptr) {
30
51
  ma_encoder_uninit(encoder_.get());
@@ -43,43 +64,59 @@ MiniAudioFileWriter::~MiniAudioFileWriter() {
43
64
  }
44
65
  }
45
66
 
46
- std::string MiniAudioFileWriter::openFile(
47
- int32_t streamSampleRate,
67
+ /// @brief Opens the audio file for writing.
68
+ /// This method initializes the audio converter and encoder together with any
69
+ /// necessary buffers required during the writing process.
70
+ /// this method should be called only on the JS thread.
71
+ /// @param streamSampleRate The sample rate of the incoming audio stream.
72
+ /// @param streamChannelCount The channel count of the incoming audio stream.
73
+ /// @param streamMaxBufferSize The maximum buffer size of the incoming audio stream.
74
+ /// @return The status of the file opening operation.
75
+ OpenFileResult MiniAudioFileWriter::openFile(
76
+ float streamSampleRate,
48
77
  int32_t streamChannelCount,
49
78
  int32_t streamMaxBufferSize) {
50
79
  streamSampleRate_ = streamSampleRate;
51
80
  streamChannelCount_ = streamChannelCount;
52
81
  streamMaxBufferSize_ = streamMaxBufferSize;
53
- bool success = false;
82
+ ma_result result;
83
+ framesWritten_.store(0, std::memory_order_release);
54
84
 
55
85
  isConverterRequired_.store(
56
- (streamSampleRate_ != fileOptions_->getSampleRate()) ||
57
- (streamChannelCount_ != fileOptions_->getChannelCount()) ||
58
- (fileOptions_->getDataFormat() != ma_format_f32));
86
+ (streamSampleRate_ != fileProperties_->sampleRate) ||
87
+ (streamChannelCount_ != fileProperties_->channelCount) ||
88
+ (getDataFormat(fileProperties_) != ma_format_f32),
89
+ std::memory_order_release);
59
90
 
60
- success = initializeConverterIfNeeded();
91
+ result = initializeConverterIfNeeded();
61
92
 
62
- if (!success) {
63
- return "";
93
+ if (result != MA_SUCCESS) {
94
+ return OpenFileResult ::Err(
95
+ "Failed to initialize converter" + std::string(ma_result_description(result)));
64
96
  }
65
97
 
66
- success = initializeEncoder();
98
+ result = initializeEncoder();
67
99
 
68
- if (!success) {
69
- return "";
100
+ if (result != MA_SUCCESS) {
101
+ return OpenFileResult ::Err(
102
+ "Failed to initialize encoder" + std::string(ma_result_description(result)));
70
103
  }
71
104
 
72
- isFileOpen_.store(true);
73
-
74
- return filePath_;
105
+ isFileOpen_.store(true, std::memory_order_release);
106
+ return OpenFileResult ::Ok(filePath_);
75
107
  }
76
108
 
77
- std::tuple<double, double> MiniAudioFileWriter::closeFile() {
109
+ /// @brief Closes the audio file.
110
+ /// This method finalizes the writing process, releases resources,
111
+ /// and retrieves the duration and size of the written audio file.
112
+ /// It should be called only on the JS thread.
113
+ /// @return The status of the file closing operation.
114
+ CloseFileResult MiniAudioFileWriter::closeFile() {
78
115
  if (!isFileOpen()) {
79
- return {0.0, 0.0};
116
+ return CloseFileResult ::Err("File is not open");
80
117
  }
81
118
 
82
- isFileOpen_.store(false);
119
+ isFileOpen_.store(false, std::memory_order_release);
83
120
 
84
121
  if (encoder_ != nullptr) {
85
122
  ma_encoder_uninit(encoder_.get());
@@ -98,7 +135,6 @@ std::tuple<double, double> MiniAudioFileWriter::closeFile() {
98
135
  }
99
136
 
100
137
  // Retrieve duration and file size
101
- std::string filePath = filePath_;
102
138
  double durationInSeconds = 0.0;
103
139
  double fileSizeInMB = 0.0;
104
140
 
@@ -107,10 +143,8 @@ std::tuple<double, double> MiniAudioFileWriter::closeFile() {
107
143
  if (ma_decoder_init_file(filePath_.c_str(), NULL, &decoder) == MA_SUCCESS) {
108
144
  ma_uint64 frameCount = 0;
109
145
 
110
- if (ma_decoder_get_length_in_pcm_frames(&decoder, &frameCount) ==
111
- MA_SUCCESS) {
112
- durationInSeconds =
113
- static_cast<double>(frameCount) / decoder.outputSampleRate;
146
+ if (ma_decoder_get_length_in_pcm_frames(&decoder, &frameCount) == MA_SUCCESS) {
147
+ durationInSeconds = static_cast<double>(frameCount) / decoder.outputSampleRate;
114
148
  }
115
149
 
116
150
  ma_decoder_uninit(&decoder);
@@ -120,15 +154,22 @@ std::tuple<double, double> MiniAudioFileWriter::closeFile() {
120
154
 
121
155
  if (file != nullptr) {
122
156
  fseek(file, 0, SEEK_END);
123
- long fileSizeInBytes = ftell(file);
157
+ uint64_t fileSizeInBytes = ftell(file);
124
158
  fclose(file);
125
- fileSizeInMB = static_cast<double>(fileSizeInBytes) / BYTES_TO_MB;
159
+ fileSizeInMB = static_cast<double>(fileSizeInBytes) / MB_IN_BYTES;
126
160
  }
127
161
 
128
162
  filePath_ = "";
129
- return {fileSizeInMB, durationInSeconds};
163
+ return CloseFileResult ::Ok({fileSizeInMB, durationInSeconds});
130
164
  }
131
165
 
166
+ /// @brief Writes audio data to the file.
167
+ /// If possible (sample format, channel count, and interleaving matches),
168
+ /// the data is written directly, otherwise in-memory conversion is performed first
169
+ /// It should be called only on the audio thread.
170
+ /// @param data Pointer to the audio data buffer. (Interleaved float32 format - as oboe likes it)
171
+ /// @param numFrames Number of audio frames to write.
172
+ /// @return True if the write operation was successful, false otherwise.
132
173
  bool MiniAudioFileWriter::writeAudioData(void *data, int numFrames) {
133
174
  ma_uint64 framesWritten = 0;
134
175
  ma_result result;
@@ -138,25 +179,16 @@ bool MiniAudioFileWriter::writeAudioData(void *data, int numFrames) {
138
179
  }
139
180
 
140
181
  if (!isConverterRequired()) {
141
- result = ma_encoder_write_pcm_frames(
142
- encoder_.get(), data, numFrames, &framesWritten);
143
-
144
- __android_log_print(
145
- ANDROID_LOG_DEBUG,
146
- "MiniAudioFileWriter",
147
- "Writing %llu frames without conversion to file: %s",
148
- framesWritten,
149
- filePath_.c_str());
182
+ result = ma_encoder_write_pcm_frames(encoder_.get(), data, numFrames, &framesWritten);
150
183
 
151
184
  if (result != MA_SUCCESS) {
152
- __android_log_print(
153
- ANDROID_LOG_ERROR,
154
- "MiniAudioFileWriter",
155
- "Failed to write audio data to file: %s",
156
- filePath_.c_str());
185
+ invokeOnErrorCallback(
186
+ "Failed to write audio data to file: " + filePath_ +
187
+ std::string(ma_result_description(result)));
188
+ return false;
157
189
  }
158
190
 
159
- framesWritten_.fetch_add(numFrames);
191
+ framesWritten_.fetch_add(numFrames, std::memory_order_acq_rel);
160
192
  return result == MA_SUCCESS;
161
193
  }
162
194
 
@@ -166,17 +198,20 @@ bool MiniAudioFileWriter::writeAudioData(void *data, int numFrames) {
166
198
  encoder_.get(), processingBuffer_, convertedFrameCount, &framesWritten);
167
199
 
168
200
  if (result != MA_SUCCESS) {
169
- __android_log_print(
170
- ANDROID_LOG_ERROR,
171
- "MiniAudioFileWriter",
172
- "Failed to write converted audio data to file: %s",
173
- filePath_.c_str());
201
+ invokeOnErrorCallback(
202
+ "Failed to write converted audio data to file: " + filePath_ +
203
+ std::string(ma_result_description(result)));
204
+ return false;
174
205
  }
175
206
 
176
- framesWritten_.fetch_add(numFrames);
207
+ framesWritten_.fetch_add(numFrames, std::memory_order_acq_rel);
177
208
  return result == MA_SUCCESS;
178
209
  }
179
210
 
211
+ /// @brief Converts the audio data buffer if necessary.
212
+ /// @param data Pointer to the audio data buffer.
213
+ /// @param numFrames Number of audio frames to convert.
214
+ /// @return The number of frames after conversion.
180
215
  ma_uint64 MiniAudioFileWriter::convertBuffer(void *data, int numFrames) {
181
216
  ma_uint64 inputFrameCount = numFrames;
182
217
  ma_uint64 outputFrameCount = 0;
@@ -185,85 +220,77 @@ ma_uint64 MiniAudioFileWriter::convertBuffer(void *data, int numFrames) {
185
220
  converter_.get(), inputFrameCount, &outputFrameCount);
186
221
 
187
222
  ma_data_converter_process_pcm_frames(
188
- converter_.get(),
189
- data,
190
- &inputFrameCount,
191
- processingBuffer_,
192
- &outputFrameCount);
223
+ converter_.get(), data, &inputFrameCount, processingBuffer_, &outputFrameCount);
193
224
 
194
225
  return outputFrameCount;
195
226
  }
196
227
 
197
- bool MiniAudioFileWriter::initializeConverterIfNeeded() {
228
+ /// @brief Initializes the data converter if needed.
229
+ /// This method sets up the data converter and allocates, so it should be called
230
+ /// only on the JS thread. (during file opening)
231
+ /// @return MA_SUCCESS if initialization was successful, otherwise an error code.
232
+ ma_result MiniAudioFileWriter::initializeConverterIfNeeded() {
198
233
  if (!isConverterRequired_) {
199
- return true;
234
+ return MA_SUCCESS;
200
235
  }
201
236
 
202
237
  ma_result result;
238
+ ma_format dataFormat = getDataFormat(fileProperties_);
203
239
 
204
240
  ma_data_converter_config converterConfig = ma_data_converter_config_init(
205
241
  ma_format_f32,
206
- fileOptions_->getDataFormat(),
242
+ dataFormat,
207
243
  streamChannelCount_,
208
- fileOptions_->getChannelCount(),
209
- streamSampleRate_,
210
- fileOptions_->getSampleRate());
244
+ fileProperties_->channelCount,
245
+ static_cast<int32_t>(streamSampleRate_),
246
+ fileProperties_->sampleRate);
211
247
 
212
248
  converter_ = std::make_unique<ma_data_converter>();
213
249
  result = ma_data_converter_init(&converterConfig, NULL, converter_.get());
214
250
 
215
251
  if (result != MA_SUCCESS) {
216
- __android_log_print(
217
- ANDROID_LOG_ERROR,
218
- "MiniAudioFileWriter",
219
- "Failed to initialize miniaudio data converter for file: %s",
220
- filePath_.c_str());
221
- return false;
252
+ return result;
222
253
  }
223
254
 
224
255
  ma_data_converter_get_expected_output_frame_count(
225
256
  converter_.get(), streamMaxBufferSize_, &processingBufferLength_);
226
257
 
227
258
  processingBuffer_ = ma_malloc(
228
- processingBufferLength_ * fileOptions_->getChannelCount() *
229
- ma_get_bytes_per_sample(fileOptions_->getDataFormat()),
259
+ processingBufferLength_ * fileProperties_->channelCount * ma_get_bytes_per_sample(dataFormat),
230
260
  NULL);
231
261
 
232
- return true;
262
+ return MA_SUCCESS;
233
263
  }
234
264
 
235
- bool MiniAudioFileWriter::initializeEncoder() {
236
- filePath_ = fileOptions_->getFilePath("audio");
237
-
265
+ /// @brief Initializes the audio encoder.
266
+ /// This method sets up the audio encoder for writing to the file,
267
+ /// it should be called only on the JS thread. (during file opening)
268
+ /// @return MA_SUCCESS if initialization was successful, otherwise an error code.
269
+ ma_result MiniAudioFileWriter::initializeEncoder() {
238
270
  ma_result result;
271
+ Result<std::string, std::string> filePathResult =
272
+ android::fileoptions::getFilePath(fileProperties_);
273
+
274
+ if (!filePathResult.is_ok()) {
275
+ return MA_ERROR;
276
+ }
277
+
278
+ filePath_ = filePathResult.unwrap();
239
279
 
240
280
  ma_encoder_config config = ma_encoder_config_init(
241
- fileOptions_->getFormat(),
242
- fileOptions_->getDataFormat(),
243
- fileOptions_->getChannelCount(),
244
- fileOptions_->getSampleRate());
281
+ getFormat(fileProperties_),
282
+ getDataFormat(fileProperties_),
283
+ fileProperties_->channelCount,
284
+ fileProperties_->sampleRate);
245
285
 
246
286
  encoder_ = std::make_unique<ma_encoder>();
247
287
  result = ma_encoder_init_file(filePath_.c_str(), &config, encoder_.get());
248
288
 
249
- if (result != MA_SUCCESS) {
250
- __android_log_print(
251
- ANDROID_LOG_ERROR,
252
- "MiniAudioFileWriter",
253
- "Failed to initialize miniaudio encoder for file: %s",
254
- filePath_.c_str());
255
- return false;
256
- }
257
-
258
- return true;
259
- }
260
-
261
- bool MiniAudioFileWriter::isFileOpen() {
262
- return isFileOpen_.load();
289
+ return result;
263
290
  }
264
291
 
265
292
  bool MiniAudioFileWriter::isConverterRequired() {
266
- return isConverterRequired_.load();
293
+ return isConverterRequired_.load(std::memory_order_acquire);
267
294
  }
268
295
 
269
296
  } // namespace audioapi
@@ -3,32 +3,26 @@
3
3
  #include <audioapi/android/core/utils/AndroidFileWriterBackend.h>
4
4
  #include <audioapi/libs/miniaudio/miniaudio.h>
5
5
 
6
+ #include <atomic>
6
7
  #include <string>
7
8
  #include <memory>
8
9
  #include <tuple>
9
10
 
10
11
  namespace audioapi {
11
12
 
12
- class MiniAudioFileOptions;
13
-
14
13
  class MiniAudioFileWriter : public AndroidFileWriterBackend {
15
14
  public:
16
- MiniAudioFileWriter(
17
- float sampleRate,
18
- size_t channelCount,
19
- size_t bitRate,
20
- size_t androidFlags);
21
- ~MiniAudioFileWriter() override;
15
+ explicit MiniAudioFileWriter(
16
+ const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
17
+ const std::shared_ptr<AudioFileProperties> &fileProperties);
18
+ ~MiniAudioFileWriter();
22
19
 
23
- std::string openFile(int32_t streamSampleRate, int32_t streamChannelCount, int32_t streamMaxBufferSize) override;
24
- std::tuple<double, double> closeFile() override;
20
+ OpenFileResult openFile(float streamSampleRate, int32_t streamChannelCount, int32_t streamMaxBufferSize) override;
21
+ CloseFileResult closeFile() override;
25
22
 
26
23
  bool writeAudioData(void *data, int numFrames) override;
27
24
 
28
25
  private:
29
- std::shared_ptr<MiniAudioFileOptions> fileOptions_;
30
-
31
- std::atomic<bool> isFileOpen_{false};
32
26
  std::atomic<bool> isConverterRequired_{false};
33
27
 
34
28
  std::unique_ptr<ma_encoder> encoder_{nullptr};
@@ -36,11 +30,10 @@ class MiniAudioFileWriter : public AndroidFileWriterBackend {
36
30
  void *processingBuffer_{nullptr};
37
31
  ma_uint64 processingBufferLength_{0};
38
32
 
39
- bool initializeConverterIfNeeded();
40
- bool initializeEncoder();
33
+ ma_result initializeConverterIfNeeded();
34
+ ma_result initializeEncoder();
41
35
  ma_uint64 convertBuffer(void *data, int numFrames);
42
36
 
43
- bool isFileOpen();
44
37
  bool isConverterRequired();
45
38
  };
46
39
 
@@ -5,6 +5,7 @@
5
5
  #include <react/jni/JMessageQueueThread.h>
6
6
  #include <memory>
7
7
  #include <utility>
8
+ #include <string>
8
9
  #include <unordered_map>
9
10
 
10
11
  namespace audioapi {
@@ -28,4 +29,4 @@ class NativeFileInfo : public jni::JavaClass<NativeFileInfo> {
28
29
  }
29
30
  };
30
31
 
31
- }
32
+ } // namespace audioapi
@@ -1,6 +1,8 @@
1
1
  package com.swmansion.audioapi
2
2
 
3
3
  import com.facebook.jni.HybridData
4
+ import com.facebook.react.bridge.Arguments
5
+ import com.facebook.react.bridge.LifecycleEventListener
4
6
  import com.facebook.react.bridge.Promise
5
7
  import com.facebook.react.bridge.ReactApplicationContext
6
8
  import com.facebook.react.bridge.ReadableArray
@@ -8,6 +10,7 @@ import com.facebook.react.bridge.ReadableMap
8
10
  import com.facebook.react.common.annotations.FrameworkAPI
9
11
  import com.facebook.react.module.annotations.ReactModule
10
12
  import com.facebook.react.turbomodule.core.CallInvokerHolderImpl
13
+ import com.swmansion.audioapi.system.ForegroundServiceManager
11
14
  import com.swmansion.audioapi.system.MediaSessionManager
12
15
  import com.swmansion.audioapi.system.NativeFileInfo
13
16
  import com.swmansion.audioapi.system.PermissionRequestListener
@@ -17,7 +20,8 @@ import java.lang.ref.WeakReference
17
20
  @ReactModule(name = AudioAPIModule.NAME)
18
21
  class AudioAPIModule(
19
22
  reactContext: ReactApplicationContext,
20
- ) : NativeAudioAPIModuleSpec(reactContext) {
23
+ ) : NativeAudioAPIModuleSpec(reactContext),
24
+ LifecycleEventListener {
21
25
  companion object {
22
26
  const val NAME = NativeAudioAPIModuleSpec.NAME
23
27
  }
@@ -66,6 +70,28 @@ class AudioAPIModule(
66
70
  return true
67
71
  }
68
72
 
73
+ override fun onHostResume() {
74
+ // do nothing
75
+ }
76
+
77
+ override fun onHostPause() {
78
+ // do nothing
79
+ }
80
+
81
+ override fun onHostDestroy() {
82
+ // do nothing
83
+ }
84
+
85
+ override fun initialize() {
86
+ reactContext.get()?.addLifecycleEventListener(this)
87
+ }
88
+
89
+ override fun invalidate() {
90
+ reactContext.get()?.removeLifecycleEventListener(this)
91
+ // Cleanup foreground service manager
92
+ ForegroundServiceManager.cleanup()
93
+ }
94
+
69
95
  override fun getDevicePreferredSampleRate(): Double = MediaSessionManager.getDevicePreferredSampleRate()
70
96
 
71
97
  override fun setAudioSessionActivity(
@@ -84,19 +110,8 @@ class AudioAPIModule(
84
110
  // noting to do here
85
111
  }
86
112
 
87
- override fun setLockScreenInfo(info: ReadableMap?) {
88
- MediaSessionManager.setLockScreenInfo(info)
89
- }
90
-
91
- override fun resetLockScreenInfo() {
92
- MediaSessionManager.resetLockScreenInfo()
93
- }
94
-
95
- override fun enableRemoteCommand(
96
- name: String?,
97
- enabled: Boolean,
98
- ) {
99
- MediaSessionManager.enableRemoteCommand(name!!, enabled)
113
+ override fun disableSessionManagement() {
114
+ // nothing to do here
100
115
  }
101
116
 
102
117
  override fun observeAudioInterruptions(enabled: Boolean) {
@@ -120,7 +135,167 @@ class AudioAPIModule(
120
135
  promise.resolve(MediaSessionManager.checkRecordingPermissions())
121
136
  }
122
137
 
138
+ override fun requestNotificationPermissions(promise: Promise) {
139
+ val permissionRequestListener = PermissionRequestListener(promise)
140
+ MediaSessionManager.requestNotificationPermissions(permissionRequestListener)
141
+ }
142
+
143
+ override fun checkNotificationPermissions(promise: Promise) {
144
+ promise.resolve(MediaSessionManager.checkNotificationPermissions())
145
+ }
146
+
123
147
  override fun getDevicesInfo(promise: Promise) {
124
148
  promise.resolve(MediaSessionManager.getDevicesInfo())
125
149
  }
150
+
151
+ // New notification system methods
152
+ override fun registerNotification(
153
+ type: String?,
154
+ key: String?,
155
+ promise: Promise?,
156
+ ) {
157
+ try {
158
+ if (type == null || key == null) {
159
+ val result = Arguments.createMap()
160
+ result.putBoolean("success", false)
161
+ result.putString("error", "Type and key are required")
162
+ promise?.resolve(result)
163
+ return
164
+ }
165
+
166
+ MediaSessionManager.registerNotification(type, key)
167
+
168
+ val result = Arguments.createMap()
169
+ result.putBoolean("success", true)
170
+ promise?.resolve(result)
171
+ } catch (e: Exception) {
172
+ val result = Arguments.createMap()
173
+ result.putBoolean("success", false)
174
+ result.putString("error", e.message ?: "Unknown error")
175
+ promise?.resolve(result)
176
+ }
177
+ }
178
+
179
+ override fun showNotification(
180
+ key: String?,
181
+ options: ReadableMap?,
182
+ promise: Promise?,
183
+ ) {
184
+ try {
185
+ if (key == null) {
186
+ val result = Arguments.createMap()
187
+ result.putBoolean("success", false)
188
+ result.putString("error", "Key is required")
189
+ promise?.resolve(result)
190
+ return
191
+ }
192
+
193
+ MediaSessionManager.showNotification(key, options)
194
+
195
+ val result = Arguments.createMap()
196
+ result.putBoolean("success", true)
197
+ promise?.resolve(result)
198
+ } catch (e: Exception) {
199
+ val result = Arguments.createMap()
200
+ result.putBoolean("success", false)
201
+ result.putString("error", e.message ?: "Unknown error")
202
+ promise?.resolve(result)
203
+ }
204
+ }
205
+
206
+ override fun updateNotification(
207
+ key: String?,
208
+ options: ReadableMap?,
209
+ promise: Promise?,
210
+ ) {
211
+ try {
212
+ if (key == null) {
213
+ val result = Arguments.createMap()
214
+ result.putBoolean("success", false)
215
+ result.putString("error", "Key is required")
216
+ promise?.resolve(result)
217
+ return
218
+ }
219
+
220
+ MediaSessionManager.updateNotification(key, options)
221
+
222
+ val result = Arguments.createMap()
223
+ result.putBoolean("success", true)
224
+ promise?.resolve(result)
225
+ } catch (e: Exception) {
226
+ val result = Arguments.createMap()
227
+ result.putBoolean("success", false)
228
+ result.putString("error", e.message ?: "Unknown error")
229
+ promise?.resolve(result)
230
+ }
231
+ }
232
+
233
+ override fun hideNotification(
234
+ key: String?,
235
+ promise: Promise?,
236
+ ) {
237
+ try {
238
+ if (key == null) {
239
+ val result = Arguments.createMap()
240
+ result.putBoolean("success", false)
241
+ result.putString("error", "Key is required")
242
+ promise?.resolve(result)
243
+ return
244
+ }
245
+
246
+ MediaSessionManager.hideNotification(key)
247
+
248
+ val result = Arguments.createMap()
249
+ result.putBoolean("success", true)
250
+ promise?.resolve(result)
251
+ } catch (e: Exception) {
252
+ val result = Arguments.createMap()
253
+ result.putBoolean("success", false)
254
+ result.putString("error", e.message ?: "Unknown error")
255
+ promise?.resolve(result)
256
+ }
257
+ }
258
+
259
+ override fun unregisterNotification(
260
+ key: String?,
261
+ promise: Promise?,
262
+ ) {
263
+ try {
264
+ if (key == null) {
265
+ val result = Arguments.createMap()
266
+ result.putBoolean("success", false)
267
+ result.putString("error", "Key is required")
268
+ promise?.resolve(result)
269
+ return
270
+ }
271
+
272
+ MediaSessionManager.unregisterNotification(key)
273
+
274
+ val result = Arguments.createMap()
275
+ result.putBoolean("success", true)
276
+ promise?.resolve(result)
277
+ } catch (e: Exception) {
278
+ val result = Arguments.createMap()
279
+ result.putBoolean("success", false)
280
+ result.putString("error", e.message ?: "Unknown error")
281
+ promise?.resolve(result)
282
+ }
283
+ }
284
+
285
+ override fun isNotificationActive(
286
+ key: String?,
287
+ promise: Promise?,
288
+ ) {
289
+ try {
290
+ if (key == null) {
291
+ promise?.resolve(false)
292
+ return
293
+ }
294
+
295
+ val isActive = MediaSessionManager.isNotificationActive(key)
296
+ promise?.resolve(isActive)
297
+ } catch (e: Exception) {
298
+ promise?.resolve(false)
299
+ }
300
+ }
126
301
  }