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
@@ -0,0 +1,35 @@
1
+ import { IConvolverNode } from '../interfaces';
2
+ import BaseAudioContext from './BaseAudioContext';
3
+ import AudioNode from './AudioNode';
4
+ import AudioBuffer from './AudioBuffer';
5
+
6
+ export default class ConvolverNode extends AudioNode {
7
+ constructor(context: BaseAudioContext, node: IConvolverNode) {
8
+ super(context, node);
9
+ this.normalize = node.normalize;
10
+ }
11
+
12
+ public get buffer(): AudioBuffer | null {
13
+ const buffer = (this.node as IConvolverNode).buffer;
14
+ if (!buffer) {
15
+ return null;
16
+ }
17
+ return new AudioBuffer(buffer);
18
+ }
19
+
20
+ public set buffer(buffer: AudioBuffer | null) {
21
+ if (!buffer) {
22
+ (this.node as IConvolverNode).setBuffer(null);
23
+ return;
24
+ }
25
+ (this.node as IConvolverNode).setBuffer(buffer.buffer);
26
+ }
27
+
28
+ public get normalize(): boolean {
29
+ return (this.node as IConvolverNode).normalize;
30
+ }
31
+
32
+ public set normalize(value: boolean) {
33
+ (this.node as IConvolverNode).normalize = value;
34
+ }
35
+ }
@@ -0,0 +1,13 @@
1
+ import { IDelayNode } from '../interfaces';
2
+ import AudioNode from './AudioNode';
3
+ import AudioParam from './AudioParam';
4
+ import BaseAudioContext from './BaseAudioContext';
5
+
6
+ export default class DelayNode extends AudioNode {
7
+ readonly delayTime: AudioParam;
8
+
9
+ constructor(context: BaseAudioContext, delay: IDelayNode) {
10
+ super(context, delay);
11
+ this.delayTime = new AudioParam(delay.delayTime, context);
12
+ }
13
+ }
@@ -0,0 +1,25 @@
1
+ import { NotSupportedError } from '../errors';
2
+ import { IIIRFilterNode } from '../interfaces';
3
+ import AudioNode from './AudioNode';
4
+
5
+ export default class IIRFilterNode extends AudioNode {
6
+ public getFrequencyResponse(
7
+ frequencyArray: Float32Array,
8
+ magResponseOutput: Float32Array,
9
+ phaseResponseOutput: Float32Array
10
+ ) {
11
+ if (
12
+ frequencyArray.length !== magResponseOutput.length ||
13
+ frequencyArray.length !== phaseResponseOutput.length
14
+ ) {
15
+ throw new NotSupportedError(
16
+ `The lengths of the arrays are not the same frequencyArray: ${frequencyArray.length}, magResponseOutput: ${magResponseOutput.length}, phaseResponseOutput: ${phaseResponseOutput.length}`
17
+ );
18
+ }
19
+ (this.node as IIIRFilterNode).getFrequencyResponse(
20
+ frequencyArray,
21
+ magResponseOutput,
22
+ phaseResponseOutput
23
+ );
24
+ }
25
+ }
@@ -1,9 +1,9 @@
1
+ import AudioAPIModule from '../AudioAPIModule';
2
+ import { InvalidStateError, NotSupportedError } from '../errors';
1
3
  import { IOfflineAudioContext } from '../interfaces';
2
- import BaseAudioContext from './BaseAudioContext';
3
4
  import { OfflineAudioContextOptions } from '../types';
4
- import { InvalidStateError, NotSupportedError } from '../errors';
5
5
  import AudioBuffer from './AudioBuffer';
6
- import { isWorkletsAvailable, workletsModule } from '../utils';
6
+ import BaseAudioContext from './BaseAudioContext';
7
7
 
8
8
  export default class OfflineAudioContext extends BaseAudioContext {
9
9
  private isSuspended: boolean;
@@ -17,10 +17,7 @@ export default class OfflineAudioContext extends BaseAudioContext {
17
17
  arg1?: number,
18
18
  arg2?: number
19
19
  ) {
20
- let audioRuntime = null;
21
- if (isWorkletsAvailable) {
22
- audioRuntime = workletsModule.createWorkletRuntime('AudioWorkletRuntime');
23
- }
20
+ const audioRuntime = AudioAPIModule.createAudioRuntime();
24
21
 
25
22
  if (typeof arg0 === 'object') {
26
23
  const { numberOfChannels, length, sampleRate } = arg0;
@@ -23,6 +23,10 @@ interface OnRouteChangeEventType {
23
23
  | 'NoSuitableRouteForCategory';
24
24
  }
25
25
 
26
+ export interface OnRecorderErrorEventType {
27
+ message: string;
28
+ }
29
+
26
30
  interface RemoteCommandEvents {
27
31
  remotePlay: EventEmptyType;
28
32
  remotePause: EventEmptyType;
@@ -80,6 +84,7 @@ interface AudioAPIEvents {
80
84
  positionChanged: EventTypeWithValue;
81
85
  audioError: EventEmptyType; // to change
82
86
  systemStateChanged: EventEmptyType; // to change
87
+ recorderError: OnRecorderErrorEventType;
83
88
  }
84
89
 
85
90
  type AudioEvents = SystemEvents & AudioAPIEvents;
package/src/interfaces.ts CHANGED
@@ -1,13 +1,19 @@
1
1
  import { AudioEventCallback, AudioEventName } from './events/types';
2
2
  import type {
3
+ AudioRecorderCallbackOptions,
4
+ AudioRecorderFileOptions,
3
5
  BiquadFilterType,
4
6
  ChannelCountMode,
5
7
  ChannelInterpretation,
6
8
  ContextState,
9
+ FileInfo,
7
10
  OscillatorType,
11
+ Result,
8
12
  WindowType,
9
13
  } from './types';
10
14
 
15
+ // IMPORTANT: use only IClass, because it is a part of contract between cpp host object and js layer
16
+
11
17
  export type WorkletNodeCallback = (
12
18
  audioData: Array<ArrayBuffer>,
13
19
  channelCount: number
@@ -58,8 +64,13 @@ export interface IBaseAudioContext {
58
64
  createOscillator(): IOscillatorNode;
59
65
  createConstantSource(): IConstantSourceNode;
60
66
  createGain(): IGainNode;
67
+ createDelay(maxDelayTime: number): IDelayNode;
61
68
  createStereoPanner(): IStereoPannerNode;
62
69
  createBiquadFilter: () => IBiquadFilterNode;
70
+ createIIRFilter: (
71
+ feedforward: number[],
72
+ feedback: number[]
73
+ ) => IIIRFilterNode;
63
74
  createBufferSource: (pitchCorrection: boolean) => IAudioBufferSourceNode;
64
75
  createBufferQueueSource: (
65
76
  pitchCorrection: boolean
@@ -75,7 +86,11 @@ export interface IBaseAudioContext {
75
86
  disableNormalization: boolean
76
87
  ) => IPeriodicWave;
77
88
  createAnalyser: () => IAnalyserNode;
78
- createStreamer: () => IStreamerNode;
89
+ createConvolver: (
90
+ buffer: IAudioBuffer | undefined,
91
+ disableNormalization: boolean
92
+ ) => IConvolverNode;
93
+ createStreamer: () => IStreamerNode | null; // null when FFmpeg is not enabled
79
94
  }
80
95
 
81
96
  export interface IAudioContext extends IBaseAudioContext {
@@ -102,6 +117,11 @@ export interface IAudioNode {
102
117
  disconnect: (destination?: IAudioNode | IAudioParam) => void;
103
118
  }
104
119
 
120
+ export interface IDelayNode extends IAudioNode {
121
+ readonly delayTime: IAudioParam;
122
+ maxDelayTime: number;
123
+ }
124
+
105
125
  export interface IGainNode extends IAudioNode {
106
126
  readonly gain: IAudioParam;
107
127
  }
@@ -124,6 +144,14 @@ export interface IBiquadFilterNode extends IAudioNode {
124
144
  ): void;
125
145
  }
126
146
 
147
+ export interface IIIRFilterNode extends IAudioNode {
148
+ getFrequencyResponse(
149
+ frequencyArray: Float32Array,
150
+ magResponseOutput: Float32Array,
151
+ phaseResponseOutput: Float32Array
152
+ ): void;
153
+ }
154
+
127
155
  export interface IAudioDestinationNode extends IAudioNode {}
128
156
 
129
157
  export interface IAudioScheduledSourceNode extends IAudioNode {
@@ -138,6 +166,9 @@ export interface IAudioBufferBaseSourceNode extends IAudioScheduledSourceNode {
138
166
  detune: IAudioParam;
139
167
  playbackRate: IAudioParam;
140
168
 
169
+ getInputLatency: () => number;
170
+ getOutputLatency: () => number;
171
+
141
172
  // passing subscriptionId(uint_64 in cpp, string in js) to the cpp
142
173
  onPositionChanged: string;
143
174
  // set how often the onPositionChanged event is called
@@ -181,9 +212,17 @@ export interface IAudioBufferQueueSourceNode
181
212
 
182
213
  // returns bufferId
183
214
  enqueueBuffer: (audioBuffer: IAudioBuffer) => string;
215
+ start: (when?: number, offset?: number) => void;
184
216
  pause: () => void;
185
217
  }
186
218
 
219
+ export interface IConvolverNode extends IAudioNode {
220
+ readonly buffer: IAudioBuffer | null;
221
+ normalize: boolean;
222
+
223
+ setBuffer: (audioBuffer: IAudioBuffer | null) => void;
224
+ }
225
+
187
226
  export interface IAudioBuffer {
188
227
  readonly length: number;
189
228
  readonly duration: number;
@@ -250,45 +289,21 @@ export interface IWorkletSourceNode extends IAudioScheduledSourceNode {}
250
289
 
251
290
  export interface IWorkletProcessingNode extends IAudioNode {}
252
291
 
253
- type IOSAudioRecorderFileDescriptor = number;
254
- type AndroidAudioRecorderFileDescriptor = number;
255
-
256
- interface IAudioRecorderFileOptions {
257
- sampleRate: number;
258
- channels: number;
259
- bitRate: number;
260
- /**
261
- * IOS specific file recording options
262
- *
263
- * - `format` - IOSFormat, bitmask 0 x 0000000F
264
- * - `quality` - IOSAudioQuality, bitmask 0 x 000000F0
265
- * - `flacCompressionLevel` - FlacCompressionLevel, bitmask 0 x 00000F00
266
- * - `directory` - FileDirectory, bitmask 0 x 0000F000
267
- * - `bitDepth` - BitDepth, bitmask 0 x 000F0000
268
- */
269
- ios: IOSAudioRecorderFileDescriptor;
270
- /**
271
- * Android specific file recording options
272
- *
273
- * - He he
274
- */
275
- android: AndroidAudioRecorderFileDescriptor;
276
- }
277
-
278
- interface IAudioRecorderCallbackOptions {
279
- sampleRate: number;
280
- bufferLength: number;
281
- channelCount: number;
292
+ export interface IAudioRecorderCallbackOptions
293
+ extends AudioRecorderCallbackOptions {
282
294
  callbackId: string;
283
295
  }
284
296
 
285
297
  export interface IAudioRecorder {
286
298
  // default recorder methods
287
- start: () => void;
288
- stop: () => string | void;
299
+ start: () => Result<{ path: string }>;
300
+ stop: () => Result<FileInfo>;
289
301
  isRecording: () => boolean;
302
+ isPaused: () => boolean;
290
303
 
291
- enableFileOutput: (options: IAudioRecorderFileOptions) => void;
304
+ enableFileOutput: (
305
+ options: AudioRecorderFileOptions
306
+ ) => Result<{ path: string }>;
292
307
  disableFileOutput: () => void;
293
308
 
294
309
  // pause and resume methods for file recording
@@ -299,8 +314,14 @@ export interface IAudioRecorder {
299
314
  connect: (node: IRecorderAdapterNode) => void;
300
315
  disconnect: () => void;
301
316
 
302
- setOnAudioReady: (options: IAudioRecorderCallbackOptions) => void;
317
+ setOnAudioReady: (options: IAudioRecorderCallbackOptions) => Result<void>;
303
318
  clearOnAudioReady: () => void;
319
+
320
+ setOnError: (options: { callbackId: string }) => void;
321
+ clearOnError: () => void;
322
+
323
+ getCurrentDuration: () => number;
324
+ getFilePath: () => string | null;
304
325
  }
305
326
 
306
327
  export interface IAudioDecoder {
@@ -4,6 +4,8 @@ import {
4
4
  ConfigPlugin,
5
5
  withInfoPlist,
6
6
  withAndroidManifest,
7
+ withGradleProperties,
8
+ withPodfile,
7
9
  } from '@expo/config-plugins';
8
10
  const pkg = require('react-native-audio-api/package.json');
9
11
 
@@ -13,6 +15,7 @@ interface Options {
13
15
  androidPermissions: string[];
14
16
  androidForegroundService: boolean;
15
17
  androidFSTypes: string[];
18
+ disableFFmpeg: boolean;
16
19
  }
17
20
 
18
21
  const withDefaultOptions = (options: Partial<Options>): Options => {
@@ -24,6 +27,7 @@ const withDefaultOptions = (options: Partial<Options>): Options => {
24
27
  ],
25
28
  androidForegroundService: true,
26
29
  androidFSTypes: ['mediaPlayback'],
30
+ disableFFmpeg: false,
27
31
  ...options,
28
32
  };
29
33
  };
@@ -88,6 +92,59 @@ const withForegroundService: ConfigPlugin<Options> = (
88
92
  });
89
93
  };
90
94
 
95
+ const withFFmpegConfig: ConfigPlugin<Options> = (config, options) => {
96
+ const iosConf = withPodfile(config, (mod) => {
97
+ let contents = mod.modResults.contents;
98
+ const ffmpegRegex = /^.*ENV\['DISABLE_AUDIOAPI_FFMPEG'\].*$/gm;
99
+ const podfileString = options.disableFFmpeg
100
+ ? `ENV['DISABLE_AUDIOAPI_FFMPEG'] = '1'`
101
+ : '';
102
+ // No existing setting
103
+ if (contents.search(ffmpegRegex) === -1) {
104
+ if (options.disableFFmpeg) {
105
+ if (contents.endsWith('\n')) {
106
+ contents = `${contents}${podfileString}`;
107
+ } else {
108
+ contents = `${contents}\n${podfileString}`;
109
+ }
110
+ mod.modResults.contents = contents;
111
+ }
112
+ } else {
113
+ // Existing setting found, will replace
114
+ contents = contents.replace(ffmpegRegex, podfileString);
115
+ }
116
+
117
+ mod.modResults.contents = contents;
118
+ return mod;
119
+ });
120
+
121
+ const finalConf = withGradleProperties(iosConf, (mod) => {
122
+ const gradleProperties = mod.modResults;
123
+
124
+ const existingIndex = gradleProperties.findIndex(
125
+ (prop) => prop.type === 'property' && prop.key === 'disableAudioapiFFmpeg'
126
+ );
127
+ if (existingIndex !== -1) {
128
+ gradleProperties.splice(existingIndex, 1);
129
+ } else if (!options.disableFFmpeg) {
130
+ // No existing setting and FFmpeg is enabled, do nothing.
131
+ return mod;
132
+ }
133
+
134
+ if (options.disableFFmpeg) {
135
+ gradleProperties.push({
136
+ type: 'property',
137
+ key: 'disableAudioapiFFmpeg',
138
+ value: options.disableFFmpeg ? 'true' : 'false',
139
+ });
140
+ }
141
+
142
+ return mod;
143
+ });
144
+
145
+ return finalConf;
146
+ };
147
+
91
148
  const withAudioAPI: ConfigPlugin<Options> = (config, optionsIn) => {
92
149
  const options = withDefaultOptions(optionsIn ?? {});
93
150
 
@@ -105,6 +162,10 @@ const withAudioAPI: ConfigPlugin<Options> = (config, optionsIn) => {
105
162
  config = withIosMicrophonePermission(config, options);
106
163
  }
107
164
 
165
+ if (options.disableFFmpeg !== undefined) {
166
+ config = withFFmpegConfig(config, options);
167
+ }
168
+
108
169
  return config;
109
170
  };
110
171
 
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
- import { TurboModuleRegistry } from 'react-native';
3
2
  import type { TurboModule } from 'react-native';
4
- import { PermissionStatus, AudioDevicesInfo } from '../system/types';
3
+ import { TurboModuleRegistry } from 'react-native';
4
+ import { AudioDevicesInfo, PermissionStatus } from '../system/types';
5
5
 
6
6
  interface Spec extends TurboModule {
7
7
  install(): boolean;
@@ -15,6 +15,7 @@ interface Spec extends TurboModule {
15
15
  options: Array<string>,
16
16
  allowHaptics: boolean
17
17
  ): void;
18
+ disableSessionManagement(): void;
18
19
 
19
20
  // Lock Screen Info
20
21
  setLockScreenInfo(info: {
@@ -1,26 +1,16 @@
1
+ import { AudioEventEmitter, AudioEventSubscription } from '../events';
1
2
  import {
2
- SessionOptions,
3
- LockScreenInfo,
4
- PermissionStatus,
5
- AudioDevicesInfo,
6
- } from './types';
7
- import {
8
- SystemEventName,
9
- SystemEventCallback,
10
3
  RemoteCommandEventName,
4
+ SystemEventCallback,
5
+ SystemEventName,
11
6
  } from '../events/types';
12
7
  import { NativeAudioAPIModule } from '../specs';
13
- import { AudioEventEmitter, AudioEventSubscription } from '../events';
14
-
15
- if (global.AudioEventEmitter == null) {
16
- if (!NativeAudioAPIModule) {
17
- throw new Error(
18
- `Failed to install react-native-audio-api: The native module could not be found.`
19
- );
20
- }
21
-
22
- NativeAudioAPIModule.install();
23
- }
8
+ import {
9
+ AudioDevicesInfo,
10
+ LockScreenInfo,
11
+ PermissionStatus,
12
+ SessionOptions,
13
+ } from './types';
24
14
 
25
15
  class AudioManager {
26
16
  private readonly audioEventEmitter: AudioEventEmitter;
@@ -45,6 +35,10 @@ class AudioManager {
45
35
  );
46
36
  }
47
37
 
38
+ disableSessionManagement() {
39
+ NativeAudioAPIModule!.disableSessionManagement();
40
+ }
41
+
48
42
  setLockScreenInfo(info: LockScreenInfo) {
49
43
  NativeAudioAPIModule!.setLockScreenInfo(info);
50
44
  }
package/src/types.ts CHANGED
@@ -1,3 +1,9 @@
1
+ import AudioBuffer from './core/AudioBuffer';
2
+
3
+ export type Result<T> =
4
+ | ({ status: 'success' } & T)
5
+ | { status: 'error'; message: string };
6
+
1
7
  export type ChannelCountMode = 'max' | 'clamped-max' | 'explicit';
2
8
 
3
9
  export type ChannelInterpretation = 'speakers' | 'discrete';
@@ -29,7 +35,6 @@ export interface PeriodicWaveConstraints {
29
35
 
30
36
  export interface AudioContextOptions {
31
37
  sampleRate?: number;
32
- initSuspended?: boolean;
33
38
  }
34
39
 
35
40
  export interface OfflineAudioContextOptions {
@@ -43,7 +48,7 @@ export enum FileDirectory {
43
48
  Cache = 2,
44
49
  }
45
50
 
46
- export enum IOSFormat {
51
+ export enum FileFormat {
47
52
  Wav = 1,
48
53
  Caf = 2,
49
54
  M4A = 3,
@@ -58,23 +63,16 @@ export enum IOSAudioQuality {
58
63
  Max = 5,
59
64
  }
60
65
 
61
- export enum AndroidFormat {
62
- Wav = 1,
63
- Caf = 2,
64
- M4A = 3,
65
- Flac = 4,
66
- }
67
-
68
66
  export enum FlacCompressionLevel {
69
- L0 = 1,
70
- L1 = 2,
71
- L2 = 3,
72
- L3 = 4,
73
- L4 = 5,
74
- L5 = 6,
75
- L6 = 7,
76
- L7 = 8,
77
- L8 = 9,
67
+ L0 = 0,
68
+ L1 = 1,
69
+ L2 = 2,
70
+ L3 = 3,
71
+ L4 = 4,
72
+ L5 = 5,
73
+ L6 = 6,
74
+ L7 = 7,
75
+ L8 = 8,
78
76
  }
79
77
 
80
78
  export enum BitDepth {
@@ -83,24 +81,31 @@ export enum BitDepth {
83
81
  Bit32 = 3,
84
82
  }
85
83
 
86
- export interface AudioRecorderFileOptionsIOS {
87
- format?: IOSFormat;
88
- quality?: IOSAudioQuality;
89
- flacCompressionLevel?: FlacCompressionLevel;
90
- }
91
-
92
- export interface AudioRecorderFileOptionsAndroid {
93
- format?: AndroidFormat;
84
+ export interface FilePresetType {
85
+ bitRate: number;
86
+ sampleRate: number;
87
+ bitDepth: BitDepth;
88
+ iosQuality: IOSAudioQuality;
89
+ flacCompressionLevel: FlacCompressionLevel;
94
90
  }
95
91
 
96
92
  export interface AudioRecorderFileOptions {
93
+ channelCount?: number;
94
+ batchDurationSeconds?: number;
95
+
96
+ format?: FileFormat;
97
+ preset?: FilePresetType;
98
+
97
99
  directory?: FileDirectory;
98
- sampleRate?: number;
99
- channels?: number;
100
- bitRate?: number;
101
- bitDepth?: BitDepth;
102
- ios?: AudioRecorderFileOptionsIOS;
103
- android?: AudioRecorderFileOptionsAndroid;
100
+ subDirectory?: string;
101
+ fileNamePrefix?: string;
102
+ androidFlushIntervalMs?: number;
103
+ }
104
+
105
+ export interface FileInfo {
106
+ path: string;
107
+ size: number;
108
+ duration: number;
104
109
  }
105
110
 
106
111
  export type WindowType = 'blackman' | 'hann';
@@ -111,6 +116,11 @@ export interface AudioBufferBaseSourceNodeOptions {
111
116
 
112
117
  export type ProcessorMode = 'processInPlace' | 'processThrough';
113
118
 
119
+ export interface ConvolverNodeOptions {
120
+ buffer?: AudioBuffer | null;
121
+ disableNormalization?: boolean;
122
+ }
123
+
114
124
  export interface AudioRecorderCallbackOptions {
115
125
  /**
116
126
  * The desired sample rate (in Hz) for audio buffers delivered to the
@@ -132,3 +142,8 @@ export interface AudioRecorderCallbackOptions {
132
142
  */
133
143
  channelCount: number;
134
144
  }
145
+
146
+ export interface IIRFilterNodeOptions {
147
+ feedforward: number[];
148
+ feedback: number[];
149
+ }
@@ -0,0 +1,47 @@
1
+ import {
2
+ BitDepth,
3
+ FilePresetType,
4
+ FlacCompressionLevel,
5
+ IOSAudioQuality,
6
+ } from '../types';
7
+
8
+ const LowQuality: FilePresetType = {
9
+ sampleRate: 22050,
10
+ bitRate: 48000,
11
+ bitDepth: BitDepth.Bit16,
12
+ flacCompressionLevel: FlacCompressionLevel.L0,
13
+ iosQuality: IOSAudioQuality.Low,
14
+ };
15
+
16
+ const MediumQuality: FilePresetType = {
17
+ sampleRate: 44100,
18
+ bitRate: 128000,
19
+ bitDepth: BitDepth.Bit16,
20
+ flacCompressionLevel: FlacCompressionLevel.L3,
21
+ iosQuality: IOSAudioQuality.Medium,
22
+ };
23
+
24
+ const HighQuality: FilePresetType = {
25
+ sampleRate: 48000,
26
+ bitRate: 192000,
27
+ bitDepth: BitDepth.Bit24,
28
+ flacCompressionLevel: FlacCompressionLevel.L5,
29
+ iosQuality: IOSAudioQuality.High,
30
+ };
31
+
32
+ const LosslessQuality: FilePresetType = {
33
+ sampleRate: 48000,
34
+ bitRate: 320000,
35
+ bitDepth: BitDepth.Bit24,
36
+ flacCompressionLevel: FlacCompressionLevel.L8,
37
+ iosQuality: IOSAudioQuality.High,
38
+ };
39
+
40
+ const FilePreset = {
41
+ Low: LowQuality,
42
+ Medium: MediumQuality,
43
+ High: HighQuality,
44
+ Lossless: LosslessQuality,
45
+ } as const;
46
+
47
+ export default FilePreset;
@@ -1,26 +1,20 @@
1
- import type { ShareableWorkletCallback } from '../interfaces';
2
- export * from './bitEnums';
1
+ import AudioAPIModule from '../AudioAPIModule';
3
2
 
4
- interface SimplifiedWorkletModule {
5
- makeShareableCloneRecursive: (
6
- workletCallback: ShareableWorkletCallback
7
- ) => ShareableWorkletCallback;
3
+ export function assertWorkletsEnabled() {
4
+ if (!AudioAPIModule.areWorkletsAvailable) {
5
+ throw new Error(
6
+ '[react-native-audio-api]: Worklets are not available. Please install react-native-worklets to use this feature.'
7
+ );
8
+ }
8
9
 
9
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
- createWorkletRuntime: (options?: any) => any;
10
+ if (!AudioAPIModule.isWorkletsVersionSupported) {
11
+ throw new Error(
12
+ `[react-native-audio-api]: Worklets version ${AudioAPIModule.workletsVersion} is not supported.
13
+ Please install react-native-worklets of one of the following versions: [${AudioAPIModule.supportedWorkletsVersion.join(', ')}] to use this feature.`
14
+ );
15
+ }
11
16
  }
12
17
 
13
18
  export function clamp(value: number, min: number, max: number): number {
14
19
  return Math.min(Math.max(value, min), max);
15
20
  }
16
-
17
- export let isWorkletsAvailable = false;
18
- export let workletsModule: SimplifiedWorkletModule;
19
-
20
- try {
21
- workletsModule = require('react-native-worklets');
22
- isWorkletsAvailable = true;
23
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
24
- } catch (error) {
25
- isWorkletsAvailable = false;
26
- }