react-native-audio-api 0.11.0-alpha.0 → 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 +257 -74
  8. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +33 -19
  9. package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +13 -20
  10. package/android/src/main/cpp/audioapi/android/core/utils/AndroidFileWriterBackend.h +15 -15
  11. package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.cpp +170 -0
  12. package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.h +46 -0
  13. package/android/src/main/cpp/audioapi/android/core/utils/AudioDecoder.cpp +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 +381 -302
  18. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.h +49 -91
  19. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/ptrs.hpp +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 +155 -95
  23. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.h +9 -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 +109 -44
  72. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +8 -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 +31 -108
  125. package/common/cpp/audioapi/core/inputs/AudioRecorder.h +46 -46
  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 +28 -11
  267. package/ios/audioapi/ios/core/IOSAudioRecorder.mm +229 -44
  268. package/ios/audioapi/ios/core/NativeAudioPlayer.m +16 -13
  269. package/ios/audioapi/ios/core/NativeAudioRecorder.h +6 -3
  270. package/ios/audioapi/ios/core/NativeAudioRecorder.m +67 -6
  271. package/ios/audioapi/ios/core/utils/AudioDecoder.mm +22 -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/utils/IOSFileWriter.h +53 -0
  275. package/ios/audioapi/ios/core/utils/IOSFileWriter.mm +224 -0
  276. package/ios/audioapi/ios/core/utils/IOSRecorderCallback.h +47 -0
  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 +56 -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 +57 -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 +16 -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 +36 -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 +43 -30
  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 +86 -84
  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 +55 -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 +47 -32
  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 -35
  498. package/ios/audioapi/ios/core/IOSAudioFileOptions.mm +0 -135
  499. package/ios/audioapi/ios/core/IOSAudioFileWriter.h +0 -38
  500. package/ios/audioapi/ios/core/IOSAudioFileWriter.mm +0 -187
  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,6 +3,7 @@ import {
3
3
  PeriodicWaveConstraints,
4
4
  AudioContextOptions,
5
5
  AudioBufferBaseSourceNodeOptions,
6
+ IIRFilterNodeOptions,
6
7
  } from '../types';
7
8
  import { InvalidAccessError, NotSupportedError } from '../errors';
8
9
  import BaseAudioContext from './BaseAudioContext';
@@ -11,10 +12,14 @@ 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';
17
19
  import StereoPannerNode from './StereoPannerNode';
20
+ import ConvolverNode from './ConvolverNode';
21
+ import DelayNode from './DelayNode';
22
+ import { ConvolverNodeOptions } from './ConvolverNodeOptions';
18
23
 
19
24
  import { globalWasmPromise, globalTag } from './custom/LoadCustomWasm';
20
25
  import ConstantSourceNode from './ConstantSourceNode';
@@ -25,7 +30,7 @@ export default class AudioContext implements BaseAudioContext {
25
30
  readonly destination: AudioDestinationNode;
26
31
  readonly sampleRate: number;
27
32
 
28
- constructor(options?: AudioContextOptions, _initSuspended: boolean = false) {
33
+ constructor(options?: AudioContextOptions) {
29
34
  if (
30
35
  options &&
31
36
  options.sampleRate &&
@@ -62,6 +67,10 @@ export default class AudioContext implements BaseAudioContext {
62
67
  return new GainNode(this, this.context.createGain());
63
68
  }
64
69
 
70
+ createDelay(maxDelayTime?: number): DelayNode {
71
+ return new DelayNode(this, this.context.createDelay(maxDelayTime));
72
+ }
73
+
65
74
  createStereoPanner(): StereoPannerNode {
66
75
  return new StereoPannerNode(this, this.context.createStereoPanner());
67
76
  }
@@ -70,6 +79,36 @@ export default class AudioContext implements BaseAudioContext {
70
79
  return new BiquadFilterNode(this, this.context.createBiquadFilter());
71
80
  }
72
81
 
82
+ createIIRFilter(options: IIRFilterNodeOptions): IIRFilterNode {
83
+ return new IIRFilterNode(
84
+ this,
85
+ this.context.createIIRFilter(options.feedforward, options.feedback)
86
+ );
87
+ }
88
+
89
+ createConvolver(options?: ConvolverNodeOptions): ConvolverNode {
90
+ if (options?.buffer) {
91
+ const numberOfChannels = options.buffer.numberOfChannels;
92
+ if (
93
+ numberOfChannels !== 1 &&
94
+ numberOfChannels !== 2 &&
95
+ numberOfChannels !== 4
96
+ ) {
97
+ throw new NotSupportedError(
98
+ `The number of channels provided (${numberOfChannels}) in impulse response for ConvolverNode buffer must be 1 or 2 or 4.`
99
+ );
100
+ }
101
+ }
102
+ const buffer = options?.buffer ?? null;
103
+ const disableNormalization = options?.disableNormalization ?? false;
104
+ return new ConvolverNode(
105
+ this,
106
+ this.context.createConvolver(),
107
+ buffer,
108
+ disableNormalization
109
+ );
110
+ }
111
+
73
112
  async createBufferSource(
74
113
  options?: AudioBufferBaseSourceNodeOptions
75
114
  ): Promise<AudioBufferSourceNode> {
@@ -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