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
@@ -1,14 +1,21 @@
1
- import { ContextState, PeriodicWaveConstraints } from '../types';
1
+ import {
2
+ ContextState,
3
+ PeriodicWaveConstraints,
4
+ IIRFilterNodeOptions,
5
+ } from '../types';
2
6
  import AnalyserNode from './AnalyserNode';
3
7
  import AudioDestinationNode from './AudioDestinationNode';
4
8
  import AudioBuffer from './AudioBuffer';
5
9
  import AudioBufferSourceNode from './AudioBufferSourceNode';
6
10
  import BiquadFilterNode from './BiquadFilterNode';
11
+ import IIRFilterNode from './IIRFilterNode';
7
12
  import GainNode from './GainNode';
8
13
  import OscillatorNode from './OscillatorNode';
9
14
  import PeriodicWave from './PeriodicWave';
10
15
  import StereoPannerNode from './StereoPannerNode';
11
16
  import ConstantSourceNode from './ConstantSourceNode';
17
+ import ConvolverNode from './ConvolverNode';
18
+ import DelayNode from './DelayNode';
12
19
 
13
20
  export default interface BaseAudioContext {
14
21
  readonly context: globalThis.BaseAudioContext;
@@ -21,8 +28,11 @@ export default interface BaseAudioContext {
21
28
  createOscillator(): OscillatorNode;
22
29
  createConstantSource(): ConstantSourceNode;
23
30
  createGain(): GainNode;
31
+ createDelay(maxDelayTime?: number): DelayNode;
24
32
  createStereoPanner(): StereoPannerNode;
25
33
  createBiquadFilter(): BiquadFilterNode;
34
+ createIIRFilter(options: IIRFilterNodeOptions): IIRFilterNode;
35
+ createConvolver(): ConvolverNode;
26
36
  createBufferSource(): Promise<AudioBufferSourceNode>;
27
37
  createBuffer(
28
38
  numOfChannels: number,
@@ -0,0 +1,43 @@
1
+ import BaseAudioContext from './BaseAudioContext';
2
+ import AudioNode from './AudioNode';
3
+ import AudioBuffer from './AudioBuffer';
4
+
5
+ export default class ConvolverNode extends AudioNode {
6
+ constructor(
7
+ context: BaseAudioContext,
8
+ node: globalThis.ConvolverNode,
9
+ buffer: AudioBuffer | null = null,
10
+ disableNormalization: boolean = false
11
+ ) {
12
+ super(context, node);
13
+
14
+ (this.node as globalThis.ConvolverNode).normalize = !disableNormalization;
15
+ if (buffer) {
16
+ (this.node as globalThis.ConvolverNode).buffer = buffer.buffer;
17
+ }
18
+ }
19
+
20
+ public get buffer(): AudioBuffer | null {
21
+ const buffer = (this.node as globalThis.ConvolverNode).buffer;
22
+ if (!buffer) {
23
+ return null;
24
+ }
25
+ return new AudioBuffer(buffer);
26
+ }
27
+
28
+ public set buffer(buffer: AudioBuffer | null) {
29
+ if (!buffer) {
30
+ (this.node as globalThis.ConvolverNode).buffer = null;
31
+ } else {
32
+ (this.node as globalThis.ConvolverNode).buffer = buffer.buffer;
33
+ }
34
+ }
35
+
36
+ public get normalize(): boolean {
37
+ return (this.node as globalThis.ConvolverNode).normalize;
38
+ }
39
+
40
+ public set normalize(value: boolean) {
41
+ (this.node as globalThis.ConvolverNode).normalize = value;
42
+ }
43
+ }
@@ -0,0 +1,6 @@
1
+ import AudioBuffer from './AudioBuffer';
2
+
3
+ export interface ConvolverNodeOptions {
4
+ buffer?: AudioBuffer | null;
5
+ disableNormalization?: boolean;
6
+ }
@@ -0,0 +1,12 @@
1
+ import BaseAudioContext from './BaseAudioContext';
2
+ import AudioNode from './AudioNode';
3
+ import AudioParam from './AudioParam';
4
+
5
+ export default class DelayNode extends AudioNode {
6
+ readonly delayTime: AudioParam;
7
+
8
+ constructor(context: BaseAudioContext, delay: globalThis.DelayNode) {
9
+ super(context, delay);
10
+ this.delayTime = new AudioParam(delay.delayTime, context);
11
+ }
12
+ }
@@ -0,0 +1,25 @@
1
+ import { NotSupportedError } from '../errors';
2
+ import AudioNode from './AudioNode';
3
+
4
+ export default class IIRFilterNode extends AudioNode {
5
+ public getFrequencyResponse(
6
+ frequencyArray: Float32Array,
7
+ magResponseOutput: Float32Array,
8
+ phaseResponseOutput: Float32Array
9
+ ) {
10
+ if (
11
+ frequencyArray.length !== magResponseOutput.length ||
12
+ frequencyArray.length !== phaseResponseOutput.length
13
+ ) {
14
+ throw new NotSupportedError(
15
+ `The lengths of the arrays are not the same frequencyArray: ${frequencyArray.length}, magResponseOutput: ${magResponseOutput.length}, phaseResponseOutput: ${phaseResponseOutput.length}`
16
+ );
17
+ }
18
+
19
+ (this.node as globalThis.IIRFilterNode).getFrequencyResponse(
20
+ frequencyArray,
21
+ magResponseOutput,
22
+ phaseResponseOutput
23
+ );
24
+ }
25
+ }
@@ -3,6 +3,7 @@ import {
3
3
  PeriodicWaveConstraints,
4
4
  OfflineAudioContextOptions,
5
5
  AudioBufferBaseSourceNodeOptions,
6
+ IIRFilterNodeOptions,
6
7
  } from '../types';
7
8
  import { InvalidAccessError, NotSupportedError } from '../errors';
8
9
  import BaseAudioContext from './BaseAudioContext';
@@ -11,6 +12,7 @@ import AudioDestinationNode from './AudioDestinationNode';
11
12
  import AudioBuffer from './AudioBuffer';
12
13
  import AudioBufferSourceNode from './AudioBufferSourceNode';
13
14
  import BiquadFilterNode from './BiquadFilterNode';
15
+ import IIRFilterNode from './IIRFilterNode';
14
16
  import GainNode from './GainNode';
15
17
  import OscillatorNode from './OscillatorNode';
16
18
  import PeriodicWave from './PeriodicWave';
@@ -18,6 +20,9 @@ import StereoPannerNode from './StereoPannerNode';
18
20
  import ConstantSourceNode from './ConstantSourceNode';
19
21
 
20
22
  import { globalWasmPromise, globalTag } from './custom/LoadCustomWasm';
23
+ import ConvolverNode from './ConvolverNode';
24
+ import { ConvolverNodeOptions } from './ConvolverNodeOptions';
25
+ import DelayNode from './DelayNode';
21
26
 
22
27
  export default class OfflineAudioContext implements BaseAudioContext {
23
28
  readonly context: globalThis.OfflineAudioContext;
@@ -68,6 +73,10 @@ export default class OfflineAudioContext implements BaseAudioContext {
68
73
  return new GainNode(this, this.context.createGain());
69
74
  }
70
75
 
76
+ createDelay(maxDelayTime?: number): DelayNode {
77
+ return new DelayNode(this, this.context.createDelay(maxDelayTime));
78
+ }
79
+
71
80
  createStereoPanner(): StereoPannerNode {
72
81
  return new StereoPannerNode(this, this.context.createStereoPanner());
73
82
  }
@@ -76,6 +85,36 @@ export default class OfflineAudioContext implements BaseAudioContext {
76
85
  return new BiquadFilterNode(this, this.context.createBiquadFilter());
77
86
  }
78
87
 
88
+ createIIRFilter(options: IIRFilterNodeOptions): IIRFilterNode {
89
+ return new IIRFilterNode(
90
+ this,
91
+ this.context.createIIRFilter(options.feedforward, options.feedback)
92
+ );
93
+ }
94
+
95
+ createConvolver(options?: ConvolverNodeOptions): ConvolverNode {
96
+ if (options?.buffer) {
97
+ const numberOfChannels = options.buffer.numberOfChannels;
98
+ if (
99
+ numberOfChannels !== 1 &&
100
+ numberOfChannels !== 2 &&
101
+ numberOfChannels !== 4
102
+ ) {
103
+ throw new NotSupportedError(
104
+ `The number of channels provided (${numberOfChannels}) in impulse response for ConvolverNode buffer must be 1 or 2 or 4.`
105
+ );
106
+ }
107
+ }
108
+ const buffer = options?.buffer ?? null;
109
+ const disableNormalization = options?.disableNormalization ?? false;
110
+ return new ConvolverNode(
111
+ this,
112
+ this.context.createConvolver(),
113
+ buffer,
114
+ disableNormalization
115
+ );
116
+ }
117
+
79
118
  async createBufferSource(
80
119
  options?: AudioBufferBaseSourceNodeOptions
81
120
  ): Promise<AudioBufferSourceNode> {
@@ -1,34 +0,0 @@
1
- #pragma once
2
-
3
- #include <string>
4
-
5
- namespace audioapi::android::fileutils {
6
-
7
- enum class FileDirectory {
8
- FILES_DIR,
9
- CACHE_DIR,
10
- };
11
-
12
- enum class FileFormat {
13
- WAV,
14
- CAF,
15
- M4A,
16
- FLAC,
17
- };
18
-
19
- enum class BitDepth {
20
- BIT_16,
21
- BIT_24,
22
- BIT_32,
23
- };
24
-
25
- bool createDirectoryIfNotExists(const std::string &directoryPath);
26
- std::string getTimestampString();
27
- std::string getISODateString();
28
- FileFormat formatFromFlags(size_t flags);
29
- FileDirectory directoryFromFlags(size_t flags);
30
- BitDepth bitDepthFromFlags(size_t flags);
31
- std::string getDirectory(FileDirectory dir);
32
- std::string getFilePath(const FileDirectory &directory, const std::string &baseFileName, const std::string &extension);
33
-
34
- } // namespace audioapi::android::fileutils
@@ -1,133 +0,0 @@
1
-
2
- #include <android/log.h>
3
- #include <audioapi/android/core/utils/FileUtils.h>
4
- #include <audioapi/android/system/NativeFileInfo.hpp>
5
- #include <chrono>
6
- #include <filesystem>
7
- #include <format>
8
- #include <iostream>
9
-
10
- namespace audioapi::android::fileutils {
11
-
12
- bool createDirectoryIfNotExists(const std::string &directoryPath) {
13
- std::error_code ec;
14
-
15
- if (!std::filesystem::exists(directoryPath, ec)) {
16
- bool created = std::filesystem::create_directories(directoryPath, ec);
17
-
18
- if (ec) {
19
- __android_log_print(
20
- ANDROID_LOG_ERROR,
21
- "FileUtils",
22
- "Error creating directory at path: %s, error: %s",
23
- directoryPath.c_str(),
24
- ec.message().c_str());
25
-
26
- return false;
27
- }
28
-
29
- return created;
30
- }
31
-
32
- if (ec) {
33
- __android_log_print(
34
- ANDROID_LOG_ERROR,
35
- "FileUtils",
36
- "Error checking existence of directory at path: %s, error: %s",
37
- directoryPath.c_str(),
38
- ec.message().c_str());
39
-
40
- return false;
41
- }
42
-
43
- return true;
44
- }
45
-
46
- std::string getTimestampString() {
47
- auto tNow = std::chrono::system_clock::now();
48
- return std::format(
49
- "{:%Y%m%d_%H%M%S}", std::chrono::floor<std::chrono::seconds>(tNow));
50
- }
51
-
52
- std::string getISODateString() {
53
- auto tNow = std::chrono::system_clock::now();
54
- return std::format(
55
- "{:%Y-%m-%d}", std::chrono::floor<std::chrono::days>(tNow));
56
- }
57
-
58
- FileFormat formatFromFlags(size_t flags) {
59
- uint8_t formatFlag = static_cast<uint8_t>(flags & 0xF);
60
-
61
- switch (formatFlag) {
62
- case 1:
63
- return FileFormat::WAV;
64
- case 2:
65
- return FileFormat::CAF;
66
- case 3:
67
- return FileFormat::M4A;
68
- case 4:
69
- return FileFormat::FLAC;
70
- default:
71
- return FileFormat::M4A;
72
- }
73
- }
74
-
75
- FileDirectory directoryFromFlags(size_t flags) {
76
- uint8_t directoryFlag = static_cast<uint8_t>((flags >> 4) & 0xF);
77
-
78
- switch (directoryFlag) {
79
- case 1:
80
- return FileDirectory::FILES_DIR;
81
- case 2:
82
- return FileDirectory::CACHE_DIR;
83
- default:
84
- return FileDirectory::CACHE_DIR;
85
- }
86
- }
87
-
88
- BitDepth bitDepthFromFlags(size_t flags) {
89
- uint8_t bitDepthFlag = static_cast<uint8_t>((flags >> 8) & 0xF);
90
-
91
- switch (bitDepthFlag) {
92
- case 1:
93
- return BitDepth::BIT_16;
94
- case 2:
95
- return BitDepth::BIT_24;
96
- case 3:
97
- return BitDepth::BIT_32;
98
- default:
99
- return BitDepth::BIT_32;
100
- }
101
- }
102
-
103
- std::string getDirectory(FileDirectory dir) {
104
- switch (dir) {
105
- case FileDirectory::FILES_DIR:
106
- return NativeFileInfo::getFilesDir();
107
- case FileDirectory::CACHE_DIR:
108
- return NativeFileInfo::getCacheDir();
109
- default:
110
- return NativeFileInfo::getCacheDir();
111
- }
112
- }
113
-
114
- std::string getFilePath(
115
- const FileDirectory &directory,
116
- const std::string &baseFileName,
117
- const std::string &extension) {
118
- std::string basePath = getDirectory(directory);
119
- std::string subDirectory = getISODateString();
120
- std::string fileTimestamp = getTimestampString();
121
-
122
- std::string subDirectoryPath =
123
- std::format("{}/AudioAPI/{}", basePath, subDirectory);
124
-
125
- if (!createDirectoryIfNotExists(subDirectoryPath)) {
126
- return "";
127
- }
128
-
129
- return std::format(
130
- "{}/{}_{}.{}", subDirectoryPath, baseFileName, fileTimestamp, extension);
131
- }
132
-
133
- } // namespace audioapi::android::fileutils
@@ -1,154 +0,0 @@
1
-
2
- #include <audioapi/android/core/utils/FileUtils.h>
3
- #include <audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.h>
4
-
5
- namespace audioapi {
6
-
7
- FFmpegAudioFileOptions::FFmpegAudioFileOptions(
8
- float sampleRate,
9
- size_t channelCount,
10
- size_t bitRate,
11
- size_t flags)
12
- : sampleRate_(sampleRate),
13
- channelCount_(channelCount),
14
- bitRate_(bitRate),
15
- flags_(flags) {}
16
-
17
- std::string FFmpegAudioFileOptions::getFileExtension() const {
18
- android::fileutils::FileFormat format =
19
- android::fileutils::formatFromFlags(flags_);
20
-
21
- switch (format) {
22
- // WAV is encoded using miniaudio, so it is not necessary here
23
- // but lets leave it for convenience
24
- // when using FFmpeg we will use M4A as default format
25
- case android::fileutils::FileFormat::WAV:
26
- return "wav";
27
- case android::fileutils::FileFormat::CAF:
28
- return "caf";
29
- case android::fileutils::FileFormat::M4A:
30
- return "m4a";
31
- case android::fileutils::FileFormat::FLAC:
32
- return "flac";
33
- default:
34
- return "m4a";
35
- }
36
- }
37
-
38
- AVCodecID FFmpegAudioFileOptions::getPCMCodecID() const {
39
- android::fileutils::BitDepth bitDepth =
40
- android::fileutils::bitDepthFromFlags(flags_);
41
-
42
- switch (bitDepth) {
43
- case android::fileutils::BitDepth::BIT_16:
44
- return AV_CODEC_ID_PCM_S16LE;
45
- case android::fileutils::BitDepth::BIT_24:
46
- return AV_CODEC_ID_PCM_S24LE;
47
- case android::fileutils::BitDepth::BIT_32:
48
- return AV_CODEC_ID_PCM_F32LE;
49
- default:
50
- return AV_CODEC_ID_PCM_F32LE;
51
- }
52
- }
53
-
54
- AVCodecID FFmpegAudioFileOptions::getCodecID() const {
55
- android::fileutils::FileFormat format =
56
- android::fileutils::formatFromFlags(flags_);
57
-
58
- switch (format) {
59
- case android::fileutils::FileFormat::WAV:
60
- case android::fileutils::FileFormat::CAF:
61
- return getPCMCodecID();
62
- case android::fileutils::FileFormat::M4A:
63
- return AV_CODEC_ID_AAC;
64
- case android::fileutils::FileFormat::FLAC:
65
- return AV_CODEC_ID_FLAC;
66
- default:
67
- return AV_CODEC_ID_AAC;
68
- }
69
- }
70
-
71
- AVSampleFormat FFmpegAudioFileOptions::getSampleFormat() const {
72
- android::fileutils::FileFormat format =
73
- android::fileutils::formatFromFlags(flags_);
74
- android::fileutils::BitDepth bitDepth =
75
- android::fileutils::bitDepthFromFlags(flags_);
76
-
77
- if (format == android::fileutils::FileFormat::M4A) {
78
- return AV_SAMPLE_FMT_FLTP;
79
- }
80
-
81
- switch (bitDepth) {
82
- case android::fileutils::BitDepth::BIT_16:
83
- return AV_SAMPLE_FMT_S16;
84
- case android::fileutils::BitDepth::BIT_24:
85
- return AV_SAMPLE_FMT_S32;
86
- case android::fileutils::BitDepth::BIT_32:
87
- return AV_SAMPLE_FMT_FLT;
88
- default:
89
- return AV_SAMPLE_FMT_FLT;
90
- }
91
- }
92
-
93
- const AVCodec *FFmpegAudioFileOptions::getCodec() {
94
- return avcodec_find_encoder(getCodecID());
95
- }
96
-
97
- std::string FFmpegAudioFileOptions::getFilePath(
98
- const std::string &baseFileName) const {
99
- std::string extension = getFileExtension();
100
-
101
- return android::fileutils::getFilePath(
102
- android::fileutils::directoryFromFlags(flags_), baseFileName, extension);
103
- }
104
-
105
- float FFmpegAudioFileOptions::getSampleRate() const {
106
- return sampleRate_;
107
- }
108
-
109
- size_t FFmpegAudioFileOptions::getChannelCount() const {
110
- return channelCount_;
111
- }
112
-
113
- size_t FFmpegAudioFileOptions::getBitRate() const {
114
- android::fileutils::FileFormat format =
115
- android::fileutils::formatFromFlags(flags_);
116
-
117
- if (format != android::fileutils::FileFormat::M4A) {
118
- return 0; // bit rate is not used for PCM formats
119
- } else
120
-
121
- return bitRate_;
122
- }
123
-
124
- int FFmpegAudioFileOptions::getFlacCompressionLevel() const {
125
- android::fileutils::FileFormat format =
126
- android::fileutils::formatFromFlags(flags_);
127
-
128
- if (format != android::fileutils::FileFormat::FLAC) {
129
- return -1; // compression level is not used for non-FLAC formats
130
- }
131
-
132
- // TODO: extract compression level from flags
133
- return 5; // default compression level
134
- }
135
-
136
- std::string FFmpegAudioFileOptions::getMuxerName() const {
137
- android::fileutils::FileFormat format =
138
- android::fileutils::formatFromFlags(flags_);
139
-
140
- switch (format) {
141
- case android::fileutils::FileFormat::WAV:
142
- return "wav";
143
- case android::fileutils::FileFormat::CAF:
144
- return "caf";
145
- case android::fileutils::FileFormat::M4A:
146
- return "mp4";
147
- case android::fileutils::FileFormat::FLAC:
148
- return "flac";
149
- default:
150
- return "mp4";
151
- }
152
- }
153
-
154
- } // namespace audioapi
@@ -1,41 +0,0 @@
1
- #pragma once
2
-
3
- extern "C" {
4
- #include <libavcodec/avcodec.h>
5
- #include <libavformat/avformat.h>
6
- #include <libswresample/swresample.h>
7
- }
8
-
9
- #include <cstddef>
10
- #include <cstdint>
11
- #include <string>
12
-
13
- namespace audioapi {
14
-
15
- class FFmpegAudioFileOptions {
16
- public:
17
- FFmpegAudioFileOptions(float sampleRate, size_t channelCount, size_t bitRate, size_t flags);
18
- ~FFmpegAudioFileOptions() = default;
19
-
20
- std::string getFileExtension() const;
21
- std::string getFilePath(const std::string &baseFileName) const;
22
-
23
- float getSampleRate() const;
24
- size_t getChannelCount() const;
25
-
26
- AVCodecID getPCMCodecID() const;
27
- AVCodecID getCodecID() const;
28
- AVSampleFormat getSampleFormat() const;
29
- const AVCodec* getCodec();
30
- size_t getBitRate() const;
31
- int getFlacCompressionLevel() const;
32
- std::string getMuxerName() const;
33
-
34
- private:
35
- float sampleRate_;
36
- size_t channelCount_;
37
- size_t flags_;
38
- size_t bitRate_;
39
- };
40
-
41
- } // namespace audioapi
@@ -1,47 +0,0 @@
1
-
2
- #include <audioapi/android/core/utils/FileUtils.h>
3
- #include <audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.h>
4
-
5
- namespace audioapi {
6
-
7
- MiniAudioFileOptions::MiniAudioFileOptions(
8
- float sampleRate,
9
- size_t channelCount,
10
- size_t bitRate,
11
- size_t flags)
12
- : sampleRate_(sampleRate), channelCount_(channelCount), flags_(flags) {};
13
-
14
- ma_encoding_format MiniAudioFileOptions::getFormat() const {
15
- return ma_encoding_format_wav;
16
- }
17
-
18
- std::string MiniAudioFileOptions::getFilePath(
19
- const std::string &baseFileName) const {
20
- return android::fileutils::getFilePath(
21
- android::fileutils::directoryFromFlags(flags_), baseFileName, "wav");
22
- }
23
-
24
- float MiniAudioFileOptions::getSampleRate() const {
25
- return sampleRate_;
26
- }
27
-
28
- size_t MiniAudioFileOptions::getChannelCount() const {
29
- return channelCount_;
30
- }
31
-
32
- ma_format MiniAudioFileOptions::getDataFormat() const {
33
- android::fileutils::BitDepth bitDepth =
34
- android::fileutils::bitDepthFromFlags(flags_);
35
- switch (bitDepth) {
36
- case android::fileutils::BitDepth::BIT_16:
37
- return ma_format_s16;
38
- case android::fileutils::BitDepth::BIT_24:
39
- return ma_format_s24;
40
- case android::fileutils::BitDepth::BIT_32:
41
- return ma_format_f32;
42
- default:
43
- return ma_format_f32;
44
- }
45
- }
46
-
47
- } // namespace audioapi
@@ -1,28 +0,0 @@
1
- #pragma once
2
-
3
- #include <audioapi/libs/miniaudio/miniaudio.h>
4
- #include <cstddef>
5
- #include <cstdint>
6
- #include <string>
7
-
8
- namespace audioapi {
9
-
10
- class MiniAudioFileOptions {
11
- public:
12
- MiniAudioFileOptions(float sampleRate, size_t channelCount, size_t bitRate, size_t flags);
13
- ~MiniAudioFileOptions() = default;
14
-
15
- ma_encoding_format getFormat() const;
16
- std::string getFilePath(const std::string &baseFileName) const;
17
-
18
- float getSampleRate() const;
19
- size_t getChannelCount() const;
20
- ma_format getDataFormat() const;
21
-
22
- private:
23
- float sampleRate_;
24
- size_t channelCount_;
25
- size_t flags_;
26
- };
27
-
28
- } // namespace audioapi
@@ -1,32 +0,0 @@
1
- # Instruction on how to compile your own version of the ffmpeg and to replace binary files with yours.
2
-
3
- If you would like to change ffmpeg binaries f.e. to include some of its functionalities. There are possible solutions to do that.
4
-
5
- Basically, there are two options to achieve it:
6
-
7
- - Utilize `ffmpeg_setup.sh` script, which provides set of instructions to cross-compile FFmpeg library on all desired mobile architectures.
8
- - Cross-compile it dynamically fully on your own.
9
-
10
- Last part in both of the cases is to replace files in corresponding places.
11
-
12
- ## Where to put compiled files?
13
-
14
- ### Includes
15
-
16
- All includes should go to packages/react-native-audio-api/common/cpp/audioapi/external/ffmpeg_include
17
-
18
- ### Android
19
-
20
- Put your corresponding .so files for each architecture (TARGET_ABI) to packages/react-native-audio-api/android/src/main/jniLibs/TARGET_ABI
21
-
22
- ### iOS
23
-
24
- Put corresponding .xcframework files in packages/react-native-audio-api/common/cpp/audioapi/external
25
-
26
- ## Additional steps - IMPORTANT!
27
-
28
- - after moving the corresponding platform files, delete the all output files from this directory
29
- - otherwise XCode will try to link them
30
- - remove `time.h` from include directories as it will conflict with system one in XCode
31
- - rename all local occurrences of `AVMediaType` to f.e. `AVMediaTypeFFMPEG`
32
- - finally remove `build` directory from your example app `ios` directory as most likely XCode will choke on that too