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,11 +1,12 @@
1
1
  #pragma once
2
2
 
3
- #include <audioapi/core/AudioParam.h>
4
3
  #include <audioapi/core/AudioNode.h>
5
- #include <audioapi/core/inputs/AudioRecorder.h>
4
+ #include <audioapi/core/AudioParam.h>
6
5
  #include <audioapi/core/BaseAudioContext.h>
6
+ #include <audioapi/core/inputs/AudioRecorder.h>
7
7
  #include <audioapi/utils/CircularOverflowableAudioArray.h>
8
8
  #include <memory>
9
+ #include <vector>
9
10
 
10
11
  namespace audioapi {
11
12
 
@@ -18,26 +19,30 @@ class AudioBus;
18
19
  /// @note it will push silence if it is not connected to any Recorder
19
20
  class RecorderAdapterNode : public AudioNode {
20
21
  public:
21
- explicit RecorderAdapterNode(BaseAudioContext *context);
22
+ explicit RecorderAdapterNode(BaseAudioContext *context);
23
+
24
+ /// @brief Initialize the RecorderAdapterNode with a buffer size and channel count.
25
+ /// @note This method should be called ONLY ONCE when the buffer size is known.
26
+ /// @param bufferSize The size of the buffer to be used.
27
+ /// @param channelCount The number of channels.
28
+ void init(size_t bufferSize, int channelCount);
29
+ void cleanup();
22
30
 
23
- /// @brief Initialize the RecorderAdapterNode with a buffer size.
24
- /// @note This method should be called ONLY ONCE when the buffer size is known.
25
- /// @throws std::runtime_error if the node is already initialized.
26
- /// @param bufferSize The size of the buffer to be used.
27
- void init(size_t bufferSize);
31
+ int channelCount_;
32
+ // TODO: CircularOverflowableAudioBus
33
+ std::vector<std::shared_ptr<CircularOverflowableAudioArray>> buff_;
28
34
 
29
35
  protected:
30
- std::shared_ptr<AudioBus> processNode(const std::shared_ptr<AudioBus>& processingBus, int framesToProcess) override;
31
- std::shared_ptr<CircularOverflowableAudioArray> buff_;
36
+ std::shared_ptr<AudioBus> processNode(
37
+ const std::shared_ptr<AudioBus> &processingBus,
38
+ int framesToProcess) override;
39
+ std::shared_ptr<AudioBus> adapterOutputBus_;
32
40
 
33
41
  private:
34
- /// @brief Read audio frames from the recorder's internal adapterBuffer.
35
- /// @note If `framesToRead` is greater than the number of available frames, it will fill empty space with silence.
36
- /// @param output Pointer to the output buffer.
37
- /// @param framesToRead Number of frames to read.
38
- void readFrames(float *output, size_t framesToRead);
39
-
40
- friend class AudioRecorder;
42
+ /// @brief Read audio frames from the recorder's internal circular buffer into output buss.
43
+ /// @note If `framesToRead` is greater than the number of available frames, it will fill empty space with silence.
44
+ /// @param framesToRead Number of frames to read.
45
+ void readFrames(size_t framesToRead);
41
46
  };
42
47
 
43
48
  } // namespace audioapi
@@ -15,8 +15,13 @@
15
15
  #include <audioapi/utils/AudioArray.h>
16
16
  #include <audioapi/utils/AudioBus.h>
17
17
  #include <chrono>
18
+ #include <cstdio>
19
+ #include <memory>
20
+ #include <string>
21
+ #include <utility>
18
22
 
19
23
  namespace audioapi {
24
+ #if !RN_AUDIO_API_FFMPEG_DISABLED
20
25
  StreamerNode::StreamerNode(BaseAudioContext *context)
21
26
  : AudioScheduledSourceNode(context),
22
27
  fmtCtx_(nullptr),
@@ -25,20 +30,24 @@ StreamerNode::StreamerNode(BaseAudioContext *context)
25
30
  codecpar_(nullptr),
26
31
  pkt_(nullptr),
27
32
  frame_(nullptr),
28
- pendingFrame_(nullptr),
29
- bufferedBus_(nullptr),
30
- bufferedBusIndex_(0),
31
- maxBufferSize_(0),
32
- audio_stream_index_(-1),
33
33
  swrCtx_(nullptr),
34
34
  resampledData_(nullptr),
35
- maxResampledSamples_(0) {}
35
+ bufferedBus_(nullptr),
36
+ audio_stream_index_(-1),
37
+ maxResampledSamples_(0),
38
+ processedSamples_(0) {}
39
+ #else
40
+ StreamerNode::StreamerNode(BaseAudioContext *context) : AudioScheduledSourceNode(context) {}
41
+ #endif // RN_AUDIO_API_FFMPEG_DISABLED
36
42
 
37
43
  StreamerNode::~StreamerNode() {
44
+ #if !RN_AUDIO_API_FFMPEG_DISABLED
38
45
  cleanup();
46
+ #endif // RN_AUDIO_API_FFMPEG_DISABLED
39
47
  }
40
48
 
41
49
  bool StreamerNode::initialize(const std::string &input_url) {
50
+ #if !RN_AUDIO_API_FFMPEG_DISABLED
42
51
  if (isInitialized_) {
43
52
  cleanup();
44
53
  }
@@ -66,26 +75,77 @@ bool StreamerNode::initialize(const std::string &input_url) {
66
75
  return false;
67
76
  }
68
77
 
69
- maxBufferSize_ = BUFFER_LENGTH_SECONDS * codecCtx_->sample_rate;
70
- // If decoding is faster than playing, we buffer few seconds of audio
71
- bufferedBus_ = std::make_shared<AudioBus>(
72
- maxBufferSize_, codecpar_->ch_layout.nb_channels, codecCtx_->sample_rate);
73
-
74
78
  channelCount_ = codecpar_->ch_layout.nb_channels;
75
- audioBus_ = std::make_shared<AudioBus>(
76
- RENDER_QUANTUM_SIZE, channelCount_, context_->getSampleRate());
79
+ audioBus_ =
80
+ std::make_shared<AudioBus>(RENDER_QUANTUM_SIZE, channelCount_, context_->getSampleRate());
81
+
82
+ auto [sender, receiver] = channels::spsc::channel<
83
+ StreamingData,
84
+ channels::spsc::OverflowStrategy::WAIT_ON_FULL,
85
+ channels::spsc::WaitStrategy::ATOMIC_WAIT>(CHANNEL_CAPACITY);
86
+ sender_ = std::move(sender);
87
+ receiver_ = std::move(receiver);
77
88
 
78
89
  streamingThread_ = std::thread(&StreamerNode::streamAudio, this);
79
- streamFlag.store(true);
80
90
  isInitialized_ = true;
81
91
  return true;
92
+ #else
93
+ return false;
94
+ #endif // RN_AUDIO_API_FFMPEG_DISABLED
82
95
  }
83
96
 
84
- void StreamerNode::stop(double when) {
85
- AudioScheduledSourceNode::stop(when);
86
- streamFlag.store(false);
97
+ std::shared_ptr<AudioBus> StreamerNode::processNode(
98
+ const std::shared_ptr<AudioBus> &processingBus,
99
+ int framesToProcess) {
100
+ #if !RN_AUDIO_API_FFMPEG_DISABLED
101
+ size_t startOffset = 0;
102
+ size_t offsetLength = 0;
103
+ updatePlaybackInfo(processingBus, framesToProcess, startOffset, offsetLength);
104
+ isNodeFinished_.store(isFinished(), std::memory_order_release);
105
+
106
+ if (!isPlaying() && !isStopScheduled()) {
107
+ processingBus->zero();
108
+ return processingBus;
109
+ }
110
+
111
+ int bufferRemaining = bufferedBusSize_ - processedSamples_;
112
+ int alreadyProcessed = 0;
113
+ if (bufferRemaining < framesToProcess) {
114
+ if (bufferedBus_ != nullptr) {
115
+ for (int ch = 0; ch < processingBus->getNumberOfChannels(); ch++) {
116
+ memcpy(
117
+ processingBus->getChannel(ch)->getData(),
118
+ bufferedBus_->getChannel(ch)->getData() + processedSamples_,
119
+ bufferRemaining * sizeof(float));
120
+ }
121
+ framesToProcess -= bufferRemaining;
122
+ alreadyProcessed += bufferRemaining;
123
+ }
124
+ StreamingData data;
125
+ auto res = receiver_.try_receive(data);
126
+ if (res == channels::spsc::ResponseStatus::SUCCESS) {
127
+ bufferedBus_ = std::make_shared<AudioBus>(std::move(data.bus));
128
+ bufferedBusSize_ = data.size;
129
+ processedSamples_ = 0;
130
+ } else {
131
+ bufferedBus_ = nullptr;
132
+ }
133
+ }
134
+ if (bufferedBus_ != nullptr) {
135
+ for (int ch = 0; ch < processingBus->getNumberOfChannels(); ch++) {
136
+ memcpy(
137
+ processingBus->getChannel(ch)->getData() + alreadyProcessed,
138
+ bufferedBus_->getChannel(ch)->getData() + processedSamples_,
139
+ framesToProcess * sizeof(float));
140
+ }
141
+ processedSamples_ += framesToProcess;
142
+ }
143
+ #endif // RN_AUDIO_API_FFMPEG_DISABLED
144
+
145
+ return processingBus;
87
146
  }
88
147
 
148
+ #if !RN_AUDIO_API_FFMPEG_DISABLED
89
149
  bool StreamerNode::setupResampler() {
90
150
  // Allocate resampler context
91
151
  swrCtx_ = swr_alloc();
@@ -122,69 +182,23 @@ bool StreamerNode::setupResampler() {
122
182
  }
123
183
 
124
184
  void StreamerNode::streamAudio() {
125
- while (streamFlag.load()) {
126
- if (pendingFrame_ != nullptr) {
127
- if (!processFrameWithResampler(pendingFrame_)) {
185
+ while (!isNodeFinished_.load(std::memory_order_acquire)) {
186
+ if (av_read_frame(fmtCtx_, pkt_) < 0) {
187
+ return;
188
+ }
189
+ if (pkt_->stream_index == audio_stream_index_) {
190
+ if (avcodec_send_packet(codecCtx_, pkt_) != 0) {
128
191
  return;
129
192
  }
130
- } else {
131
- if (av_read_frame(fmtCtx_, pkt_) < 0) {
193
+ if (avcodec_receive_frame(codecCtx_, frame_) != 0) {
132
194
  return;
133
195
  }
134
- if (pkt_->stream_index == audio_stream_index_) {
135
- if (avcodec_send_packet(codecCtx_, pkt_) != 0) {
136
- return;
137
- }
138
- if (avcodec_receive_frame(codecCtx_, frame_) != 0) {
139
- return;
140
- }
141
- if (!processFrameWithResampler(frame_)) {
142
- return;
143
- }
196
+ if (!processFrameWithResampler(frame_)) {
197
+ return;
144
198
  }
145
- av_packet_unref(pkt_);
146
- }
147
- std::this_thread::sleep_for(std::chrono::milliseconds(10));
148
- }
149
- }
150
-
151
- std::shared_ptr<AudioBus> StreamerNode::processNode(
152
- const std::shared_ptr<AudioBus> &processingBus,
153
- int framesToProcess) {
154
- size_t startOffset = 0;
155
- size_t offsetLength = 0;
156
- updatePlaybackInfo(processingBus, framesToProcess, startOffset, offsetLength);
157
-
158
- if (!isPlaying() && !isStopScheduled()) {
159
- processingBus->zero();
160
- return processingBus;
161
- }
162
-
163
- // If we have enough buffered data, copy to output bus
164
- if (bufferedBusIndex_ >= framesToProcess) {
165
- Locker locker(mutex_);
166
- for (int ch = 0; ch < processingBus->getNumberOfChannels(); ch++) {
167
- memcpy(
168
- processingBus->getChannel(ch)->getData(),
169
- bufferedBus_->getChannel(ch)->getData(),
170
- offsetLength * sizeof(float));
171
-
172
- memmove(
173
- bufferedBus_->getChannel(ch)->getData(),
174
- bufferedBus_->getChannel(ch)->getData() + offsetLength,
175
- (maxBufferSize_ - offsetLength) * sizeof(float));
176
199
  }
177
- bufferedBusIndex_ -= offsetLength;
178
- } else {
179
- if (VERBOSE)
180
- printf(
181
- "Buffer underrun: have %zu, need %zu\n",
182
- bufferedBusIndex_,
183
- (size_t)framesToProcess);
184
- processingBus->zero();
200
+ av_packet_unref(pkt_);
185
201
  }
186
-
187
- return processingBus;
188
202
  }
189
203
 
190
204
  bool StreamerNode::processFrameWithResampler(AVFrame *frame) {
@@ -220,22 +234,21 @@ bool StreamerNode::processFrameWithResampler(AVFrame *frame) {
220
234
  return false;
221
235
  }
222
236
 
223
- // Check if converted data fits in buffer
224
- if (bufferedBusIndex_ + converted_samples > maxBufferSize_) {
225
- pendingFrame_ = frame;
237
+ // if we would like to finish dont copy anything
238
+ if (this->isFinished()) {
226
239
  return true;
227
- } else {
228
- pendingFrame_ = nullptr;
229
240
  }
230
-
231
- // Copy converted data to our buffer
232
- Locker locker(mutex_);
241
+ auto bus = AudioBus(
242
+ static_cast<size_t>(converted_samples),
243
+ codecCtx_->ch_layout.nb_channels,
244
+ context_->getSampleRate());
233
245
  for (int ch = 0; ch < codecCtx_->ch_layout.nb_channels; ch++) {
234
246
  auto *src = reinterpret_cast<float *>(resampledData_[ch]);
235
- float *dst = bufferedBus_->getChannel(ch)->getData() + bufferedBusIndex_;
247
+ float *dst = bus.getChannel(ch)->getData();
236
248
  memcpy(dst, src, converted_samples * sizeof(float));
237
249
  }
238
- bufferedBusIndex_ += converted_samples;
250
+ StreamingData data{std::move(bus), static_cast<size_t>(converted_samples)};
251
+ sender_.send(std::move(data));
239
252
  return true;
240
253
  }
241
254
 
@@ -280,10 +293,14 @@ bool StreamerNode::setupDecoder() {
280
293
  }
281
294
 
282
295
  void StreamerNode::cleanup() {
283
- streamFlag.store(false);
284
- // cleanup cannot be called from the streaming thread so there is no need to
285
- // check if we are in the same thread
286
- streamingThread_.join();
296
+ this->playbackState_ = PlaybackState::FINISHED;
297
+ isNodeFinished_.store(true, std::memory_order_release);
298
+ if (streamingThread_.joinable()) {
299
+ StreamingData dummy;
300
+ while (receiver_.try_receive(dummy) == channels::spsc::ResponseStatus::SUCCESS)
301
+ ; // clear the receiver
302
+ streamingThread_.join();
303
+ }
287
304
  if (swrCtx_ != nullptr) {
288
305
  swr_free(&swrCtx_);
289
306
  }
@@ -315,4 +332,5 @@ void StreamerNode::cleanup() {
315
332
  codecpar_ = nullptr;
316
333
  maxResampledSamples_ = 0;
317
334
  }
335
+ #endif // RN_AUDIO_API_FFMPEG_DISABLED
318
336
  } // namespace audioapi
@@ -11,24 +11,50 @@
11
11
  #pragma once
12
12
 
13
13
  #include <audioapi/core/sources/AudioScheduledSourceNode.h>
14
+ #include <audioapi/utils/AudioBus.h>
14
15
 
15
- #ifndef AUDIO_API_TEST_SUITE
16
+ #if !RN_AUDIO_API_FFMPEG_DISABLED
16
17
  extern "C" {
17
- #include <libavformat/avformat.h>
18
- #include <libavcodec/avcodec.h>
19
- #include <libavutil/samplefmt.h>
20
- #include <libavutil/channel_layout.h>
21
- #include <libavutil/opt.h>
22
- #include <libswresample/swresample.h>
18
+ #include <libavcodec/avcodec.h>
19
+ #include <libavformat/avformat.h>
20
+ #include <libavutil/channel_layout.h>
21
+ #include <libavutil/opt.h>
22
+ #include <libavutil/samplefmt.h>
23
+ #include <libswresample/swresample.h>
23
24
  }
24
- #endif
25
+ #endif // RN_AUDIO_API_FFMPEG_DISABLED
25
26
 
27
+ #include <audioapi/utils/SpscChannel.hpp>
28
+ #include <atomic>
26
29
  #include <cmath>
27
30
  #include <memory>
28
31
  #include <string>
29
- #include <atomic>
30
-
31
- static bool constexpr VERBOSE = false;
32
+ #include <utility>
33
+
34
+ static constexpr audioapi::channels::spsc::OverflowStrategy STREAMER_NODE_SPSC_OVERFLOW_STRATEGY =
35
+ audioapi::channels::spsc::OverflowStrategy::WAIT_ON_FULL;
36
+ static constexpr audioapi::channels::spsc::WaitStrategy STREAMER_NODE_SPSC_WAIT_STRATEGY =
37
+ audioapi::channels::spsc::WaitStrategy::ATOMIC_WAIT;
38
+
39
+ static constexpr bool VERBOSE = false;
40
+ static constexpr int CHANNEL_CAPACITY = 32;
41
+
42
+ struct StreamingData {
43
+ audioapi::AudioBus bus;
44
+ size_t size;
45
+ StreamingData() = default;
46
+ StreamingData(audioapi::AudioBus b, size_t s) : bus(b), size(s) {}
47
+ StreamingData(const StreamingData &data) : bus(data.bus), size(data.size) {}
48
+ StreamingData(StreamingData &&data) noexcept : bus(std::move(data.bus)), size(data.size) {}
49
+ StreamingData &operator=(const StreamingData &data) {
50
+ if (this == &data) {
51
+ return *this;
52
+ }
53
+ bus = data.bus;
54
+ size = data.size;
55
+ return *this;
56
+ }
57
+ };
32
58
 
33
59
  namespace audioapi {
34
60
 
@@ -42,33 +68,41 @@ class StreamerNode : public AudioScheduledSourceNode {
42
68
  /**
43
69
  * @brief Initialize all necessary ffmpeg components for streaming audio
44
70
  */
45
- bool initialize(const std::string& inputUrl);
46
- void stop(double when) override;
71
+ bool initialize(const std::string &inputUrl);
47
72
 
48
73
  protected:
49
- std::shared_ptr<AudioBus> processNode(const std::shared_ptr<AudioBus>& processingBus, int framesToProcess) override;
74
+ std::shared_ptr<AudioBus> processNode(
75
+ const std::shared_ptr<AudioBus> &processingBus,
76
+ int framesToProcess) override;
50
77
 
51
78
  private:
52
- #ifndef AUDIO_API_TEST_SUITE
53
- AVFormatContext* fmtCtx_;
54
- AVCodecContext* codecCtx_;
55
- const AVCodec* decoder_;
56
- AVCodecParameters* codecpar_;
57
- AVPacket* pkt_;
58
- AVFrame* frame_; // Frame that is currently being processed
59
- AVFrame* pendingFrame_; // Frame that is saved if bufferedBus is full
79
+ #if !RN_AUDIO_API_FFMPEG_DISABLED
80
+ AVFormatContext *fmtCtx_;
81
+ AVCodecContext *codecCtx_;
82
+ const AVCodec *decoder_;
83
+ AVCodecParameters *codecpar_;
84
+ AVPacket *pkt_;
85
+ AVFrame *frame_; // Frame that is currently being processed
86
+ SwrContext *swrCtx_;
87
+ uint8_t **resampledData_; // weird ffmpeg way of using raw byte pointers for resampled data
88
+
60
89
  std::shared_ptr<AudioBus> bufferedBus_; // audio bus for buffering hls frames
61
- size_t bufferedBusIndex_; // index in the buffered bus where we write the next frame
62
- size_t maxBufferSize_; // maximum size of the buffered bus
63
- int audio_stream_index_; // index of the audio stream channel in the input
64
- SwrContext* swrCtx_;
65
- uint8_t** resampledData_; // weird ffmpeg way of using raw byte pointers for resampled data
90
+ size_t bufferedBusSize_; // size of currently buffered bus
91
+ int audio_stream_index_; // index of the audio stream channel in the input
66
92
  int maxResampledSamples_;
67
- std::mutex mutex_;
93
+ size_t processedSamples_;
94
+
68
95
  std::thread streamingThread_;
69
- std::atomic<bool> streamFlag; // Flag to control the streaming thread
70
- static constexpr float BUFFER_LENGTH_SECONDS = 5.0f; // Length of the buffer in seconds
96
+ std::atomic<bool> isNodeFinished_; // Flag to control the streaming thread
71
97
  static constexpr int INITIAL_MAX_RESAMPLED_SAMPLES = 8192; // Initial size for resampled data
98
+ channels::spsc::
99
+ Sender<StreamingData, STREAMER_NODE_SPSC_OVERFLOW_STRATEGY, STREAMER_NODE_SPSC_WAIT_STRATEGY>
100
+ sender_;
101
+ channels::spsc::Receiver<
102
+ StreamingData,
103
+ STREAMER_NODE_SPSC_OVERFLOW_STRATEGY,
104
+ STREAMER_NODE_SPSC_WAIT_STRATEGY>
105
+ receiver_;
72
106
 
73
107
  /**
74
108
  * @brief Setting up the resampler
@@ -81,7 +115,7 @@ class StreamerNode : public AudioScheduledSourceNode {
81
115
  * @param frame The AVFrame to resample
82
116
  * @return true if successful, false otherwise
83
117
  */
84
- bool processFrameWithResampler(AVFrame* frame);
118
+ bool processFrameWithResampler(AVFrame *frame);
85
119
 
86
120
  /**
87
121
  * @brief Thread function to continuously read and process audio frames
@@ -100,7 +134,7 @@ class StreamerNode : public AudioScheduledSourceNode {
100
134
  * @return true if successful, false otherwise
101
135
  * @note This function initializes the FFmpeg libraries and opens the input stream
102
136
  */
103
- bool openInput(const std::string& inputUrl);
137
+ bool openInput(const std::string &inputUrl);
104
138
 
105
139
  /**
106
140
  * @brief Find the audio stream channel in the input
@@ -113,6 +147,6 @@ class StreamerNode : public AudioScheduledSourceNode {
113
147
  * @return true if successful, false otherwise
114
148
  */
115
149
  bool setupDecoder();
116
- #endif // AUDIO_API_TEST_SUITE
150
+ #endif // RN_AUDIO_API_FFMPEG_DISABLED
117
151
  };
118
152
  } // namespace audioapi
@@ -1,13 +1,12 @@
1
1
  #include <audioapi/core/sources/WorkletSourceNode.h>
2
2
  #include <audioapi/core/utils/Constants.h>
3
+ #include <memory>
4
+ #include <utility>
3
5
 
4
6
  namespace audioapi {
5
7
 
6
- WorkletSourceNode::WorkletSourceNode(
7
- BaseAudioContext *context,
8
- WorkletsRunner &&workletRunner)
9
- : AudioScheduledSourceNode(context),
10
- workletRunner_(std::move(workletRunner)) {
8
+ WorkletSourceNode::WorkletSourceNode(BaseAudioContext *context, WorkletsRunner &&workletRunner)
9
+ : AudioScheduledSourceNode(context), workletRunner_(std::move(workletRunner)) {
11
10
  isInitialized_ = true;
12
11
 
13
12
  // Prepare buffers for audio processing
@@ -30,8 +29,7 @@ std::shared_ptr<AudioBus> WorkletSourceNode::processNode(
30
29
  size_t startOffset = 0;
31
30
  size_t nonSilentFramesToProcess = framesToProcess;
32
31
 
33
- updatePlaybackInfo(
34
- processingBus, framesToProcess, startOffset, nonSilentFramesToProcess);
32
+ updatePlaybackInfo(processingBus, framesToProcess, startOffset, nonSilentFramesToProcess);
35
33
 
36
34
  if (nonSilentFramesToProcess == 0) {
37
35
  processingBus->zero();
@@ -1,40 +1,42 @@
1
1
  #pragma once
2
- #include <jsi/jsi.h>
3
2
  #include <audioapi/core/BaseAudioContext.h>
4
- #include <audioapi/utils/AudioBus.h>
5
3
  #include <audioapi/core/sources/AudioScheduledSourceNode.h>
6
4
  #include <audioapi/core/utils/worklets/SafeIncludes.h>
7
5
  #include <audioapi/core/utils/worklets/WorkletsRunner.h>
8
6
  #include <audioapi/jsi/AudioArrayBuffer.h>
9
7
  #include <audioapi/utils/AudioArray.h>
8
+ #include <audioapi/utils/AudioBus.h>
9
+ #include <jsi/jsi.h>
10
10
 
11
- #include <vector>
12
11
  #include <memory>
12
+ #include <vector>
13
13
 
14
14
  namespace audioapi {
15
15
 
16
16
  #if RN_AUDIO_API_TEST
17
17
  class WorkletSourceNode : public AudioScheduledSourceNode {
18
18
  public:
19
- explicit WorkletSourceNode(
20
- BaseAudioContext *context,
21
- WorkletsRunner &&workletRunner
22
- ) : AudioScheduledSourceNode(context) {}
19
+ explicit WorkletSourceNode(BaseAudioContext *context, WorkletsRunner &&workletRunner)
20
+ : AudioScheduledSourceNode(context) {}
23
21
 
24
22
  protected:
25
- std::shared_ptr<AudioBus> processNode(const std::shared_ptr<AudioBus>& processingBus, int framesToProcess) override { return processingBus; }
23
+ std::shared_ptr<AudioBus> processNode(
24
+ const std::shared_ptr<AudioBus> &processingBus,
25
+ int framesToProcess) override {
26
+ return processingBus;
27
+ }
26
28
  };
27
29
  #else
28
30
 
29
31
  class WorkletSourceNode : public AudioScheduledSourceNode {
30
32
  public:
31
- explicit WorkletSourceNode(
32
- BaseAudioContext *context,
33
- WorkletsRunner &&workletRunner
34
- );
33
+ explicit WorkletSourceNode(BaseAudioContext *context, WorkletsRunner &&workletRunner);
35
34
 
36
35
  protected:
37
- std::shared_ptr<AudioBus> processNode(const std::shared_ptr<AudioBus>& processingBus, int framesToProcess) override;
36
+ std::shared_ptr<AudioBus> processNode(
37
+ const std::shared_ptr<AudioBus> &processingBus,
38
+ int framesToProcess) override;
39
+
38
40
  private:
39
41
  WorkletsRunner workletRunner_;
40
42
  std::vector<std::shared_ptr<AudioArrayBuffer>> outputBuffsHandles_;
@@ -2,15 +2,5 @@
2
2
 
3
3
  namespace audioapi {
4
4
 
5
- enum class AudioFormat {
6
- UNKNOWN,
7
- WAV,
8
- OGG,
9
- FLAC,
10
- AAC,
11
- MP3,
12
- M4A,
13
- MP4,
14
- MOV
15
- };
5
+ enum class AudioFormat { UNKNOWN, WAV, OGG, FLAC, AAC, MP3, M4A, MP4, MOV };
16
6
  } // namespace audioapi
@@ -18,16 +18,23 @@ class AudioDecoder {
18
18
  public:
19
19
  AudioDecoder() = delete;
20
20
 
21
- [[nodiscard]] static std::shared_ptr<AudioBuffer> decodeWithFilePath(const std::string &path, float sampleRate);
21
+ [[nodiscard]] static std::shared_ptr<AudioBuffer> decodeWithFilePath(
22
+ const std::string &path,
23
+ float sampleRate);
22
24
  [[nodiscard]] static std::shared_ptr<AudioBuffer>
23
25
  decodeWithMemoryBlock(const void *data, size_t size, float sampleRate);
24
- [[nodiscard]] static std::shared_ptr<AudioBuffer>
25
- decodeWithPCMInBase64(const std::string &data, float inputSampleRate, int inputChannelCount, bool interleaved);
26
+ [[nodiscard]] static std::shared_ptr<AudioBuffer> decodeWithPCMInBase64(
27
+ const std::string &data,
28
+ float inputSampleRate,
29
+ int inputChannelCount,
30
+ bool interleaved);
26
31
 
27
32
  private:
28
33
  static std::vector<float> readAllPcmFrames(ma_decoder &decoder, int outputChannels);
29
- static std::shared_ptr<AudioBuffer>
30
- makeAudioBufferFromFloatBuffer(const std::vector<float> &buffer, float outputSampleRate, int outputChannels);
34
+ static std::shared_ptr<AudioBuffer> makeAudioBufferFromFloatBuffer(
35
+ const std::vector<float> &buffer,
36
+ float outputSampleRate,
37
+ int outputChannels);
31
38
 
32
39
  static AudioFormat detectAudioFormat(const void *data, size_t size) {
33
40
  if (size < 12)
@@ -66,7 +73,9 @@ class AudioDecoder {
66
73
  return AudioFormat::UNKNOWN;
67
74
  }
68
75
 
69
- static inline bool pathHasExtension(const std::string &path, const std::vector<std::string> &extensions) {
76
+ static inline bool pathHasExtension(
77
+ const std::string &path,
78
+ const std::vector<std::string> &extensions) {
70
79
  std::string pathLower = path;
71
80
  std::transform(pathLower.begin(), pathLower.end(), pathLower.begin(), ::tolower);
72
81
  for (const auto &ext : extensions) {
@@ -0,0 +1,41 @@
1
+ #include <audioapi/core/utils/AudioFileWriter.h>
2
+ #include <audioapi/events/AudioEventHandlerRegistry.h>
3
+ #include <memory>
4
+ #include <string>
5
+ #include <unordered_map>
6
+
7
+ namespace audioapi {
8
+
9
+ AudioFileWriter::AudioFileWriter(
10
+ const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
11
+ const std::shared_ptr<AudioFileProperties> &fileProperties)
12
+ : audioEventHandlerRegistry_(audioEventHandlerRegistry), fileProperties_(fileProperties) {}
13
+
14
+ void AudioFileWriter::setOnErrorCallback(uint64_t callbackId) {
15
+ errorCallbackId_.store(callbackId, std::memory_order_release);
16
+ }
17
+
18
+ void AudioFileWriter::clearOnErrorCallback() {
19
+ errorCallbackId_.store(0, std::memory_order_release);
20
+ }
21
+
22
+ void AudioFileWriter::invokeOnErrorCallback(const std::string &message) {
23
+ uint64_t callbackId = errorCallbackId_.load(std::memory_order_acquire);
24
+
25
+ // TODO: only the line above is atomic, which means that between reading the callbackId and invoking the callback,
26
+ // the callback could be cleared. We need to ensure that the callback is still valid when invoking it.
27
+ // TL;DR: atomic szpont
28
+ if (audioEventHandlerRegistry_ == nullptr || callbackId == 0) {
29
+ return;
30
+ }
31
+
32
+ std::unordered_map<std::string, EventValue> eventPayload = {};
33
+ eventPayload.insert({"message", message});
34
+ audioEventHandlerRegistry_->invokeHandlerWithEventBody("error", callbackId, eventPayload);
35
+ }
36
+
37
+ bool AudioFileWriter::isFileOpen() {
38
+ return isFileOpen_.load(std::memory_order_acquire);
39
+ }
40
+
41
+ } // namespace audioapi