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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (623) hide show
  1. package/README.md +13 -11
  2. package/RNAudioAPI.podspec +25 -18
  3. package/android/build.gradle +41 -5
  4. package/android/src/main/cpp/audioapi/CMakeLists.txt +6 -3
  5. package/android/src/main/cpp/audioapi/android/AudioAPIModule.cpp +10 -16
  6. package/android/src/main/cpp/audioapi/android/OnLoad.cpp +1 -2
  7. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.cpp +315 -84
  8. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +23 -23
  9. package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +13 -20
  10. package/android/src/main/cpp/audioapi/android/core/utils/AndroidFileWriterBackend.h +14 -18
  11. package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.cpp +72 -89
  12. package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.h +12 -23
  13. package/android/src/main/cpp/audioapi/android/core/utils/AudioDecoder.cpp +46 -58
  14. package/android/src/main/cpp/audioapi/android/core/utils/FileOptions.cpp +83 -0
  15. package/android/src/main/cpp/audioapi/android/core/utils/FileOptions.h +22 -0
  16. package/android/src/main/cpp/audioapi/android/core/utils/MiniaudioImplementation.cpp +5 -0
  17. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.cpp +363 -299
  18. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.h +48 -91
  19. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/ptrs.hpp +56 -0
  20. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/utils.cpp +114 -0
  21. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/utils.h +34 -0
  22. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.cpp +132 -105
  23. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.h +9 -16
  24. package/android/src/main/cpp/audioapi/android/system/NativeFileInfo.hpp +2 -1
  25. package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +189 -14
  26. package/android/src/main/java/com/swmansion/audioapi/core/NativeAudioPlayer.kt +10 -8
  27. package/android/src/main/java/com/swmansion/audioapi/core/NativeAudioRecorder.kt +10 -8
  28. package/android/src/main/java/com/swmansion/audioapi/system/AudioFocusListener.kt +5 -2
  29. package/android/src/main/java/com/swmansion/audioapi/system/CentralizedForegroundService.kt +128 -0
  30. package/android/src/main/java/com/swmansion/audioapi/system/ForegroundServiceManager.kt +116 -0
  31. package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionManager.kt +115 -107
  32. package/android/src/main/java/com/swmansion/audioapi/system/PermissionRequestListener.kt +2 -1
  33. package/android/src/main/java/com/swmansion/audioapi/system/notification/BaseNotification.kt +47 -0
  34. package/android/src/main/java/com/swmansion/audioapi/system/notification/NotificationRegistry.kt +191 -0
  35. package/android/src/main/java/com/swmansion/audioapi/system/notification/PlaybackNotification.kt +669 -0
  36. package/android/src/main/java/com/swmansion/audioapi/system/notification/PlaybackNotificationReceiver.kt +33 -0
  37. package/android/src/main/java/com/swmansion/audioapi/system/notification/RecordingNotification.kt +303 -0
  38. package/android/src/main/java/com/swmansion/audioapi/system/notification/RecordingNotificationReceiver.kt +45 -0
  39. package/android/src/main/java/com/swmansion/audioapi/system/notification/SimpleNotification.kt +119 -0
  40. package/android/src/main/jniLibs/arm64-v8a/libavcodec.so +0 -0
  41. package/android/src/main/jniLibs/arm64-v8a/libavformat.so +0 -0
  42. package/android/src/main/jniLibs/arm64-v8a/libavutil.so +0 -0
  43. package/android/src/main/jniLibs/arm64-v8a/libswresample.so +0 -0
  44. package/android/src/main/jniLibs/armeabi-v7a/libavcodec.so +0 -0
  45. package/android/src/main/jniLibs/armeabi-v7a/libavformat.so +0 -0
  46. package/android/src/main/jniLibs/armeabi-v7a/libavutil.so +0 -0
  47. package/android/src/main/jniLibs/armeabi-v7a/libswresample.so +0 -0
  48. package/android/src/main/jniLibs/x86/libavcodec.so +0 -0
  49. package/android/src/main/jniLibs/x86/libavformat.so +0 -0
  50. package/android/src/main/jniLibs/x86/libavutil.so +0 -0
  51. package/android/src/main/jniLibs/x86/libswresample.so +0 -0
  52. package/android/src/main/jniLibs/x86_64/libavcodec.so +0 -0
  53. package/android/src/main/jniLibs/x86_64/libavformat.so +0 -0
  54. package/android/src/main/jniLibs/x86_64/libavutil.so +0 -0
  55. package/android/src/main/jniLibs/x86_64/libswresample.so +0 -0
  56. package/android/src/oldarch/NativeAudioAPIModuleSpec.java +100 -76
  57. package/common/cpp/audioapi/AudioAPIModuleInstaller.h +45 -70
  58. package/common/cpp/audioapi/HostObjects/AudioContextHostObject.cpp +20 -22
  59. package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.cpp +3 -4
  60. package/common/cpp/audioapi/HostObjects/AudioParamHostObject.cpp +6 -8
  61. package/common/cpp/audioapi/HostObjects/AudioParamHostObject.h +2 -2
  62. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +102 -63
  63. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +4 -1
  64. package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.cpp +25 -31
  65. package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.h +3 -3
  66. package/common/cpp/audioapi/HostObjects/WorkletNodeHostObject.h +1 -2
  67. package/common/cpp/audioapi/HostObjects/WorkletProcessingNodeHostObject.h +1 -2
  68. package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.cpp +10 -18
  69. package/common/cpp/audioapi/HostObjects/destinations/AudioDestinationNodeHostObject.h +2 -3
  70. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp +18 -30
  71. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.h +1 -2
  72. package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.cpp +50 -0
  73. package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.h +20 -0
  74. package/common/cpp/audioapi/HostObjects/effects/DelayNodeHostObject.cpp +27 -0
  75. package/common/cpp/audioapi/HostObjects/effects/DelayNodeHostObject.h +21 -0
  76. package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.cpp +2 -2
  77. package/common/cpp/audioapi/HostObjects/effects/IIRFilterNodeHostObject.cpp +33 -0
  78. package/common/cpp/audioapi/HostObjects/effects/IIRFilterNodeHostObject.h +20 -0
  79. package/common/cpp/audioapi/HostObjects/effects/PeriodicWaveHostObject.h +1 -2
  80. package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.cpp +2 -2
  81. package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.h +1 -2
  82. package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.cpp +6 -12
  83. package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.h +7 -7
  84. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.cpp +98 -50
  85. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +5 -2
  86. package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.cpp +27 -22
  87. package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.h +12 -10
  88. package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.cpp +17 -22
  89. package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.h +5 -7
  90. package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.cpp +25 -11
  91. package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.h +8 -8
  92. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.cpp +19 -30
  93. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.h +2 -4
  94. package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.cpp +7 -11
  95. package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.cpp +2 -2
  96. package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.h +1 -2
  97. package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.cpp +6 -8
  98. package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.h +1 -2
  99. package/common/cpp/audioapi/HostObjects/sources/RecorderAdapterNodeHostObject.h +4 -5
  100. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.cpp +6 -2
  101. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.h +5 -6
  102. package/common/cpp/audioapi/HostObjects/sources/WorkletSourceNodeHostObject.h +1 -2
  103. package/common/cpp/audioapi/HostObjects/utils/AudioDecoderHostObject.cpp +39 -60
  104. package/common/cpp/audioapi/HostObjects/utils/AudioStretcherHostObject.cpp +15 -30
  105. package/common/cpp/audioapi/core/AudioContext.cpp +23 -28
  106. package/common/cpp/audioapi/core/AudioContext.h +6 -3
  107. package/common/cpp/audioapi/core/AudioNode.cpp +17 -19
  108. package/common/cpp/audioapi/core/AudioNode.h +19 -8
  109. package/common/cpp/audioapi/core/AudioParam.cpp +68 -100
  110. package/common/cpp/audioapi/core/AudioParam.h +20 -12
  111. package/common/cpp/audioapi/core/BaseAudioContext.cpp +52 -34
  112. package/common/cpp/audioapi/core/BaseAudioContext.h +26 -14
  113. package/common/cpp/audioapi/core/OfflineAudioContext.cpp +12 -17
  114. package/common/cpp/audioapi/core/OfflineAudioContext.h +10 -5
  115. package/common/cpp/audioapi/core/analysis/AnalyserNode.cpp +13 -21
  116. package/common/cpp/audioapi/core/analysis/AnalyserNode.h +8 -6
  117. package/common/cpp/audioapi/core/destinations/AudioDestinationNode.cpp +1 -0
  118. package/common/cpp/audioapi/core/destinations/AudioDestinationNode.h +5 -3
  119. package/common/cpp/audioapi/core/effects/BiquadFilterNode.cpp +96 -74
  120. package/common/cpp/audioapi/core/effects/BiquadFilterNode.h +44 -15
  121. package/common/cpp/audioapi/core/effects/ConvolverNode.cpp +201 -0
  122. package/common/cpp/audioapi/core/effects/ConvolverNode.h +64 -0
  123. package/common/cpp/audioapi/core/effects/DelayNode.cpp +101 -0
  124. package/common/cpp/audioapi/core/effects/DelayNode.h +39 -0
  125. package/common/cpp/audioapi/core/effects/GainNode.cpp +1 -0
  126. package/common/cpp/audioapi/core/effects/GainNode.h +3 -1
  127. package/common/cpp/audioapi/core/effects/IIRFilterNode.cpp +166 -0
  128. package/common/cpp/audioapi/core/effects/IIRFilterNode.h +74 -0
  129. package/common/cpp/audioapi/core/effects/PeriodicWave.cpp +22 -35
  130. package/common/cpp/audioapi/core/effects/PeriodicWave.h +4 -9
  131. package/common/cpp/audioapi/core/effects/StereoPannerNode.cpp +4 -5
  132. package/common/cpp/audioapi/core/effects/StereoPannerNode.h +4 -2
  133. package/common/cpp/audioapi/core/effects/WorkletNode.cpp +11 -13
  134. package/common/cpp/audioapi/core/effects/WorkletNode.h +15 -12
  135. package/common/cpp/audioapi/core/effects/WorkletProcessingNode.cpp +4 -4
  136. package/common/cpp/audioapi/core/effects/WorkletProcessingNode.h +15 -14
  137. package/common/cpp/audioapi/core/inputs/AudioRecorder.cpp +66 -36
  138. package/common/cpp/audioapi/core/inputs/AudioRecorder.h +42 -44
  139. package/common/cpp/audioapi/core/sources/AudioBuffer.cpp +4 -6
  140. package/common/cpp/audioapi/core/sources/AudioBuffer.h +4 -7
  141. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +48 -57
  142. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +37 -34
  143. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +55 -17
  144. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +35 -28
  145. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +41 -49
  146. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +8 -6
  147. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +29 -24
  148. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +6 -6
  149. package/common/cpp/audioapi/core/sources/ConstantSourceNode.cpp +3 -4
  150. package/common/cpp/audioapi/core/sources/ConstantSourceNode.h +3 -1
  151. package/common/cpp/audioapi/core/sources/OscillatorNode.cpp +12 -23
  152. package/common/cpp/audioapi/core/sources/OscillatorNode.h +6 -4
  153. package/common/cpp/audioapi/core/sources/RecorderAdapterNode.cpp +43 -16
  154. package/common/cpp/audioapi/core/sources/RecorderAdapterNode.h +22 -17
  155. package/common/cpp/audioapi/core/sources/StreamerNode.cpp +105 -87
  156. package/common/cpp/audioapi/core/sources/StreamerNode.h +67 -33
  157. package/common/cpp/audioapi/core/sources/WorkletSourceNode.cpp +5 -7
  158. package/common/cpp/audioapi/core/sources/WorkletSourceNode.h +15 -13
  159. package/common/cpp/audioapi/core/types/AudioFormat.h +1 -11
  160. package/common/cpp/audioapi/core/utils/AudioDecoder.h +15 -6
  161. package/common/cpp/audioapi/core/utils/AudioFileWriter.cpp +41 -0
  162. package/common/cpp/audioapi/core/utils/AudioFileWriter.h +44 -0
  163. package/common/cpp/audioapi/core/utils/AudioNodeDestructor.cpp +5 -6
  164. package/common/cpp/audioapi/core/utils/AudioNodeDestructor.h +7 -10
  165. package/common/cpp/audioapi/core/utils/AudioNodeManager.cpp +17 -19
  166. package/common/cpp/audioapi/core/utils/AudioNodeManager.h +8 -11
  167. package/common/cpp/audioapi/core/utils/AudioParamEventQueue.cpp +3 -3
  168. package/common/cpp/audioapi/core/utils/AudioParamEventQueue.h +5 -5
  169. package/common/cpp/audioapi/core/utils/AudioRecorderCallback.cpp +101 -0
  170. package/common/cpp/audioapi/core/utils/AudioRecorderCallback.h +52 -0
  171. package/common/cpp/audioapi/core/utils/AudioStretcher.cpp +6 -6
  172. package/common/cpp/audioapi/core/utils/Constants.h +7 -3
  173. package/common/cpp/audioapi/core/utils/ParamChangeEvent.cpp +1 -0
  174. package/common/cpp/audioapi/core/utils/ParamChangeEvent.h +9 -9
  175. package/common/cpp/audioapi/core/utils/worklets/SafeIncludes.h +33 -34
  176. package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.cpp +17 -19
  177. package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.h +23 -19
  178. package/common/cpp/audioapi/dsp/AudioUtils.cpp +4 -10
  179. package/common/cpp/audioapi/dsp/AudioUtils.h +1 -1
  180. package/common/cpp/audioapi/dsp/Convolver.cpp +201 -0
  181. package/common/cpp/audioapi/dsp/Convolver.h +47 -0
  182. package/common/cpp/audioapi/dsp/FFT.cpp +1 -27
  183. package/common/cpp/audioapi/dsp/FFT.h +19 -3
  184. package/common/cpp/audioapi/dsp/VectorMath.cpp +24 -58
  185. package/common/cpp/audioapi/dsp/VectorMath.h +35 -8
  186. package/common/cpp/audioapi/dsp/Windows.cpp +4 -9
  187. package/common/cpp/audioapi/dsp/Windows.h +24 -23
  188. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.cpp +12 -17
  189. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +45 -40
  190. package/common/cpp/audioapi/events/IAudioEventHandlerRegistry.h +15 -7
  191. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/avcodec.h +4 -4
  192. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec.h +1 -1
  193. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_desc.h +1 -1
  194. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_id.h +3 -1
  195. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_par.h +2 -2
  196. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/defs.h +3 -0
  197. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/packet.h +1 -1
  198. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/smpte_436m.h +254 -0
  199. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/version.h +1 -1
  200. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/avformat.h +6 -6
  201. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version.h +2 -2
  202. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version_major.h +2 -0
  203. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avassert.h +5 -2
  204. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avutil.h +2 -2
  205. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/channel_layout.h +2 -2
  206. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/csp.h +1 -1
  207. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/dict.h +1 -1
  208. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/ffversion.h +1 -1
  209. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/film_grain_params.h +1 -1
  210. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/frame.h +1 -1
  211. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hdr_dynamic_vivid_metadata.h +3 -3
  212. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext.h +1 -1
  213. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_opencl.h +1 -1
  214. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_qsv.h +0 -1
  215. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_vulkan.h +1 -1
  216. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/iamf.h +2 -2
  217. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/lfg.h +2 -2
  218. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/log.h +2 -2
  219. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/mathematics.h +1 -1
  220. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/opt.h +4 -4
  221. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rational.h +1 -1
  222. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rc4.h +1 -1
  223. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/refstruct.h +1 -1
  224. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/spherical.h +6 -0
  225. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tdrdi.h +1 -1
  226. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tx.h +1 -1
  227. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/version.h +3 -3
  228. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/video_hint.h +1 -1
  229. package/common/cpp/audioapi/external/ffmpeg_include/libswresample/swresample.h +1 -1
  230. package/common/cpp/audioapi/external/ffmpeg_include/libswresample/version.h +1 -1
  231. package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64/libavcodec.framework/libavcodec +0 -0
  232. package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64_x86_64-simulator/libavcodec.framework/libavcodec +0 -0
  233. package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64/libavformat.framework/libavformat +0 -0
  234. package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64_x86_64-simulator/libavformat.framework/libavformat +0 -0
  235. package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64/libavutil.framework/libavutil +0 -0
  236. package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64_x86_64-simulator/libavutil.framework/libavutil +0 -0
  237. package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64/libswresample.framework/libswresample +0 -0
  238. package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64_x86_64-simulator/libswresample.framework/libswresample +0 -0
  239. package/common/cpp/audioapi/jsi/AudioArrayBuffer.h +4 -5
  240. package/common/cpp/audioapi/jsi/JsiHostObject.cpp +11 -13
  241. package/common/cpp/audioapi/jsi/JsiHostObject.h +26 -33
  242. package/common/cpp/audioapi/jsi/JsiPromise.cpp +34 -67
  243. package/common/cpp/audioapi/jsi/JsiPromise.h +65 -26
  244. package/common/cpp/audioapi/jsi/RuntimeLifecycleMonitor.cpp +7 -10
  245. package/common/cpp/audioapi/jsi/RuntimeLifecycleMonitor.h +1 -3
  246. package/common/cpp/audioapi/libs/ffmpeg/FFmpegDecoding.cpp +4 -3
  247. package/common/cpp/audioapi/libs/ffmpeg/relinking.md +24 -0
  248. package/common/cpp/audioapi/utils/AlignedAllocator.hpp +53 -0
  249. package/common/cpp/audioapi/utils/AudioArray.cpp +3 -8
  250. package/common/cpp/audioapi/utils/AudioArray.h +3 -11
  251. package/common/cpp/audioapi/utils/AudioBus.cpp +79 -149
  252. package/common/cpp/audioapi/utils/AudioBus.h +17 -14
  253. package/common/cpp/audioapi/utils/AudioFileProperties.cpp +92 -0
  254. package/common/cpp/audioapi/utils/AudioFileProperties.h +76 -0
  255. package/common/cpp/audioapi/utils/Benchmark.hpp +50 -47
  256. package/common/cpp/audioapi/utils/CircularAudioArray.cpp +6 -18
  257. package/common/cpp/audioapi/utils/CircularOverflowableAudioArray.cpp +6 -10
  258. package/common/cpp/audioapi/utils/CircularOverflowableAudioArray.h +2 -2
  259. package/common/cpp/audioapi/utils/CrossThreadEventScheduler.hpp +12 -9
  260. package/common/cpp/audioapi/utils/MoveOnlyFunction.hpp +17 -15
  261. package/common/cpp/audioapi/utils/Result.hpp +323 -0
  262. package/common/cpp/audioapi/utils/RingBiDirectionalBuffer.hpp +22 -28
  263. package/common/cpp/audioapi/utils/SpscChannel.hpp +329 -305
  264. package/common/cpp/audioapi/utils/ThreadPool.hpp +104 -20
  265. package/common/cpp/audioapi/utils/UnitConversion.h +9 -0
  266. package/common/cpp/test/CMakeLists.txt +15 -15
  267. package/common/cpp/test/src/AudioParamTest.cpp +4 -3
  268. package/common/cpp/test/src/AudioScheduledSourceTest.cpp +113 -0
  269. package/common/cpp/test/src/ConstantSourceTest.cpp +5 -7
  270. package/common/cpp/test/src/DelayTest.cpp +108 -0
  271. package/common/cpp/test/src/GainTest.cpp +4 -5
  272. package/common/cpp/test/src/IIRFilterTest.cpp +153 -0
  273. package/common/cpp/test/src/MockAudioEventHandlerRegistry.h +19 -11
  274. package/common/cpp/test/src/OscillatorTest.cpp +2 -1
  275. package/common/cpp/test/src/StereoPannerTest.cpp +6 -9
  276. package/common/cpp/test/src/biquad/BiquadFilterChromium.cpp +372 -0
  277. package/common/cpp/test/src/biquad/BiquadFilterChromium.h +65 -0
  278. package/common/cpp/test/src/biquad/BiquadFilterTest.cpp +272 -0
  279. package/common/cpp/test/src/biquad/BiquadFilterTest.h +47 -0
  280. package/ios/audioapi/ios/AudioAPIModule.h +4 -3
  281. package/ios/audioapi/ios/AudioAPIModule.mm +148 -34
  282. package/ios/audioapi/ios/core/IOSAudioPlayer.h +2 -2
  283. package/ios/audioapi/ios/core/IOSAudioPlayer.mm +7 -6
  284. package/ios/audioapi/ios/core/IOSAudioRecorder.h +26 -18
  285. package/ios/audioapi/ios/core/IOSAudioRecorder.mm +244 -54
  286. package/ios/audioapi/ios/core/NativeAudioPlayer.m +17 -14
  287. package/ios/audioapi/ios/core/NativeAudioRecorder.h +4 -0
  288. package/ios/audioapi/ios/core/NativeAudioRecorder.m +49 -7
  289. package/ios/audioapi/ios/core/utils/AudioDecoder.mm +21 -4
  290. package/ios/audioapi/ios/core/utils/FileOptions.h +33 -0
  291. package/ios/audioapi/ios/core/utils/FileOptions.mm +195 -0
  292. package/ios/audioapi/ios/core/{IOSAudioFileWriter.h → utils/IOSFileWriter.h} +16 -14
  293. package/ios/audioapi/ios/core/utils/IOSFileWriter.mm +239 -0
  294. package/ios/audioapi/ios/core/{IOSRecorderCallback.h → utils/IOSRecorderCallback.h} +7 -17
  295. package/ios/audioapi/ios/core/utils/IOSRecorderCallback.mm +185 -0
  296. package/ios/audioapi/ios/system/AudioEngine.h +21 -16
  297. package/ios/audioapi/ios/system/AudioEngine.mm +153 -132
  298. package/ios/audioapi/ios/system/AudioSessionManager.h +25 -11
  299. package/ios/audioapi/ios/system/AudioSessionManager.mm +277 -203
  300. package/ios/audioapi/ios/system/NotificationManager.mm +47 -53
  301. package/ios/audioapi/ios/system/notification/BaseNotification.h +58 -0
  302. package/ios/audioapi/ios/system/notification/NotificationRegistry.h +70 -0
  303. package/ios/audioapi/ios/system/notification/NotificationRegistry.mm +172 -0
  304. package/ios/audioapi/ios/system/notification/PlaybackNotification.h +27 -0
  305. package/ios/audioapi/ios/system/notification/PlaybackNotification.mm +427 -0
  306. package/lib/commonjs/AudioAPIModule/AudioAPIModule.js +90 -0
  307. package/lib/commonjs/AudioAPIModule/AudioAPIModule.js.map +1 -0
  308. package/lib/commonjs/AudioAPIModule/globals.d.js +6 -0
  309. package/lib/commonjs/AudioAPIModule/globals.d.js.map +1 -0
  310. package/lib/commonjs/AudioAPIModule/index.js +14 -0
  311. package/lib/commonjs/AudioAPIModule/index.js.map +1 -0
  312. package/lib/commonjs/api.js +89 -12
  313. package/lib/commonjs/api.js.map +1 -1
  314. package/lib/commonjs/api.web.js +35 -14
  315. package/lib/commonjs/api.web.js.map +1 -1
  316. package/lib/commonjs/core/AudioBufferBaseSourceNode.js +3 -0
  317. package/lib/commonjs/core/AudioBufferBaseSourceNode.js.map +1 -1
  318. package/lib/commonjs/core/AudioBufferQueueSourceNode.js +5 -2
  319. package/lib/commonjs/core/AudioBufferQueueSourceNode.js.map +1 -1
  320. package/lib/commonjs/core/AudioContext.js +5 -8
  321. package/lib/commonjs/core/AudioContext.js.map +1 -1
  322. package/lib/commonjs/core/AudioNode.js +1 -1
  323. package/lib/commonjs/core/AudioNode.js.map +1 -1
  324. package/lib/commonjs/core/AudioParam.js +18 -11
  325. package/lib/commonjs/core/AudioParam.js.map +1 -1
  326. package/lib/commonjs/core/AudioRecorder.js +43 -55
  327. package/lib/commonjs/core/AudioRecorder.js.map +1 -1
  328. package/lib/commonjs/core/BaseAudioContext.js +61 -30
  329. package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
  330. package/lib/commonjs/core/ConvolverNode.js +37 -0
  331. package/lib/commonjs/core/ConvolverNode.js.map +1 -0
  332. package/lib/commonjs/core/DelayNode.js +17 -0
  333. package/lib/commonjs/core/DelayNode.js.map +1 -0
  334. package/lib/commonjs/core/IIRFilterNode.js +19 -0
  335. package/lib/commonjs/core/IIRFilterNode.js.map +1 -0
  336. package/lib/commonjs/core/OfflineAudioContext.js +3 -6
  337. package/lib/commonjs/core/OfflineAudioContext.js.map +1 -1
  338. package/lib/commonjs/plugin/withAudioAPI.js +46 -0
  339. package/lib/commonjs/plugin/withAudioAPI.js.map +1 -1
  340. package/lib/commonjs/specs/NativeAudioAPIModule.js.map +1 -1
  341. package/lib/commonjs/system/AudioManager.js +9 -15
  342. package/lib/commonjs/system/AudioManager.js.map +1 -1
  343. package/lib/commonjs/system/index.js +13 -0
  344. package/lib/commonjs/system/index.js.map +1 -1
  345. package/lib/commonjs/system/notification/PlaybackNotificationManager.js +138 -0
  346. package/lib/commonjs/system/notification/PlaybackNotificationManager.js.map +1 -0
  347. package/lib/commonjs/system/notification/RecordingNotificationManager.js +185 -0
  348. package/lib/commonjs/system/notification/RecordingNotificationManager.js.map +1 -0
  349. package/lib/commonjs/system/notification/SimpleNotificationManager.js +125 -0
  350. package/lib/commonjs/system/notification/SimpleNotificationManager.js.map +1 -0
  351. package/lib/commonjs/system/notification/index.js +45 -0
  352. package/lib/commonjs/system/notification/index.js.map +1 -0
  353. package/lib/commonjs/system/notification/types.js +6 -0
  354. package/lib/commonjs/system/notification/types.js.map +1 -0
  355. package/lib/commonjs/types.js +28 -35
  356. package/lib/commonjs/types.js.map +1 -1
  357. package/lib/commonjs/utils/filePresets.js +43 -0
  358. package/lib/commonjs/utils/filePresets.js.map +1 -0
  359. package/lib/commonjs/utils/index.js +12 -27
  360. package/lib/commonjs/utils/index.js.map +1 -1
  361. package/lib/commonjs/web-core/AudioContext.js +21 -1
  362. package/lib/commonjs/web-core/AudioContext.js.map +1 -1
  363. package/lib/commonjs/web-core/ConvolverNode.js +40 -0
  364. package/lib/commonjs/web-core/ConvolverNode.js.map +1 -0
  365. package/lib/commonjs/web-core/ConvolverNodeOptions.js +6 -0
  366. package/lib/commonjs/web-core/ConvolverNodeOptions.js.map +1 -0
  367. package/lib/commonjs/web-core/DelayNode.js +17 -0
  368. package/lib/commonjs/web-core/DelayNode.js.map +1 -0
  369. package/lib/commonjs/web-core/IIRFilterNode.js +19 -0
  370. package/lib/commonjs/web-core/IIRFilterNode.js.map +1 -0
  371. package/lib/commonjs/web-core/OfflineAudioContext.js +20 -0
  372. package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
  373. package/lib/commonjs/web-system/index.js +17 -0
  374. package/lib/commonjs/web-system/index.js.map +1 -0
  375. package/lib/commonjs/web-system/notification/PlaybackNotificationManager.js +37 -0
  376. package/lib/commonjs/web-system/notification/PlaybackNotificationManager.js.map +1 -0
  377. package/lib/commonjs/web-system/notification/RecordingNotificationManager.js +37 -0
  378. package/lib/commonjs/web-system/notification/RecordingNotificationManager.js.map +1 -0
  379. package/lib/commonjs/web-system/notification/index.js +21 -0
  380. package/lib/commonjs/web-system/notification/index.js.map +1 -0
  381. package/lib/module/AudioAPIModule/AudioAPIModule.js +87 -0
  382. package/lib/module/AudioAPIModule/AudioAPIModule.js.map +1 -0
  383. package/lib/module/AudioAPIModule/globals.d.js +4 -0
  384. package/lib/module/AudioAPIModule/globals.d.js.map +1 -0
  385. package/lib/module/AudioAPIModule/index.js +4 -0
  386. package/lib/module/AudioAPIModule/index.js.map +1 -0
  387. package/lib/module/api.js +7 -12
  388. package/lib/module/api.js.map +1 -1
  389. package/lib/module/api.web.js +4 -1
  390. package/lib/module/api.web.js.map +1 -1
  391. package/lib/module/core/AudioBufferBaseSourceNode.js +3 -0
  392. package/lib/module/core/AudioBufferBaseSourceNode.js.map +1 -1
  393. package/lib/module/core/AudioBufferQueueSourceNode.js +5 -2
  394. package/lib/module/core/AudioBufferQueueSourceNode.js.map +1 -1
  395. package/lib/module/core/AudioContext.js +5 -8
  396. package/lib/module/core/AudioContext.js.map +1 -1
  397. package/lib/module/core/AudioNode.js +1 -1
  398. package/lib/module/core/AudioNode.js.map +1 -1
  399. package/lib/module/core/AudioParam.js +18 -11
  400. package/lib/module/core/AudioParam.js.map +1 -1
  401. package/lib/module/core/AudioRecorder.js +44 -56
  402. package/lib/module/core/AudioRecorder.js.map +1 -1
  403. package/lib/module/core/BaseAudioContext.js +63 -32
  404. package/lib/module/core/BaseAudioContext.js.map +1 -1
  405. package/lib/module/core/ConvolverNode.js +31 -0
  406. package/lib/module/core/ConvolverNode.js.map +1 -0
  407. package/lib/module/core/DelayNode.js +11 -0
  408. package/lib/module/core/DelayNode.js.map +1 -0
  409. package/lib/module/core/IIRFilterNode.js +13 -0
  410. package/lib/module/core/IIRFilterNode.js.map +1 -0
  411. package/lib/module/core/OfflineAudioContext.js +3 -6
  412. package/lib/module/core/OfflineAudioContext.js.map +1 -1
  413. package/lib/module/plugin/withAudioAPI.js +47 -1
  414. package/lib/module/plugin/withAudioAPI.js.map +1 -1
  415. package/lib/module/specs/NativeAudioAPIModule.js.map +1 -1
  416. package/lib/module/system/AudioManager.js +9 -15
  417. package/lib/module/system/AudioManager.js.map +1 -1
  418. package/lib/module/system/index.js +1 -0
  419. package/lib/module/system/index.js.map +1 -1
  420. package/lib/module/system/notification/PlaybackNotificationManager.js +134 -0
  421. package/lib/module/system/notification/PlaybackNotificationManager.js.map +1 -0
  422. package/lib/module/system/notification/RecordingNotificationManager.js +181 -0
  423. package/lib/module/system/notification/RecordingNotificationManager.js.map +1 -0
  424. package/lib/module/system/notification/SimpleNotificationManager.js +121 -0
  425. package/lib/module/system/notification/SimpleNotificationManager.js.map +1 -0
  426. package/lib/module/system/notification/index.js +7 -0
  427. package/lib/module/system/notification/index.js.map +1 -0
  428. package/lib/module/system/notification/types.js +4 -0
  429. package/lib/module/system/notification/types.js.map +1 -0
  430. package/lib/module/types.js +27 -34
  431. package/lib/module/types.js.map +1 -1
  432. package/lib/module/utils/filePresets.js +39 -0
  433. package/lib/module/utils/filePresets.js.map +1 -0
  434. package/lib/module/utils/index.js +10 -10
  435. package/lib/module/utils/index.js.map +1 -1
  436. package/lib/module/web-core/AudioContext.js +21 -1
  437. package/lib/module/web-core/AudioContext.js.map +1 -1
  438. package/lib/module/web-core/ConvolverNode.js +34 -0
  439. package/lib/module/web-core/ConvolverNode.js.map +1 -0
  440. package/lib/module/web-core/ConvolverNodeOptions.js +4 -0
  441. package/lib/module/web-core/ConvolverNodeOptions.js.map +1 -0
  442. package/lib/module/web-core/DelayNode.js +11 -0
  443. package/lib/module/web-core/DelayNode.js.map +1 -0
  444. package/lib/module/web-core/IIRFilterNode.js +13 -0
  445. package/lib/module/web-core/IIRFilterNode.js.map +1 -0
  446. package/lib/module/web-core/OfflineAudioContext.js +20 -0
  447. package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
  448. package/lib/module/web-system/index.js +4 -0
  449. package/lib/module/web-system/index.js.map +1 -0
  450. package/lib/module/web-system/notification/PlaybackNotificationManager.js +33 -0
  451. package/lib/module/web-system/notification/PlaybackNotificationManager.js.map +1 -0
  452. package/lib/module/web-system/notification/RecordingNotificationManager.js +33 -0
  453. package/lib/module/web-system/notification/RecordingNotificationManager.js.map +1 -0
  454. package/lib/module/web-system/notification/index.js +5 -0
  455. package/lib/module/web-system/notification/index.js.map +1 -0
  456. package/lib/typescript/AudioAPIModule/AudioAPIModule.d.ts +36 -0
  457. package/lib/typescript/AudioAPIModule/AudioAPIModule.d.ts.map +1 -0
  458. package/lib/typescript/AudioAPIModule/index.d.ts +2 -0
  459. package/lib/typescript/AudioAPIModule/index.d.ts.map +1 -0
  460. package/lib/typescript/api.d.ts +5 -9
  461. package/lib/typescript/api.d.ts.map +1 -1
  462. package/lib/typescript/api.web.d.ts +4 -1
  463. package/lib/typescript/api.web.d.ts.map +1 -1
  464. package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts +1 -0
  465. package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts.map +1 -1
  466. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts +1 -1
  467. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts.map +1 -1
  468. package/lib/typescript/core/AudioContext.d.ts +1 -1
  469. package/lib/typescript/core/AudioContext.d.ts.map +1 -1
  470. package/lib/typescript/core/AudioNode.d.ts +2 -1
  471. package/lib/typescript/core/AudioNode.d.ts.map +1 -1
  472. package/lib/typescript/core/AudioParam.d.ts.map +1 -1
  473. package/lib/typescript/core/AudioRecorder.d.ts +13 -6
  474. package/lib/typescript/core/AudioRecorder.d.ts.map +1 -1
  475. package/lib/typescript/core/BaseAudioContext.d.ts +9 -3
  476. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
  477. package/lib/typescript/core/ConvolverNode.d.ts +12 -0
  478. package/lib/typescript/core/ConvolverNode.d.ts.map +1 -0
  479. package/lib/typescript/core/DelayNode.d.ts +9 -0
  480. package/lib/typescript/core/DelayNode.d.ts.map +1 -0
  481. package/lib/typescript/core/IIRFilterNode.d.ts +5 -0
  482. package/lib/typescript/core/IIRFilterNode.d.ts.map +1 -0
  483. package/lib/typescript/core/OfflineAudioContext.d.ts +1 -1
  484. package/lib/typescript/core/OfflineAudioContext.d.ts.map +1 -1
  485. package/lib/typescript/events/types.d.ts +6 -2
  486. package/lib/typescript/events/types.d.ts.map +1 -1
  487. package/lib/typescript/interfaces.d.ts +34 -34
  488. package/lib/typescript/interfaces.d.ts.map +1 -1
  489. package/lib/typescript/plugin/withAudioAPI.d.ts +1 -0
  490. package/lib/typescript/plugin/withAudioAPI.d.ts.map +1 -1
  491. package/lib/typescript/specs/NativeAudioAPIModule.d.ts +18 -6
  492. package/lib/typescript/specs/NativeAudioAPIModule.d.ts.map +1 -1
  493. package/lib/typescript/system/AudioManager.d.ts +5 -5
  494. package/lib/typescript/system/AudioManager.d.ts.map +1 -1
  495. package/lib/typescript/system/index.d.ts +1 -0
  496. package/lib/typescript/system/index.d.ts.map +1 -1
  497. package/lib/typescript/system/notification/PlaybackNotificationManager.d.ts +23 -0
  498. package/lib/typescript/system/notification/PlaybackNotificationManager.d.ts.map +1 -0
  499. package/lib/typescript/system/notification/RecordingNotificationManager.d.ts +24 -0
  500. package/lib/typescript/system/notification/RecordingNotificationManager.d.ts.map +1 -0
  501. package/lib/typescript/system/notification/SimpleNotificationManager.d.ts +21 -0
  502. package/lib/typescript/system/notification/SimpleNotificationManager.d.ts.map +1 -0
  503. package/lib/typescript/system/notification/index.d.ts +5 -0
  504. package/lib/typescript/system/notification/index.d.ts.map +1 -0
  505. package/lib/typescript/system/notification/types.d.ts +65 -0
  506. package/lib/typescript/system/notification/types.d.ts.map +1 -0
  507. package/lib/typescript/system/types.d.ts +0 -16
  508. package/lib/typescript/system/types.d.ts.map +1 -1
  509. package/lib/typescript/types.d.ts +57 -49
  510. package/lib/typescript/types.d.ts.map +1 -1
  511. package/lib/typescript/utils/filePresets.d.ts +9 -0
  512. package/lib/typescript/utils/filePresets.d.ts.map +1 -0
  513. package/lib/typescript/utils/index.d.ts +1 -8
  514. package/lib/typescript/utils/index.d.ts.map +1 -1
  515. package/lib/typescript/web-core/AudioContext.d.ts +9 -2
  516. package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
  517. package/lib/typescript/web-core/BaseAudioContext.d.ts +7 -1
  518. package/lib/typescript/web-core/BaseAudioContext.d.ts.map +1 -1
  519. package/lib/typescript/web-core/ConvolverNode.d.ts +11 -0
  520. package/lib/typescript/web-core/ConvolverNode.d.ts.map +1 -0
  521. package/lib/typescript/web-core/ConvolverNodeOptions.d.ts +6 -0
  522. package/lib/typescript/web-core/ConvolverNodeOptions.d.ts.map +1 -0
  523. package/lib/typescript/web-core/DelayNode.d.ts +8 -0
  524. package/lib/typescript/web-core/DelayNode.d.ts.map +1 -0
  525. package/lib/typescript/web-core/IIRFilterNode.d.ts +5 -0
  526. package/lib/typescript/web-core/IIRFilterNode.d.ts.map +1 -0
  527. package/lib/typescript/web-core/OfflineAudioContext.d.ts +8 -1
  528. package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
  529. package/lib/typescript/web-system/index.d.ts +2 -0
  530. package/lib/typescript/web-system/index.d.ts.map +1 -0
  531. package/lib/typescript/web-system/notification/PlaybackNotificationManager.d.ts +20 -0
  532. package/lib/typescript/web-system/notification/PlaybackNotificationManager.d.ts.map +1 -0
  533. package/lib/typescript/web-system/notification/RecordingNotificationManager.d.ts +20 -0
  534. package/lib/typescript/web-system/notification/RecordingNotificationManager.d.ts.map +1 -0
  535. package/lib/typescript/web-system/notification/index.d.ts +3 -0
  536. package/lib/typescript/web-system/notification/index.d.ts.map +1 -0
  537. package/package.json +11 -5
  538. package/scripts/download-prebuilt-binaries.sh +61 -0
  539. package/scripts/rnaa_utils.rb +8 -0
  540. package/scripts/validate-worklets-version.js +27 -0
  541. package/src/AudioAPIModule/AudioAPIModule.ts +122 -0
  542. package/src/AudioAPIModule/globals.d.ts +33 -0
  543. package/src/AudioAPIModule/index.ts +1 -0
  544. package/src/api.ts +21 -52
  545. package/src/api.web.ts +8 -2
  546. package/src/core/AudioBufferBaseSourceNode.ts +8 -0
  547. package/src/core/AudioBufferQueueSourceNode.ts +8 -2
  548. package/src/core/AudioContext.ts +5 -8
  549. package/src/core/AudioNode.ts +4 -3
  550. package/src/core/AudioParam.ts +18 -11
  551. package/src/core/AudioRecorder.ts +63 -78
  552. package/src/core/BaseAudioContext.ts +120 -54
  553. package/src/core/ConvolverNode.ts +35 -0
  554. package/src/core/DelayNode.ts +13 -0
  555. package/src/core/IIRFilterNode.ts +25 -0
  556. package/src/core/OfflineAudioContext.ts +4 -7
  557. package/src/events/types.ts +7 -3
  558. package/src/interfaces.ts +51 -34
  559. package/src/plugin/withAudioAPI.ts +61 -0
  560. package/src/specs/NativeAudioAPIModule.ts +26 -9
  561. package/src/system/AudioManager.ts +13 -32
  562. package/src/system/index.ts +1 -0
  563. package/src/system/notification/PlaybackNotificationManager.ts +197 -0
  564. package/src/system/notification/RecordingNotificationManager.ts +247 -0
  565. package/src/system/notification/SimpleNotificationManager.ts +175 -0
  566. package/src/system/notification/index.ts +4 -0
  567. package/src/system/notification/types.ts +111 -0
  568. package/src/system/types.ts +0 -18
  569. package/src/types.ts +59 -50
  570. package/src/utils/filePresets.ts +47 -0
  571. package/src/utils/index.ts +13 -19
  572. package/src/web-core/AudioContext.tsx +40 -1
  573. package/src/web-core/BaseAudioContext.tsx +11 -1
  574. package/src/web-core/ConvolverNode.tsx +43 -0
  575. package/src/web-core/ConvolverNodeOptions.tsx +6 -0
  576. package/src/web-core/DelayNode.tsx +12 -0
  577. package/src/web-core/IIRFilterNode.tsx +25 -0
  578. package/src/web-core/OfflineAudioContext.tsx +39 -0
  579. package/src/web-system/index.ts +1 -0
  580. package/src/web-system/notification/PlaybackNotificationManager.ts +64 -0
  581. package/src/web-system/notification/RecordingNotificationManager.ts +64 -0
  582. package/src/web-system/notification/index.ts +2 -0
  583. package/android/src/main/cpp/audioapi/android/core/utils/FileUtils.h +0 -34
  584. package/android/src/main/cpp/audioapi/android/core/utils/FileUtilts.cpp +0 -133
  585. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.cpp +0 -154
  586. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.h +0 -41
  587. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.cpp +0 -47
  588. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.h +0 -28
  589. package/android/src/main/java/com/swmansion/audioapi/system/LockScreenManager.kt +0 -325
  590. package/android/src/main/java/com/swmansion/audioapi/system/MediaNotificationManager.kt +0 -262
  591. package/android/src/main/java/com/swmansion/audioapi/system/MediaReceiver.kt +0 -57
  592. package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionCallback.kt +0 -61
  593. package/common/cpp/audioapi/libs/ffmpeg/INSTRUCTIONS.md +0 -32
  594. package/common/cpp/audioapi/libs/ffmpeg/create_xcframework.sh +0 -111
  595. package/common/cpp/audioapi/libs/ffmpeg/ffmpeg_setup.sh +0 -391
  596. package/ios/audioapi/ios/core/IOSAudioFileOptions.h +0 -36
  597. package/ios/audioapi/ios/core/IOSAudioFileOptions.mm +0 -140
  598. package/ios/audioapi/ios/core/IOSAudioFileWriter.mm +0 -223
  599. package/ios/audioapi/ios/core/IOSRecorderCallback.mm +0 -189
  600. package/ios/audioapi/ios/system/LockScreenManager.h +0 -24
  601. package/ios/audioapi/ios/system/LockScreenManager.mm +0 -310
  602. package/lib/commonjs/utils/bitEnums.js +0 -33
  603. package/lib/commonjs/utils/bitEnums.js.map +0 -1
  604. package/lib/module/utils/bitEnums.js +0 -27
  605. package/lib/module/utils/bitEnums.js.map +0 -1
  606. package/lib/typescript/utils/bitEnums.d.ts +0 -4
  607. package/lib/typescript/utils/bitEnums.d.ts.map +0 -1
  608. package/metro-config/index.d.ts +0 -5
  609. package/metro-config/index.js +0 -41
  610. package/metro-config/tsconfig.json +0 -3
  611. package/src/utils/bitEnums.ts +0 -51
  612. package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/Info.plist +5 -5
  613. package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64/libavcodec.framework/Info.plist +0 -0
  614. package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64_x86_64-simulator/libavcodec.framework/Info.plist +0 -0
  615. package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/Info.plist +0 -0
  616. package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64/libavformat.framework/Info.plist +0 -0
  617. package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64_x86_64-simulator/libavformat.framework/Info.plist +0 -0
  618. package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/Info.plist +5 -5
  619. package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64/libavutil.framework/Info.plist +0 -0
  620. package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64_x86_64-simulator/libavutil.framework/Info.plist +0 -0
  621. package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/Info.plist +5 -5
  622. /package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64/libswresample.framework/Info.plist +0 -0
  623. /package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64_x86_64-simulator/libswresample.framework/Info.plist +0 -0
@@ -4,6 +4,10 @@
4
4
  #include <audioapi/core/utils/Constants.h>
5
5
  #include <audioapi/utils/AudioArray.h>
6
6
  #include <audioapi/utils/AudioBus.h>
7
+ #include <jni.h>
8
+
9
+ #include <algorithm>
10
+ #include <memory>
7
11
 
8
12
  namespace audioapi {
9
13
 
@@ -11,9 +15,7 @@ AudioPlayer::AudioPlayer(
11
15
  const std::function<void(std::shared_ptr<AudioBus>, int)> &renderAudio,
12
16
  float sampleRate,
13
17
  int channelCount)
14
- : renderAudio_(renderAudio),
15
- sampleRate_(sampleRate),
16
- channelCount_(channelCount) {
18
+ : renderAudio_(renderAudio), sampleRate_(sampleRate), channelCount_(channelCount) {
17
19
  isInitialized_ = openAudioStream();
18
20
 
19
21
  nativeAudioPlayer_ = jni::make_global(NativeAudioPlayer::create());
@@ -35,21 +37,17 @@ bool AudioPlayer::openAudioStream() {
35
37
  auto result = builder.openStream(mStream_);
36
38
  if (result != oboe::Result::OK || mStream_ == nullptr) {
37
39
  __android_log_print(
38
- ANDROID_LOG_ERROR,
39
- "AudioPlayer",
40
- "Failed to open stream: %s",
41
- oboe::convertToText(result));
40
+ ANDROID_LOG_ERROR, "AudioPlayer", "Failed to open stream: %s", oboe::convertToText(result));
42
41
  return false;
43
42
  }
44
43
 
45
- mBus_ = std::make_shared<AudioBus>(
46
- RENDER_QUANTUM_SIZE, channelCount_, sampleRate_);
44
+ mBus_ = std::make_shared<AudioBus>(RENDER_QUANTUM_SIZE, channelCount_, sampleRate_);
47
45
  return true;
48
46
  }
49
47
 
50
48
  bool AudioPlayer::start() {
51
49
  if (mStream_) {
52
- nativeAudioPlayer_->start();
50
+ jni::ThreadScope::WithClassLoader([this]() { nativeAudioPlayer_->start(); });
53
51
  auto result = mStream_->requestStart();
54
52
  return result == oboe::Result::OK;
55
53
  }
@@ -59,7 +57,7 @@ bool AudioPlayer::start() {
59
57
 
60
58
  void AudioPlayer::stop() {
61
59
  if (mStream_) {
62
- nativeAudioPlayer_->stop();
60
+ jni::ThreadScope::WithClassLoader([this]() { nativeAudioPlayer_->stop(); });
63
61
  mStream_->requestStop();
64
62
  }
65
63
  }
@@ -92,10 +90,8 @@ bool AudioPlayer::isRunning() const {
92
90
  return mStream_ && mStream_->getState() == oboe::StreamState::Started;
93
91
  }
94
92
 
95
- DataCallbackResult AudioPlayer::onAudioReady(
96
- AudioStream *oboeStream,
97
- void *audioData,
98
- int32_t numFrames) {
93
+ DataCallbackResult
94
+ AudioPlayer::onAudioReady(AudioStream *oboeStream, void *audioData, int32_t numFrames) {
99
95
  if (!isInitialized_) {
100
96
  return DataCallbackResult::Continue;
101
97
  }
@@ -106,8 +102,7 @@ DataCallbackResult AudioPlayer::onAudioReady(
106
102
  assert(buffer != nullptr);
107
103
 
108
104
  while (processedFrames < numFrames) {
109
- int framesToProcess =
110
- std::min(numFrames - processedFrames, RENDER_QUANTUM_SIZE);
105
+ int framesToProcess = std::min(numFrames - processedFrames, RENDER_QUANTUM_SIZE);
111
106
  renderAudio_(mBus_, framesToProcess);
112
107
 
113
108
  // TODO: optimize this with SIMD?
@@ -124,9 +119,7 @@ DataCallbackResult AudioPlayer::onAudioReady(
124
119
  return DataCallbackResult::Continue;
125
120
  }
126
121
 
127
- void AudioPlayer::onErrorAfterClose(
128
- oboe::AudioStream *stream,
129
- oboe::Result error) {
122
+ void AudioPlayer::onErrorAfterClose(oboe::AudioStream *stream, oboe::Result error) {
130
123
  if (error == oboe::Result::ErrorDisconnected) {
131
124
  cleanup();
132
125
  if (openAudioStream()) {
@@ -1,37 +1,33 @@
1
1
  #pragma once
2
2
 
3
+ #include <audioapi/core/utils/AudioFileWriter.h>
3
4
  #include <tuple>
4
5
  #include <string>
5
6
  #include <memory>
7
+ #include <audioapi/utils/Result.hpp>
6
8
 
7
9
  namespace audioapi {
8
10
 
9
- class AndroidFileWriterBackend {
10
- public:
11
- AndroidFileWriterBackend(
12
- float sampleRate,
13
- size_t channelCount,
14
- size_t bitRate,
15
- size_t androidFlags) {}
16
-
17
- virtual ~AndroidFileWriterBackend() = default;
11
+ class AudioFileProperties;
18
12
 
19
- virtual std::string openFile(int32_t streamSampleRate, int32_t streamChannelCount, int32_t streamMaxBufferSize) = 0;
20
- virtual std::tuple<double, double> closeFile() = 0;
13
+ class AndroidFileWriterBackend : public AudioFileWriter {
14
+ public:
15
+ explicit AndroidFileWriterBackend(
16
+ const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
17
+ const std::shared_ptr<AudioFileProperties> &fileProperties)
18
+ : AudioFileWriter(audioEventHandlerRegistry, fileProperties) {}
21
19
 
20
+ virtual OpenFileResult openFile(float streamSampleRate, int32_t streamChannelCount, int32_t streamMaxBufferSize) = 0;
22
21
  virtual bool writeAudioData(void *data, int numFrames) = 0;
23
22
 
24
- std::string getFilePath() const { return filePath_; }
25
-
26
- double getCurrentDuration() const { return static_cast<double>(framesWritten_.load()) / streamSampleRate_; }
23
+ std::string getFilePath() const override { return filePath_; }
24
+ double getCurrentDuration() const override { return static_cast<double>(framesWritten_.load(std::memory_order_acquire)) / streamSampleRate_; }
27
25
 
28
26
  protected:
29
- std::string filePath_{""};
30
- std::atomic<size_t> framesWritten_{0};
31
-
32
- int32_t streamSampleRate_{0};
27
+ float streamSampleRate_{0};
33
28
  int32_t streamChannelCount_{0};
34
29
  int32_t streamMaxBufferSize_{0};
30
+ std::string filePath_{""};
35
31
  };
36
32
 
37
33
  } // namespace audioapi
@@ -7,38 +7,56 @@
7
7
  #include <audioapi/utils/AudioBus.h>
8
8
  #include <audioapi/utils/CircularAudioArray.h>
9
9
 
10
+ #include <algorithm>
10
11
  #include <memory>
12
+ #include <string>
13
+ #include <unordered_map>
11
14
 
12
15
  namespace audioapi {
13
16
 
17
+ /// @brief Constructor
18
+ /// Allocates circular buffer (as every property to do so is already known at this point).
19
+ /// @param audioEventHandlerRegistry The audio event handler registry
20
+ /// @param sampleRate The user desired sample rate
21
+ /// @param bufferLength The user desired buffer length
22
+ /// @param channelCount The user desired channel count
23
+ /// @param callbackId The callback identifier
14
24
  AndroidRecorderCallback::AndroidRecorderCallback(
15
25
  const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
16
26
  float sampleRate,
17
27
  size_t bufferLength,
18
- size_t channelCount,
28
+ int channelCount,
19
29
  uint64_t callbackId)
20
- : sampleRate_(sampleRate),
21
- bufferLength_(bufferLength),
22
- channelCount_(channelCount),
23
- callbackId_(callbackId),
24
- audioEventHandlerRegistry_(audioEventHandlerRegistry) {
25
- ringBufferSize_ = std::max((int)bufferLength * 2, 8192);
26
- circularBus_.resize(channelCount_);
27
-
28
- for (size_t i = 0; i < channelCount_; ++i) {
29
- auto busArray = std::make_shared<CircularAudioArray>(ringBufferSize_);
30
- circularBus_[i] = busArray;
31
- }
32
- }
30
+ : AudioRecorderCallback(
31
+ audioEventHandlerRegistry,
32
+ sampleRate,
33
+ bufferLength,
34
+ channelCount,
35
+ callbackId) {}
33
36
 
34
37
  AndroidRecorderCallback::~AndroidRecorderCallback() {
38
+ if (converter_ != nullptr) {
39
+ ma_data_converter_uninit(converter_.get(), NULL);
40
+ converter_.reset();
41
+ }
42
+
43
+ if (processingBuffer_ != nullptr) {
44
+ ma_free(processingBuffer_, NULL);
45
+ processingBuffer_ = nullptr;
46
+ processingBufferLength_ = 0;
47
+ }
48
+
35
49
  for (size_t i = 0; i < circularBus_.size(); ++i) {
36
- circularBus_[i].reset();
50
+ circularBus_[i]->zero();
37
51
  }
38
52
  }
39
53
 
40
- void AndroidRecorderCallback::prepare(
41
- int32_t streamSampleRate,
54
+ /// @brief Prepares the recorder callback by initializing the data converter and allocating necessary buffers.
55
+ /// @param streamSampleRate The sample rate of the incoming audio stream.
56
+ /// @param streamChannelCount The channel count of the incoming audio stream.
57
+ /// @param maxInputBufferLength The maximum buffer length of the incoming audio stream.
58
+ Result<NoneType, std::string> AndroidRecorderCallback::prepare(
59
+ float streamSampleRate,
42
60
  int32_t streamChannelCount,
43
61
  size_t maxInputBufferLength) {
44
62
  ma_result result;
@@ -59,27 +77,34 @@ void AndroidRecorderCallback::prepare(
59
77
  result = ma_data_converter_init(&converterConfig, NULL, converter_.get());
60
78
 
61
79
  if (result != MA_SUCCESS) {
62
- __android_log_print(
63
- ANDROID_LOG_ERROR,
64
- "AndroidRecorderCallback",
65
- "Failed to initialize miniaudio data converter");
66
- return;
80
+ return Result<NoneType, std::string>::Err(
81
+ "Failed to initialize miniaudio data converter" +
82
+ std::string(ma_result_description(result)));
83
+ }
84
+
85
+ if (streamSampleRate_ <= 0 || streamChannelCount_ <= 0) {
86
+ return Result<NoneType, std::string>::Err("Invalid stream sample rate or channel count");
87
+ }
88
+
89
+ if (sampleRate_ <= 0 || channelCount_ <= 0) {
90
+ return Result<NoneType, std::string>::Err("Invalid callback sample rate or channel count");
67
91
  }
68
92
 
69
93
  ma_data_converter_get_expected_output_frame_count(
70
94
  converter_.get(), maxInputBufferLength_, &processingBufferLength_);
71
95
 
72
- processingBufferLength_ =
73
- std::max(processingBufferLength_, (ma_uint64)maxInputBufferLength_);
96
+ processingBufferLength_ = std::max(processingBufferLength_, (ma_uint64)maxInputBufferLength_);
74
97
 
75
98
  deinterleavingArray_ = std::make_shared<AudioArray>(processingBufferLength_);
76
99
  processingBuffer_ = ma_malloc(
77
- processingBufferLength_ * channelCount_ *
78
- ma_get_bytes_per_sample(ma_format_f32),
79
- NULL);
100
+ processingBufferLength_ * channelCount_ * ma_get_bytes_per_sample(ma_format_f32), NULL);
101
+
102
+ return Result<NoneType, std::string>::Ok(None);
80
103
  }
81
104
 
82
105
  void AndroidRecorderCallback::cleanup() {
106
+ emitAudioData(true);
107
+
83
108
  if (converter_ != nullptr) {
84
109
  ma_data_converter_uninit(converter_.get(), NULL);
85
110
  converter_.reset();
@@ -92,17 +117,25 @@ void AndroidRecorderCallback::cleanup() {
92
117
  }
93
118
 
94
119
  for (size_t i = 0; i < circularBus_.size(); ++i) {
95
- circularBus_[i].reset();
120
+ circularBus_[i]->zero();
96
121
  }
97
122
  }
98
123
 
124
+ /// @brief Receives audio data from the recorder, processes it (resampling and deinterleaving if necessary),
125
+ /// and pushes it into the circular buffer.
126
+ /// @param data Pointer to the incoming audio data.
127
+ /// @param numFrames Number of frames in the incoming audio data.
99
128
  void AndroidRecorderCallback::receiveAudioData(void *data, int numFrames) {
129
+ if (!isInitialized_.load(std::memory_order_acquire)) {
130
+ return;
131
+ }
132
+
100
133
  ma_uint64 inputFrameCount = numFrames;
101
134
  ma_uint64 outputFrameCount = 0;
102
135
 
103
- if ((float)streamSampleRate_ == sampleRate_ ||
136
+ if (static_cast<float>(streamSampleRate_) == sampleRate_ &&
104
137
  streamChannelCount_ == channelCount_) {
105
- deinterleaveAndWriteAudioData(data, numFrames);
138
+ deinterleaveAndPushAudioData(data, numFrames);
106
139
  emitAudioData();
107
140
  return;
108
141
  }
@@ -111,77 +144,27 @@ void AndroidRecorderCallback::receiveAudioData(void *data, int numFrames) {
111
144
  converter_.get(), inputFrameCount, &outputFrameCount);
112
145
 
113
146
  ma_data_converter_process_pcm_frames(
114
- converter_.get(),
115
- data,
116
- &inputFrameCount,
117
- processingBuffer_,
118
- &outputFrameCount);
119
-
120
- deinterleaveAndWriteAudioData(
121
- processingBuffer_, static_cast<int>(outputFrameCount));
147
+ converter_.get(), data, &inputFrameCount, processingBuffer_, &outputFrameCount);
148
+
149
+ deinterleaveAndPushAudioData(processingBuffer_, static_cast<int>(outputFrameCount));
122
150
  emitAudioData();
123
151
  }
124
152
 
125
- void AndroidRecorderCallback::deinterleaveAndWriteAudioData(
126
- void *data,
127
- int numFrames) {
153
+ /// @brief Deinterleaves the audio data and pushes it into the circular buffer.
154
+ /// @param data Pointer to the interleaved audio data.
155
+ /// @param numFrames Number of frames in the audio data.
156
+ void AndroidRecorderCallback::deinterleaveAndPushAudioData(void *data, int numFrames) {
128
157
  auto *inputData = static_cast<float *>(data);
129
158
 
130
- for (size_t channel = 0; channel < channelCount_; ++channel) {
159
+ for (int channel = 0; channel < channelCount_; ++channel) {
131
160
  float *channelData = deinterleavingArray_->getData();
132
161
 
133
162
  for (int frame = 0; frame < numFrames; ++frame) {
134
- channelData[frame] = inputData[frame * streamChannelCount_ + channel];
163
+ channelData[frame] = inputData[frame * channelCount_ + channel];
135
164
  }
136
165
 
137
166
  circularBus_[channel]->push_back(channelData, numFrames);
138
167
  }
139
168
  }
140
169
 
141
- void AndroidRecorderCallback::emitAudioData() {
142
- while (circularBus_[0]->getNumberOfAvailableFrames() >= bufferLength_) {
143
- auto bus =
144
- std::make_shared<AudioBus>(bufferLength_, channelCount_, sampleRate_);
145
-
146
- for (int i = 0; i < channelCount_; ++i) {
147
- auto *outputChannel = bus->getChannel(i)->getData();
148
- circularBus_[i]->pop_front(outputChannel, bufferLength_);
149
- }
150
-
151
- invokeCallback(bus, (int)bufferLength_);
152
- }
153
- }
154
-
155
- void AndroidRecorderCallback::invokeCallback(
156
- const std::shared_ptr<AudioBus> &bus,
157
- int numFrames) {
158
- auto audioBuffer = std::make_shared<AudioBuffer>(bus);
159
- auto audioBufferHostObject =
160
- std::make_shared<AudioBufferHostObject>(audioBuffer);
161
-
162
- std::unordered_map<std::string, EventValue> eventPayload = {};
163
- eventPayload.insert({"buffer", audioBufferHostObject});
164
- eventPayload.insert({"numFrames", numFrames});
165
-
166
- if (audioEventHandlerRegistry_) {
167
- audioEventHandlerRegistry_->invokeHandlerWithEventBody(
168
- "audioReady", callbackId_, eventPayload);
169
- }
170
- }
171
-
172
- void AndroidRecorderCallback::sendRemainingData() {
173
- auto numberOfFrames = circularBus_[0]->getNumberOfAvailableFrames();
174
- auto bus = std::make_shared<AudioBus>(
175
- circularBus_[0]->getNumberOfAvailableFrames(),
176
- channelCount_,
177
- sampleRate_);
178
-
179
- for (int i = 0; i < channelCount_; ++i) {
180
- auto *outputChannel = bus->getChannel(i)->getData();
181
- circularBus_[i]->pop_front(outputChannel, numberOfFrames);
182
- }
183
-
184
- invokeCallback(bus, (int)numberOfFrames);
185
- }
186
-
187
170
  } // namespace audioapi
@@ -2,8 +2,10 @@
2
2
 
3
3
 
4
4
  #include <audioapi/libs/miniaudio/miniaudio.h>
5
+ #include <audioapi/core/utils/AudioRecorderCallback.h>
5
6
  #include <memory>
6
7
  #include <vector>
8
+ #include <string>
7
9
 
8
10
  namespace audioapi {
9
11
 
@@ -12,46 +14,33 @@ class AudioArray;
12
14
  class CircularAudioArray;
13
15
  class AudioEventHandlerRegistry;
14
16
 
15
- class AndroidRecorderCallback {
17
+ class AndroidRecorderCallback : public AudioRecorderCallback {
16
18
  public:
17
19
  AndroidRecorderCallback(
18
20
  const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
19
21
  float sampleRate,
20
22
  size_t bufferLength,
21
- size_t channelCount,
23
+ int channelCount,
22
24
  uint64_t callbackId);
23
25
  ~AndroidRecorderCallback();
24
26
 
25
- void prepare(int32_t streamSampleRate, int32_t streamChannelCount, size_t maxInputBufferLength);
26
- void cleanup();
27
+ Result<NoneType, std::string> prepare(float streamSampleRate, int streamChannelCount, size_t maxInputBufferLength);
28
+ void cleanup() override;
27
29
 
28
30
  void receiveAudioData(void *data, int numFrames);
29
- void emitAudioData();
30
31
 
31
- void invokeCallback(const std::shared_ptr<AudioBus> &bus, int numFrames);
32
- void sendRemainingData();
32
+ protected:
33
+ float streamSampleRate_{0.0};
34
+ int streamChannelCount_{0};
35
+ size_t maxInputBufferLength_{0};
33
36
 
34
- private:
35
- int32_t streamSampleRate_;
36
- int32_t streamChannelCount_;
37
- size_t maxInputBufferLength_;
38
-
39
- float sampleRate_;
40
- size_t bufferLength_;
41
- size_t channelCount_;
42
- uint64_t callbackId_;
43
- size_t ringBufferSize_;
44
-
45
- ma_uint64 processingBufferLength_{0};
46
37
  void *processingBuffer_{nullptr};
47
-
38
+ ma_uint64 processingBufferLength_{0};
48
39
  std::unique_ptr<ma_data_converter> converter_{nullptr};
49
40
 
50
- std::shared_ptr<AudioEventHandlerRegistry> audioEventHandlerRegistry_;
51
- std::vector<std::shared_ptr<CircularAudioArray>> circularBus_;
52
41
  std::shared_ptr<AudioArray> deinterleavingArray_;
53
42
 
54
- void deinterleaveAndWriteAudioData(void *data, int numFrames);
43
+ void deinterleaveAndPushAudioData(void *data, int numFrames);
55
44
  };
56
45
 
57
46
  } // namespace audioapi
@@ -9,43 +9,39 @@
9
9
  #include <audioapi/libs/miniaudio/decoders/libvorbis/miniaudio_libvorbis.h>
10
10
  #include <audioapi/libs/miniaudio/miniaudio.h>
11
11
 
12
- #ifndef AUDIO_API_TEST_SUITE
13
12
  #include <android/log.h>
13
+ #if !RN_AUDIO_API_FFMPEG_DISABLED
14
14
  #include <audioapi/libs/ffmpeg/FFmpegDecoding.h>
15
- #endif
15
+ #endif // RN_AUDIO_API_FFMPEG_DISABLED
16
+
17
+ #include <memory>
18
+ #include <string>
19
+ #include <vector>
16
20
 
17
21
  namespace audioapi {
18
22
 
19
23
  // Decoding audio in fixed-size chunks because total frame count can't be
20
24
  // determined in advance. Note: ma_decoder_get_length_in_pcm_frames() always
21
25
  // returns 0 for Vorbis decoders.
22
- std::vector<float> AudioDecoder::readAllPcmFrames(
23
- ma_decoder &decoder,
24
- int outputChannels) {
26
+ std::vector<float> AudioDecoder::readAllPcmFrames(ma_decoder &decoder, int outputChannels) {
25
27
  std::vector<float> buffer;
26
28
  std::vector<float> temp(CHUNK_SIZE * outputChannels);
27
29
  ma_uint64 outFramesRead = 0;
28
30
 
29
- #ifndef AUDIO_API_TEST_SUITE
30
31
  while (true) {
31
32
  ma_uint64 tempFramesDecoded = 0;
32
- ma_decoder_read_pcm_frames(
33
- &decoder, temp.data(), CHUNK_SIZE, &tempFramesDecoded);
33
+ ma_decoder_read_pcm_frames(&decoder, temp.data(), CHUNK_SIZE, &tempFramesDecoded);
34
34
  if (tempFramesDecoded == 0) {
35
35
  break;
36
36
  }
37
37
 
38
- buffer.insert(
39
- buffer.end(),
40
- temp.data(),
41
- temp.data() + tempFramesDecoded * outputChannels);
38
+ buffer.insert(buffer.end(), temp.data(), temp.data() + tempFramesDecoded * outputChannels);
42
39
  outFramesRead += tempFramesDecoded;
43
40
  }
44
41
 
45
42
  if (outFramesRead == 0) {
46
43
  __android_log_print(ANDROID_LOG_ERROR, "AudioDecoder", "Failed to decode");
47
44
  }
48
- #endif
49
45
  return buffer;
50
46
  }
51
47
 
@@ -58,8 +54,7 @@ std::shared_ptr<AudioBuffer> AudioDecoder::makeAudioBufferFromFloatBuffer(
58
54
  }
59
55
 
60
56
  auto outputFrames = buffer.size() / outputChannels;
61
- auto audioBus = std::make_shared<AudioBus>(
62
- outputFrames, outputChannels, outputSampleRate);
57
+ auto audioBus = std::make_shared<AudioBus>(outputFrames, outputChannels, outputSampleRate);
63
58
 
64
59
  for (int ch = 0; ch < outputChannels; ++ch) {
65
60
  auto channelData = audioBus->getChannel(ch)->getData();
@@ -73,31 +68,38 @@ std::shared_ptr<AudioBuffer> AudioDecoder::makeAudioBufferFromFloatBuffer(
73
68
  std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithFilePath(
74
69
  const std::string &path,
75
70
  float sampleRate) {
76
- #ifndef AUDIO_API_TEST_SUITE
77
71
  if (AudioDecoder::pathHasExtension(path, {".mp4", ".m4a", ".aac"})) {
78
- auto buffer =
79
- ffmpegdecoder::decodeWithFilePath(path, static_cast<int>(sampleRate));
72
+ #if !RN_AUDIO_API_FFMPEG_DISABLED
73
+ auto buffer = ffmpegdecoder::decodeWithFilePath(path, static_cast<int>(sampleRate));
80
74
  if (buffer == nullptr) {
81
75
  __android_log_print(
82
- ANDROID_LOG_ERROR,
83
- "AudioDecoder",
84
- "Failed to decode with FFmpeg: %s",
85
- path.c_str());
76
+ ANDROID_LOG_ERROR, "AudioDecoder", "Failed to decode with FFmpeg: %s", path.c_str());
86
77
  return nullptr;
87
78
  }
88
79
  return buffer;
80
+ #else
81
+ __android_log_print(
82
+ ANDROID_LOG_ERROR,
83
+ "AudioDecoder",
84
+ "FFmpeg is disabled, cannot decode file: %s",
85
+ path.c_str());
86
+ return nullptr;
87
+ #endif // RN_AUDIO_API_FFMPEG_DISABLED
89
88
  }
90
89
  ma_decoder decoder;
91
- ma_decoder_config config =
92
- ma_decoder_config_init(ma_format_f32, 0, static_cast<int>(sampleRate));
90
+ ma_decoder_config config = ma_decoder_config_init(ma_format_f32, 0, static_cast<int>(sampleRate));
93
91
  ma_decoding_backend_vtable *customBackends[] = {
94
92
  ma_decoding_backend_libvorbis, ma_decoding_backend_libopus};
95
93
 
96
94
  config.ppCustomBackendVTables = customBackends;
97
- config.customBackendCount =
98
- sizeof(customBackends) / sizeof(customBackends[0]);
95
+ config.customBackendCount = sizeof(customBackends) / sizeof(customBackends[0]);
99
96
 
100
97
  if (ma_decoder_init_file(path.c_str(), &config, &decoder) != MA_SUCCESS) {
98
+ __android_log_print(
99
+ ANDROID_LOG_ERROR,
100
+ "AudioDecoder",
101
+ "Failed to initialize decoder for file: %s",
102
+ path.c_str());
101
103
  ma_decoder_uninit(&decoder);
102
104
  return nullptr;
103
105
  }
@@ -107,46 +109,38 @@ std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithFilePath(
107
109
 
108
110
  std::vector<float> buffer = readAllPcmFrames(decoder, outputChannels);
109
111
  ma_decoder_uninit(&decoder);
110
- return makeAudioBufferFromFloatBuffer(
111
- buffer, outputSampleRate, outputChannels);
112
- #else
113
- return nullptr;
114
- #endif
112
+ return makeAudioBufferFromFloatBuffer(buffer, outputSampleRate, outputChannels);
115
113
  }
116
114
 
117
- std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithMemoryBlock(
118
- const void *data,
119
- size_t size,
120
- float sampleRate) {
121
- #ifndef AUDIO_API_TEST_SUITE
115
+ std::shared_ptr<AudioBuffer>
116
+ AudioDecoder::decodeWithMemoryBlock(const void *data, size_t size, float sampleRate) {
122
117
  const AudioFormat format = AudioDecoder::detectAudioFormat(data, size);
123
- if (format == AudioFormat::MP4 || format == AudioFormat::M4A ||
124
- format == AudioFormat::AAC) {
125
- auto buffer = ffmpegdecoder::decodeWithMemoryBlock(
126
- data, size, static_cast<int>(sampleRate));
118
+ if (format == AudioFormat::MP4 || format == AudioFormat::M4A || format == AudioFormat::AAC) {
119
+ #if !RN_AUDIO_API_FFMPEG_DISABLED
120
+ auto buffer = ffmpegdecoder::decodeWithMemoryBlock(data, size, static_cast<int>(sampleRate));
127
121
  if (buffer == nullptr) {
128
- __android_log_print(
129
- ANDROID_LOG_ERROR, "AudioDecoder", "Failed to decode with FFmpeg");
122
+ __android_log_print(ANDROID_LOG_ERROR, "AudioDecoder", "Failed to decode with FFmpeg");
130
123
  return nullptr;
131
124
  }
132
125
  return buffer;
126
+ #else
127
+ __android_log_print(
128
+ ANDROID_LOG_ERROR, "AudioDecoder", "FFmpeg is disabled, cannot decode memory block");
129
+ return nullptr;
130
+ #endif // RN_AUDIO_API_FFMPEG_DISABLED
133
131
  }
134
132
  ma_decoder decoder;
135
- ma_decoder_config config =
136
- ma_decoder_config_init(ma_format_f32, 0, static_cast<int>(sampleRate));
133
+ ma_decoder_config config = ma_decoder_config_init(ma_format_f32, 0, static_cast<int>(sampleRate));
137
134
 
138
135
  ma_decoding_backend_vtable *customBackends[] = {
139
136
  ma_decoding_backend_libvorbis, ma_decoding_backend_libopus};
140
137
 
141
138
  config.ppCustomBackendVTables = customBackends;
142
- config.customBackendCount =
143
- sizeof(customBackends) / sizeof(customBackends[0]);
139
+ config.customBackendCount = sizeof(customBackends) / sizeof(customBackends[0]);
144
140
 
145
141
  if (ma_decoder_init_memory(data, size, &config, &decoder) != MA_SUCCESS) {
146
142
  __android_log_print(
147
- ANDROID_LOG_ERROR,
148
- "AudioDecoder",
149
- "Failed to initialize decoder for memory block");
143
+ ANDROID_LOG_ERROR, "AudioDecoder", "Failed to initialize decoder for memory block");
150
144
  ma_decoder_uninit(&decoder);
151
145
  return nullptr;
152
146
  }
@@ -156,11 +150,7 @@ std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithMemoryBlock(
156
150
 
157
151
  std::vector<float> buffer = readAllPcmFrames(decoder, outputChannels);
158
152
  ma_decoder_uninit(&decoder);
159
- return makeAudioBufferFromFloatBuffer(
160
- buffer, outputSampleRate, outputChannels);
161
- #else
162
- return nullptr;
163
- #endif
153
+ return makeAudioBufferFromFloatBuffer(buffer, outputSampleRate, outputChannels);
164
154
  }
165
155
 
166
156
  std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithPCMInBase64(
@@ -170,11 +160,9 @@ std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithPCMInBase64(
170
160
  bool interleaved) {
171
161
  auto decodedData = base64_decode(data, false);
172
162
  const auto uint8Data = reinterpret_cast<uint8_t *>(decodedData.data());
173
- size_t numFramesDecoded =
174
- decodedData.size() / (inputChannelCount * sizeof(int16_t));
163
+ size_t numFramesDecoded = decodedData.size() / (inputChannelCount * sizeof(int16_t));
175
164
 
176
- auto audioBus = std::make_shared<AudioBus>(
177
- numFramesDecoded, inputChannelCount, inputSampleRate);
165
+ auto audioBus = std::make_shared<AudioBus>(numFramesDecoded, inputChannelCount, inputSampleRate);
178
166
 
179
167
  for (int ch = 0; ch < inputChannelCount; ++ch) {
180
168
  auto channelData = audioBus->getChannel(ch)->getData();