react-native-audio-api 0.11.0-alpha.0 → 0.11.0-alpha.10

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 +353 -74
  8. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +32 -19
  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 +15 -15
  11. package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.cpp +170 -0
  12. package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.h +46 -0
  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 +366 -304
  18. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.h +49 -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 +154 -95
  23. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.h +10 -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 +109 -44
  85. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +8 -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 +39 -108
  138. package/common/cpp/audioapi/core/inputs/AudioRecorder.h +47 -46
  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 +28 -11
  285. package/ios/audioapi/ios/core/IOSAudioRecorder.mm +280 -45
  286. package/ios/audioapi/ios/core/NativeAudioPlayer.m +17 -14
  287. package/ios/audioapi/ios/core/NativeAudioRecorder.h +6 -3
  288. package/ios/audioapi/ios/core/NativeAudioRecorder.m +74 -6
  289. package/ios/audioapi/ios/core/utils/AudioDecoder.mm +22 -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/utils/IOSFileWriter.h +53 -0
  293. package/ios/audioapi/ios/core/utils/IOSFileWriter.mm +239 -0
  294. package/ios/audioapi/ios/core/utils/IOSRecorderCallback.h +47 -0
  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 +56 -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 +57 -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 +16 -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 +36 -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 +58 -45
  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 +86 -84
  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 +55 -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 +61 -46
  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 -35
  597. package/ios/audioapi/ios/core/IOSAudioFileOptions.mm +0 -135
  598. package/ios/audioapi/ios/core/IOSAudioFileWriter.h +0 -38
  599. package/ios/audioapi/ios/core/IOSAudioFileWriter.mm +0 -187
  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,28 +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>
8
+
9
+ #include <cstdio>
10
+ #include <memory>
11
+ #include <string>
6
12
 
7
13
  namespace audioapi {
8
14
 
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);
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
+ }
21
39
  }
22
40
 
41
+ MiniAudioFileWriter::MiniAudioFileWriter(
42
+ const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
43
+ const std::shared_ptr<AudioFileProperties> &fileProperties)
44
+ : AndroidFileWriterBackend(audioEventHandlerRegistry, fileProperties) {}
45
+
23
46
  MiniAudioFileWriter::~MiniAudioFileWriter() {
24
- isFileOpen_.store(false);
25
- fileOptions_.reset();
47
+ isFileOpen_.store(false, std::memory_order_release);
48
+ fileProperties_.reset();
26
49
 
27
50
  if (encoder_ != nullptr) {
28
51
  ma_encoder_uninit(encoder_.get());
@@ -41,41 +64,59 @@ MiniAudioFileWriter::~MiniAudioFileWriter() {
41
64
  }
42
65
  }
43
66
 
44
- void MiniAudioFileWriter::openFile(
45
- 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,
46
77
  int32_t streamChannelCount,
47
78
  int32_t streamMaxBufferSize) {
48
79
  streamSampleRate_ = streamSampleRate;
49
80
  streamChannelCount_ = streamChannelCount;
50
81
  streamMaxBufferSize_ = streamMaxBufferSize;
51
- bool success = false;
82
+ ma_result result;
83
+ framesWritten_.store(0, std::memory_order_release);
52
84
 
53
85
  isConverterRequired_.store(
54
- (streamSampleRate_ != fileOptions_->getSampleRate()) ||
55
- (streamChannelCount_ != fileOptions_->getChannelCount()) ||
56
- (fileOptions_->getDataFormat() != ma_format_f32));
86
+ (streamSampleRate_ != fileProperties_->sampleRate) ||
87
+ (streamChannelCount_ != fileProperties_->channelCount) ||
88
+ (getDataFormat(fileProperties_) != ma_format_f32),
89
+ std::memory_order_release);
57
90
 
58
- success = initializeConverterIfNeeded();
91
+ result = initializeConverterIfNeeded();
59
92
 
60
- if (!success) {
61
- return;
93
+ if (result != MA_SUCCESS) {
94
+ return OpenFileResult ::Err(
95
+ "Failed to initialize converter" + std::string(ma_result_description(result)));
62
96
  }
63
97
 
64
- success = initializeEncoder();
98
+ result = initializeEncoder();
65
99
 
66
- if (!success) {
67
- return;
100
+ if (result != MA_SUCCESS) {
101
+ return OpenFileResult ::Err(
102
+ "Failed to initialize encoder" + std::string(ma_result_description(result)));
68
103
  }
69
104
 
70
- isFileOpen_.store(true);
105
+ isFileOpen_.store(true, std::memory_order_release);
106
+ return OpenFileResult ::Ok(filePath_);
71
107
  }
72
108
 
73
- std::string 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() {
74
115
  if (!isFileOpen()) {
75
- return "";
116
+ return CloseFileResult ::Err("File is not open");
76
117
  }
77
118
 
78
- isFileOpen_.store(false);
119
+ isFileOpen_.store(false, std::memory_order_release);
79
120
 
80
121
  if (encoder_ != nullptr) {
81
122
  ma_encoder_uninit(encoder_.get());
@@ -93,12 +134,42 @@ std::string MiniAudioFileWriter::closeFile() {
93
134
  processingBufferLength_ = 0;
94
135
  }
95
136
 
96
- std::string closedFilePath = filePath_;
97
- filePath_ = "";
137
+ // Retrieve duration and file size
138
+ double durationInSeconds = 0.0;
139
+ double fileSizeInMB = 0.0;
140
+
141
+ ma_decoder decoder;
98
142
 
99
- return closedFilePath;
143
+ if (ma_decoder_init_file(filePath_.c_str(), NULL, &decoder) == MA_SUCCESS) {
144
+ ma_uint64 frameCount = 0;
145
+
146
+ if (ma_decoder_get_length_in_pcm_frames(&decoder, &frameCount) == MA_SUCCESS) {
147
+ durationInSeconds = static_cast<double>(frameCount) / decoder.outputSampleRate;
148
+ }
149
+
150
+ ma_decoder_uninit(&decoder);
151
+ }
152
+
153
+ FILE *file = fopen(filePath_.c_str(), "rb");
154
+
155
+ if (file != nullptr) {
156
+ fseek(file, 0, SEEK_END);
157
+ uint64_t fileSizeInBytes = ftell(file);
158
+ fclose(file);
159
+ fileSizeInMB = static_cast<double>(fileSizeInBytes) / MB_IN_BYTES;
160
+ }
161
+
162
+ filePath_ = "";
163
+ return CloseFileResult ::Ok({fileSizeInMB, durationInSeconds});
100
164
  }
101
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.
102
173
  bool MiniAudioFileWriter::writeAudioData(void *data, int numFrames) {
103
174
  ma_uint64 framesWritten = 0;
104
175
  ma_result result;
@@ -108,24 +179,16 @@ bool MiniAudioFileWriter::writeAudioData(void *data, int numFrames) {
108
179
  }
109
180
 
110
181
  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());
182
+ result = ma_encoder_write_pcm_frames(encoder_.get(), data, numFrames, &framesWritten);
120
183
 
121
184
  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());
185
+ invokeOnErrorCallback(
186
+ "Failed to write audio data to file: " + filePath_ +
187
+ std::string(ma_result_description(result)));
188
+ return false;
127
189
  }
128
190
 
191
+ framesWritten_.fetch_add(numFrames, std::memory_order_acq_rel);
129
192
  return result == MA_SUCCESS;
130
193
  }
131
194
 
@@ -135,16 +198,20 @@ bool MiniAudioFileWriter::writeAudioData(void *data, int numFrames) {
135
198
  encoder_.get(), processingBuffer_, convertedFrameCount, &framesWritten);
136
199
 
137
200
  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());
201
+ invokeOnErrorCallback(
202
+ "Failed to write converted audio data to file: " + filePath_ +
203
+ std::string(ma_result_description(result)));
204
+ return false;
143
205
  }
144
206
 
207
+ framesWritten_.fetch_add(numFrames, std::memory_order_acq_rel);
145
208
  return result == MA_SUCCESS;
146
209
  }
147
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.
148
215
  ma_uint64 MiniAudioFileWriter::convertBuffer(void *data, int numFrames) {
149
216
  ma_uint64 inputFrameCount = numFrames;
150
217
  ma_uint64 outputFrameCount = 0;
@@ -153,85 +220,77 @@ ma_uint64 MiniAudioFileWriter::convertBuffer(void *data, int numFrames) {
153
220
  converter_.get(), inputFrameCount, &outputFrameCount);
154
221
 
155
222
  ma_data_converter_process_pcm_frames(
156
- converter_.get(),
157
- data,
158
- &inputFrameCount,
159
- processingBuffer_,
160
- &outputFrameCount);
223
+ converter_.get(), data, &inputFrameCount, processingBuffer_, &outputFrameCount);
161
224
 
162
225
  return outputFrameCount;
163
226
  }
164
227
 
165
- 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() {
166
233
  if (!isConverterRequired_) {
167
- return true;
234
+ return MA_SUCCESS;
168
235
  }
169
236
 
170
237
  ma_result result;
238
+ ma_format dataFormat = getDataFormat(fileProperties_);
171
239
 
172
240
  ma_data_converter_config converterConfig = ma_data_converter_config_init(
173
241
  ma_format_f32,
174
- fileOptions_->getDataFormat(),
242
+ dataFormat,
175
243
  streamChannelCount_,
176
- fileOptions_->getChannelCount(),
177
- streamSampleRate_,
178
- fileOptions_->getSampleRate());
244
+ fileProperties_->channelCount,
245
+ static_cast<int32_t>(streamSampleRate_),
246
+ fileProperties_->sampleRate);
179
247
 
180
248
  converter_ = std::make_unique<ma_data_converter>();
181
249
  result = ma_data_converter_init(&converterConfig, NULL, converter_.get());
182
250
 
183
251
  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;
252
+ return result;
190
253
  }
191
254
 
192
255
  ma_data_converter_get_expected_output_frame_count(
193
256
  converter_.get(), streamMaxBufferSize_, &processingBufferLength_);
194
257
 
195
258
  processingBuffer_ = ma_malloc(
196
- processingBufferLength_ * fileOptions_->getChannelCount() *
197
- ma_get_bytes_per_sample(fileOptions_->getDataFormat()),
259
+ processingBufferLength_ * fileProperties_->channelCount * ma_get_bytes_per_sample(dataFormat),
198
260
  NULL);
199
261
 
200
- return true;
262
+ return MA_SUCCESS;
201
263
  }
202
264
 
203
- bool MiniAudioFileWriter::initializeEncoder() {
204
- filePath_ = fileOptions_->getFilePath("audio");
205
-
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() {
206
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();
207
279
 
208
280
  ma_encoder_config config = ma_encoder_config_init(
209
- fileOptions_->getFormat(),
210
- fileOptions_->getDataFormat(),
211
- fileOptions_->getChannelCount(),
212
- fileOptions_->getSampleRate());
281
+ getFormat(fileProperties_),
282
+ getDataFormat(fileProperties_),
283
+ fileProperties_->channelCount,
284
+ fileProperties_->sampleRate);
213
285
 
214
286
  encoder_ = std::make_unique<ma_encoder>();
215
287
  result = ma_encoder_init_file(filePath_.c_str(), &config, encoder_.get());
216
288
 
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();
289
+ return result;
231
290
  }
232
291
 
233
292
  bool MiniAudioFileWriter::isConverterRequired() {
234
- return isConverterRequired_.load();
293
+ return isConverterRequired_.load(std::memory_order_acquire);
235
294
  }
236
295
 
237
296
  } // namespace audioapi
@@ -3,31 +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>
9
+ #include <tuple>
8
10
 
9
11
  namespace audioapi {
10
12
 
11
- class MiniAudioFileOptions;
12
-
13
13
  class MiniAudioFileWriter : public AndroidFileWriterBackend {
14
14
  public:
15
- MiniAudioFileWriter(
16
- float sampleRate,
17
- size_t channelCount,
18
- size_t bitRate,
19
- size_t androidFlags);
20
- ~MiniAudioFileWriter() override;
15
+ explicit MiniAudioFileWriter(
16
+ const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
17
+ const std::shared_ptr<AudioFileProperties> &fileProperties);
18
+ ~MiniAudioFileWriter();
21
19
 
22
- void openFile(int32_t streamSampleRate, int32_t streamChannelCount, int32_t streamMaxBufferSize) override;
23
- std::string closeFile() override;
20
+ OpenFileResult openFile(float streamSampleRate, int32_t streamChannelCount, int32_t streamMaxBufferSize) override;
21
+ CloseFileResult closeFile() override;
24
22
 
25
23
  bool writeAudioData(void *data, int numFrames) override;
26
24
 
27
25
  private:
28
- std::shared_ptr<MiniAudioFileOptions> fileOptions_;
29
-
30
- std::atomic<bool> isFileOpen_{false};
31
26
  std::atomic<bool> isConverterRequired_{false};
32
27
 
33
28
  std::unique_ptr<ma_encoder> encoder_{nullptr};
@@ -35,11 +30,10 @@ class MiniAudioFileWriter : public AndroidFileWriterBackend {
35
30
  void *processingBuffer_{nullptr};
36
31
  ma_uint64 processingBufferLength_{0};
37
32
 
38
- bool initializeConverterIfNeeded();
39
- bool initializeEncoder();
33
+ ma_result initializeConverterIfNeeded();
34
+ ma_result initializeEncoder();
40
35
  ma_uint64 convertBuffer(void *data, int numFrames);
41
36
 
42
- bool isFileOpen();
43
37
  bool isConverterRequired();
44
38
  };
45
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
  }