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

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 +24 -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 +41 -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
@@ -3,8 +3,8 @@
3
3
  #include <audioapi/core/BaseAudioContext.h>
4
4
  #include <audioapi/core/utils/worklets/SafeIncludes.h>
5
5
 
6
- #include <memory>
7
6
  #include <functional>
7
+ #include <memory>
8
8
 
9
9
  namespace audioapi {
10
10
  #ifdef ANDROID
@@ -15,13 +15,16 @@ class IOSAudioPlayer;
15
15
 
16
16
  class AudioContext : public BaseAudioContext {
17
17
  public:
18
- explicit AudioContext(float sampleRate, bool initSuspended, const std::shared_ptr<IAudioEventHandlerRegistry> &audioEventHandlerRegistry, const RuntimeRegistry &runtimeRegistry);
18
+ explicit AudioContext(
19
+ float sampleRate,
20
+ const std::shared_ptr<IAudioEventHandlerRegistry> &audioEventHandlerRegistry,
21
+ const RuntimeRegistry &runtimeRegistry);
19
22
  ~AudioContext() override;
20
23
 
21
24
  void close();
22
25
  bool resume();
23
26
  bool suspend();
24
-
27
+ bool start();
25
28
 
26
29
  private:
27
30
  #ifdef ANDROID
@@ -4,12 +4,15 @@
4
4
  #include <audioapi/core/utils/AudioNodeManager.h>
5
5
  #include <audioapi/utils/AudioArray.h>
6
6
  #include <audioapi/utils/AudioBus.h>
7
+ #include <memory>
8
+ #include <string>
9
+ #include <utility>
7
10
 
8
11
  namespace audioapi {
9
12
 
10
13
  AudioNode::AudioNode(BaseAudioContext *context) : context_(context) {
11
- audioBus_ = std::make_shared<AudioBus>(
12
- RENDER_QUANTUM_SIZE, channelCount_, context->getSampleRate());
14
+ audioBus_ =
15
+ std::make_shared<AudioBus>(RENDER_QUANTUM_SIZE, channelCount_, context->getSampleRate());
13
16
  }
14
17
 
15
18
  AudioNode::~AudioNode() {
@@ -50,9 +53,7 @@ void AudioNode::connect(const std::shared_ptr<AudioParam> &param) {
50
53
 
51
54
  void AudioNode::disconnect() {
52
55
  context_->getNodeManager()->addPendingNodeConnection(
53
- shared_from_this(),
54
- nullptr,
55
- AudioNodeManager::ConnectionType::DISCONNECT_ALL);
56
+ shared_from_this(), nullptr, AudioNodeManager::ConnectionType::DISCONNECT_ALL);
56
57
  }
57
58
 
58
59
  void AudioNode::disconnect(const std::shared_ptr<AudioNode> &node) {
@@ -69,6 +70,10 @@ bool AudioNode::isEnabled() const {
69
70
  return isEnabled_;
70
71
  }
71
72
 
73
+ bool AudioNode::requiresTailProcessing() const {
74
+ return requiresTailProcessing_;
75
+ }
76
+
72
77
  void AudioNode::enable() {
73
78
  if (isEnabled()) {
74
79
  return;
@@ -76,8 +81,7 @@ void AudioNode::enable() {
76
81
 
77
82
  isEnabled_ = true;
78
83
 
79
- for (auto it = outputNodes_.begin(), end = outputNodes_.end(); it != end;
80
- ++it) {
84
+ for (auto it = outputNodes_.begin(), end = outputNodes_.end(); it != end; ++it) {
81
85
  it->get()->onInputEnabled();
82
86
  }
83
87
  }
@@ -89,8 +93,7 @@ void AudioNode::disable() {
89
93
 
90
94
  isEnabled_ = false;
91
95
 
92
- for (auto it = outputNodes_.begin(), end = outputNodes_.end(); it != end;
93
- ++it) {
96
+ for (auto it = outputNodes_.begin(), end = outputNodes_.end(); it != end; ++it) {
94
97
  it->get()->onInputDisabled();
95
98
  }
96
99
  }
@@ -132,8 +135,7 @@ std::shared_ptr<AudioBus> AudioNode::processAudio(
132
135
  }
133
136
 
134
137
  // Process inputs and return the bus with the most channels.
135
- auto processingBus =
136
- processInputs(outputBus, framesToProcess, checkIsAlreadyProcessed);
138
+ auto processingBus = processInputs(outputBus, framesToProcess, checkIsAlreadyProcessed);
137
139
 
138
140
  // Apply channel count mode.
139
141
  processingBus = applyChannelCountMode(processingBus);
@@ -172,8 +174,7 @@ std::shared_ptr<AudioBus> AudioNode::processInputs(
172
174
  processingBus->zero();
173
175
 
174
176
  int maxNumberOfChannels = 0;
175
- for (auto it = inputNodes_.begin(), end = inputNodes_.end(); it != end;
176
- ++it) {
177
+ for (auto it = inputNodes_.begin(), end = inputNodes_.end(); it != end; ++it) {
177
178
  auto inputNode = *it;
178
179
  assert(inputNode != nullptr);
179
180
 
@@ -181,8 +182,7 @@ std::shared_ptr<AudioBus> AudioNode::processInputs(
181
182
  continue;
182
183
  }
183
184
 
184
- auto inputBus = inputNode->processAudio(
185
- outputBus, framesToProcess, checkIsAlreadyProcessed);
185
+ auto inputBus = inputNode->processAudio(outputBus, framesToProcess, checkIsAlreadyProcessed);
186
186
  inputBuses_.push_back(inputBus);
187
187
 
188
188
  if (maxNumberOfChannels < inputBus->getNumberOfChannels()) {
@@ -215,8 +215,7 @@ std::shared_ptr<AudioBus> AudioNode::applyChannelCountMode(
215
215
  void AudioNode::mixInputsBuses(const std::shared_ptr<AudioBus> &processingBus) {
216
216
  assert(processingBus != nullptr);
217
217
 
218
- for (auto it = inputBuses_.begin(), end = inputBuses_.end(); it != end;
219
- ++it) {
218
+ for (auto it = inputBuses_.begin(), end = inputBuses_.end(); it != end; ++it) {
220
219
  processingBus->sum(it->get(), channelInterpretation_);
221
220
  }
222
221
 
@@ -306,8 +305,7 @@ void AudioNode::onInputDisconnected(AudioNode *node) {
306
305
  void AudioNode::cleanup() {
307
306
  isInitialized_ = false;
308
307
 
309
- for (auto it = outputNodes_.begin(), end = outputNodes_.end(); it != end;
310
- ++it) {
308
+ for (auto it = outputNodes_.begin(), end = outputNodes_.end(); it != end; ++it) {
311
309
  it->get()->onInputDisconnected(this);
312
310
  }
313
311
 
@@ -4,12 +4,12 @@
4
4
  #include <audioapi/core/types/ChannelInterpretation.h>
5
5
  #include <audioapi/core/utils/Constants.h>
6
6
 
7
+ #include <cassert>
8
+ #include <cstddef>
7
9
  #include <memory>
8
10
  #include <string>
9
11
  #include <unordered_set>
10
- #include <cstddef>
11
12
  #include <vector>
12
- #include <cassert>
13
13
 
14
14
  namespace audioapi {
15
15
 
@@ -32,15 +32,21 @@ class AudioNode : public std::enable_shared_from_this<AudioNode> {
32
32
  void disconnect();
33
33
  void disconnect(const std::shared_ptr<AudioNode> &node);
34
34
  void disconnect(const std::shared_ptr<AudioParam> &param);
35
- virtual std::shared_ptr<AudioBus> processAudio(const std::shared_ptr<AudioBus> &outputBus, int framesToProcess, bool checkIsAlreadyProcessed);
35
+ virtual std::shared_ptr<AudioBus> processAudio(
36
+ const std::shared_ptr<AudioBus> &outputBus,
37
+ int framesToProcess,
38
+ bool checkIsAlreadyProcessed);
36
39
 
37
40
  bool isEnabled() const;
41
+ bool requiresTailProcessing() const;
38
42
  void enable();
39
43
  virtual void disable();
40
44
 
41
45
  protected:
42
46
  friend class AudioNodeManager;
43
47
  friend class AudioDestinationNode;
48
+ friend class ConvolverNode;
49
+ friend class DelayNodeHostObject;
44
50
 
45
51
  BaseAudioContext *context_;
46
52
  std::shared_ptr<AudioBus> audioBus_;
@@ -50,7 +56,8 @@ class AudioNode : public std::enable_shared_from_this<AudioNode> {
50
56
  int channelCount_ = 2;
51
57
  ChannelCountMode channelCountMode_ = ChannelCountMode::MAX;
52
58
  ChannelInterpretation channelInterpretation_ =
53
- ChannelInterpretation::SPEAKERS;
59
+
60
+ ChannelInterpretation::SPEAKERS;
54
61
 
55
62
  std::unordered_set<AudioNode *> inputNodes_ = {};
56
63
  std::unordered_set<std::shared_ptr<AudioNode>> outputNodes_ = {};
@@ -59,6 +66,7 @@ class AudioNode : public std::enable_shared_from_this<AudioNode> {
59
66
  int numberOfEnabledInputNodes_ = 0;
60
67
  bool isInitialized_ = false;
61
68
  bool isEnabled_ = true;
69
+ bool requiresTailProcessing_ = false;
62
70
 
63
71
  std::size_t lastRenderedFrame_{SIZE_MAX};
64
72
 
@@ -68,12 +76,15 @@ class AudioNode : public std::enable_shared_from_this<AudioNode> {
68
76
  static std::string toString(ChannelCountMode mode);
69
77
  static std::string toString(ChannelInterpretation interpretation);
70
78
 
71
- virtual std::shared_ptr<AudioBus> processNode(const std::shared_ptr<AudioBus>&, int) = 0;
79
+ virtual std::shared_ptr<AudioBus> processInputs(
80
+ const std::shared_ptr<AudioBus> &outputBus,
81
+ int framesToProcess,
82
+ bool checkIsAlreadyProcessed);
83
+ virtual std::shared_ptr<AudioBus> processNode(const std::shared_ptr<AudioBus> &, int) = 0;
72
84
 
73
85
  bool isAlreadyProcessed();
74
- std::shared_ptr<AudioBus> processInputs(const std::shared_ptr<AudioBus>& outputBus, int framesToProcess, bool checkIsAlreadyProcessed);
75
86
  std::shared_ptr<AudioBus> applyChannelCountMode(const std::shared_ptr<AudioBus> &processingBus);
76
- void mixInputsBuses(const std::shared_ptr<AudioBus>& processingBus);
87
+ void mixInputsBuses(const std::shared_ptr<AudioBus> &processingBus);
77
88
 
78
89
  void connectNode(const std::shared_ptr<AudioNode> &node);
79
90
  void disconnectNode(const std::shared_ptr<AudioNode> &node);
@@ -81,7 +92,7 @@ class AudioNode : public std::enable_shared_from_this<AudioNode> {
81
92
  void disconnectParam(const std::shared_ptr<AudioParam> &param);
82
93
 
83
94
  void onInputEnabled();
84
- void onInputDisabled();
95
+ virtual void onInputDisabled();
85
96
  void onInputConnected(AudioNode *node);
86
97
  void onInputDisconnected(AudioNode *node);
87
98
 
@@ -3,6 +3,8 @@
3
3
  #include <audioapi/dsp/AudioUtils.h>
4
4
  #include <audioapi/dsp/VectorMath.h>
5
5
  #include <audioapi/utils/AudioArray.h>
6
+ #include <memory>
7
+ #include <utility>
6
8
 
7
9
  namespace audioapi {
8
10
 
@@ -18,11 +20,7 @@ AudioParam::AudioParam(
18
20
  maxValue_(maxValue),
19
21
  eventsQueue_(),
20
22
  eventScheduler_(32),
21
- audioBus_(
22
- std::make_shared<AudioBus>(
23
- RENDER_QUANTUM_SIZE,
24
- 1,
25
- context->getSampleRate())) {
23
+ audioBus_(std::make_shared<AudioBus>(RENDER_QUANTUM_SIZE, 1, context->getSampleRate())) {
26
24
  inputBuses_.reserve(4);
27
25
  inputNodes_.reserve(4);
28
26
  startTime_ = 0;
@@ -56,22 +54,19 @@ float AudioParam::getValueAtTime(double time) {
56
54
  void AudioParam::setValueAtTime(float value, double startTime) {
57
55
  auto event = [value, startTime](AudioParam &param) {
58
56
  // Ignore events scheduled before the end of existing automation
59
- if (startTime <= param.getQueueEndTime()) {
57
+ if (startTime < param.getQueueEndTime()) {
60
58
  return;
61
59
  }
62
60
 
63
61
  // Step function: instant change at startTime
64
- auto calculateValue = [](double startTime,
65
- double /* endTime */,
66
- float startValue,
67
- float endValue,
68
- double time) {
69
- if (time < startTime) {
70
- return startValue;
71
- }
62
+ auto calculateValue =
63
+ [](double startTime, double /* endTime */, float startValue, float endValue, double time) {
64
+ if (time < startTime) {
65
+ return startValue;
66
+ }
72
67
 
73
- return endValue;
74
- };
68
+ return endValue;
69
+ };
75
70
 
76
71
  param.updateQueue(ParamChangeEvent(
77
72
  startTime,
@@ -87,29 +82,24 @@ void AudioParam::setValueAtTime(float value, double startTime) {
87
82
  void AudioParam::linearRampToValueAtTime(float value, double endTime) {
88
83
  auto event = [value, endTime](AudioParam &param) {
89
84
  // Ignore events scheduled before the end of existing automation
90
- if (endTime <= param.getQueueEndTime()) {
85
+ if (endTime < param.getQueueEndTime()) {
91
86
  return;
92
87
  }
93
88
 
94
89
  // Linear interpolation function
95
- auto calculateValue = [](double startTime,
96
- double endTime,
97
- float startValue,
98
- float endValue,
99
- double time) {
100
- if (time < startTime) {
101
- return startValue;
102
- }
90
+ auto calculateValue =
91
+ [](double startTime, double endTime, float startValue, float endValue, double time) {
92
+ if (time < startTime) {
93
+ return startValue;
94
+ }
103
95
 
104
- if (time < endTime) {
105
- return static_cast<float>(
106
- startValue +
107
- (endValue - startValue) * (time - startTime) /
108
- (endTime - startTime));
109
- }
96
+ if (time < endTime) {
97
+ return static_cast<float>(
98
+ startValue + (endValue - startValue) * (time - startTime) / (endTime - startTime));
99
+ }
110
100
 
111
- return endValue;
112
- };
101
+ return endValue;
102
+ };
113
103
 
114
104
  param.updateQueue(ParamChangeEvent(
115
105
  param.getQueueEndTime(),
@@ -129,24 +119,20 @@ void AudioParam::exponentialRampToValueAtTime(float value, double endTime) {
129
119
  }
130
120
 
131
121
  // Exponential curve function using power law
132
- auto calculateValue = [](double startTime,
133
- double endTime,
134
- float startValue,
135
- float endValue,
136
- double time) {
137
- if (time < startTime) {
138
- return startValue;
139
- }
122
+ auto calculateValue =
123
+ [](double startTime, double endTime, float startValue, float endValue, double time) {
124
+ if (time < startTime) {
125
+ return startValue;
126
+ }
140
127
 
141
- if (time < endTime) {
142
- return static_cast<float>(
143
- startValue *
144
- pow(endValue / startValue,
145
- (time - startTime) / (endTime - startTime)));
146
- }
128
+ if (time < endTime) {
129
+ return static_cast<float>(
130
+ startValue *
131
+ pow(endValue / startValue, (time - startTime) / (endTime - startTime)));
132
+ }
147
133
 
148
- return endValue;
149
- };
134
+ return endValue;
135
+ };
150
136
 
151
137
  param.updateQueue(ParamChangeEvent(
152
138
  param.getQueueEndTime(),
@@ -159,26 +145,21 @@ void AudioParam::exponentialRampToValueAtTime(float value, double endTime) {
159
145
  eventScheduler_.scheduleEvent(std::move(event));
160
146
  }
161
147
 
162
- void AudioParam::setTargetAtTime(
163
- float target,
164
- double startTime,
165
- double timeConstant) {
148
+ void AudioParam::setTargetAtTime(float target, double startTime, double timeConstant) {
166
149
  auto event = [target, startTime, timeConstant](AudioParam &param) {
167
150
  if (startTime <= param.getQueueEndTime()) {
168
151
  return;
169
152
  }
170
153
  // Exponential decay function towards target value
171
- auto calculateValue =
172
- [timeConstant, target](
173
- double startTime, double, float startValue, float, double time) {
174
- if (time < startTime) {
175
- return startValue;
176
- }
154
+ auto calculateValue = [timeConstant, target](
155
+ double startTime, double, float startValue, float, double time) {
156
+ if (time < startTime) {
157
+ return startValue;
158
+ }
177
159
 
178
- return static_cast<float>(
179
- target +
180
- (startValue - target) * exp(-(time - startTime) / timeConstant));
181
- };
160
+ return static_cast<float>(
161
+ target + (startValue - target) * exp(-(time - startTime) / timeConstant));
162
+ };
182
163
  param.updateQueue(ParamChangeEvent(
183
164
  startTime,
184
165
  startTime, // SetTarget events have infinite duration conceptually
@@ -202,31 +183,25 @@ void AudioParam::setValueCurveAtTime(
202
183
  return;
203
184
  }
204
185
 
205
- auto calculateValue = [values, length](
206
- double startTime,
207
- double endTime,
208
- float startValue,
209
- float endValue,
210
- double time) {
211
- if (time < startTime) {
212
- return startValue;
213
- }
186
+ auto calculateValue =
187
+ [values, length](
188
+ double startTime, double endTime, float startValue, float endValue, double time) {
189
+ if (time < startTime) {
190
+ return startValue;
191
+ }
214
192
 
215
- if (time < endTime) {
216
- // Calculate position in the array based on time progress
217
- auto k = static_cast<int>(std::floor(
218
- static_cast<double>(length - 1) / (endTime - startTime) *
219
- (time - startTime)));
220
- // Calculate interpolation factor between adjacent array elements
221
- auto factor = static_cast<float>(
222
- (time - startTime) * static_cast<double>(length - 1) /
223
- (endTime - startTime) -
224
- k);
225
- return dsp::linearInterpolate(values->data(), k, k + 1, factor);
226
- }
193
+ if (time < endTime) {
194
+ // Calculate position in the array based on time progress
195
+ auto k = static_cast<int>(std::floor(
196
+ static_cast<double>(length - 1) / (endTime - startTime) * (time - startTime)));
197
+ // Calculate interpolation factor between adjacent array elements
198
+ auto factor = static_cast<float>(
199
+ (time - startTime) * static_cast<double>(length - 1) / (endTime - startTime) - k);
200
+ return dsp::linearInterpolate(values->data(), k, k + 1, factor);
201
+ }
227
202
 
228
- return endValue;
229
- };
203
+ return endValue;
204
+ };
230
205
 
231
206
  param.updateQueue(ParamChangeEvent(
232
207
  startTime,
@@ -243,9 +218,8 @@ void AudioParam::setValueCurveAtTime(
243
218
  }
244
219
 
245
220
  void AudioParam::cancelScheduledValues(double cancelTime) {
246
- eventScheduler_.scheduleEvent([cancelTime](AudioParam &param) {
247
- param.eventsQueue_.cancelScheduledValues(cancelTime);
248
- });
221
+ eventScheduler_.scheduleEvent(
222
+ [cancelTime](AudioParam &param) { param.eventsQueue_.cancelScheduledValues(cancelTime); });
249
223
  }
250
224
 
251
225
  void AudioParam::cancelAndHoldAtTime(double cancelTime) {
@@ -280,9 +254,7 @@ std::shared_ptr<AudioBus> AudioParam::calculateInputs(
280
254
  return processingBus;
281
255
  }
282
256
 
283
- std::shared_ptr<AudioBus> AudioParam::processARateParam(
284
- int framesToProcess,
285
- double time) {
257
+ std::shared_ptr<AudioBus> AudioParam::processARateParam(int framesToProcess, double time) {
286
258
  processScheduledEvents();
287
259
  auto processingBus = calculateInputs(audioBus_, framesToProcess);
288
260
 
@@ -313,8 +285,7 @@ void AudioParam::processInputs(
313
285
  const std::shared_ptr<AudioBus> &outputBus,
314
286
  int framesToProcess,
315
287
  bool checkIsAlreadyProcessed) {
316
- for (auto it = inputNodes_.begin(), end = inputNodes_.end(); it != end;
317
- ++it) {
288
+ for (auto it = inputNodes_.begin(), end = inputNodes_.end(); it != end; ++it) {
318
289
  auto inputNode = *it;
319
290
  assert(inputNode != nullptr);
320
291
 
@@ -323,19 +294,16 @@ void AudioParam::processInputs(
323
294
  }
324
295
 
325
296
  // Process this input node and store its output bus
326
- auto inputBus = inputNode->processAudio(
327
- outputBus, framesToProcess, checkIsAlreadyProcessed);
297
+ auto inputBus = inputNode->processAudio(outputBus, framesToProcess, checkIsAlreadyProcessed);
328
298
  inputBuses_.emplace_back(inputBus);
329
299
  }
330
300
  }
331
301
 
332
- void AudioParam::mixInputsBuses(
333
- const std::shared_ptr<AudioBus> &processingBus) {
302
+ void AudioParam::mixInputsBuses(const std::shared_ptr<AudioBus> &processingBus) {
334
303
  assert(processingBus != nullptr);
335
304
 
336
305
  // Sum all input buses into the processing bus
337
- for (auto it = inputBuses_.begin(), end = inputBuses_.end(); it != end;
338
- ++it) {
306
+ for (auto it = inputBuses_.begin(), end = inputBuses_.end(); it != end; ++it) {
339
307
  processingBus->sum(it->get(), ChannelInterpretation::SPEAKERS);
340
308
  }
341
309
 
@@ -1,23 +1,27 @@
1
1
  #pragma once
2
2
 
3
+ #include <audioapi/core/AudioNode.h>
3
4
  #include <audioapi/core/types/ParamChangeEventType.h>
5
+ #include <audioapi/core/utils/AudioParamEventQueue.h>
4
6
  #include <audioapi/core/utils/ParamChangeEvent.h>
5
7
  #include <audioapi/utils/AudioBus.h>
6
- #include <audioapi/core/AudioNode.h>
7
- #include <audioapi/core/utils/AudioParamEventQueue.h>
8
8
 
9
+ #include <audioapi/utils/CrossThreadEventScheduler.hpp>
9
10
  #include <cstddef>
10
- #include <utility>
11
11
  #include <memory>
12
- #include <vector>
13
12
  #include <unordered_set>
14
- #include <audioapi/utils/CrossThreadEventScheduler.hpp>
13
+ #include <utility>
14
+ #include <vector>
15
15
 
16
16
  namespace audioapi {
17
17
 
18
18
  class AudioParam {
19
19
  public:
20
- explicit AudioParam(float defaultValue, float minValue, float maxValue, BaseAudioContext *context);
20
+ explicit AudioParam(
21
+ float defaultValue,
22
+ float minValue,
23
+ float maxValue,
24
+ BaseAudioContext *context);
21
25
 
22
26
  /// JS-Thread only methods
23
27
  /// These methods are called only from HostObjects invoked on the JS thread.
@@ -72,15 +76,14 @@ class AudioParam {
72
76
  // JS-Thread only
73
77
  void cancelAndHoldAtTime(double cancelTime);
74
78
 
75
-
76
79
  /// Audio-Thread only methods
77
80
  /// These methods are called only from the Audio rendering thread.
78
81
 
79
82
  // Audio-Thread only (indirectly through AudioNode::connectParam by AudioNodeManager)
80
- void addInputNode(AudioNode* node);
83
+ void addInputNode(AudioNode *node);
81
84
 
82
85
  // Audio-Thread only (indirectly through AudioNode::disconnectParam by AudioNodeManager)
83
- void removeInputNode(AudioNode* node);
86
+ void removeInputNode(AudioNode *node);
84
87
 
85
88
  // Audio-Thread only
86
89
  std::shared_ptr<AudioBus> processARateParam(int framesToProcess, double time);
@@ -141,9 +144,14 @@ class AudioParam {
141
144
  eventsQueue_.pushBack(std::move(event));
142
145
  }
143
146
  float getValueAtTime(double time);
144
- void processInputs(const std::shared_ptr<AudioBus>& outputBus, int framesToProcess, bool checkIsAlreadyProcessed);
145
- void mixInputsBuses(const std::shared_ptr<AudioBus>& processingBus);
146
- std::shared_ptr<AudioBus> calculateInputs(const std::shared_ptr<AudioBus>& processingBus, int framesToProcess);
147
+ void processInputs(
148
+ const std::shared_ptr<AudioBus> &outputBus,
149
+ int framesToProcess,
150
+ bool checkIsAlreadyProcessed);
151
+ void mixInputsBuses(const std::shared_ptr<AudioBus> &processingBus);
152
+ std::shared_ptr<AudioBus> calculateInputs(
153
+ const std::shared_ptr<AudioBus> &processingBus,
154
+ int framesToProcess);
147
155
  };
148
156
 
149
157
  } // namespace audioapi