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
@@ -1,30 +1,60 @@
1
+ /*
2
+ * Copyright (C) 2010 Google Inc. All rights reserved.
3
+ *
4
+ * Redistribution and use in source and binary forms, with or without
5
+ * modification, are permitted provided that the following conditions
6
+ * are met:
7
+ *
8
+ * 1. Redistributions of source code must retain the above copyright
9
+ * notice, this list of conditions and the following disclaimer.
10
+ * 2. Redistributions in binary form must reproduce the above copyright
11
+ * notice, this list of conditions and the following disclaimer in the
12
+ * documentation and/or other materials provided with the distribution.
13
+ * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
14
+ * its contributors may be used to endorse or promote products derived
15
+ * from this software without specific prior written permission.
16
+ *
17
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
18
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
21
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+ */
28
+
1
29
  #include <audioapi/core/BaseAudioContext.h>
2
30
  #include <audioapi/core/effects/BiquadFilterNode.h>
3
31
  #include <audioapi/utils/AudioArray.h>
4
32
  #include <audioapi/utils/AudioBus.h>
33
+ #include <memory>
34
+ #include <string>
5
35
 
6
36
  // https://webaudio.github.io/Audio-EQ-Cookbook/audio-eq-cookbook.html - math
7
37
  // formulas for filters
8
38
 
9
39
  namespace audioapi {
10
40
 
11
- BiquadFilterNode::BiquadFilterNode(BaseAudioContext *context)
12
- : AudioNode(context) {
13
- frequencyParam_ = std::make_shared<AudioParam>(
14
- 350.0, 0.0f, context->getNyquistFrequency(), context);
41
+ BiquadFilterNode::BiquadFilterNode(BaseAudioContext *context) : AudioNode(context) {
42
+ frequencyParam_ =
43
+ std::make_shared<AudioParam>(350.0, 0.0f, context->getNyquistFrequency(), context);
15
44
  detuneParam_ = std::make_shared<AudioParam>(
16
- 0.0,
45
+ 0.0f,
17
46
  -1200 * LOG2_MOST_POSITIVE_SINGLE_FLOAT,
18
47
  1200 * LOG2_MOST_POSITIVE_SINGLE_FLOAT,
19
48
  context);
20
49
  QParam_ = std::make_shared<AudioParam>(
21
- 1.0, MOST_NEGATIVE_SINGLE_FLOAT, MOST_POSITIVE_SINGLE_FLOAT, context);
50
+ 1.0f, MOST_NEGATIVE_SINGLE_FLOAT, MOST_POSITIVE_SINGLE_FLOAT, context);
22
51
  gainParam_ = std::make_shared<AudioParam>(
23
- 0.0,
24
- MOST_NEGATIVE_SINGLE_FLOAT,
25
- 40 * LOG10_MOST_POSITIVE_SINGLE_FLOAT,
26
- context);
52
+ 0.0f, MOST_NEGATIVE_SINGLE_FLOAT, 40 * LOG10_MOST_POSITIVE_SINGLE_FLOAT, context);
27
53
  type_ = BiquadFilterType::LOWPASS;
54
+ x1_.resize(MAX_CHANNEL_COUNT, 0.0f);
55
+ x2_.resize(MAX_CHANNEL_COUNT, 0.0f);
56
+ y1_.resize(MAX_CHANNEL_COUNT, 0.0f);
57
+ y2_.resize(MAX_CHANNEL_COUNT, 0.0f);
28
58
  isInitialized_ = true;
29
59
  channelCountMode_ = ChannelCountMode::MAX;
30
60
  }
@@ -76,30 +106,36 @@ void BiquadFilterNode::getFrequencyResponse(
76
106
  const float *frequencyArray,
77
107
  float *magResponseOutput,
78
108
  float *phaseResponseOutput,
79
- const int length) {
109
+ const size_t length) {
110
+ #if !RN_AUDIO_API_TEST
80
111
  applyFilter();
112
+ #endif
81
113
 
82
- // Local copies for micro-optimization
83
- float b0 = b0_;
84
- float b1 = b1_;
85
- float b2 = b2_;
86
- float a1 = a1_;
87
- float a2 = a2_;
114
+ // Use double precision for later calculations
115
+ double b0 = static_cast<double>(b0_);
116
+ double b1 = static_cast<double>(b1_);
117
+ double b2 = static_cast<double>(b2_);
118
+ double a1 = static_cast<double>(a1_);
119
+ double a2 = static_cast<double>(a2_);
120
+
121
+ float nyquist = context_->getNyquistFrequency();
88
122
 
89
123
  for (size_t i = 0; i < length; i++) {
90
- if (frequencyArray[i] < 0.0 || frequencyArray[i] > 1.0) {
124
+ // Convert from frequency in Hz to normalized frequency [0, 1]
125
+ float normalizedFreq = frequencyArray[i] / nyquist;
126
+
127
+ if (normalizedFreq < 0.0f || normalizedFreq > 1.0f) {
128
+ // Out-of-bounds frequencies should return NaN.
91
129
  magResponseOutput[i] = std::nanf("");
92
130
  phaseResponseOutput[i] = std::nanf("");
93
131
  continue;
94
132
  }
95
133
 
96
- auto omega = -PI * frequencyArray[i] / context_->getNyquistFrequency();
97
- auto z = std::complex<float>(cos(omega), sin(omega));
98
- auto response = (b0 + (b1 + b2 * z) * z) /
99
- (std::complex<float>(1, 0) + (a1 + a2 * z) * z);
134
+ double omega = -PI * normalizedFreq;
135
+ auto z = std::complex<double>(std::cos(omega), std::sin(omega));
136
+ auto response = (b0 + (b1 + b2 * z) * z) / (std::complex<double>(1, 0) + (a1 + a2 * z) * z);
100
137
  magResponseOutput[i] = static_cast<float>(std::abs(response));
101
- phaseResponseOutput[i] =
102
- static_cast<float>(atan2(imag(response), real(response)));
138
+ phaseResponseOutput[i] = static_cast<float>(atan2(imag(response), real(response)));
103
139
  }
104
140
  }
105
141
 
@@ -120,17 +156,16 @@ void BiquadFilterNode::setNormalizedCoefficients(
120
156
 
121
157
  void BiquadFilterNode::setLowpassCoefficients(float frequency, float Q) {
122
158
  // Limit frequency to [0, 1] range
123
- if (frequency >= 1.0) {
159
+ if (frequency >= 1.0f) {
124
160
  setNormalizedCoefficients(1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f);
125
161
  return;
126
162
  }
127
163
 
128
- if (frequency <= 0.0) {
164
+ if (frequency <= 0.0f) {
129
165
  setNormalizedCoefficients(0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f);
130
166
  return;
131
167
  }
132
168
 
133
- Q = std::max(0.0f, Q);
134
169
  float g = std::pow(10.0f, 0.05f * Q);
135
170
 
136
171
  float theta = PI * frequency;
@@ -138,21 +173,19 @@ void BiquadFilterNode::setLowpassCoefficients(float frequency, float Q) {
138
173
  float cosW = std::cos(theta);
139
174
  float beta = (1 - cosW) / 2;
140
175
 
141
- setNormalizedCoefficients(
142
- beta, 2 * beta, beta, 1 + alpha, -2 * cosW, 1 - alpha);
176
+ setNormalizedCoefficients(beta, 2 * beta, beta, 1 + alpha, -2 * cosW, 1 - alpha);
143
177
  }
144
178
 
145
179
  void BiquadFilterNode::setHighpassCoefficients(float frequency, float Q) {
146
- if (frequency >= 1.0) {
180
+ if (frequency >= 1.0f) {
147
181
  setNormalizedCoefficients(0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f);
148
182
  return;
149
183
  }
150
- if (frequency <= 0.0) {
184
+ if (frequency <= 0.0f) {
151
185
  setNormalizedCoefficients(1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f);
152
186
  return;
153
187
  }
154
188
 
155
- Q = std::max(0.0f, Q);
156
189
  float g = std::pow(10.0f, 0.05f * Q);
157
190
 
158
191
  float theta = PI * frequency;
@@ -160,19 +193,18 @@ void BiquadFilterNode::setHighpassCoefficients(float frequency, float Q) {
160
193
  float cosW = std::cos(theta);
161
194
  float beta = (1 + cosW) / 2;
162
195
 
163
- setNormalizedCoefficients(
164
- beta, -2 * beta, beta, 1 + alpha, -2 * cosW, 1 - alpha);
196
+ setNormalizedCoefficients(beta, -2 * beta, beta, 1 + alpha, -2 * cosW, 1 - alpha);
165
197
  }
166
198
 
167
199
  void BiquadFilterNode::setBandpassCoefficients(float frequency, float Q) {
168
200
  // Limit frequency to [0, 1] range
169
- if (frequency <= 0.0 || frequency >= 1.0) {
201
+ if (frequency <= 0.0f || frequency >= 1.0f) {
170
202
  setNormalizedCoefficients(0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f);
171
203
  return;
172
204
  }
173
205
 
174
206
  // Limit Q to positive values
175
- if (Q <= 0.0) {
207
+ if (Q <= 0.0f) {
176
208
  setNormalizedCoefficients(1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f);
177
209
  return;
178
210
  }
@@ -181,19 +213,18 @@ void BiquadFilterNode::setBandpassCoefficients(float frequency, float Q) {
181
213
  float alpha = std::sin(w0) / (2 * Q);
182
214
  float cosW = std::cos(w0);
183
215
 
184
- setNormalizedCoefficients(
185
- alpha, 0.0f, -alpha, 1.0f + alpha, -2 * cosW, 1.0f - alpha);
216
+ setNormalizedCoefficients(alpha, 0.0f, -alpha, 1.0f + alpha, -2 * cosW, 1.0f - alpha);
186
217
  }
187
218
 
188
219
  void BiquadFilterNode::setLowshelfCoefficients(float frequency, float gain) {
189
220
  float A = std::pow(10.0f, gain / 40.0f);
190
221
 
191
- if (frequency >= 1.0) {
222
+ if (frequency >= 1.0f) {
192
223
  setNormalizedCoefficients(A * A, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f);
193
224
  return;
194
225
  }
195
226
 
196
- if (frequency <= 0.0) {
227
+ if (frequency <= 0.0f) {
197
228
  setNormalizedCoefficients(1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f);
198
229
  return;
199
230
  }
@@ -215,12 +246,12 @@ void BiquadFilterNode::setLowshelfCoefficients(float frequency, float gain) {
215
246
  void BiquadFilterNode::setHighshelfCoefficients(float frequency, float gain) {
216
247
  float A = std::pow(10.0f, gain / 40.0f);
217
248
 
218
- if (frequency >= 1.0) {
249
+ if (frequency >= 1.0f) {
219
250
  setNormalizedCoefficients(1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f);
220
251
  return;
221
252
  }
222
253
 
223
- if (frequency <= 0.0) {
254
+ if (frequency <= 0.0f) {
224
255
  setNormalizedCoefficients(A * A, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f);
225
256
  return;
226
257
  }
@@ -241,18 +272,15 @@ void BiquadFilterNode::setHighshelfCoefficients(float frequency, float gain) {
241
272
  A + 1 - (A - 1) * cosW - gamma);
242
273
  }
243
274
 
244
- void BiquadFilterNode::setPeakingCoefficients(
245
- float frequency,
246
- float Q,
247
- float gain) {
275
+ void BiquadFilterNode::setPeakingCoefficients(float frequency, float Q, float gain) {
248
276
  float A = std::pow(10.0f, gain / 40.0f);
249
277
 
250
- if (frequency <= 0.0 || frequency >= 1.0) {
278
+ if (frequency <= 0.0f || frequency >= 1.0f) {
251
279
  setNormalizedCoefficients(1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f);
252
280
  return;
253
281
  }
254
282
 
255
- if (Q <= 0.0) {
283
+ if (Q <= 0.0f) {
256
284
  setNormalizedCoefficients(A * A, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f);
257
285
  return;
258
286
  }
@@ -262,21 +290,16 @@ void BiquadFilterNode::setPeakingCoefficients(
262
290
  float cosW = std::cos(w0);
263
291
 
264
292
  setNormalizedCoefficients(
265
- 1 + alpha * A,
266
- -2 * cosW,
267
- 1 - alpha * A,
268
- 1 + alpha / A,
269
- -2 * cosW,
270
- 1 - alpha / A);
293
+ 1 + alpha * A, -2 * cosW, 1 - alpha * A, 1 + alpha / A, -2 * cosW, 1 - alpha / A);
271
294
  }
272
295
 
273
296
  void BiquadFilterNode::setNotchCoefficients(float frequency, float Q) {
274
- if (frequency <= 0.0 || frequency >= 1.0) {
297
+ if (frequency <= 0.0f || frequency >= 1.0f) {
275
298
  setNormalizedCoefficients(1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f);
276
299
  return;
277
300
  }
278
301
 
279
- if (Q <= 0.0) {
302
+ if (Q <= 0.0f) {
280
303
  setNormalizedCoefficients(0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f);
281
304
  return;
282
305
  }
@@ -285,17 +308,16 @@ void BiquadFilterNode::setNotchCoefficients(float frequency, float Q) {
285
308
  float alpha = std::sin(w0) / (2 * Q);
286
309
  float cosW = std::cos(w0);
287
310
 
288
- setNormalizedCoefficients(
289
- 1.0f, -2 * cosW, 1.0f, 1 + alpha, -2 * cosW, 1 - alpha);
311
+ setNormalizedCoefficients(1.0f, -2 * cosW, 1.0f, 1 + alpha, -2 * cosW, 1 - alpha);
290
312
  }
291
313
 
292
314
  void BiquadFilterNode::setAllpassCoefficients(float frequency, float Q) {
293
- if (frequency <= 0.0 || frequency >= 1.0) {
315
+ if (frequency <= 0.0f || frequency >= 1.0f) {
294
316
  setNormalizedCoefficients(1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f);
295
317
  return;
296
318
  }
297
319
 
298
- if (Q <= 0.0) {
320
+ if (Q <= 0.0f) {
299
321
  setNormalizedCoefficients(-1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f);
300
322
  return;
301
323
  }
@@ -304,20 +326,20 @@ void BiquadFilterNode::setAllpassCoefficients(float frequency, float Q) {
304
326
  float alpha = std::sin(w0) / (2 * Q);
305
327
  float cosW = std::cos(w0);
306
328
 
307
- setNormalizedCoefficients(
308
- 1 - alpha, -2 * cosW, 1 + alpha, 1 + alpha, -2 * cosW, 1 - alpha);
329
+ setNormalizedCoefficients(1 - alpha, -2 * cosW, 1 + alpha, 1 + alpha, -2 * cosW, 1 - alpha);
309
330
  }
310
331
 
311
332
  void BiquadFilterNode::applyFilter() {
312
333
  double currentTime = context_->getCurrentTime();
313
334
 
314
- float frequency =
315
- frequencyParam_->processKRateParam(RENDER_QUANTUM_SIZE, currentTime);
316
- float detune =
317
- detuneParam_->processKRateParam(RENDER_QUANTUM_SIZE, currentTime);
335
+ float frequency = frequencyParam_->processKRateParam(RENDER_QUANTUM_SIZE, currentTime);
336
+ float detune = detuneParam_->processKRateParam(RENDER_QUANTUM_SIZE, currentTime);
318
337
  auto Q = QParam_->processKRateParam(RENDER_QUANTUM_SIZE, currentTime);
319
338
  auto gain = gainParam_->processKRateParam(RENDER_QUANTUM_SIZE, currentTime);
320
339
 
340
+ // NyquistFrequency is half of the sample rate.
341
+ // Normalized frequency is therefore:
342
+ // frequency / (sampleRate / 2) = (2 * frequency) / sampleRate
321
343
  float normalizedFrequency = frequency / context_->getNyquistFrequency();
322
344
  if (detune != 0.0f) {
323
345
  normalizedFrequency *= std::pow(2.0f, detune / 1200.0f);
@@ -372,10 +394,10 @@ std::shared_ptr<AudioBus> BiquadFilterNode::processNode(
372
394
  for (int c = 0; c < numChannels; ++c) {
373
395
  auto channelData = processingBus->getChannel(c)->getData();
374
396
 
375
- x1 = x1_;
376
- x2 = x2_;
377
- y1 = y1_;
378
- y2 = y2_;
397
+ x1 = x1_[c];
398
+ x2 = x2_[c];
399
+ y1 = y1_[c];
400
+ y2 = y2_[c];
379
401
 
380
402
  for (int i = 0; i < framesToProcess; ++i) {
381
403
  float input = channelData[i];
@@ -388,11 +410,11 @@ std::shared_ptr<AudioBus> BiquadFilterNode::processNode(
388
410
  y2 = y1;
389
411
  y1 = output;
390
412
  }
413
+ x1_[c] = x1;
414
+ x2_[c] = x2;
415
+ y1_[c] = y1;
416
+ y2_[c] = y2;
391
417
  }
392
- x1_ = x1;
393
- x2_ = x2;
394
- y1_ = y1;
395
- y2_ = y2;
396
418
 
397
419
  return processingBus;
398
420
  }
@@ -1,8 +1,39 @@
1
+ /*
2
+ * Copyright (C) 2010 Google Inc. All rights reserved.
3
+ *
4
+ * Redistribution and use in source and binary forms, with or without
5
+ * modification, are permitted provided that the following conditions
6
+ * are met:
7
+ *
8
+ * 1. Redistributions of source code must retain the above copyright
9
+ * notice, this list of conditions and the following disclaimer.
10
+ * 2. Redistributions in binary form must reproduce the above copyright
11
+ * notice, this list of conditions and the following disclaimer in the
12
+ * documentation and/or other materials provided with the distribution.
13
+ * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
14
+ * its contributors may be used to endorse or promote products derived
15
+ * from this software without specific prior written permission.
16
+ *
17
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
18
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
21
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+ */
28
+
1
29
  #pragma once
2
30
 
3
31
  #include <audioapi/core/AudioNode.h>
4
32
  #include <audioapi/core/AudioParam.h>
5
33
  #include <audioapi/core/types/BiquadFilterType.h>
34
+ #if RN_AUDIO_API_TEST
35
+ #include <gtest/gtest_prod.h>
36
+ #endif // RN_AUDIO_API_TEST
6
37
 
7
38
  #include <algorithm>
8
39
  #include <cmath>
@@ -17,6 +48,11 @@ namespace audioapi {
17
48
  class AudioBus;
18
49
 
19
50
  class BiquadFilterNode : public AudioNode {
51
+ #if RN_AUDIO_API_TEST
52
+ friend class BiquadFilterTest;
53
+ FRIEND_TEST(BiquadFilterTest, GetFrequencyResponse);
54
+ #endif // RN_AUDIO_API_TEST
55
+
20
56
  public:
21
57
  explicit BiquadFilterNode(BaseAudioContext *context);
22
58
 
@@ -30,7 +66,7 @@ class BiquadFilterNode : public AudioNode {
30
66
  const float *frequencyArray,
31
67
  float *magResponseOutput,
32
68
  float *phaseResponseOutput,
33
- int length);
69
+ size_t length);
34
70
 
35
71
  protected:
36
72
  std::shared_ptr<AudioBus> processNode(
@@ -44,11 +80,11 @@ class BiquadFilterNode : public AudioNode {
44
80
  std::shared_ptr<AudioParam> gainParam_;
45
81
  audioapi::BiquadFilterType type_;
46
82
 
47
- // delayed samples
48
- float x1_ = 0;
49
- float x2_ = 0;
50
- float y1_ = 0;
51
- float y2_ = 0;
83
+ // delayed samples, one per channel
84
+ std::vector<float> x1_;
85
+ std::vector<float> x2_;
86
+ std::vector<float> y1_;
87
+ std::vector<float> y2_;
52
88
 
53
89
  // coefficients
54
90
  float b0_ = 1.0;
@@ -59,8 +95,7 @@ class BiquadFilterNode : public AudioNode {
59
95
 
60
96
  static BiquadFilterType fromString(const std::string &type) {
61
97
  std::string lowerType = type;
62
- std::transform(
63
- lowerType.begin(), lowerType.end(), lowerType.begin(), ::tolower);
98
+ std::transform(lowerType.begin(), lowerType.end(), lowerType.begin(), ::tolower);
64
99
 
65
100
  if (lowerType == "lowpass")
66
101
  return BiquadFilterType::LOWPASS;
@@ -105,13 +140,7 @@ class BiquadFilterNode : public AudioNode {
105
140
  }
106
141
  }
107
142
 
108
- void setNormalizedCoefficients(
109
- float b0,
110
- float b1,
111
- float b2,
112
- float a0,
113
- float a1,
114
- float a2);
143
+ void setNormalizedCoefficients(float b0, float b1, float b2, float a0, float a1, float a2);
115
144
  void setLowpassCoefficients(float frequency, float Q);
116
145
  void setHighpassCoefficients(float frequency, float Q);
117
146
  void setBandpassCoefficients(float frequency, float Q);
@@ -0,0 +1,201 @@
1
+ #include <audioapi/core/BaseAudioContext.h>
2
+ #include <audioapi/core/effects/ConvolverNode.h>
3
+ #include <audioapi/core/sources/AudioBuffer.h>
4
+ #include <audioapi/core/utils/Constants.h>
5
+ #include <audioapi/dsp/AudioUtils.h>
6
+ #include <audioapi/dsp/FFT.h>
7
+ #include <audioapi/utils/AudioArray.h>
8
+ #include <iostream>
9
+ #include <memory>
10
+ #include <thread>
11
+ #include <vector>
12
+
13
+ namespace audioapi {
14
+ ConvolverNode::ConvolverNode(
15
+ BaseAudioContext *context,
16
+ const std::shared_ptr<AudioBuffer> &buffer,
17
+ bool disableNormalization)
18
+ : AudioNode(context),
19
+ remainingSegments_(0),
20
+ internalBufferIndex_(0),
21
+ signalledToStop_(false),
22
+ scaleFactor_(1.0f),
23
+ intermediateBus_(nullptr),
24
+ buffer_(nullptr),
25
+ internalBuffer_(nullptr) {
26
+ channelCount_ = 2;
27
+ channelCountMode_ = ChannelCountMode::CLAMPED_MAX;
28
+ normalize_ = !disableNormalization;
29
+ gainCalibrationSampleRate_ = context->getSampleRate();
30
+ setBuffer(buffer);
31
+ audioBus_ =
32
+ std::make_shared<AudioBus>(RENDER_QUANTUM_SIZE, channelCount_, context->getSampleRate());
33
+ requiresTailProcessing_ = true;
34
+ isInitialized_ = true;
35
+ }
36
+
37
+ bool ConvolverNode::getNormalize_() const {
38
+ return normalize_;
39
+ }
40
+
41
+ const std::shared_ptr<AudioBuffer> &ConvolverNode::getBuffer() const {
42
+ return buffer_;
43
+ }
44
+
45
+ void ConvolverNode::setNormalize(bool normalize) {
46
+ if (normalize_ != normalize) {
47
+ normalize_ = normalize;
48
+ if (normalize_ && buffer_)
49
+ calculateNormalizationScale();
50
+ }
51
+ if (!normalize_) {
52
+ scaleFactor_ = 1.0f;
53
+ }
54
+ }
55
+
56
+ void ConvolverNode::setBuffer(const std::shared_ptr<AudioBuffer> &buffer) {
57
+ if (buffer_ != buffer && buffer != nullptr) {
58
+ buffer_ = buffer;
59
+ if (normalize_)
60
+ calculateNormalizationScale();
61
+ threadPool_ = std::make_shared<ThreadPool>(4);
62
+ convolvers_.clear();
63
+ for (int i = 0; i < buffer->getNumberOfChannels(); ++i) {
64
+ convolvers_.emplace_back();
65
+ AudioArray channelData(buffer->getLength());
66
+ memcpy(channelData.getData(), buffer->getChannelData(i), buffer->getLength() * sizeof(float));
67
+ convolvers_.back().init(RENDER_QUANTUM_SIZE, channelData, buffer->getLength());
68
+ }
69
+ if (buffer->getNumberOfChannels() == 1) {
70
+ // add one more convolver, because right now input is always stereo
71
+ convolvers_.emplace_back();
72
+ AudioArray channelData(buffer->getLength());
73
+ memcpy(channelData.getData(), buffer->getChannelData(0), buffer->getLength() * sizeof(float));
74
+ convolvers_.back().init(RENDER_QUANTUM_SIZE, channelData, buffer->getLength());
75
+ }
76
+ internalBuffer_ =
77
+ std::make_shared<AudioBus>(RENDER_QUANTUM_SIZE * 2, channelCount_, buffer->getSampleRate());
78
+ intermediateBus_ = std::make_shared<AudioBus>(
79
+ RENDER_QUANTUM_SIZE, convolvers_.size(), buffer->getSampleRate());
80
+ internalBufferIndex_ = 0;
81
+ }
82
+ }
83
+
84
+ void ConvolverNode::onInputDisabled() {
85
+ numberOfEnabledInputNodes_ -= 1;
86
+ if (isEnabled() && numberOfEnabledInputNodes_ == 0) {
87
+ signalledToStop_ = true;
88
+ remainingSegments_ = convolvers_.at(0).getSegCount();
89
+ }
90
+ }
91
+
92
+ std::shared_ptr<AudioBus> ConvolverNode::processInputs(
93
+ const std::shared_ptr<AudioBus> &outputBus,
94
+ int framesToProcess,
95
+ bool checkIsAlreadyProcessed) {
96
+ if (internalBufferIndex_ < framesToProcess) {
97
+ return AudioNode::processInputs(outputBus, RENDER_QUANTUM_SIZE, false);
98
+ }
99
+ return AudioNode::processInputs(outputBus, 0, false);
100
+ }
101
+
102
+ // processing pipeline: processingBus -> intermediateBus_ -> audioBus_ (mixing
103
+ // with intermediateBus_)
104
+ std::shared_ptr<AudioBus> ConvolverNode::processNode(
105
+ const std::shared_ptr<AudioBus> &processingBus,
106
+ int framesToProcess) {
107
+ if (signalledToStop_) {
108
+ if (remainingSegments_ > 0) {
109
+ remainingSegments_--;
110
+ } else {
111
+ disable();
112
+ signalledToStop_ = false;
113
+ internalBufferIndex_ = 0;
114
+ return processingBus;
115
+ }
116
+ }
117
+ if (internalBufferIndex_ < framesToProcess) {
118
+ performConvolution(processingBus); // result returned to intermediateBus_
119
+ audioBus_->sum(intermediateBus_.get());
120
+
121
+ internalBuffer_->copy(audioBus_.get(), 0, internalBufferIndex_, RENDER_QUANTUM_SIZE);
122
+ internalBufferIndex_ += RENDER_QUANTUM_SIZE;
123
+ }
124
+ audioBus_->zero();
125
+ audioBus_->copy(internalBuffer_.get(), 0, 0, framesToProcess);
126
+ int remainingFrames = internalBufferIndex_ - framesToProcess;
127
+ if (remainingFrames > 0) {
128
+ for (int i = 0; i < internalBuffer_->getNumberOfChannels(); ++i) {
129
+ memmove(
130
+ internalBuffer_->getChannel(i)->getData(),
131
+ internalBuffer_->getChannel(i)->getData() + framesToProcess,
132
+ remainingFrames * sizeof(float));
133
+ }
134
+ }
135
+ internalBufferIndex_ -= framesToProcess;
136
+
137
+ for (int i = 0; i < audioBus_->getNumberOfChannels(); ++i) {
138
+ dsp::multiplyByScalar(
139
+ audioBus_->getChannel(i)->getData(),
140
+ scaleFactor_,
141
+ audioBus_->getChannel(i)->getData(),
142
+ framesToProcess);
143
+ }
144
+
145
+ return audioBus_;
146
+ }
147
+
148
+ void ConvolverNode::calculateNormalizationScale() {
149
+ int numberOfChannels = buffer_->getNumberOfChannels();
150
+ int length = buffer_->getLength();
151
+
152
+ float power = 0;
153
+
154
+ for (int channel = 0; channel < numberOfChannels; ++channel) {
155
+ float channelPower = 0;
156
+ auto channelData = buffer_->getChannelData(channel);
157
+ for (int i = 0; i < length; ++i) {
158
+ float sample = channelData[i];
159
+ channelPower += sample * sample;
160
+ }
161
+ power += channelPower;
162
+ }
163
+
164
+ power = std::sqrt(power / (numberOfChannels * length));
165
+ if (power < MIN_IR_POWER) {
166
+ power = MIN_IR_POWER;
167
+ }
168
+ scaleFactor_ = 1 / power;
169
+ scaleFactor_ *= std::pow(10, GAIN_CALIBRATION * 0.05f);
170
+ scaleFactor_ *= gainCalibrationSampleRate_ / buffer_->getSampleRate();
171
+ }
172
+
173
+ void ConvolverNode::performConvolution(const std::shared_ptr<AudioBus> &processingBus) {
174
+ if (processingBus->getNumberOfChannels() == 1) {
175
+ for (int i = 0; i < convolvers_.size(); ++i) {
176
+ threadPool_->schedule([&, i] {
177
+ convolvers_[i].process(
178
+ processingBus->getChannel(0)->getData(), intermediateBus_->getChannel(i)->getData());
179
+ });
180
+ }
181
+ } else if (processingBus->getNumberOfChannels() == 2) {
182
+ std::vector<int> inputChannelMap;
183
+ std::vector<int> outputChannelMap;
184
+ if (convolvers_.size() == 2) {
185
+ inputChannelMap = {0, 1};
186
+ outputChannelMap = {0, 1};
187
+ } else { // 4 channel IR
188
+ inputChannelMap = {0, 0, 1, 1};
189
+ outputChannelMap = {0, 3, 2, 1};
190
+ }
191
+ for (int i = 0; i < convolvers_.size(); ++i) {
192
+ threadPool_->schedule([this, i, inputChannelMap, outputChannelMap, &processingBus] {
193
+ convolvers_[i].process(
194
+ processingBus->getChannel(inputChannelMap[i])->getData(),
195
+ intermediateBus_->getChannel(outputChannelMap[i])->getData());
196
+ });
197
+ }
198
+ }
199
+ threadPool_->wait();
200
+ }
201
+ } // namespace audioapi