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

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 (522) 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 +219 -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 +47 -47
  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 +379 -298
  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 +48 -0
  20. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/utils.cpp +110 -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 -104
  23. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.h +8 -16
  24. package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +28 -1
  25. package/android/src/main/java/com/swmansion/audioapi/system/LockScreenManager.kt +28 -6
  26. package/android/src/main/java/com/swmansion/audioapi/system/MediaNotificationManager.kt +11 -0
  27. package/android/src/main/jniLibs/arm64-v8a/libavcodec.so +0 -0
  28. package/android/src/main/jniLibs/arm64-v8a/libavformat.so +0 -0
  29. package/android/src/main/jniLibs/arm64-v8a/libavutil.so +0 -0
  30. package/android/src/main/jniLibs/arm64-v8a/libswresample.so +0 -0
  31. package/android/src/main/jniLibs/armeabi-v7a/libavcodec.so +0 -0
  32. package/android/src/main/jniLibs/armeabi-v7a/libavformat.so +0 -0
  33. package/android/src/main/jniLibs/armeabi-v7a/libavutil.so +0 -0
  34. package/android/src/main/jniLibs/armeabi-v7a/libswresample.so +0 -0
  35. package/android/src/main/jniLibs/x86/libavcodec.so +0 -0
  36. package/android/src/main/jniLibs/x86/libavformat.so +0 -0
  37. package/android/src/main/jniLibs/x86/libavutil.so +0 -0
  38. package/android/src/main/jniLibs/x86/libswresample.so +0 -0
  39. package/android/src/main/jniLibs/x86_64/libavcodec.so +0 -0
  40. package/android/src/main/jniLibs/x86_64/libavformat.so +0 -0
  41. package/android/src/main/jniLibs/x86_64/libavutil.so +0 -0
  42. package/android/src/main/jniLibs/x86_64/libswresample.so +0 -0
  43. package/android/src/oldarch/NativeAudioAPIModuleSpec.java +4 -0
  44. package/common/cpp/audioapi/AudioAPIModuleInstaller.h +45 -70
  45. package/common/cpp/audioapi/HostObjects/AudioContextHostObject.cpp +20 -22
  46. package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.cpp +3 -4
  47. package/common/cpp/audioapi/HostObjects/AudioParamHostObject.cpp +6 -8
  48. package/common/cpp/audioapi/HostObjects/AudioParamHostObject.h +2 -2
  49. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +102 -63
  50. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +4 -1
  51. package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.cpp +25 -31
  52. package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.h +3 -3
  53. package/common/cpp/audioapi/HostObjects/WorkletNodeHostObject.h +1 -2
  54. package/common/cpp/audioapi/HostObjects/WorkletProcessingNodeHostObject.h +1 -2
  55. package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.cpp +10 -18
  56. package/common/cpp/audioapi/HostObjects/destinations/AudioDestinationNodeHostObject.h +2 -3
  57. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp +18 -30
  58. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.h +1 -2
  59. package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.cpp +50 -0
  60. package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.h +20 -0
  61. package/common/cpp/audioapi/HostObjects/effects/DelayNodeHostObject.cpp +27 -0
  62. package/common/cpp/audioapi/HostObjects/effects/DelayNodeHostObject.h +21 -0
  63. package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.cpp +2 -2
  64. package/common/cpp/audioapi/HostObjects/effects/IIRFilterNodeHostObject.cpp +33 -0
  65. package/common/cpp/audioapi/HostObjects/effects/IIRFilterNodeHostObject.h +20 -0
  66. package/common/cpp/audioapi/HostObjects/effects/PeriodicWaveHostObject.h +1 -2
  67. package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.cpp +2 -2
  68. package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.h +1 -2
  69. package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.cpp +6 -12
  70. package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.h +7 -7
  71. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.cpp +98 -50
  72. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +5 -2
  73. package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.cpp +27 -22
  74. package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.h +12 -10
  75. package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.cpp +17 -22
  76. package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.h +5 -7
  77. package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.cpp +25 -11
  78. package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.h +8 -8
  79. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.cpp +19 -30
  80. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.h +2 -4
  81. package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.cpp +7 -11
  82. package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.cpp +2 -2
  83. package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.h +1 -2
  84. package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.cpp +6 -8
  85. package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.h +1 -2
  86. package/common/cpp/audioapi/HostObjects/sources/RecorderAdapterNodeHostObject.h +4 -5
  87. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.cpp +6 -2
  88. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.h +5 -6
  89. package/common/cpp/audioapi/HostObjects/sources/WorkletSourceNodeHostObject.h +1 -2
  90. package/common/cpp/audioapi/HostObjects/utils/AudioDecoderHostObject.cpp +39 -60
  91. package/common/cpp/audioapi/HostObjects/utils/AudioStretcherHostObject.cpp +15 -30
  92. package/common/cpp/audioapi/core/AudioContext.cpp +23 -28
  93. package/common/cpp/audioapi/core/AudioContext.h +6 -3
  94. package/common/cpp/audioapi/core/AudioNode.cpp +17 -19
  95. package/common/cpp/audioapi/core/AudioNode.h +19 -8
  96. package/common/cpp/audioapi/core/AudioParam.cpp +68 -100
  97. package/common/cpp/audioapi/core/AudioParam.h +20 -12
  98. package/common/cpp/audioapi/core/BaseAudioContext.cpp +52 -34
  99. package/common/cpp/audioapi/core/BaseAudioContext.h +26 -14
  100. package/common/cpp/audioapi/core/OfflineAudioContext.cpp +12 -17
  101. package/common/cpp/audioapi/core/OfflineAudioContext.h +10 -5
  102. package/common/cpp/audioapi/core/analysis/AnalyserNode.cpp +13 -21
  103. package/common/cpp/audioapi/core/analysis/AnalyserNode.h +8 -6
  104. package/common/cpp/audioapi/core/destinations/AudioDestinationNode.cpp +1 -0
  105. package/common/cpp/audioapi/core/destinations/AudioDestinationNode.h +5 -3
  106. package/common/cpp/audioapi/core/effects/BiquadFilterNode.cpp +84 -66
  107. package/common/cpp/audioapi/core/effects/BiquadFilterNode.h +39 -10
  108. package/common/cpp/audioapi/core/effects/ConvolverNode.cpp +201 -0
  109. package/common/cpp/audioapi/core/effects/ConvolverNode.h +64 -0
  110. package/common/cpp/audioapi/core/effects/DelayNode.cpp +101 -0
  111. package/common/cpp/audioapi/core/effects/DelayNode.h +39 -0
  112. package/common/cpp/audioapi/core/effects/GainNode.cpp +1 -0
  113. package/common/cpp/audioapi/core/effects/GainNode.h +3 -1
  114. package/common/cpp/audioapi/core/effects/IIRFilterNode.cpp +166 -0
  115. package/common/cpp/audioapi/core/effects/IIRFilterNode.h +74 -0
  116. package/common/cpp/audioapi/core/effects/PeriodicWave.cpp +22 -35
  117. package/common/cpp/audioapi/core/effects/PeriodicWave.h +4 -9
  118. package/common/cpp/audioapi/core/effects/StereoPannerNode.cpp +4 -5
  119. package/common/cpp/audioapi/core/effects/StereoPannerNode.h +4 -2
  120. package/common/cpp/audioapi/core/effects/WorkletNode.cpp +11 -13
  121. package/common/cpp/audioapi/core/effects/WorkletNode.h +15 -12
  122. package/common/cpp/audioapi/core/effects/WorkletProcessingNode.cpp +4 -4
  123. package/common/cpp/audioapi/core/effects/WorkletProcessingNode.h +15 -14
  124. package/common/cpp/audioapi/core/inputs/AudioRecorder.cpp +58 -36
  125. package/common/cpp/audioapi/core/inputs/AudioRecorder.h +42 -44
  126. package/common/cpp/audioapi/core/sources/AudioBuffer.cpp +4 -6
  127. package/common/cpp/audioapi/core/sources/AudioBuffer.h +4 -7
  128. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +48 -57
  129. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +37 -34
  130. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +55 -17
  131. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +35 -28
  132. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +41 -49
  133. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +8 -6
  134. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +29 -24
  135. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +6 -6
  136. package/common/cpp/audioapi/core/sources/ConstantSourceNode.cpp +3 -4
  137. package/common/cpp/audioapi/core/sources/ConstantSourceNode.h +3 -1
  138. package/common/cpp/audioapi/core/sources/OscillatorNode.cpp +12 -23
  139. package/common/cpp/audioapi/core/sources/OscillatorNode.h +6 -4
  140. package/common/cpp/audioapi/core/sources/RecorderAdapterNode.cpp +43 -16
  141. package/common/cpp/audioapi/core/sources/RecorderAdapterNode.h +22 -17
  142. package/common/cpp/audioapi/core/sources/StreamerNode.cpp +104 -87
  143. package/common/cpp/audioapi/core/sources/StreamerNode.h +69 -33
  144. package/common/cpp/audioapi/core/sources/WorkletSourceNode.cpp +5 -7
  145. package/common/cpp/audioapi/core/sources/WorkletSourceNode.h +15 -13
  146. package/common/cpp/audioapi/core/types/AudioFormat.h +1 -11
  147. package/common/cpp/audioapi/core/utils/AudioDecoder.h +15 -6
  148. package/common/cpp/audioapi/core/utils/AudioFileWriter.cpp +41 -0
  149. package/common/cpp/audioapi/core/utils/AudioFileWriter.h +43 -0
  150. package/common/cpp/audioapi/core/utils/AudioNodeDestructor.cpp +5 -6
  151. package/common/cpp/audioapi/core/utils/AudioNodeDestructor.h +7 -10
  152. package/common/cpp/audioapi/core/utils/AudioNodeManager.cpp +17 -19
  153. package/common/cpp/audioapi/core/utils/AudioNodeManager.h +8 -11
  154. package/common/cpp/audioapi/core/utils/AudioParamEventQueue.cpp +3 -3
  155. package/common/cpp/audioapi/core/utils/AudioParamEventQueue.h +5 -5
  156. package/common/cpp/audioapi/core/utils/AudioRecorderCallback.cpp +101 -0
  157. package/common/cpp/audioapi/core/utils/AudioRecorderCallback.h +51 -0
  158. package/common/cpp/audioapi/core/utils/AudioStretcher.cpp +6 -6
  159. package/common/cpp/audioapi/core/utils/Constants.h +7 -3
  160. package/common/cpp/audioapi/core/utils/ParamChangeEvent.cpp +1 -0
  161. package/common/cpp/audioapi/core/utils/ParamChangeEvent.h +9 -9
  162. package/common/cpp/audioapi/core/utils/worklets/SafeIncludes.h +33 -34
  163. package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.cpp +17 -19
  164. package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.h +23 -19
  165. package/common/cpp/audioapi/dsp/AudioUtils.cpp +4 -10
  166. package/common/cpp/audioapi/dsp/AudioUtils.h +1 -1
  167. package/common/cpp/audioapi/dsp/Convolver.cpp +201 -0
  168. package/common/cpp/audioapi/dsp/Convolver.h +47 -0
  169. package/common/cpp/audioapi/dsp/FFT.cpp +1 -27
  170. package/common/cpp/audioapi/dsp/FFT.h +19 -3
  171. package/common/cpp/audioapi/dsp/VectorMath.cpp +24 -58
  172. package/common/cpp/audioapi/dsp/VectorMath.h +35 -8
  173. package/common/cpp/audioapi/dsp/Windows.cpp +4 -9
  174. package/common/cpp/audioapi/dsp/Windows.h +24 -23
  175. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.cpp +12 -17
  176. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +45 -40
  177. package/common/cpp/audioapi/events/IAudioEventHandlerRegistry.h +15 -7
  178. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/avcodec.h +4 -4
  179. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec.h +1 -1
  180. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_desc.h +1 -1
  181. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_id.h +3 -1
  182. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_par.h +2 -2
  183. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/defs.h +3 -0
  184. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/packet.h +1 -1
  185. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/smpte_436m.h +254 -0
  186. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/version.h +1 -1
  187. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/avformat.h +6 -6
  188. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version.h +2 -2
  189. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version_major.h +2 -0
  190. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avassert.h +5 -2
  191. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avutil.h +2 -2
  192. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/channel_layout.h +2 -2
  193. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/csp.h +1 -1
  194. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/dict.h +1 -1
  195. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/ffversion.h +1 -1
  196. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/film_grain_params.h +1 -1
  197. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/frame.h +1 -1
  198. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hdr_dynamic_vivid_metadata.h +3 -3
  199. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext.h +1 -1
  200. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_opencl.h +1 -1
  201. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_qsv.h +0 -1
  202. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_vulkan.h +1 -1
  203. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/iamf.h +2 -2
  204. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/lfg.h +2 -2
  205. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/log.h +2 -2
  206. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/mathematics.h +1 -1
  207. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/opt.h +4 -4
  208. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rational.h +1 -1
  209. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rc4.h +1 -1
  210. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/refstruct.h +1 -1
  211. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/spherical.h +6 -0
  212. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tdrdi.h +1 -1
  213. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tx.h +1 -1
  214. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/version.h +3 -3
  215. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/video_hint.h +1 -1
  216. package/common/cpp/audioapi/external/ffmpeg_include/libswresample/swresample.h +1 -1
  217. package/common/cpp/audioapi/external/ffmpeg_include/libswresample/version.h +1 -1
  218. package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64/libavcodec.framework/libavcodec +0 -0
  219. package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64_x86_64-simulator/libavcodec.framework/libavcodec +0 -0
  220. package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64/libavformat.framework/libavformat +0 -0
  221. package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64_x86_64-simulator/libavformat.framework/libavformat +0 -0
  222. package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64/libavutil.framework/libavutil +0 -0
  223. package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64_x86_64-simulator/libavutil.framework/libavutil +0 -0
  224. package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64/libswresample.framework/libswresample +0 -0
  225. package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64_x86_64-simulator/libswresample.framework/libswresample +0 -0
  226. package/common/cpp/audioapi/jsi/AudioArrayBuffer.h +4 -5
  227. package/common/cpp/audioapi/jsi/JsiHostObject.cpp +11 -13
  228. package/common/cpp/audioapi/jsi/JsiHostObject.h +26 -33
  229. package/common/cpp/audioapi/jsi/JsiPromise.cpp +34 -67
  230. package/common/cpp/audioapi/jsi/JsiPromise.h +65 -26
  231. package/common/cpp/audioapi/jsi/RuntimeLifecycleMonitor.cpp +7 -10
  232. package/common/cpp/audioapi/jsi/RuntimeLifecycleMonitor.h +1 -3
  233. package/common/cpp/audioapi/libs/ffmpeg/FFmpegDecoding.cpp +4 -3
  234. package/common/cpp/audioapi/libs/ffmpeg/relinking.md +24 -0
  235. package/common/cpp/audioapi/utils/AlignedAllocator.hpp +50 -0
  236. package/common/cpp/audioapi/utils/AudioArray.cpp +3 -8
  237. package/common/cpp/audioapi/utils/AudioArray.h +3 -11
  238. package/common/cpp/audioapi/utils/AudioBus.cpp +79 -149
  239. package/common/cpp/audioapi/utils/AudioBus.h +17 -14
  240. package/common/cpp/audioapi/utils/AudioFileProperties.cpp +92 -0
  241. package/common/cpp/audioapi/utils/AudioFileProperties.h +76 -0
  242. package/common/cpp/audioapi/utils/CircularAudioArray.cpp +6 -18
  243. package/common/cpp/audioapi/utils/CircularOverflowableAudioArray.cpp +6 -10
  244. package/common/cpp/audioapi/utils/CircularOverflowableAudioArray.h +2 -2
  245. package/common/cpp/audioapi/utils/Result.hpp +286 -0
  246. package/common/cpp/audioapi/utils/ThreadPool.hpp +59 -1
  247. package/common/cpp/audioapi/utils/UnitConversion.h +9 -0
  248. package/common/cpp/test/CMakeLists.txt +20 -14
  249. package/common/cpp/test/src/AudioParamTest.cpp +4 -3
  250. package/common/cpp/test/src/AudioScheduledSourceTest.cpp +113 -0
  251. package/common/cpp/test/src/ConstantSourceTest.cpp +5 -7
  252. package/common/cpp/test/src/DelayTest.cpp +108 -0
  253. package/common/cpp/test/src/GainTest.cpp +4 -5
  254. package/common/cpp/test/src/IIRFilterTest.cpp +153 -0
  255. package/common/cpp/test/src/MockAudioEventHandlerRegistry.h +19 -11
  256. package/common/cpp/test/src/OscillatorTest.cpp +2 -1
  257. package/common/cpp/test/src/StereoPannerTest.cpp +6 -9
  258. package/common/cpp/test/src/biquad/BiquadFilterChromium.cpp +372 -0
  259. package/common/cpp/test/src/biquad/BiquadFilterChromium.h +65 -0
  260. package/common/cpp/test/src/biquad/BiquadFilterTest.cpp +272 -0
  261. package/common/cpp/test/src/biquad/BiquadFilterTest.h +47 -0
  262. package/ios/audioapi/ios/AudioAPIModule.h +2 -1
  263. package/ios/audioapi/ios/AudioAPIModule.mm +44 -20
  264. package/ios/audioapi/ios/core/IOSAudioPlayer.h +2 -2
  265. package/ios/audioapi/ios/core/IOSAudioPlayer.mm +7 -6
  266. package/ios/audioapi/ios/core/IOSAudioRecorder.h +26 -18
  267. package/ios/audioapi/ios/core/IOSAudioRecorder.mm +193 -53
  268. package/ios/audioapi/ios/core/NativeAudioPlayer.m +16 -13
  269. package/ios/audioapi/ios/core/NativeAudioRecorder.h +4 -0
  270. package/ios/audioapi/ios/core/NativeAudioRecorder.m +42 -7
  271. package/ios/audioapi/ios/core/utils/AudioDecoder.mm +21 -4
  272. package/ios/audioapi/ios/core/utils/FileOptions.h +31 -0
  273. package/ios/audioapi/ios/core/utils/FileOptions.mm +177 -0
  274. package/ios/audioapi/ios/core/{IOSAudioFileWriter.h → utils/IOSFileWriter.h} +16 -14
  275. package/ios/audioapi/ios/core/utils/IOSFileWriter.mm +224 -0
  276. package/ios/audioapi/ios/core/{IOSRecorderCallback.h → utils/IOSRecorderCallback.h} +7 -17
  277. package/ios/audioapi/ios/core/utils/IOSRecorderCallback.mm +172 -0
  278. package/ios/audioapi/ios/system/AudioEngine.h +19 -16
  279. package/ios/audioapi/ios/system/AudioEngine.mm +101 -134
  280. package/ios/audioapi/ios/system/AudioSessionManager.h +25 -11
  281. package/ios/audioapi/ios/system/AudioSessionManager.mm +273 -202
  282. package/ios/audioapi/ios/system/LockScreenManager.mm +39 -23
  283. package/ios/audioapi/ios/system/NotificationManager.mm +37 -52
  284. package/lib/commonjs/AudioAPIModule/AudioAPIModule.js +90 -0
  285. package/lib/commonjs/AudioAPIModule/AudioAPIModule.js.map +1 -0
  286. package/lib/commonjs/AudioAPIModule/globals.d.js +6 -0
  287. package/lib/commonjs/AudioAPIModule/globals.d.js.map +1 -0
  288. package/lib/commonjs/AudioAPIModule/index.js +14 -0
  289. package/lib/commonjs/AudioAPIModule/index.js.map +1 -0
  290. package/lib/commonjs/api.js +18 -12
  291. package/lib/commonjs/api.js.map +1 -1
  292. package/lib/commonjs/api.web.js +8 -0
  293. package/lib/commonjs/api.web.js.map +1 -1
  294. package/lib/commonjs/core/AudioBufferBaseSourceNode.js +3 -0
  295. package/lib/commonjs/core/AudioBufferBaseSourceNode.js.map +1 -1
  296. package/lib/commonjs/core/AudioBufferQueueSourceNode.js +5 -2
  297. package/lib/commonjs/core/AudioBufferQueueSourceNode.js.map +1 -1
  298. package/lib/commonjs/core/AudioContext.js +5 -8
  299. package/lib/commonjs/core/AudioContext.js.map +1 -1
  300. package/lib/commonjs/core/AudioNode.js +1 -1
  301. package/lib/commonjs/core/AudioNode.js.map +1 -1
  302. package/lib/commonjs/core/AudioParam.js +18 -11
  303. package/lib/commonjs/core/AudioParam.js.map +1 -1
  304. package/lib/commonjs/core/AudioRecorder.js +43 -55
  305. package/lib/commonjs/core/AudioRecorder.js.map +1 -1
  306. package/lib/commonjs/core/BaseAudioContext.js +61 -30
  307. package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
  308. package/lib/commonjs/core/ConvolverNode.js +37 -0
  309. package/lib/commonjs/core/ConvolverNode.js.map +1 -0
  310. package/lib/commonjs/core/DelayNode.js +17 -0
  311. package/lib/commonjs/core/DelayNode.js.map +1 -0
  312. package/lib/commonjs/core/IIRFilterNode.js +19 -0
  313. package/lib/commonjs/core/IIRFilterNode.js.map +1 -0
  314. package/lib/commonjs/core/OfflineAudioContext.js +3 -6
  315. package/lib/commonjs/core/OfflineAudioContext.js.map +1 -1
  316. package/lib/commonjs/plugin/withAudioAPI.js +46 -0
  317. package/lib/commonjs/plugin/withAudioAPI.js.map +1 -1
  318. package/lib/commonjs/specs/NativeAudioAPIModule.js.map +1 -1
  319. package/lib/commonjs/system/AudioManager.js +4 -7
  320. package/lib/commonjs/system/AudioManager.js.map +1 -1
  321. package/lib/commonjs/types.js +16 -23
  322. package/lib/commonjs/types.js.map +1 -1
  323. package/lib/commonjs/utils/filePresets.js +43 -0
  324. package/lib/commonjs/utils/filePresets.js.map +1 -0
  325. package/lib/commonjs/utils/index.js +12 -27
  326. package/lib/commonjs/utils/index.js.map +1 -1
  327. package/lib/commonjs/web-core/AudioContext.js +21 -1
  328. package/lib/commonjs/web-core/AudioContext.js.map +1 -1
  329. package/lib/commonjs/web-core/ConvolverNode.js +40 -0
  330. package/lib/commonjs/web-core/ConvolverNode.js.map +1 -0
  331. package/lib/commonjs/web-core/ConvolverNodeOptions.js +6 -0
  332. package/lib/commonjs/web-core/ConvolverNodeOptions.js.map +1 -0
  333. package/lib/commonjs/web-core/DelayNode.js +17 -0
  334. package/lib/commonjs/web-core/DelayNode.js.map +1 -0
  335. package/lib/commonjs/web-core/IIRFilterNode.js +19 -0
  336. package/lib/commonjs/web-core/IIRFilterNode.js.map +1 -0
  337. package/lib/commonjs/web-core/OfflineAudioContext.js +20 -0
  338. package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
  339. package/lib/module/AudioAPIModule/AudioAPIModule.js +87 -0
  340. package/lib/module/AudioAPIModule/AudioAPIModule.js.map +1 -0
  341. package/lib/module/AudioAPIModule/globals.d.js +4 -0
  342. package/lib/module/AudioAPIModule/globals.d.js.map +1 -0
  343. package/lib/module/AudioAPIModule/index.js +4 -0
  344. package/lib/module/AudioAPIModule/index.js.map +1 -0
  345. package/lib/module/api.js +3 -12
  346. package/lib/module/api.js.map +1 -1
  347. package/lib/module/api.web.js +1 -0
  348. package/lib/module/api.web.js.map +1 -1
  349. package/lib/module/core/AudioBufferBaseSourceNode.js +3 -0
  350. package/lib/module/core/AudioBufferBaseSourceNode.js.map +1 -1
  351. package/lib/module/core/AudioBufferQueueSourceNode.js +5 -2
  352. package/lib/module/core/AudioBufferQueueSourceNode.js.map +1 -1
  353. package/lib/module/core/AudioContext.js +5 -8
  354. package/lib/module/core/AudioContext.js.map +1 -1
  355. package/lib/module/core/AudioNode.js +1 -1
  356. package/lib/module/core/AudioNode.js.map +1 -1
  357. package/lib/module/core/AudioParam.js +18 -11
  358. package/lib/module/core/AudioParam.js.map +1 -1
  359. package/lib/module/core/AudioRecorder.js +44 -56
  360. package/lib/module/core/AudioRecorder.js.map +1 -1
  361. package/lib/module/core/BaseAudioContext.js +63 -32
  362. package/lib/module/core/BaseAudioContext.js.map +1 -1
  363. package/lib/module/core/ConvolverNode.js +31 -0
  364. package/lib/module/core/ConvolverNode.js.map +1 -0
  365. package/lib/module/core/DelayNode.js +11 -0
  366. package/lib/module/core/DelayNode.js.map +1 -0
  367. package/lib/module/core/IIRFilterNode.js +13 -0
  368. package/lib/module/core/IIRFilterNode.js.map +1 -0
  369. package/lib/module/core/OfflineAudioContext.js +3 -6
  370. package/lib/module/core/OfflineAudioContext.js.map +1 -1
  371. package/lib/module/plugin/withAudioAPI.js +47 -1
  372. package/lib/module/plugin/withAudioAPI.js.map +1 -1
  373. package/lib/module/specs/NativeAudioAPIModule.js.map +1 -1
  374. package/lib/module/system/AudioManager.js +4 -7
  375. package/lib/module/system/AudioManager.js.map +1 -1
  376. package/lib/module/types.js +15 -22
  377. package/lib/module/types.js.map +1 -1
  378. package/lib/module/utils/filePresets.js +39 -0
  379. package/lib/module/utils/filePresets.js.map +1 -0
  380. package/lib/module/utils/index.js +10 -10
  381. package/lib/module/utils/index.js.map +1 -1
  382. package/lib/module/web-core/AudioContext.js +21 -1
  383. package/lib/module/web-core/AudioContext.js.map +1 -1
  384. package/lib/module/web-core/ConvolverNode.js +34 -0
  385. package/lib/module/web-core/ConvolverNode.js.map +1 -0
  386. package/lib/module/web-core/ConvolverNodeOptions.js +4 -0
  387. package/lib/module/web-core/ConvolverNodeOptions.js.map +1 -0
  388. package/lib/module/web-core/DelayNode.js +11 -0
  389. package/lib/module/web-core/DelayNode.js.map +1 -0
  390. package/lib/module/web-core/IIRFilterNode.js +13 -0
  391. package/lib/module/web-core/IIRFilterNode.js.map +1 -0
  392. package/lib/module/web-core/OfflineAudioContext.js +20 -0
  393. package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
  394. package/lib/typescript/AudioAPIModule/AudioAPIModule.d.ts +36 -0
  395. package/lib/typescript/AudioAPIModule/AudioAPIModule.d.ts.map +1 -0
  396. package/lib/typescript/AudioAPIModule/index.d.ts +2 -0
  397. package/lib/typescript/AudioAPIModule/index.d.ts.map +1 -0
  398. package/lib/typescript/api.d.ts +3 -9
  399. package/lib/typescript/api.d.ts.map +1 -1
  400. package/lib/typescript/api.web.d.ts +1 -0
  401. package/lib/typescript/api.web.d.ts.map +1 -1
  402. package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts +1 -0
  403. package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts.map +1 -1
  404. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts +1 -1
  405. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts.map +1 -1
  406. package/lib/typescript/core/AudioContext.d.ts +1 -1
  407. package/lib/typescript/core/AudioContext.d.ts.map +1 -1
  408. package/lib/typescript/core/AudioNode.d.ts +2 -1
  409. package/lib/typescript/core/AudioNode.d.ts.map +1 -1
  410. package/lib/typescript/core/AudioParam.d.ts.map +1 -1
  411. package/lib/typescript/core/AudioRecorder.d.ts +13 -6
  412. package/lib/typescript/core/AudioRecorder.d.ts.map +1 -1
  413. package/lib/typescript/core/BaseAudioContext.d.ts +9 -3
  414. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
  415. package/lib/typescript/core/ConvolverNode.d.ts +12 -0
  416. package/lib/typescript/core/ConvolverNode.d.ts.map +1 -0
  417. package/lib/typescript/core/DelayNode.d.ts +9 -0
  418. package/lib/typescript/core/DelayNode.d.ts.map +1 -0
  419. package/lib/typescript/core/IIRFilterNode.d.ts +5 -0
  420. package/lib/typescript/core/IIRFilterNode.d.ts.map +1 -0
  421. package/lib/typescript/core/OfflineAudioContext.d.ts +1 -1
  422. package/lib/typescript/core/OfflineAudioContext.d.ts.map +1 -1
  423. package/lib/typescript/events/types.d.ts +4 -0
  424. package/lib/typescript/events/types.d.ts.map +1 -1
  425. package/lib/typescript/interfaces.d.ts +34 -34
  426. package/lib/typescript/interfaces.d.ts.map +1 -1
  427. package/lib/typescript/plugin/withAudioAPI.d.ts +1 -0
  428. package/lib/typescript/plugin/withAudioAPI.d.ts.map +1 -1
  429. package/lib/typescript/specs/NativeAudioAPIModule.d.ts +2 -1
  430. package/lib/typescript/specs/NativeAudioAPIModule.d.ts.map +1 -1
  431. package/lib/typescript/system/AudioManager.d.ts +3 -2
  432. package/lib/typescript/system/AudioManager.d.ts.map +1 -1
  433. package/lib/typescript/types.d.ts +42 -34
  434. package/lib/typescript/types.d.ts.map +1 -1
  435. package/lib/typescript/utils/filePresets.d.ts +9 -0
  436. package/lib/typescript/utils/filePresets.d.ts.map +1 -0
  437. package/lib/typescript/utils/index.d.ts +1 -8
  438. package/lib/typescript/utils/index.d.ts.map +1 -1
  439. package/lib/typescript/web-core/AudioContext.d.ts +9 -2
  440. package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
  441. package/lib/typescript/web-core/BaseAudioContext.d.ts +7 -1
  442. package/lib/typescript/web-core/BaseAudioContext.d.ts.map +1 -1
  443. package/lib/typescript/web-core/ConvolverNode.d.ts +11 -0
  444. package/lib/typescript/web-core/ConvolverNode.d.ts.map +1 -0
  445. package/lib/typescript/web-core/ConvolverNodeOptions.d.ts +6 -0
  446. package/lib/typescript/web-core/ConvolverNodeOptions.d.ts.map +1 -0
  447. package/lib/typescript/web-core/DelayNode.d.ts +8 -0
  448. package/lib/typescript/web-core/DelayNode.d.ts.map +1 -0
  449. package/lib/typescript/web-core/IIRFilterNode.d.ts +5 -0
  450. package/lib/typescript/web-core/IIRFilterNode.d.ts.map +1 -0
  451. package/lib/typescript/web-core/OfflineAudioContext.d.ts +8 -1
  452. package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
  453. package/package.json +11 -4
  454. package/scripts/download-prebuilt-binaries.sh +61 -0
  455. package/scripts/rnaa_utils.rb +8 -0
  456. package/scripts/validate-worklets-version.js +27 -0
  457. package/src/AudioAPIModule/AudioAPIModule.ts +122 -0
  458. package/src/AudioAPIModule/globals.d.ts +33 -0
  459. package/src/AudioAPIModule/index.ts +1 -0
  460. package/src/api.ts +4 -52
  461. package/src/api.web.ts +1 -0
  462. package/src/core/AudioBufferBaseSourceNode.ts +8 -0
  463. package/src/core/AudioBufferQueueSourceNode.ts +8 -2
  464. package/src/core/AudioContext.ts +5 -8
  465. package/src/core/AudioNode.ts +4 -3
  466. package/src/core/AudioParam.ts +18 -11
  467. package/src/core/AudioRecorder.ts +63 -78
  468. package/src/core/BaseAudioContext.ts +120 -54
  469. package/src/core/ConvolverNode.ts +35 -0
  470. package/src/core/DelayNode.ts +13 -0
  471. package/src/core/IIRFilterNode.ts +25 -0
  472. package/src/core/OfflineAudioContext.ts +4 -7
  473. package/src/events/types.ts +5 -0
  474. package/src/interfaces.ts +51 -34
  475. package/src/plugin/withAudioAPI.ts +61 -0
  476. package/src/specs/NativeAudioAPIModule.ts +3 -2
  477. package/src/system/AudioManager.ts +13 -19
  478. package/src/types.ts +45 -36
  479. package/src/utils/filePresets.ts +47 -0
  480. package/src/utils/index.ts +13 -19
  481. package/src/web-core/AudioContext.tsx +40 -1
  482. package/src/web-core/BaseAudioContext.tsx +11 -1
  483. package/src/web-core/ConvolverNode.tsx +43 -0
  484. package/src/web-core/ConvolverNodeOptions.tsx +6 -0
  485. package/src/web-core/DelayNode.tsx +12 -0
  486. package/src/web-core/IIRFilterNode.tsx +25 -0
  487. package/src/web-core/OfflineAudioContext.tsx +39 -0
  488. package/android/src/main/cpp/audioapi/android/core/utils/FileUtils.h +0 -34
  489. package/android/src/main/cpp/audioapi/android/core/utils/FileUtilts.cpp +0 -133
  490. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.cpp +0 -154
  491. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.h +0 -41
  492. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.cpp +0 -47
  493. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.h +0 -28
  494. package/common/cpp/audioapi/libs/ffmpeg/INSTRUCTIONS.md +0 -32
  495. package/common/cpp/audioapi/libs/ffmpeg/create_xcframework.sh +0 -111
  496. package/common/cpp/audioapi/libs/ffmpeg/ffmpeg_setup.sh +0 -391
  497. package/ios/audioapi/ios/core/IOSAudioFileOptions.h +0 -36
  498. package/ios/audioapi/ios/core/IOSAudioFileOptions.mm +0 -140
  499. package/ios/audioapi/ios/core/IOSAudioFileWriter.mm +0 -223
  500. package/ios/audioapi/ios/core/IOSRecorderCallback.mm +0 -189
  501. package/lib/commonjs/utils/bitEnums.js +0 -33
  502. package/lib/commonjs/utils/bitEnums.js.map +0 -1
  503. package/lib/module/utils/bitEnums.js +0 -27
  504. package/lib/module/utils/bitEnums.js.map +0 -1
  505. package/lib/typescript/utils/bitEnums.d.ts +0 -4
  506. package/lib/typescript/utils/bitEnums.d.ts.map +0 -1
  507. package/metro-config/index.d.ts +0 -5
  508. package/metro-config/index.js +0 -41
  509. package/metro-config/tsconfig.json +0 -3
  510. package/src/utils/bitEnums.ts +0 -51
  511. package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/Info.plist +5 -5
  512. package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64/libavcodec.framework/Info.plist +0 -0
  513. package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64_x86_64-simulator/libavcodec.framework/Info.plist +0 -0
  514. package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/Info.plist +0 -0
  515. package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64/libavformat.framework/Info.plist +0 -0
  516. package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64_x86_64-simulator/libavformat.framework/Info.plist +0 -0
  517. package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/Info.plist +5 -5
  518. package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64/libavutil.framework/Info.plist +0 -0
  519. package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64_x86_64-simulator/libavutil.framework/Info.plist +0 -0
  520. package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/Info.plist +5 -5
  521. /package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64/libswresample.framework/Info.plist +0 -0
  522. /package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64_x86_64-simulator/libswresample.framework/Info.plist +0 -0
@@ -11,24 +11,52 @@
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 <atomic>
26
28
  #include <cmath>
27
29
  #include <memory>
28
30
  #include <string>
29
- #include <atomic>
30
-
31
- static bool constexpr VERBOSE = false;
31
+ #include <utility>
32
+ #ifndef AUDIO_API_TEST_SUITE
33
+ #include <audioapi/utils/SpscChannel.hpp>
34
+
35
+ static constexpr audioapi::channels::spsc::OverflowStrategy STREAMER_NODE_SPSC_OVERFLOW_STRATEGY =
36
+ audioapi::channels::spsc::OverflowStrategy::WAIT_ON_FULL;
37
+ static constexpr audioapi::channels::spsc::WaitStrategy STREAMER_NODE_SPSC_WAIT_STRATEGY =
38
+ audioapi::channels::spsc::WaitStrategy::ATOMIC_WAIT;
39
+ #endif // AUDIO_API_TEST_SUITE
40
+
41
+ static constexpr bool VERBOSE = false;
42
+ static constexpr int CHANNEL_CAPACITY = 32;
43
+
44
+ struct StreamingData {
45
+ audioapi::AudioBus bus;
46
+ size_t size;
47
+ StreamingData() = default;
48
+ StreamingData(audioapi::AudioBus b, size_t s) : bus(b), size(s) {}
49
+ StreamingData(const StreamingData &data) : bus(data.bus), size(data.size) {}
50
+ StreamingData(StreamingData &&data) noexcept : bus(std::move(data.bus)), size(data.size) {}
51
+ StreamingData &operator=(const StreamingData &data) {
52
+ if (this == &data) {
53
+ return *this;
54
+ }
55
+ bus = data.bus;
56
+ size = data.size;
57
+ return *this;
58
+ }
59
+ };
32
60
 
33
61
  namespace audioapi {
34
62
 
@@ -42,33 +70,41 @@ class StreamerNode : public AudioScheduledSourceNode {
42
70
  /**
43
71
  * @brief Initialize all necessary ffmpeg components for streaming audio
44
72
  */
45
- bool initialize(const std::string& inputUrl);
46
- void stop(double when) override;
73
+ bool initialize(const std::string &inputUrl);
47
74
 
48
75
  protected:
49
- std::shared_ptr<AudioBus> processNode(const std::shared_ptr<AudioBus>& processingBus, int framesToProcess) override;
76
+ std::shared_ptr<AudioBus> processNode(
77
+ const std::shared_ptr<AudioBus> &processingBus,
78
+ int framesToProcess) override;
50
79
 
51
80
  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
81
+ #if !RN_AUDIO_API_FFMPEG_DISABLED
82
+ AVFormatContext *fmtCtx_;
83
+ AVCodecContext *codecCtx_;
84
+ const AVCodec *decoder_;
85
+ AVCodecParameters *codecpar_;
86
+ AVPacket *pkt_;
87
+ AVFrame *frame_; // Frame that is currently being processed
88
+ SwrContext *swrCtx_;
89
+ uint8_t **resampledData_; // weird ffmpeg way of using raw byte pointers for resampled data
90
+
60
91
  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
92
+ size_t bufferedBusSize_; // size of currently buffered bus
93
+ int audio_stream_index_; // index of the audio stream channel in the input
66
94
  int maxResampledSamples_;
67
- std::mutex mutex_;
95
+ size_t processedSamples_;
96
+
68
97
  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
98
+ std::atomic<bool> isNodeFinished_; // Flag to control the streaming thread
71
99
  static constexpr int INITIAL_MAX_RESAMPLED_SAMPLES = 8192; // Initial size for resampled data
100
+ channels::spsc::
101
+ Sender<StreamingData, STREAMER_NODE_SPSC_OVERFLOW_STRATEGY, STREAMER_NODE_SPSC_WAIT_STRATEGY>
102
+ sender_;
103
+ channels::spsc::Receiver<
104
+ StreamingData,
105
+ STREAMER_NODE_SPSC_OVERFLOW_STRATEGY,
106
+ STREAMER_NODE_SPSC_WAIT_STRATEGY>
107
+ receiver_;
72
108
 
73
109
  /**
74
110
  * @brief Setting up the resampler
@@ -81,7 +117,7 @@ class StreamerNode : public AudioScheduledSourceNode {
81
117
  * @param frame The AVFrame to resample
82
118
  * @return true if successful, false otherwise
83
119
  */
84
- bool processFrameWithResampler(AVFrame* frame);
120
+ bool processFrameWithResampler(AVFrame *frame);
85
121
 
86
122
  /**
87
123
  * @brief Thread function to continuously read and process audio frames
@@ -100,7 +136,7 @@ class StreamerNode : public AudioScheduledSourceNode {
100
136
  * @return true if successful, false otherwise
101
137
  * @note This function initializes the FFmpeg libraries and opens the input stream
102
138
  */
103
- bool openInput(const std::string& inputUrl);
139
+ bool openInput(const std::string &inputUrl);
104
140
 
105
141
  /**
106
142
  * @brief Find the audio stream channel in the input
@@ -113,6 +149,6 @@ class StreamerNode : public AudioScheduledSourceNode {
113
149
  * @return true if successful, false otherwise
114
150
  */
115
151
  bool setupDecoder();
116
- #endif // AUDIO_API_TEST_SUITE
152
+ #endif // RN_AUDIO_API_FFMPEG_DISABLED
117
153
  };
118
154
  } // 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
@@ -0,0 +1,43 @@
1
+ #pragma once
2
+
3
+ #include <audioapi/utils/Result.hpp>
4
+ #include <memory>
5
+ #include <string>
6
+ #include <tuple>
7
+
8
+ namespace audioapi {
9
+
10
+ class AudioFileProperties;
11
+ class AudioEventHandlerRegistry;
12
+
13
+ typedef Result<std::string, std::string> OpenFileResult;
14
+ typedef Result<std::tuple<double, double>, std::string> CloseFileResult;
15
+
16
+ class AudioFileWriter {
17
+ public:
18
+ AudioFileWriter(
19
+ const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
20
+ const std::shared_ptr<AudioFileProperties> &fileProperties);
21
+ virtual ~AudioFileWriter() = default;
22
+
23
+ virtual CloseFileResult closeFile() = 0;
24
+
25
+ virtual std::string getFilePath() const = 0;
26
+ virtual double getCurrentDuration() const = 0;
27
+
28
+ void setOnErrorCallback(uint64_t callbackId);
29
+ void clearOnErrorCallback();
30
+ void invokeOnErrorCallback(const std::string &message);
31
+
32
+ protected:
33
+ bool isFileOpen();
34
+
35
+ std::atomic<bool> isFileOpen_{false};
36
+ std::atomic<size_t> framesWritten_{0};
37
+ std::atomic<uint64_t> errorCallbackId_{0};
38
+
39
+ std::shared_ptr<AudioFileProperties> fileProperties_;
40
+ std::shared_ptr<AudioEventHandlerRegistry> audioEventHandlerRegistry_;
41
+ };
42
+
43
+ } // namespace audioapi
@@ -1,6 +1,8 @@
1
1
  #include <audioapi/core/AudioNode.h>
2
2
  #include <audioapi/core/utils/AudioNodeDestructor.h>
3
3
  #include <audioapi/core/utils/Locker.h>
4
+ #include <memory>
5
+ #include <utility>
4
6
 
5
7
  namespace audioapi {
6
8
 
@@ -11,8 +13,7 @@ AudioNodeDestructor::AudioNodeDestructor() {
11
13
  channels::spsc::OverflowStrategy::WAIT_ON_FULL,
12
14
  channels::spsc::WaitStrategy::ATOMIC_WAIT>(kChannelCapacity);
13
15
  sender_ = std::move(sender);
14
- workerHandle_ =
15
- std::thread(&AudioNodeDestructor::process, this, std::move(receiver));
16
+ workerHandle_ = std::thread(&AudioNodeDestructor::process, this, std::move(receiver));
16
17
  }
17
18
 
18
19
  AudioNodeDestructor::~AudioNodeDestructor() {
@@ -25,10 +26,8 @@ AudioNodeDestructor::~AudioNodeDestructor() {
25
26
  }
26
27
  }
27
28
 
28
- bool AudioNodeDestructor::tryAddNodeForDeconstruction(
29
- std::shared_ptr<AudioNode> &&node) {
30
- return sender_.try_send(std::move(node)) ==
31
- channels::spsc::ResponseStatus::SUCCESS;
29
+ bool AudioNodeDestructor::tryAddNodeForDeconstruction(std::shared_ptr<AudioNode> &&node) {
30
+ return sender_.try_send(std::move(node)) == channels::spsc::ResponseStatus::SUCCESS;
32
31
  }
33
32
 
34
33
  void AudioNodeDestructor::process(
@@ -1,19 +1,18 @@
1
1
  #pragma once
2
2
 
3
- #include <thread>
3
+ #include <audioapi/utils/SpscChannel.hpp>
4
4
  #include <atomic>
5
- #include <vector>
6
5
  #include <memory>
7
- #include <audioapi/utils/SpscChannel.hpp>
6
+ #include <thread>
7
+ #include <vector>
8
8
 
9
9
  namespace audioapi {
10
10
 
11
11
  class AudioNode;
12
12
 
13
13
  #define AUDIO_NODE_DESTRUCTOR_SPSC_OPTIONS \
14
- std::shared_ptr<AudioNode>, \
15
- channels::spsc::OverflowStrategy::WAIT_ON_FULL, \
16
- channels::spsc::WaitStrategy::ATOMIC_WAIT
14
+ std::shared_ptr<AudioNode>, channels::spsc::OverflowStrategy::WAIT_ON_FULL, \
15
+ channels::spsc::WaitStrategy::ATOMIC_WAIT
17
16
 
18
17
  class AudioNodeDestructor {
19
18
  public:
@@ -32,13 +31,11 @@ class AudioNodeDestructor {
32
31
  std::thread workerHandle_;
33
32
  std::atomic<bool> isExiting_;
34
33
 
35
- channels::spsc::Sender<
36
- AUDIO_NODE_DESTRUCTOR_SPSC_OPTIONS> sender_;
34
+ channels::spsc::Sender<AUDIO_NODE_DESTRUCTOR_SPSC_OPTIONS> sender_;
37
35
 
38
36
  /// @brief Processes audio nodes for deconstruction.
39
37
  /// @param receiver The receiver channel for incoming audio nodes.
40
- void process(channels::spsc::Receiver<
41
- AUDIO_NODE_DESTRUCTOR_SPSC_OPTIONS> &&receiver);
38
+ void process(channels::spsc::Receiver<AUDIO_NODE_DESTRUCTOR_SPSC_OPTIONS> &&receiver);
42
39
  };
43
40
 
44
41
  #undef AUDIO_NODE_DESTRUCTOR_SPSC_OPTIONS
@@ -1,8 +1,13 @@
1
1
  #include <audioapi/core/AudioNode.h>
2
2
  #include <audioapi/core/AudioParam.h>
3
+ #include <audioapi/core/effects/ConvolverNode.h>
4
+ #include <audioapi/core/effects/DelayNode.h>
3
5
  #include <audioapi/core/sources/AudioScheduledSourceNode.h>
4
6
  #include <audioapi/core/utils/AudioNodeManager.h>
5
7
  #include <audioapi/core/utils/Locker.h>
8
+ #include <memory>
9
+ #include <utility>
10
+ #include <vector>
6
11
 
7
12
  namespace audioapi {
8
13
 
@@ -116,8 +121,7 @@ void AudioNodeManager::preProcessGraph() {
116
121
  prepareNodesForDestruction(processingNodes_);
117
122
  }
118
123
 
119
- void AudioNodeManager::addProcessingNode(
120
- const std::shared_ptr<AudioNode> &node) {
124
+ void AudioNodeManager::addProcessingNode(const std::shared_ptr<AudioNode> &node) {
121
125
  auto event = std::make_unique<Event>();
122
126
  event->type = ConnectionType::ADD;
123
127
  event->payloadType = EventPayloadType::NODE;
@@ -126,8 +130,7 @@ void AudioNodeManager::addProcessingNode(
126
130
  sender_.send(std::move(event));
127
131
  }
128
132
 
129
- void AudioNodeManager::addSourceNode(
130
- const std::shared_ptr<AudioScheduledSourceNode> &node) {
133
+ void AudioNodeManager::addSourceNode(const std::shared_ptr<AudioScheduledSourceNode> &node) {
131
134
  auto event = std::make_unique<Event>();
132
135
  event->type = ConnectionType::ADD;
133
136
  event->payloadType = EventPayloadType::SOURCE_NODE;
@@ -147,8 +150,7 @@ void AudioNodeManager::addAudioParam(const std::shared_ptr<AudioParam> &param) {
147
150
 
148
151
  void AudioNodeManager::settlePendingConnections() {
149
152
  std::unique_ptr<Event> value;
150
- while (receiver_.try_receive(value) !=
151
- channels::spsc::ResponseStatus::CHANNEL_EMPTY) {
153
+ while (receiver_.try_receive(value) != channels::spsc::ResponseStatus::CHANNEL_EMPTY) {
152
154
  switch (value->type) {
153
155
  case ConnectionType::CONNECT:
154
156
  handleConnectEvent(std::move(value));
@@ -196,8 +198,7 @@ void AudioNodeManager::handleDisconnectAllEvent(std::unique_ptr<Event> event) {
196
198
  }
197
199
  }
198
200
 
199
- void AudioNodeManager::handleAddToDeconstructionEvent(
200
- std::unique_ptr<Event> event) {
201
+ void AudioNodeManager::handleAddToDeconstructionEvent(std::unique_ptr<Event> event) {
201
202
  switch (event->payloadType) {
202
203
  case EventPayloadType::NODE:
203
204
  processingNodes_.push_back(event->payload.node);
@@ -214,20 +215,20 @@ void AudioNodeManager::handleAddToDeconstructionEvent(
214
215
  }
215
216
 
216
217
  template <typename U>
217
- inline bool AudioNodeManager::nodeCanBeDestructed(
218
- std::shared_ptr<U> const &node) {
218
+ inline bool AudioNodeManager::nodeCanBeDestructed(std::shared_ptr<U> const &node) {
219
219
  // If the node is an AudioScheduledSourceNode, we need to check if it is
220
220
  // playing
221
221
  if constexpr (std::is_base_of_v<AudioScheduledSourceNode, U>) {
222
- return node.use_count() == 1 &&
223
- (node->isUnscheduled() || node->isFinished());
222
+ return node.use_count() == 1 && (node->isUnscheduled() || node->isFinished());
223
+ } else if (node->requiresTailProcessing()) {
224
+ // if the node requires tail processing, its own implementation handles disabling it at the right time
225
+ return node.use_count() == 1 && !node->isEnabled();
224
226
  }
225
227
  return node.use_count() == 1;
226
228
  }
227
229
 
228
230
  template <typename U>
229
- void AudioNodeManager::prepareNodesForDestruction(
230
- std::vector<std::shared_ptr<U>> &vec) {
231
+ void AudioNodeManager::prepareNodesForDestruction(std::vector<std::shared_ptr<U>> &vec) {
231
232
  if (vec.empty()) {
232
233
  return;
233
234
  }
@@ -279,14 +280,11 @@ void AudioNodeManager::prepareNodesForDestruction(
279
280
  }
280
281
 
281
282
  void AudioNodeManager::cleanup() {
282
- for (auto it = sourceNodes_.begin(), end = sourceNodes_.end(); it != end;
283
- ++it) {
283
+ for (auto it = sourceNodes_.begin(), end = sourceNodes_.end(); it != end; ++it) {
284
284
  it->get()->cleanup();
285
285
  }
286
286
 
287
- for (auto it = processingNodes_.begin(), end = processingNodes_.end();
288
- it != end;
289
- ++it) {
287
+ for (auto it = processingNodes_.begin(), end = processingNodes_.end(); it != end; ++it) {
290
288
  it->get()->cleanup();
291
289
  }
292
290
 
@@ -16,9 +16,8 @@ class AudioScheduledSourceNode;
16
16
  class AudioParam;
17
17
 
18
18
  #define AUDIO_NODE_MANAGER_SPSC_OPTIONS \
19
- std::unique_ptr<Event>, \
20
- channels::spsc::OverflowStrategy::WAIT_ON_FULL, \
21
- channels::spsc::WaitStrategy::BUSY_LOOP
19
+ std::unique_ptr<Event>, channels::spsc::OverflowStrategy::WAIT_ON_FULL, \
20
+ channels::spsc::WaitStrategy::BUSY_LOOP
22
21
 
23
22
  class AudioNodeManager {
24
23
  public:
@@ -49,8 +48,8 @@ class AudioNodeManager {
49
48
  EventPayloadType payloadType;
50
49
  EventPayload payload;
51
50
 
52
- Event(Event&& other);
53
- Event& operator=(Event&& other);
51
+ Event(Event &&other);
52
+ Event &operator=(Event &&other);
54
53
  Event() : type(ConnectionType::CONNECT), payloadType(EventPayloadType::NODES), payload() {}
55
54
  ~Event();
56
55
  };
@@ -78,7 +77,7 @@ class AudioNodeManager {
78
77
  void addPendingParamConnection(
79
78
  const std::shared_ptr<AudioNode> &from,
80
79
  const std::shared_ptr<AudioParam> &to,
81
- ConnectionType type);
80
+ ConnectionType type);
82
81
 
83
82
  /// @brief Adds a processing node to the manager.
84
83
  /// @param node The processing node to add.
@@ -112,11 +111,9 @@ class AudioNodeManager {
112
111
  std::vector<std::shared_ptr<AudioNode>> processingNodes_;
113
112
  std::vector<std::shared_ptr<AudioParam>> audioParams_;
114
113
 
115
- channels::spsc::Receiver<
116
- AUDIO_NODE_MANAGER_SPSC_OPTIONS> receiver_;
114
+ channels::spsc::Receiver<AUDIO_NODE_MANAGER_SPSC_OPTIONS> receiver_;
117
115
 
118
- channels::spsc::Sender<
119
- AUDIO_NODE_MANAGER_SPSC_OPTIONS> sender_;
116
+ channels::spsc::Sender<AUDIO_NODE_MANAGER_SPSC_OPTIONS> sender_;
120
117
 
121
118
  void settlePendingConnections();
122
119
  void handleConnectEvent(std::unique_ptr<Event> event);
@@ -128,7 +125,7 @@ class AudioNodeManager {
128
125
  void prepareNodesForDestruction(std::vector<std::shared_ptr<U>> &vec);
129
126
 
130
127
  template <typename U>
131
- inline static bool nodeCanBeDestructed(std::shared_ptr<U> const& node);
128
+ inline static bool nodeCanBeDestructed(std::shared_ptr<U> const &node);
132
129
  };
133
130
 
134
131
  #undef AUDIO_NODE_MANAGER_SPSC_OPTIONS
@@ -1,4 +1,6 @@
1
1
  #include <audioapi/core/utils/AudioParamEventQueue.h>
2
+ #include <algorithm>
3
+ #include <utility>
2
4
 
3
5
  namespace audioapi {
4
6
 
@@ -42,9 +44,7 @@ void AudioParamEventQueue::cancelScheduledValues(double cancelTime) {
42
44
  }
43
45
  }
44
46
 
45
- void AudioParamEventQueue::cancelAndHoldAtTime(
46
- double cancelTime,
47
- double &endTimeCache) {
47
+ void AudioParamEventQueue::cancelAndHoldAtTime(double cancelTime, double &endTimeCache) {
48
48
  while (!eventQueue_.isEmpty()) {
49
49
  auto &back = eventQueue_.peekBack();
50
50
  if (back.getEndTime() < cancelTime || back.getStartTime() <= cancelTime) {
@@ -1,7 +1,7 @@
1
1
  #pragma once
2
2
 
3
- #include <audioapi/core/utils/ParamChangeEvent.h>
4
3
  #include <audioapi/core/types/ParamChangeEventType.h>
4
+ #include <audioapi/core/utils/ParamChangeEvent.h>
5
5
  #include <audioapi/utils/RingBiDirectionalBuffer.hpp>
6
6
 
7
7
  namespace audioapi {
@@ -16,7 +16,7 @@ class AudioParamEventQueue {
16
16
 
17
17
  /// @brief Push a new event to the back of the queue.
18
18
  /// @note Handles connecting the start value of the new event to the end value of the last event in the queue.
19
- void pushBack(ParamChangeEvent&& event);
19
+ void pushBack(ParamChangeEvent &&event);
20
20
 
21
21
  /// @brief Pop the front event from the queue.
22
22
  /// @return The front event in the queue.
@@ -28,17 +28,17 @@ class AudioParamEventQueue {
28
28
 
29
29
  /// @brief Cancel scheduled parameter changes and hold the current value at the given time.
30
30
  /// @param cancelTime The time at which to cancel scheduled changes.
31
- void cancelAndHoldAtTime(double cancelTime, double& endTimeCache);
31
+ void cancelAndHoldAtTime(double cancelTime, double &endTimeCache);
32
32
 
33
33
  /// @brief Get the first event in the queue.
34
34
  /// @return The first event in the queue.
35
- inline const ParamChangeEvent& front() const noexcept {
35
+ inline const ParamChangeEvent &front() const noexcept {
36
36
  return eventQueue_.peekFront();
37
37
  }
38
38
 
39
39
  /// @brief Get the last event in the queue.
40
40
  /// @return The last event in the queue.
41
- inline const ParamChangeEvent& back() const noexcept {
41
+ inline const ParamChangeEvent &back() const noexcept {
42
42
  return eventQueue_.peekBack();
43
43
  }
44
44