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

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 (623) 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 +315 -84
  8. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +23 -23
  9. package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +13 -20
  10. package/android/src/main/cpp/audioapi/android/core/utils/AndroidFileWriterBackend.h +14 -18
  11. package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.cpp +72 -89
  12. package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.h +12 -23
  13. package/android/src/main/cpp/audioapi/android/core/utils/AudioDecoder.cpp +46 -58
  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 +363 -299
  18. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.h +48 -91
  19. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/ptrs.hpp +56 -0
  20. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/utils.cpp +114 -0
  21. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/utils.h +34 -0
  22. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.cpp +132 -105
  23. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.h +9 -16
  24. package/android/src/main/cpp/audioapi/android/system/NativeFileInfo.hpp +2 -1
  25. package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +189 -14
  26. package/android/src/main/java/com/swmansion/audioapi/core/NativeAudioPlayer.kt +10 -8
  27. package/android/src/main/java/com/swmansion/audioapi/core/NativeAudioRecorder.kt +10 -8
  28. package/android/src/main/java/com/swmansion/audioapi/system/AudioFocusListener.kt +5 -2
  29. package/android/src/main/java/com/swmansion/audioapi/system/CentralizedForegroundService.kt +128 -0
  30. package/android/src/main/java/com/swmansion/audioapi/system/ForegroundServiceManager.kt +116 -0
  31. package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionManager.kt +115 -107
  32. package/android/src/main/java/com/swmansion/audioapi/system/PermissionRequestListener.kt +2 -1
  33. package/android/src/main/java/com/swmansion/audioapi/system/notification/BaseNotification.kt +47 -0
  34. package/android/src/main/java/com/swmansion/audioapi/system/notification/NotificationRegistry.kt +191 -0
  35. package/android/src/main/java/com/swmansion/audioapi/system/notification/PlaybackNotification.kt +669 -0
  36. package/android/src/main/java/com/swmansion/audioapi/system/notification/PlaybackNotificationReceiver.kt +33 -0
  37. package/android/src/main/java/com/swmansion/audioapi/system/notification/RecordingNotification.kt +303 -0
  38. package/android/src/main/java/com/swmansion/audioapi/system/notification/RecordingNotificationReceiver.kt +45 -0
  39. package/android/src/main/java/com/swmansion/audioapi/system/notification/SimpleNotification.kt +119 -0
  40. package/android/src/main/jniLibs/arm64-v8a/libavcodec.so +0 -0
  41. package/android/src/main/jniLibs/arm64-v8a/libavformat.so +0 -0
  42. package/android/src/main/jniLibs/arm64-v8a/libavutil.so +0 -0
  43. package/android/src/main/jniLibs/arm64-v8a/libswresample.so +0 -0
  44. package/android/src/main/jniLibs/armeabi-v7a/libavcodec.so +0 -0
  45. package/android/src/main/jniLibs/armeabi-v7a/libavformat.so +0 -0
  46. package/android/src/main/jniLibs/armeabi-v7a/libavutil.so +0 -0
  47. package/android/src/main/jniLibs/armeabi-v7a/libswresample.so +0 -0
  48. package/android/src/main/jniLibs/x86/libavcodec.so +0 -0
  49. package/android/src/main/jniLibs/x86/libavformat.so +0 -0
  50. package/android/src/main/jniLibs/x86/libavutil.so +0 -0
  51. package/android/src/main/jniLibs/x86/libswresample.so +0 -0
  52. package/android/src/main/jniLibs/x86_64/libavcodec.so +0 -0
  53. package/android/src/main/jniLibs/x86_64/libavformat.so +0 -0
  54. package/android/src/main/jniLibs/x86_64/libavutil.so +0 -0
  55. package/android/src/main/jniLibs/x86_64/libswresample.so +0 -0
  56. package/android/src/oldarch/NativeAudioAPIModuleSpec.java +100 -76
  57. package/common/cpp/audioapi/AudioAPIModuleInstaller.h +45 -70
  58. package/common/cpp/audioapi/HostObjects/AudioContextHostObject.cpp +20 -22
  59. package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.cpp +3 -4
  60. package/common/cpp/audioapi/HostObjects/AudioParamHostObject.cpp +6 -8
  61. package/common/cpp/audioapi/HostObjects/AudioParamHostObject.h +2 -2
  62. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +102 -63
  63. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +4 -1
  64. package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.cpp +25 -31
  65. package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.h +3 -3
  66. package/common/cpp/audioapi/HostObjects/WorkletNodeHostObject.h +1 -2
  67. package/common/cpp/audioapi/HostObjects/WorkletProcessingNodeHostObject.h +1 -2
  68. package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.cpp +10 -18
  69. package/common/cpp/audioapi/HostObjects/destinations/AudioDestinationNodeHostObject.h +2 -3
  70. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp +18 -30
  71. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.h +1 -2
  72. package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.cpp +50 -0
  73. package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.h +20 -0
  74. package/common/cpp/audioapi/HostObjects/effects/DelayNodeHostObject.cpp +27 -0
  75. package/common/cpp/audioapi/HostObjects/effects/DelayNodeHostObject.h +21 -0
  76. package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.cpp +2 -2
  77. package/common/cpp/audioapi/HostObjects/effects/IIRFilterNodeHostObject.cpp +33 -0
  78. package/common/cpp/audioapi/HostObjects/effects/IIRFilterNodeHostObject.h +20 -0
  79. package/common/cpp/audioapi/HostObjects/effects/PeriodicWaveHostObject.h +1 -2
  80. package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.cpp +2 -2
  81. package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.h +1 -2
  82. package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.cpp +6 -12
  83. package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.h +7 -7
  84. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.cpp +98 -50
  85. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +5 -2
  86. package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.cpp +27 -22
  87. package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.h +12 -10
  88. package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.cpp +17 -22
  89. package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.h +5 -7
  90. package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.cpp +25 -11
  91. package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.h +8 -8
  92. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.cpp +19 -30
  93. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.h +2 -4
  94. package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.cpp +7 -11
  95. package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.cpp +2 -2
  96. package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.h +1 -2
  97. package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.cpp +6 -8
  98. package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.h +1 -2
  99. package/common/cpp/audioapi/HostObjects/sources/RecorderAdapterNodeHostObject.h +4 -5
  100. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.cpp +6 -2
  101. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.h +5 -6
  102. package/common/cpp/audioapi/HostObjects/sources/WorkletSourceNodeHostObject.h +1 -2
  103. package/common/cpp/audioapi/HostObjects/utils/AudioDecoderHostObject.cpp +39 -60
  104. package/common/cpp/audioapi/HostObjects/utils/AudioStretcherHostObject.cpp +15 -30
  105. package/common/cpp/audioapi/core/AudioContext.cpp +23 -28
  106. package/common/cpp/audioapi/core/AudioContext.h +6 -3
  107. package/common/cpp/audioapi/core/AudioNode.cpp +17 -19
  108. package/common/cpp/audioapi/core/AudioNode.h +19 -8
  109. package/common/cpp/audioapi/core/AudioParam.cpp +68 -100
  110. package/common/cpp/audioapi/core/AudioParam.h +20 -12
  111. package/common/cpp/audioapi/core/BaseAudioContext.cpp +52 -34
  112. package/common/cpp/audioapi/core/BaseAudioContext.h +26 -14
  113. package/common/cpp/audioapi/core/OfflineAudioContext.cpp +12 -17
  114. package/common/cpp/audioapi/core/OfflineAudioContext.h +10 -5
  115. package/common/cpp/audioapi/core/analysis/AnalyserNode.cpp +13 -21
  116. package/common/cpp/audioapi/core/analysis/AnalyserNode.h +8 -6
  117. package/common/cpp/audioapi/core/destinations/AudioDestinationNode.cpp +1 -0
  118. package/common/cpp/audioapi/core/destinations/AudioDestinationNode.h +5 -3
  119. package/common/cpp/audioapi/core/effects/BiquadFilterNode.cpp +96 -74
  120. package/common/cpp/audioapi/core/effects/BiquadFilterNode.h +44 -15
  121. package/common/cpp/audioapi/core/effects/ConvolverNode.cpp +201 -0
  122. package/common/cpp/audioapi/core/effects/ConvolverNode.h +64 -0
  123. package/common/cpp/audioapi/core/effects/DelayNode.cpp +101 -0
  124. package/common/cpp/audioapi/core/effects/DelayNode.h +39 -0
  125. package/common/cpp/audioapi/core/effects/GainNode.cpp +1 -0
  126. package/common/cpp/audioapi/core/effects/GainNode.h +3 -1
  127. package/common/cpp/audioapi/core/effects/IIRFilterNode.cpp +166 -0
  128. package/common/cpp/audioapi/core/effects/IIRFilterNode.h +74 -0
  129. package/common/cpp/audioapi/core/effects/PeriodicWave.cpp +22 -35
  130. package/common/cpp/audioapi/core/effects/PeriodicWave.h +4 -9
  131. package/common/cpp/audioapi/core/effects/StereoPannerNode.cpp +4 -5
  132. package/common/cpp/audioapi/core/effects/StereoPannerNode.h +4 -2
  133. package/common/cpp/audioapi/core/effects/WorkletNode.cpp +11 -13
  134. package/common/cpp/audioapi/core/effects/WorkletNode.h +15 -12
  135. package/common/cpp/audioapi/core/effects/WorkletProcessingNode.cpp +4 -4
  136. package/common/cpp/audioapi/core/effects/WorkletProcessingNode.h +15 -14
  137. package/common/cpp/audioapi/core/inputs/AudioRecorder.cpp +66 -36
  138. package/common/cpp/audioapi/core/inputs/AudioRecorder.h +42 -44
  139. package/common/cpp/audioapi/core/sources/AudioBuffer.cpp +4 -6
  140. package/common/cpp/audioapi/core/sources/AudioBuffer.h +4 -7
  141. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +48 -57
  142. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +37 -34
  143. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +55 -17
  144. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +35 -28
  145. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +41 -49
  146. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +8 -6
  147. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +29 -24
  148. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +6 -6
  149. package/common/cpp/audioapi/core/sources/ConstantSourceNode.cpp +3 -4
  150. package/common/cpp/audioapi/core/sources/ConstantSourceNode.h +3 -1
  151. package/common/cpp/audioapi/core/sources/OscillatorNode.cpp +12 -23
  152. package/common/cpp/audioapi/core/sources/OscillatorNode.h +6 -4
  153. package/common/cpp/audioapi/core/sources/RecorderAdapterNode.cpp +43 -16
  154. package/common/cpp/audioapi/core/sources/RecorderAdapterNode.h +22 -17
  155. package/common/cpp/audioapi/core/sources/StreamerNode.cpp +105 -87
  156. package/common/cpp/audioapi/core/sources/StreamerNode.h +67 -33
  157. package/common/cpp/audioapi/core/sources/WorkletSourceNode.cpp +5 -7
  158. package/common/cpp/audioapi/core/sources/WorkletSourceNode.h +15 -13
  159. package/common/cpp/audioapi/core/types/AudioFormat.h +1 -11
  160. package/common/cpp/audioapi/core/utils/AudioDecoder.h +15 -6
  161. package/common/cpp/audioapi/core/utils/AudioFileWriter.cpp +41 -0
  162. package/common/cpp/audioapi/core/utils/AudioFileWriter.h +44 -0
  163. package/common/cpp/audioapi/core/utils/AudioNodeDestructor.cpp +5 -6
  164. package/common/cpp/audioapi/core/utils/AudioNodeDestructor.h +7 -10
  165. package/common/cpp/audioapi/core/utils/AudioNodeManager.cpp +17 -19
  166. package/common/cpp/audioapi/core/utils/AudioNodeManager.h +8 -11
  167. package/common/cpp/audioapi/core/utils/AudioParamEventQueue.cpp +3 -3
  168. package/common/cpp/audioapi/core/utils/AudioParamEventQueue.h +5 -5
  169. package/common/cpp/audioapi/core/utils/AudioRecorderCallback.cpp +101 -0
  170. package/common/cpp/audioapi/core/utils/AudioRecorderCallback.h +52 -0
  171. package/common/cpp/audioapi/core/utils/AudioStretcher.cpp +6 -6
  172. package/common/cpp/audioapi/core/utils/Constants.h +7 -3
  173. package/common/cpp/audioapi/core/utils/ParamChangeEvent.cpp +1 -0
  174. package/common/cpp/audioapi/core/utils/ParamChangeEvent.h +9 -9
  175. package/common/cpp/audioapi/core/utils/worklets/SafeIncludes.h +33 -34
  176. package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.cpp +17 -19
  177. package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.h +23 -19
  178. package/common/cpp/audioapi/dsp/AudioUtils.cpp +4 -10
  179. package/common/cpp/audioapi/dsp/AudioUtils.h +1 -1
  180. package/common/cpp/audioapi/dsp/Convolver.cpp +201 -0
  181. package/common/cpp/audioapi/dsp/Convolver.h +47 -0
  182. package/common/cpp/audioapi/dsp/FFT.cpp +1 -27
  183. package/common/cpp/audioapi/dsp/FFT.h +19 -3
  184. package/common/cpp/audioapi/dsp/VectorMath.cpp +24 -58
  185. package/common/cpp/audioapi/dsp/VectorMath.h +35 -8
  186. package/common/cpp/audioapi/dsp/Windows.cpp +4 -9
  187. package/common/cpp/audioapi/dsp/Windows.h +24 -23
  188. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.cpp +12 -17
  189. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +45 -40
  190. package/common/cpp/audioapi/events/IAudioEventHandlerRegistry.h +15 -7
  191. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/avcodec.h +4 -4
  192. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec.h +1 -1
  193. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_desc.h +1 -1
  194. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_id.h +3 -1
  195. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_par.h +2 -2
  196. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/defs.h +3 -0
  197. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/packet.h +1 -1
  198. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/smpte_436m.h +254 -0
  199. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/version.h +1 -1
  200. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/avformat.h +6 -6
  201. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version.h +2 -2
  202. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version_major.h +2 -0
  203. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avassert.h +5 -2
  204. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avutil.h +2 -2
  205. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/channel_layout.h +2 -2
  206. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/csp.h +1 -1
  207. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/dict.h +1 -1
  208. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/ffversion.h +1 -1
  209. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/film_grain_params.h +1 -1
  210. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/frame.h +1 -1
  211. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hdr_dynamic_vivid_metadata.h +3 -3
  212. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext.h +1 -1
  213. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_opencl.h +1 -1
  214. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_qsv.h +0 -1
  215. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_vulkan.h +1 -1
  216. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/iamf.h +2 -2
  217. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/lfg.h +2 -2
  218. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/log.h +2 -2
  219. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/mathematics.h +1 -1
  220. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/opt.h +4 -4
  221. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rational.h +1 -1
  222. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rc4.h +1 -1
  223. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/refstruct.h +1 -1
  224. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/spherical.h +6 -0
  225. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tdrdi.h +1 -1
  226. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tx.h +1 -1
  227. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/version.h +3 -3
  228. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/video_hint.h +1 -1
  229. package/common/cpp/audioapi/external/ffmpeg_include/libswresample/swresample.h +1 -1
  230. package/common/cpp/audioapi/external/ffmpeg_include/libswresample/version.h +1 -1
  231. package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64/libavcodec.framework/libavcodec +0 -0
  232. package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64_x86_64-simulator/libavcodec.framework/libavcodec +0 -0
  233. package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64/libavformat.framework/libavformat +0 -0
  234. package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64_x86_64-simulator/libavformat.framework/libavformat +0 -0
  235. package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64/libavutil.framework/libavutil +0 -0
  236. package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64_x86_64-simulator/libavutil.framework/libavutil +0 -0
  237. package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64/libswresample.framework/libswresample +0 -0
  238. package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64_x86_64-simulator/libswresample.framework/libswresample +0 -0
  239. package/common/cpp/audioapi/jsi/AudioArrayBuffer.h +4 -5
  240. package/common/cpp/audioapi/jsi/JsiHostObject.cpp +11 -13
  241. package/common/cpp/audioapi/jsi/JsiHostObject.h +26 -33
  242. package/common/cpp/audioapi/jsi/JsiPromise.cpp +34 -67
  243. package/common/cpp/audioapi/jsi/JsiPromise.h +65 -26
  244. package/common/cpp/audioapi/jsi/RuntimeLifecycleMonitor.cpp +7 -10
  245. package/common/cpp/audioapi/jsi/RuntimeLifecycleMonitor.h +1 -3
  246. package/common/cpp/audioapi/libs/ffmpeg/FFmpegDecoding.cpp +4 -3
  247. package/common/cpp/audioapi/libs/ffmpeg/relinking.md +24 -0
  248. package/common/cpp/audioapi/utils/AlignedAllocator.hpp +53 -0
  249. package/common/cpp/audioapi/utils/AudioArray.cpp +3 -8
  250. package/common/cpp/audioapi/utils/AudioArray.h +3 -11
  251. package/common/cpp/audioapi/utils/AudioBus.cpp +79 -149
  252. package/common/cpp/audioapi/utils/AudioBus.h +17 -14
  253. package/common/cpp/audioapi/utils/AudioFileProperties.cpp +92 -0
  254. package/common/cpp/audioapi/utils/AudioFileProperties.h +76 -0
  255. package/common/cpp/audioapi/utils/Benchmark.hpp +50 -47
  256. package/common/cpp/audioapi/utils/CircularAudioArray.cpp +6 -18
  257. package/common/cpp/audioapi/utils/CircularOverflowableAudioArray.cpp +6 -10
  258. package/common/cpp/audioapi/utils/CircularOverflowableAudioArray.h +2 -2
  259. package/common/cpp/audioapi/utils/CrossThreadEventScheduler.hpp +12 -9
  260. package/common/cpp/audioapi/utils/MoveOnlyFunction.hpp +17 -15
  261. package/common/cpp/audioapi/utils/Result.hpp +323 -0
  262. package/common/cpp/audioapi/utils/RingBiDirectionalBuffer.hpp +22 -28
  263. package/common/cpp/audioapi/utils/SpscChannel.hpp +329 -305
  264. package/common/cpp/audioapi/utils/ThreadPool.hpp +104 -20
  265. package/common/cpp/audioapi/utils/UnitConversion.h +9 -0
  266. package/common/cpp/test/CMakeLists.txt +15 -15
  267. package/common/cpp/test/src/AudioParamTest.cpp +4 -3
  268. package/common/cpp/test/src/AudioScheduledSourceTest.cpp +113 -0
  269. package/common/cpp/test/src/ConstantSourceTest.cpp +5 -7
  270. package/common/cpp/test/src/DelayTest.cpp +108 -0
  271. package/common/cpp/test/src/GainTest.cpp +4 -5
  272. package/common/cpp/test/src/IIRFilterTest.cpp +153 -0
  273. package/common/cpp/test/src/MockAudioEventHandlerRegistry.h +19 -11
  274. package/common/cpp/test/src/OscillatorTest.cpp +2 -1
  275. package/common/cpp/test/src/StereoPannerTest.cpp +6 -9
  276. package/common/cpp/test/src/biquad/BiquadFilterChromium.cpp +372 -0
  277. package/common/cpp/test/src/biquad/BiquadFilterChromium.h +65 -0
  278. package/common/cpp/test/src/biquad/BiquadFilterTest.cpp +272 -0
  279. package/common/cpp/test/src/biquad/BiquadFilterTest.h +47 -0
  280. package/ios/audioapi/ios/AudioAPIModule.h +4 -3
  281. package/ios/audioapi/ios/AudioAPIModule.mm +148 -34
  282. package/ios/audioapi/ios/core/IOSAudioPlayer.h +2 -2
  283. package/ios/audioapi/ios/core/IOSAudioPlayer.mm +7 -6
  284. package/ios/audioapi/ios/core/IOSAudioRecorder.h +26 -18
  285. package/ios/audioapi/ios/core/IOSAudioRecorder.mm +244 -54
  286. package/ios/audioapi/ios/core/NativeAudioPlayer.m +17 -14
  287. package/ios/audioapi/ios/core/NativeAudioRecorder.h +4 -0
  288. package/ios/audioapi/ios/core/NativeAudioRecorder.m +49 -7
  289. package/ios/audioapi/ios/core/utils/AudioDecoder.mm +21 -4
  290. package/ios/audioapi/ios/core/utils/FileOptions.h +33 -0
  291. package/ios/audioapi/ios/core/utils/FileOptions.mm +195 -0
  292. package/ios/audioapi/ios/core/{IOSAudioFileWriter.h → utils/IOSFileWriter.h} +16 -14
  293. package/ios/audioapi/ios/core/utils/IOSFileWriter.mm +239 -0
  294. package/ios/audioapi/ios/core/{IOSRecorderCallback.h → utils/IOSRecorderCallback.h} +7 -17
  295. package/ios/audioapi/ios/core/utils/IOSRecorderCallback.mm +185 -0
  296. package/ios/audioapi/ios/system/AudioEngine.h +21 -16
  297. package/ios/audioapi/ios/system/AudioEngine.mm +153 -132
  298. package/ios/audioapi/ios/system/AudioSessionManager.h +25 -11
  299. package/ios/audioapi/ios/system/AudioSessionManager.mm +277 -203
  300. package/ios/audioapi/ios/system/NotificationManager.mm +47 -53
  301. package/ios/audioapi/ios/system/notification/BaseNotification.h +58 -0
  302. package/ios/audioapi/ios/system/notification/NotificationRegistry.h +70 -0
  303. package/ios/audioapi/ios/system/notification/NotificationRegistry.mm +172 -0
  304. package/ios/audioapi/ios/system/notification/PlaybackNotification.h +27 -0
  305. package/ios/audioapi/ios/system/notification/PlaybackNotification.mm +427 -0
  306. package/lib/commonjs/AudioAPIModule/AudioAPIModule.js +90 -0
  307. package/lib/commonjs/AudioAPIModule/AudioAPIModule.js.map +1 -0
  308. package/lib/commonjs/AudioAPIModule/globals.d.js +6 -0
  309. package/lib/commonjs/AudioAPIModule/globals.d.js.map +1 -0
  310. package/lib/commonjs/AudioAPIModule/index.js +14 -0
  311. package/lib/commonjs/AudioAPIModule/index.js.map +1 -0
  312. package/lib/commonjs/api.js +89 -12
  313. package/lib/commonjs/api.js.map +1 -1
  314. package/lib/commonjs/api.web.js +35 -14
  315. package/lib/commonjs/api.web.js.map +1 -1
  316. package/lib/commonjs/core/AudioBufferBaseSourceNode.js +3 -0
  317. package/lib/commonjs/core/AudioBufferBaseSourceNode.js.map +1 -1
  318. package/lib/commonjs/core/AudioBufferQueueSourceNode.js +5 -2
  319. package/lib/commonjs/core/AudioBufferQueueSourceNode.js.map +1 -1
  320. package/lib/commonjs/core/AudioContext.js +5 -8
  321. package/lib/commonjs/core/AudioContext.js.map +1 -1
  322. package/lib/commonjs/core/AudioNode.js +1 -1
  323. package/lib/commonjs/core/AudioNode.js.map +1 -1
  324. package/lib/commonjs/core/AudioParam.js +18 -11
  325. package/lib/commonjs/core/AudioParam.js.map +1 -1
  326. package/lib/commonjs/core/AudioRecorder.js +43 -55
  327. package/lib/commonjs/core/AudioRecorder.js.map +1 -1
  328. package/lib/commonjs/core/BaseAudioContext.js +61 -30
  329. package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
  330. package/lib/commonjs/core/ConvolverNode.js +37 -0
  331. package/lib/commonjs/core/ConvolverNode.js.map +1 -0
  332. package/lib/commonjs/core/DelayNode.js +17 -0
  333. package/lib/commonjs/core/DelayNode.js.map +1 -0
  334. package/lib/commonjs/core/IIRFilterNode.js +19 -0
  335. package/lib/commonjs/core/IIRFilterNode.js.map +1 -0
  336. package/lib/commonjs/core/OfflineAudioContext.js +3 -6
  337. package/lib/commonjs/core/OfflineAudioContext.js.map +1 -1
  338. package/lib/commonjs/plugin/withAudioAPI.js +46 -0
  339. package/lib/commonjs/plugin/withAudioAPI.js.map +1 -1
  340. package/lib/commonjs/specs/NativeAudioAPIModule.js.map +1 -1
  341. package/lib/commonjs/system/AudioManager.js +9 -15
  342. package/lib/commonjs/system/AudioManager.js.map +1 -1
  343. package/lib/commonjs/system/index.js +13 -0
  344. package/lib/commonjs/system/index.js.map +1 -1
  345. package/lib/commonjs/system/notification/PlaybackNotificationManager.js +138 -0
  346. package/lib/commonjs/system/notification/PlaybackNotificationManager.js.map +1 -0
  347. package/lib/commonjs/system/notification/RecordingNotificationManager.js +185 -0
  348. package/lib/commonjs/system/notification/RecordingNotificationManager.js.map +1 -0
  349. package/lib/commonjs/system/notification/SimpleNotificationManager.js +125 -0
  350. package/lib/commonjs/system/notification/SimpleNotificationManager.js.map +1 -0
  351. package/lib/commonjs/system/notification/index.js +45 -0
  352. package/lib/commonjs/system/notification/index.js.map +1 -0
  353. package/lib/commonjs/system/notification/types.js +6 -0
  354. package/lib/commonjs/system/notification/types.js.map +1 -0
  355. package/lib/commonjs/types.js +28 -35
  356. package/lib/commonjs/types.js.map +1 -1
  357. package/lib/commonjs/utils/filePresets.js +43 -0
  358. package/lib/commonjs/utils/filePresets.js.map +1 -0
  359. package/lib/commonjs/utils/index.js +12 -27
  360. package/lib/commonjs/utils/index.js.map +1 -1
  361. package/lib/commonjs/web-core/AudioContext.js +21 -1
  362. package/lib/commonjs/web-core/AudioContext.js.map +1 -1
  363. package/lib/commonjs/web-core/ConvolverNode.js +40 -0
  364. package/lib/commonjs/web-core/ConvolverNode.js.map +1 -0
  365. package/lib/commonjs/web-core/ConvolverNodeOptions.js +6 -0
  366. package/lib/commonjs/web-core/ConvolverNodeOptions.js.map +1 -0
  367. package/lib/commonjs/web-core/DelayNode.js +17 -0
  368. package/lib/commonjs/web-core/DelayNode.js.map +1 -0
  369. package/lib/commonjs/web-core/IIRFilterNode.js +19 -0
  370. package/lib/commonjs/web-core/IIRFilterNode.js.map +1 -0
  371. package/lib/commonjs/web-core/OfflineAudioContext.js +20 -0
  372. package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
  373. package/lib/commonjs/web-system/index.js +17 -0
  374. package/lib/commonjs/web-system/index.js.map +1 -0
  375. package/lib/commonjs/web-system/notification/PlaybackNotificationManager.js +37 -0
  376. package/lib/commonjs/web-system/notification/PlaybackNotificationManager.js.map +1 -0
  377. package/lib/commonjs/web-system/notification/RecordingNotificationManager.js +37 -0
  378. package/lib/commonjs/web-system/notification/RecordingNotificationManager.js.map +1 -0
  379. package/lib/commonjs/web-system/notification/index.js +21 -0
  380. package/lib/commonjs/web-system/notification/index.js.map +1 -0
  381. package/lib/module/AudioAPIModule/AudioAPIModule.js +87 -0
  382. package/lib/module/AudioAPIModule/AudioAPIModule.js.map +1 -0
  383. package/lib/module/AudioAPIModule/globals.d.js +4 -0
  384. package/lib/module/AudioAPIModule/globals.d.js.map +1 -0
  385. package/lib/module/AudioAPIModule/index.js +4 -0
  386. package/lib/module/AudioAPIModule/index.js.map +1 -0
  387. package/lib/module/api.js +7 -12
  388. package/lib/module/api.js.map +1 -1
  389. package/lib/module/api.web.js +4 -1
  390. package/lib/module/api.web.js.map +1 -1
  391. package/lib/module/core/AudioBufferBaseSourceNode.js +3 -0
  392. package/lib/module/core/AudioBufferBaseSourceNode.js.map +1 -1
  393. package/lib/module/core/AudioBufferQueueSourceNode.js +5 -2
  394. package/lib/module/core/AudioBufferQueueSourceNode.js.map +1 -1
  395. package/lib/module/core/AudioContext.js +5 -8
  396. package/lib/module/core/AudioContext.js.map +1 -1
  397. package/lib/module/core/AudioNode.js +1 -1
  398. package/lib/module/core/AudioNode.js.map +1 -1
  399. package/lib/module/core/AudioParam.js +18 -11
  400. package/lib/module/core/AudioParam.js.map +1 -1
  401. package/lib/module/core/AudioRecorder.js +44 -56
  402. package/lib/module/core/AudioRecorder.js.map +1 -1
  403. package/lib/module/core/BaseAudioContext.js +63 -32
  404. package/lib/module/core/BaseAudioContext.js.map +1 -1
  405. package/lib/module/core/ConvolverNode.js +31 -0
  406. package/lib/module/core/ConvolverNode.js.map +1 -0
  407. package/lib/module/core/DelayNode.js +11 -0
  408. package/lib/module/core/DelayNode.js.map +1 -0
  409. package/lib/module/core/IIRFilterNode.js +13 -0
  410. package/lib/module/core/IIRFilterNode.js.map +1 -0
  411. package/lib/module/core/OfflineAudioContext.js +3 -6
  412. package/lib/module/core/OfflineAudioContext.js.map +1 -1
  413. package/lib/module/plugin/withAudioAPI.js +47 -1
  414. package/lib/module/plugin/withAudioAPI.js.map +1 -1
  415. package/lib/module/specs/NativeAudioAPIModule.js.map +1 -1
  416. package/lib/module/system/AudioManager.js +9 -15
  417. package/lib/module/system/AudioManager.js.map +1 -1
  418. package/lib/module/system/index.js +1 -0
  419. package/lib/module/system/index.js.map +1 -1
  420. package/lib/module/system/notification/PlaybackNotificationManager.js +134 -0
  421. package/lib/module/system/notification/PlaybackNotificationManager.js.map +1 -0
  422. package/lib/module/system/notification/RecordingNotificationManager.js +181 -0
  423. package/lib/module/system/notification/RecordingNotificationManager.js.map +1 -0
  424. package/lib/module/system/notification/SimpleNotificationManager.js +121 -0
  425. package/lib/module/system/notification/SimpleNotificationManager.js.map +1 -0
  426. package/lib/module/system/notification/index.js +7 -0
  427. package/lib/module/system/notification/index.js.map +1 -0
  428. package/lib/module/system/notification/types.js +4 -0
  429. package/lib/module/system/notification/types.js.map +1 -0
  430. package/lib/module/types.js +27 -34
  431. package/lib/module/types.js.map +1 -1
  432. package/lib/module/utils/filePresets.js +39 -0
  433. package/lib/module/utils/filePresets.js.map +1 -0
  434. package/lib/module/utils/index.js +10 -10
  435. package/lib/module/utils/index.js.map +1 -1
  436. package/lib/module/web-core/AudioContext.js +21 -1
  437. package/lib/module/web-core/AudioContext.js.map +1 -1
  438. package/lib/module/web-core/ConvolverNode.js +34 -0
  439. package/lib/module/web-core/ConvolverNode.js.map +1 -0
  440. package/lib/module/web-core/ConvolverNodeOptions.js +4 -0
  441. package/lib/module/web-core/ConvolverNodeOptions.js.map +1 -0
  442. package/lib/module/web-core/DelayNode.js +11 -0
  443. package/lib/module/web-core/DelayNode.js.map +1 -0
  444. package/lib/module/web-core/IIRFilterNode.js +13 -0
  445. package/lib/module/web-core/IIRFilterNode.js.map +1 -0
  446. package/lib/module/web-core/OfflineAudioContext.js +20 -0
  447. package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
  448. package/lib/module/web-system/index.js +4 -0
  449. package/lib/module/web-system/index.js.map +1 -0
  450. package/lib/module/web-system/notification/PlaybackNotificationManager.js +33 -0
  451. package/lib/module/web-system/notification/PlaybackNotificationManager.js.map +1 -0
  452. package/lib/module/web-system/notification/RecordingNotificationManager.js +33 -0
  453. package/lib/module/web-system/notification/RecordingNotificationManager.js.map +1 -0
  454. package/lib/module/web-system/notification/index.js +5 -0
  455. package/lib/module/web-system/notification/index.js.map +1 -0
  456. package/lib/typescript/AudioAPIModule/AudioAPIModule.d.ts +36 -0
  457. package/lib/typescript/AudioAPIModule/AudioAPIModule.d.ts.map +1 -0
  458. package/lib/typescript/AudioAPIModule/index.d.ts +2 -0
  459. package/lib/typescript/AudioAPIModule/index.d.ts.map +1 -0
  460. package/lib/typescript/api.d.ts +5 -9
  461. package/lib/typescript/api.d.ts.map +1 -1
  462. package/lib/typescript/api.web.d.ts +4 -1
  463. package/lib/typescript/api.web.d.ts.map +1 -1
  464. package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts +1 -0
  465. package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts.map +1 -1
  466. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts +1 -1
  467. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts.map +1 -1
  468. package/lib/typescript/core/AudioContext.d.ts +1 -1
  469. package/lib/typescript/core/AudioContext.d.ts.map +1 -1
  470. package/lib/typescript/core/AudioNode.d.ts +2 -1
  471. package/lib/typescript/core/AudioNode.d.ts.map +1 -1
  472. package/lib/typescript/core/AudioParam.d.ts.map +1 -1
  473. package/lib/typescript/core/AudioRecorder.d.ts +13 -6
  474. package/lib/typescript/core/AudioRecorder.d.ts.map +1 -1
  475. package/lib/typescript/core/BaseAudioContext.d.ts +9 -3
  476. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
  477. package/lib/typescript/core/ConvolverNode.d.ts +12 -0
  478. package/lib/typescript/core/ConvolverNode.d.ts.map +1 -0
  479. package/lib/typescript/core/DelayNode.d.ts +9 -0
  480. package/lib/typescript/core/DelayNode.d.ts.map +1 -0
  481. package/lib/typescript/core/IIRFilterNode.d.ts +5 -0
  482. package/lib/typescript/core/IIRFilterNode.d.ts.map +1 -0
  483. package/lib/typescript/core/OfflineAudioContext.d.ts +1 -1
  484. package/lib/typescript/core/OfflineAudioContext.d.ts.map +1 -1
  485. package/lib/typescript/events/types.d.ts +6 -2
  486. package/lib/typescript/events/types.d.ts.map +1 -1
  487. package/lib/typescript/interfaces.d.ts +34 -34
  488. package/lib/typescript/interfaces.d.ts.map +1 -1
  489. package/lib/typescript/plugin/withAudioAPI.d.ts +1 -0
  490. package/lib/typescript/plugin/withAudioAPI.d.ts.map +1 -1
  491. package/lib/typescript/specs/NativeAudioAPIModule.d.ts +18 -6
  492. package/lib/typescript/specs/NativeAudioAPIModule.d.ts.map +1 -1
  493. package/lib/typescript/system/AudioManager.d.ts +5 -5
  494. package/lib/typescript/system/AudioManager.d.ts.map +1 -1
  495. package/lib/typescript/system/index.d.ts +1 -0
  496. package/lib/typescript/system/index.d.ts.map +1 -1
  497. package/lib/typescript/system/notification/PlaybackNotificationManager.d.ts +23 -0
  498. package/lib/typescript/system/notification/PlaybackNotificationManager.d.ts.map +1 -0
  499. package/lib/typescript/system/notification/RecordingNotificationManager.d.ts +24 -0
  500. package/lib/typescript/system/notification/RecordingNotificationManager.d.ts.map +1 -0
  501. package/lib/typescript/system/notification/SimpleNotificationManager.d.ts +21 -0
  502. package/lib/typescript/system/notification/SimpleNotificationManager.d.ts.map +1 -0
  503. package/lib/typescript/system/notification/index.d.ts +5 -0
  504. package/lib/typescript/system/notification/index.d.ts.map +1 -0
  505. package/lib/typescript/system/notification/types.d.ts +65 -0
  506. package/lib/typescript/system/notification/types.d.ts.map +1 -0
  507. package/lib/typescript/system/types.d.ts +0 -16
  508. package/lib/typescript/system/types.d.ts.map +1 -1
  509. package/lib/typescript/types.d.ts +57 -49
  510. package/lib/typescript/types.d.ts.map +1 -1
  511. package/lib/typescript/utils/filePresets.d.ts +9 -0
  512. package/lib/typescript/utils/filePresets.d.ts.map +1 -0
  513. package/lib/typescript/utils/index.d.ts +1 -8
  514. package/lib/typescript/utils/index.d.ts.map +1 -1
  515. package/lib/typescript/web-core/AudioContext.d.ts +9 -2
  516. package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
  517. package/lib/typescript/web-core/BaseAudioContext.d.ts +7 -1
  518. package/lib/typescript/web-core/BaseAudioContext.d.ts.map +1 -1
  519. package/lib/typescript/web-core/ConvolverNode.d.ts +11 -0
  520. package/lib/typescript/web-core/ConvolverNode.d.ts.map +1 -0
  521. package/lib/typescript/web-core/ConvolverNodeOptions.d.ts +6 -0
  522. package/lib/typescript/web-core/ConvolverNodeOptions.d.ts.map +1 -0
  523. package/lib/typescript/web-core/DelayNode.d.ts +8 -0
  524. package/lib/typescript/web-core/DelayNode.d.ts.map +1 -0
  525. package/lib/typescript/web-core/IIRFilterNode.d.ts +5 -0
  526. package/lib/typescript/web-core/IIRFilterNode.d.ts.map +1 -0
  527. package/lib/typescript/web-core/OfflineAudioContext.d.ts +8 -1
  528. package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
  529. package/lib/typescript/web-system/index.d.ts +2 -0
  530. package/lib/typescript/web-system/index.d.ts.map +1 -0
  531. package/lib/typescript/web-system/notification/PlaybackNotificationManager.d.ts +20 -0
  532. package/lib/typescript/web-system/notification/PlaybackNotificationManager.d.ts.map +1 -0
  533. package/lib/typescript/web-system/notification/RecordingNotificationManager.d.ts +20 -0
  534. package/lib/typescript/web-system/notification/RecordingNotificationManager.d.ts.map +1 -0
  535. package/lib/typescript/web-system/notification/index.d.ts +3 -0
  536. package/lib/typescript/web-system/notification/index.d.ts.map +1 -0
  537. package/package.json +11 -5
  538. package/scripts/download-prebuilt-binaries.sh +61 -0
  539. package/scripts/rnaa_utils.rb +8 -0
  540. package/scripts/validate-worklets-version.js +27 -0
  541. package/src/AudioAPIModule/AudioAPIModule.ts +122 -0
  542. package/src/AudioAPIModule/globals.d.ts +33 -0
  543. package/src/AudioAPIModule/index.ts +1 -0
  544. package/src/api.ts +21 -52
  545. package/src/api.web.ts +8 -2
  546. package/src/core/AudioBufferBaseSourceNode.ts +8 -0
  547. package/src/core/AudioBufferQueueSourceNode.ts +8 -2
  548. package/src/core/AudioContext.ts +5 -8
  549. package/src/core/AudioNode.ts +4 -3
  550. package/src/core/AudioParam.ts +18 -11
  551. package/src/core/AudioRecorder.ts +63 -78
  552. package/src/core/BaseAudioContext.ts +120 -54
  553. package/src/core/ConvolverNode.ts +35 -0
  554. package/src/core/DelayNode.ts +13 -0
  555. package/src/core/IIRFilterNode.ts +25 -0
  556. package/src/core/OfflineAudioContext.ts +4 -7
  557. package/src/events/types.ts +7 -3
  558. package/src/interfaces.ts +51 -34
  559. package/src/plugin/withAudioAPI.ts +61 -0
  560. package/src/specs/NativeAudioAPIModule.ts +26 -9
  561. package/src/system/AudioManager.ts +13 -32
  562. package/src/system/index.ts +1 -0
  563. package/src/system/notification/PlaybackNotificationManager.ts +197 -0
  564. package/src/system/notification/RecordingNotificationManager.ts +247 -0
  565. package/src/system/notification/SimpleNotificationManager.ts +175 -0
  566. package/src/system/notification/index.ts +4 -0
  567. package/src/system/notification/types.ts +111 -0
  568. package/src/system/types.ts +0 -18
  569. package/src/types.ts +59 -50
  570. package/src/utils/filePresets.ts +47 -0
  571. package/src/utils/index.ts +13 -19
  572. package/src/web-core/AudioContext.tsx +40 -1
  573. package/src/web-core/BaseAudioContext.tsx +11 -1
  574. package/src/web-core/ConvolverNode.tsx +43 -0
  575. package/src/web-core/ConvolverNodeOptions.tsx +6 -0
  576. package/src/web-core/DelayNode.tsx +12 -0
  577. package/src/web-core/IIRFilterNode.tsx +25 -0
  578. package/src/web-core/OfflineAudioContext.tsx +39 -0
  579. package/src/web-system/index.ts +1 -0
  580. package/src/web-system/notification/PlaybackNotificationManager.ts +64 -0
  581. package/src/web-system/notification/RecordingNotificationManager.ts +64 -0
  582. package/src/web-system/notification/index.ts +2 -0
  583. package/android/src/main/cpp/audioapi/android/core/utils/FileUtils.h +0 -34
  584. package/android/src/main/cpp/audioapi/android/core/utils/FileUtilts.cpp +0 -133
  585. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.cpp +0 -154
  586. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.h +0 -41
  587. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.cpp +0 -47
  588. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.h +0 -28
  589. package/android/src/main/java/com/swmansion/audioapi/system/LockScreenManager.kt +0 -325
  590. package/android/src/main/java/com/swmansion/audioapi/system/MediaNotificationManager.kt +0 -262
  591. package/android/src/main/java/com/swmansion/audioapi/system/MediaReceiver.kt +0 -57
  592. package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionCallback.kt +0 -61
  593. package/common/cpp/audioapi/libs/ffmpeg/INSTRUCTIONS.md +0 -32
  594. package/common/cpp/audioapi/libs/ffmpeg/create_xcframework.sh +0 -111
  595. package/common/cpp/audioapi/libs/ffmpeg/ffmpeg_setup.sh +0 -391
  596. package/ios/audioapi/ios/core/IOSAudioFileOptions.h +0 -36
  597. package/ios/audioapi/ios/core/IOSAudioFileOptions.mm +0 -140
  598. package/ios/audioapi/ios/core/IOSAudioFileWriter.mm +0 -223
  599. package/ios/audioapi/ios/core/IOSRecorderCallback.mm +0 -189
  600. package/ios/audioapi/ios/system/LockScreenManager.h +0 -24
  601. package/ios/audioapi/ios/system/LockScreenManager.mm +0 -310
  602. package/lib/commonjs/utils/bitEnums.js +0 -33
  603. package/lib/commonjs/utils/bitEnums.js.map +0 -1
  604. package/lib/module/utils/bitEnums.js +0 -27
  605. package/lib/module/utils/bitEnums.js.map +0 -1
  606. package/lib/typescript/utils/bitEnums.d.ts +0 -4
  607. package/lib/typescript/utils/bitEnums.d.ts.map +0 -1
  608. package/metro-config/index.d.ts +0 -5
  609. package/metro-config/index.js +0 -41
  610. package/metro-config/tsconfig.json +0 -3
  611. package/src/utils/bitEnums.ts +0 -51
  612. package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/Info.plist +5 -5
  613. package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64/libavcodec.framework/Info.plist +0 -0
  614. package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64_x86_64-simulator/libavcodec.framework/Info.plist +0 -0
  615. package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/Info.plist +0 -0
  616. package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64/libavformat.framework/Info.plist +0 -0
  617. package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64_x86_64-simulator/libavformat.framework/Info.plist +0 -0
  618. package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/Info.plist +5 -5
  619. package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64/libavutil.framework/Info.plist +0 -0
  620. package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64_x86_64-simulator/libavutil.framework/Info.plist +0 -0
  621. package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/Info.plist +5 -5
  622. /package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64/libswresample.framework/Info.plist +0 -0
  623. /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,175 @@
1
+ import { AudioEventEmitter, AudioEventSubscription } from '../../events';
2
+ import { NativeAudioAPIModule } from '../../specs';
3
+ import type { NotificationManager, SimpleNotificationOptions } from './types';
4
+
5
+ /// Simple notification manager for basic notifications with title and text.
6
+ /// Implements the generic NotificationManager interface.
7
+ // It is only a showcase
8
+ class SimpleNotificationManager
9
+ implements
10
+ NotificationManager<
11
+ SimpleNotificationOptions,
12
+ SimpleNotificationOptions,
13
+ never
14
+ >
15
+ {
16
+ private isRegistered_ = false;
17
+ private isShown_ = false;
18
+
19
+ private notificationKey = 'simple';
20
+ private audioEventEmitter: AudioEventEmitter;
21
+
22
+ constructor() {
23
+ this.audioEventEmitter = new AudioEventEmitter(global.AudioEventEmitter);
24
+ }
25
+
26
+ /// Register the simple notification (must be called before showing).
27
+ async register(): Promise<void> {
28
+ if (this.isRegistered_) {
29
+ console.warn('SimpleNotification is already registered');
30
+ return;
31
+ }
32
+
33
+ if (!NativeAudioAPIModule) {
34
+ throw new Error('NativeAudioAPIModule is not available');
35
+ }
36
+
37
+ const result = await NativeAudioAPIModule.registerNotification(
38
+ 'simple',
39
+ this.notificationKey
40
+ );
41
+
42
+ if (result.error) {
43
+ throw new Error(result.error);
44
+ }
45
+
46
+ this.isRegistered_ = true;
47
+ }
48
+
49
+ /// Show the notification with initial options.
50
+ async show(options: SimpleNotificationOptions): Promise<void> {
51
+ if (!this.isRegistered_) {
52
+ throw new Error(
53
+ 'SimpleNotification must be registered before showing. Call register() first.'
54
+ );
55
+ }
56
+
57
+ if (!NativeAudioAPIModule) {
58
+ throw new Error('NativeAudioAPIModule is not available');
59
+ }
60
+
61
+ const result = await NativeAudioAPIModule.showNotification(
62
+ this.notificationKey,
63
+ options as Record<string, string | number | boolean | undefined>
64
+ );
65
+
66
+ if (result.error) {
67
+ throw new Error(result.error);
68
+ }
69
+
70
+ this.isShown_ = true;
71
+ }
72
+
73
+ /// Update the notification with new options.
74
+ async update(options: SimpleNotificationOptions): Promise<void> {
75
+ if (!this.isShown_) {
76
+ console.warn('SimpleNotification is not shown. Call show() first.');
77
+ return;
78
+ }
79
+
80
+ if (!NativeAudioAPIModule) {
81
+ throw new Error('NativeAudioAPIModule is not available');
82
+ }
83
+
84
+ const result = await NativeAudioAPIModule.updateNotification(
85
+ this.notificationKey,
86
+ options as Record<string, string | number | boolean | undefined>
87
+ );
88
+
89
+ if (result.error) {
90
+ throw new Error(result.error);
91
+ }
92
+ }
93
+
94
+ /// Hide the notification (can be shown again later).
95
+ async hide(): Promise<void> {
96
+ if (!this.isShown_) {
97
+ return;
98
+ }
99
+
100
+ if (!NativeAudioAPIModule) {
101
+ throw new Error('NativeAudioAPIModule is not available');
102
+ }
103
+
104
+ const result = await NativeAudioAPIModule.hideNotification(
105
+ this.notificationKey
106
+ );
107
+
108
+ if (result.error) {
109
+ throw new Error(result.error);
110
+ }
111
+
112
+ this.isShown_ = false;
113
+ }
114
+
115
+ /// Unregister the notification (must register again to use).
116
+ async unregister(): Promise<void> {
117
+ if (!this.isRegistered_) {
118
+ return;
119
+ }
120
+
121
+ if (this.isShown_) {
122
+ await this.hide();
123
+ }
124
+
125
+ if (!NativeAudioAPIModule) {
126
+ throw new Error('NativeAudioAPIModule is not available');
127
+ }
128
+
129
+ const result = await NativeAudioAPIModule.unregisterNotification(
130
+ this.notificationKey
131
+ );
132
+
133
+ if (result.error) {
134
+ throw new Error(result.error);
135
+ }
136
+
137
+ this.isRegistered_ = false;
138
+ }
139
+
140
+ /// Check if the notification is currently active.
141
+ async isActive(): Promise<boolean> {
142
+ if (!NativeAudioAPIModule) {
143
+ return false;
144
+ }
145
+
146
+ return await NativeAudioAPIModule.isNotificationActive(
147
+ this.notificationKey
148
+ );
149
+ }
150
+
151
+ isRegistered(): boolean {
152
+ return this.isRegistered_;
153
+ }
154
+
155
+ /// Add an event listener (SimpleNotification doesn't emit events).
156
+ addEventListener<T extends never>(
157
+ _eventName: T,
158
+ _callback: (event: never) => void
159
+ ): AudioEventSubscription {
160
+ // SimpleNotification doesn't emit events, return a no-op subscription
161
+ console.warn('SimpleNotification does not support event listeners');
162
+ return this.audioEventEmitter.addAudioEventListener(
163
+ // Using a valid event name for the no-op subscription
164
+ 'playbackNotificationPlay',
165
+ () => {}
166
+ );
167
+ }
168
+
169
+ /// Remove an event listener.
170
+ removeEventListener(subscription: AudioEventSubscription): void {
171
+ subscription.remove();
172
+ }
173
+ }
174
+
175
+ export default new SimpleNotificationManager();
@@ -0,0 +1,4 @@
1
+ export { default as PlaybackNotificationManager } from './PlaybackNotificationManager';
2
+ export { default as RecordingNotificationManager } from './RecordingNotificationManager';
3
+ export { default as SimpleNotificationManager } from './SimpleNotificationManager';
4
+ export * from './types';
@@ -0,0 +1,111 @@
1
+ import type { AudioEventSubscription } from '../../events';
2
+ import { EventEmptyType, EventTypeWithValue } from '../../events/types';
3
+
4
+ /// Generic notification manager interface that all notification managers should implement.
5
+ /// Provides a consistent API for managing notification lifecycle and events.
6
+ export interface NotificationManager<
7
+ TShowOptions,
8
+ TUpdateOptions,
9
+ TEventName extends NotificationEventName,
10
+ > {
11
+ /// Register the notification (must be called before showing).
12
+ register(): Promise<void>;
13
+
14
+ /// Show the notification with initial options.
15
+ show(options: TShowOptions): Promise<void>;
16
+
17
+ /// Update the notification with new options.
18
+ update(options: TUpdateOptions): Promise<void>;
19
+
20
+ /// Hide the notification (can be shown again later).
21
+ hide(): Promise<void>;
22
+
23
+ /// Unregister the notification (must register again to use).
24
+ unregister(): Promise<void>;
25
+
26
+ /// Check if the notification is currently active.
27
+ isActive(): Promise<boolean>;
28
+
29
+ /// Add an event listener for notification events.
30
+ addEventListener<T extends TEventName>(
31
+ eventName: T,
32
+ callback: NotificationCallback<T>
33
+ ): AudioEventSubscription;
34
+
35
+ /// Remove an event listener.
36
+ removeEventListener(subscription: AudioEventSubscription): void;
37
+ }
38
+
39
+ /// Metadata and state information for playback notifications.
40
+ export interface PlaybackNotificationInfo {
41
+ title?: string;
42
+ artist?: string;
43
+ album?: string;
44
+ artwork?: string | { uri: string };
45
+ androidSmallIcon?: string | { uri: string };
46
+ duration?: number;
47
+ elapsedTime?: number;
48
+ speed?: number;
49
+ state?: 'playing' | 'paused';
50
+ }
51
+
52
+ /// Available playback control actions.
53
+ export type PlaybackControlName =
54
+ | 'play'
55
+ | 'pause'
56
+ | 'next'
57
+ | 'previous'
58
+ | 'skipForward'
59
+ | 'skipBackward'
60
+ | 'seekTo';
61
+
62
+ /// Event names for playback notification actions.
63
+ interface PlaybackNotificationEvent {
64
+ playbackNotificationPlay: EventEmptyType;
65
+ playbackNotificationPause: EventEmptyType;
66
+ playbackNotificationNext: EventEmptyType;
67
+ playbackNotificationPrevious: EventEmptyType;
68
+ playbackNotificationSkipForward: EventTypeWithValue;
69
+ playbackNotificationSkipBackward: EventTypeWithValue;
70
+ playbackNotificationSeekTo: EventTypeWithValue;
71
+ playbackNotificationDismissed: EventEmptyType;
72
+ }
73
+
74
+ export type PlaybackNotificationEventName = keyof PlaybackNotificationEvent;
75
+
76
+ /// Metadata and state information for recording notifications.
77
+ export interface RecordingNotificationInfo {
78
+ title?: string;
79
+ description?: string;
80
+ artwork?: string | { uri: string };
81
+ state?: 'recording' | 'stopped';
82
+ control?: RecordingControlName;
83
+ enabled?: boolean;
84
+ }
85
+
86
+ /// Available recording control actions.
87
+ export type RecordingControlName = 'start' | 'stop';
88
+
89
+ /// Event names for recording notification actions.
90
+ interface RecordingNotificationEvent {
91
+ recordingNotificationStart: EventEmptyType;
92
+ recordingNotificationStop: EventEmptyType;
93
+ recordingNotificationDismissed: EventEmptyType;
94
+ }
95
+
96
+ export type RecordingNotificationEventName = keyof RecordingNotificationEvent;
97
+
98
+ export type NotificationEvents = PlaybackNotificationEvent &
99
+ RecordingNotificationEvent;
100
+
101
+ export type NotificationEventName = keyof NotificationEvents;
102
+
103
+ export type NotificationCallback<Name extends NotificationEventName> = (
104
+ event: NotificationEvents[Name]
105
+ ) => void;
106
+
107
+ /// Options for a simple notification with title and text.
108
+ export interface SimpleNotificationOptions {
109
+ title?: string;
110
+ text?: string;
111
+ }
@@ -34,24 +34,6 @@ export interface SessionOptions {
34
34
  iosAllowHaptics?: boolean;
35
35
  }
36
36
 
37
- export type MediaState = 'state_playing' | 'state_paused';
38
-
39
- interface BaseLockScreenInfo {
40
- [key: string]: string | boolean | number | undefined;
41
- }
42
-
43
- export interface LockScreenInfo extends BaseLockScreenInfo {
44
- title?: string;
45
- artwork?: string;
46
- artist?: string;
47
- album?: string;
48
- duration?: number;
49
- description?: string; // android only
50
- state?: MediaState;
51
- speed?: number;
52
- elapsedTime?: number;
53
- }
54
-
55
37
  export type PermissionStatus = 'Undetermined' | 'Denied' | 'Granted';
56
38
 
57
39
  export interface AudioDeviceInfo {
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 {
@@ -39,68 +44,68 @@ export interface OfflineAudioContextOptions {
39
44
  }
40
45
 
41
46
  export enum FileDirectory {
42
- Document = 1,
43
- Cache = 2,
47
+ Document = 0,
48
+ Cache = 1,
44
49
  }
45
50
 
46
- export enum IOSFormat {
47
- Wav = 1,
48
- Caf = 2,
49
- M4A = 3,
50
- Flac = 4,
51
+ export enum FileFormat {
52
+ Wav = 0,
53
+ Caf = 1,
54
+ M4A = 2,
55
+ Flac = 3,
51
56
  }
52
57
 
53
58
  export enum IOSAudioQuality {
54
- Min = 1,
55
- Low = 2,
56
- Medium = 3,
57
- High = 4,
58
- Max = 5,
59
+ Min = 0,
60
+ Low = 1,
61
+ Medium = 2,
62
+ High = 3,
63
+ Max = 4,
59
64
  }
60
65
 
61
- export enum AndroidFormat {
62
- Wav = 1,
63
- Caf = 2,
64
- M4A = 3,
65
- Flac = 4,
66
+ export enum BitDepth {
67
+ Bit16 = 0,
68
+ Bit24 = 1,
69
+ Bit32 = 2,
66
70
  }
67
71
 
68
72
  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,
73
+ L0 = 0,
74
+ L1 = 1,
75
+ L2 = 2,
76
+ L3 = 3,
77
+ L4 = 4,
78
+ L5 = 5,
79
+ L6 = 6,
80
+ L7 = 7,
81
+ L8 = 8,
78
82
  }
79
83
 
80
- export enum BitDepth {
81
- Bit16 = 1,
82
- Bit24 = 2,
83
- Bit32 = 3,
84
+ export interface FilePresetType {
85
+ bitRate: number;
86
+ sampleRate: number;
87
+ bitDepth: BitDepth;
88
+ iosQuality: IOSAudioQuality;
89
+ flacCompressionLevel: FlacCompressionLevel;
84
90
  }
85
91
 
86
- export interface AudioRecorderFileOptionsIOS {
87
- format?: IOSFormat;
88
- quality?: IOSAudioQuality;
89
- flacCompressionLevel?: FlacCompressionLevel;
90
- }
92
+ export interface AudioRecorderFileOptions {
93
+ channelCount?: number;
94
+ batchDurationSeconds?: number;
91
95
 
92
- export interface AudioRecorderFileOptionsAndroid {
93
- format?: AndroidFormat;
94
- }
96
+ format?: FileFormat;
97
+ preset?: FilePresetType;
95
98
 
96
- export interface AudioRecorderFileOptions {
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
@@ -133,8 +143,7 @@ export interface AudioRecorderCallbackOptions {
133
143
  channelCount: number;
134
144
  }
135
145
 
136
- export interface FileInfo {
137
- path: string;
138
- size: number;
139
- duration: number;
146
+ export interface IIRFilterNodeOptions {
147
+ feedforward: number[];
148
+ feedback: number[];
140
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
- }
@@ -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,