react-native-audio-api 0.11.0-alpha.0 → 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 +353 -74
  8. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +32 -19
  9. package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +13 -20
  10. package/android/src/main/cpp/audioapi/android/core/utils/AndroidFileWriterBackend.h +15 -15
  11. package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.cpp +170 -0
  12. package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.h +46 -0
  13. package/android/src/main/cpp/audioapi/android/core/utils/AudioDecoder.cpp +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 +366 -304
  18. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.h +49 -91
  19. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/ptrs.hpp +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 +154 -95
  23. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.h +10 -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 +109 -44
  85. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +8 -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 +39 -108
  138. package/common/cpp/audioapi/core/inputs/AudioRecorder.h +47 -46
  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 +28 -11
  285. package/ios/audioapi/ios/core/IOSAudioRecorder.mm +280 -45
  286. package/ios/audioapi/ios/core/NativeAudioPlayer.m +17 -14
  287. package/ios/audioapi/ios/core/NativeAudioRecorder.h +6 -3
  288. package/ios/audioapi/ios/core/NativeAudioRecorder.m +74 -6
  289. package/ios/audioapi/ios/core/utils/AudioDecoder.mm +22 -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/utils/IOSFileWriter.h +53 -0
  293. package/ios/audioapi/ios/core/utils/IOSFileWriter.mm +239 -0
  294. package/ios/audioapi/ios/core/utils/IOSRecorderCallback.h +47 -0
  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 +56 -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 +57 -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 +16 -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 +36 -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 +58 -45
  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 +86 -84
  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 +55 -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 +61 -46
  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 -35
  597. package/ios/audioapi/ios/core/IOSAudioFileOptions.mm +0 -135
  598. package/ios/audioapi/ios/core/IOSAudioFileWriter.h +0 -38
  599. package/ios/audioapi/ios/core/IOSAudioFileWriter.mm +0 -187
  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,64 @@
1
+ #pragma once
2
+
3
+ #include <audioapi/core/AudioNode.h>
4
+ #include <audioapi/core/AudioParam.h>
5
+ #include <audioapi/dsp/Convolver.h>
6
+
7
+ #include <memory>
8
+ #include <vector>
9
+
10
+ #include <audioapi/utils/ThreadPool.hpp>
11
+
12
+ static constexpr int GAIN_CALIBRATION =
13
+ -58; // magic number so that processed signal and dry signal have roughly the same volume
14
+ static constexpr double MIN_IR_POWER = 0.000125;
15
+
16
+ namespace audioapi {
17
+
18
+ class AudioBus;
19
+ class AudioBuffer;
20
+
21
+ class ConvolverNode : public AudioNode {
22
+ public:
23
+ explicit ConvolverNode(
24
+ BaseAudioContext *context,
25
+ const std::shared_ptr<AudioBuffer> &buffer,
26
+ bool disableNormalization);
27
+
28
+ [[nodiscard]] bool getNormalize_() const;
29
+ [[nodiscard]] const std::shared_ptr<AudioBuffer> &getBuffer() const;
30
+ void setNormalize(bool normalize);
31
+ void setBuffer(const std::shared_ptr<AudioBuffer> &buffer);
32
+
33
+ protected:
34
+ std::shared_ptr<AudioBus> processNode(
35
+ const std::shared_ptr<AudioBus> &processingBus,
36
+ int framesToProcess) override;
37
+
38
+ private:
39
+ std::shared_ptr<AudioBus> processInputs(
40
+ const std::shared_ptr<AudioBus> &outputBus,
41
+ int framesToProcess,
42
+ bool checkIsAlreadyProcessed) override;
43
+ void onInputDisabled() override;
44
+ float gainCalibrationSampleRate_;
45
+ size_t remainingSegments_;
46
+ size_t internalBufferIndex_;
47
+ bool normalize_;
48
+ bool signalledToStop_;
49
+ float scaleFactor_;
50
+ std::shared_ptr<AudioBus> intermediateBus_;
51
+
52
+ // impulse response buffer
53
+ std::shared_ptr<AudioBuffer> buffer_;
54
+ // buffer to hold internal processed data
55
+ std::shared_ptr<AudioBus> internalBuffer_;
56
+ // vectors of convolvers, one per channel
57
+ std::vector<Convolver> convolvers_;
58
+ std::shared_ptr<ThreadPool> threadPool_;
59
+
60
+ void calculateNormalizationScale();
61
+ void performConvolution(const std::shared_ptr<AudioBus> &processingBus);
62
+ };
63
+
64
+ } // namespace audioapi
@@ -0,0 +1,101 @@
1
+ #include <audioapi/core/BaseAudioContext.h>
2
+ #include <audioapi/core/effects/DelayNode.h>
3
+ #include <audioapi/dsp/VectorMath.h>
4
+ #include <audioapi/utils/AudioArray.h>
5
+ #include <audioapi/utils/AudioBus.h>
6
+ #include <memory>
7
+
8
+ namespace audioapi {
9
+
10
+ DelayNode::DelayNode(BaseAudioContext *context, float maxDelayTime) : AudioNode(context) {
11
+ delayTimeParam_ = std::make_shared<AudioParam>(0, 0, maxDelayTime, context);
12
+ delayBuffer_ = std::make_shared<AudioBus>(
13
+ static_cast<size_t>(
14
+ maxDelayTime * context->getSampleRate() +
15
+ 1), // +1 to enable delayTime equal to maxDelayTime
16
+ channelCount_,
17
+ context->getSampleRate());
18
+ requiresTailProcessing_ = true;
19
+ isInitialized_ = true;
20
+ }
21
+
22
+ std::shared_ptr<AudioParam> DelayNode::getDelayTimeParam() const {
23
+ return delayTimeParam_;
24
+ }
25
+
26
+ void DelayNode::onInputDisabled() {
27
+ numberOfEnabledInputNodes_ -= 1;
28
+ if (isEnabled() && numberOfEnabledInputNodes_ == 0) {
29
+ signalledToStop_ = true;
30
+ remainingFrames_ = delayTimeParam_->getValue() * context_->getSampleRate();
31
+ }
32
+ }
33
+
34
+ void DelayNode::delayBufferOperation(
35
+ const std::shared_ptr<AudioBus> &processingBus,
36
+ int framesToProcess,
37
+ size_t &operationStartingIndex,
38
+ DelayNode::BufferAction action) {
39
+ size_t processingBusStartIndex = 0;
40
+
41
+ // handle buffer wrap around
42
+ if (operationStartingIndex + framesToProcess > delayBuffer_->getSize()) {
43
+ int framesToEnd = operationStartingIndex + framesToProcess - delayBuffer_->getSize();
44
+
45
+ if (action == BufferAction::WRITE) {
46
+ delayBuffer_->sum(
47
+ processingBus.get(), processingBusStartIndex, operationStartingIndex, framesToEnd);
48
+ } else { // READ
49
+ processingBus->sum(
50
+ delayBuffer_.get(), operationStartingIndex, processingBusStartIndex, framesToEnd);
51
+ }
52
+
53
+ operationStartingIndex = 0;
54
+ processingBusStartIndex += framesToEnd;
55
+ framesToProcess -= framesToEnd;
56
+ }
57
+
58
+ if (action == BufferAction::WRITE) {
59
+ delayBuffer_->sum(
60
+ processingBus.get(), processingBusStartIndex, operationStartingIndex, framesToProcess);
61
+ processingBus->zero();
62
+ } else { // READ
63
+ processingBus->sum(
64
+ delayBuffer_.get(), operationStartingIndex, processingBusStartIndex, framesToProcess);
65
+ delayBuffer_->zero(operationStartingIndex, framesToProcess);
66
+ }
67
+
68
+ operationStartingIndex += framesToProcess;
69
+ }
70
+
71
+ // delay buffer always has channelCount_ channels
72
+ // processing is split into two parts
73
+ // 1. writing to delay buffer (mixing if needed) from processing bus
74
+ // 2. reading from delay buffer to processing bus (mixing if needed) with delay
75
+ std::shared_ptr<AudioBus> DelayNode::processNode(
76
+ const std::shared_ptr<AudioBus> &processingBus,
77
+ int framesToProcess) {
78
+ // handling tail processing
79
+ if (signalledToStop_) {
80
+ if (remainingFrames_ <= 0) {
81
+ disable();
82
+ signalledToStop_ = false;
83
+ return processingBus;
84
+ }
85
+
86
+ delayBufferOperation(processingBus, framesToProcess, readIndex_, DelayNode::BufferAction::READ);
87
+ remainingFrames_ -= framesToProcess;
88
+ return processingBus;
89
+ }
90
+
91
+ // normal processing
92
+ auto delayTime = delayTimeParam_->processKRateParam(framesToProcess, context_->getCurrentTime());
93
+ size_t writeIndex = static_cast<size_t>(readIndex_ + delayTime * context_->getSampleRate()) %
94
+ delayBuffer_->getSize();
95
+ delayBufferOperation(processingBus, framesToProcess, writeIndex, DelayNode::BufferAction::WRITE);
96
+ delayBufferOperation(processingBus, framesToProcess, readIndex_, DelayNode::BufferAction::READ);
97
+
98
+ return processingBus;
99
+ }
100
+
101
+ } // namespace audioapi
@@ -0,0 +1,39 @@
1
+ #pragma once
2
+
3
+ #include <audioapi/core/AudioNode.h>
4
+ #include <audioapi/core/AudioParam.h>
5
+
6
+ #include <functional>
7
+ #include <memory>
8
+
9
+ namespace audioapi {
10
+
11
+ class AudioBus;
12
+
13
+ class DelayNode : public AudioNode {
14
+ public:
15
+ explicit DelayNode(BaseAudioContext *context, float maxDelayTime);
16
+
17
+ [[nodiscard]] std::shared_ptr<AudioParam> getDelayTimeParam() const;
18
+
19
+ protected:
20
+ std::shared_ptr<AudioBus> processNode(
21
+ const std::shared_ptr<AudioBus> &processingBus,
22
+ int framesToProcess) override;
23
+
24
+ private:
25
+ void onInputDisabled() override;
26
+ enum class BufferAction { READ, WRITE };
27
+ void delayBufferOperation(
28
+ const std::shared_ptr<AudioBus> &processingBus,
29
+ int framesToProcess,
30
+ size_t &operationStartingIndex,
31
+ BufferAction action);
32
+ std::shared_ptr<AudioParam> delayTimeParam_;
33
+ std::shared_ptr<AudioBus> delayBuffer_;
34
+ size_t readIndex_ = 0;
35
+ bool signalledToStop_ = false;
36
+ int remainingFrames_ = 0;
37
+ };
38
+
39
+ } // namespace audioapi
@@ -3,6 +3,7 @@
3
3
  #include <audioapi/dsp/VectorMath.h>
4
4
  #include <audioapi/utils/AudioArray.h>
5
5
  #include <audioapi/utils/AudioBus.h>
6
+ #include <memory>
6
7
 
7
8
  namespace audioapi {
8
9
 
@@ -16,7 +16,9 @@ class GainNode : public AudioNode {
16
16
  [[nodiscard]] std::shared_ptr<AudioParam> getGainParam() const;
17
17
 
18
18
  protected:
19
- std::shared_ptr<AudioBus> processNode(const std::shared_ptr<AudioBus>& processingBus, int framesToProcess) override;
19
+ std::shared_ptr<AudioBus> processNode(
20
+ const std::shared_ptr<AudioBus> &processingBus,
21
+ int framesToProcess) override;
20
22
 
21
23
  private:
22
24
  std::shared_ptr<AudioParam> gainParam_;
@@ -0,0 +1,166 @@
1
+ /*
2
+ * Copyright 2016 The Chromium Authors. All rights reserved.
3
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
4
+ *
5
+ * Redistribution and use in source and binary forms, with or without
6
+ * modification, are permitted provided that the following conditions
7
+ * are met:
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
+ *
14
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
15
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17
+ * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
18
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
21
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
23
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24
+ */
25
+
26
+ #include <audioapi/core/BaseAudioContext.h>
27
+ #include <audioapi/core/effects/IIRFilterNode.h>
28
+ #include <audioapi/core/utils/Constants.h>
29
+ #include <audioapi/utils/AudioArray.h>
30
+ #include <audioapi/utils/AudioBus.h>
31
+ #include <algorithm>
32
+ #include <memory>
33
+ #include <vector>
34
+
35
+ namespace audioapi {
36
+
37
+ IIRFilterNode::IIRFilterNode(
38
+ BaseAudioContext *context,
39
+ const std::vector<float> &feedforward,
40
+ const std::vector<float> &feedback)
41
+ : AudioNode(context), feedforward_(feedforward), feedback_(feedback) {
42
+ isInitialized_ = true;
43
+ channelCountMode_ = ChannelCountMode::MAX;
44
+
45
+ int maxChannels = MAX_CHANNEL_COUNT;
46
+ xBuffers_.resize(maxChannels);
47
+ yBuffers_.resize(maxChannels);
48
+ bufferIndices.resize(maxChannels, 0);
49
+
50
+ for (int c = 0; c < maxChannels; ++c) {
51
+ xBuffers_[c].resize(bufferLength, 0.0f);
52
+ yBuffers_[c].resize(bufferLength, 0.0f);
53
+ }
54
+
55
+ size_t feedforwardLength = feedforward_.size();
56
+ size_t feedbackLength = feedback_.size();
57
+
58
+ if (feedback_[0] != 1) {
59
+ float scale = feedback_[0];
60
+ for (unsigned k = 1; k < feedbackLength; ++k)
61
+ feedback_[k] /= scale;
62
+
63
+ for (unsigned k = 0; k < feedforwardLength; ++k)
64
+ feedforward_[k] /= scale;
65
+
66
+ feedback_[0] = 1.0f;
67
+ }
68
+ }
69
+
70
+ // Compute Z-transform of the filter
71
+ //
72
+ // frequency response - H(z)
73
+ // sum(b[k]*z^(-k), k, 0, M)
74
+ // H(z) = -------------------------------
75
+ // sum(a[k]*z^(-k), k, 0, N)
76
+ //
77
+ // sum(b[k]*z1^k, k, 0, M)
78
+ // = -------------------------------
79
+ // sum(a[k]*z1^k, k, 0, N)
80
+ //
81
+ // where z1 = 1/z and z = e^(j * pi * frequency)
82
+ // z1 = e^(-j * pi * frequency)
83
+ //
84
+ // phase response - angle of the frequency response
85
+ //
86
+
87
+ void IIRFilterNode::getFrequencyResponse(
88
+ const float *frequencyArray,
89
+ float *magResponseOutput,
90
+ float *phaseResponseOutput,
91
+ size_t length) {
92
+ float nyquist = context_->getNyquistFrequency();
93
+
94
+ for (size_t k = 0; k < length; ++k) {
95
+ float normalizedFreq = frequencyArray[k] / nyquist;
96
+
97
+ if (normalizedFreq < 0.0f || normalizedFreq > 1.0f) {
98
+ // Out-of-bounds frequencies should return NaN.
99
+ magResponseOutput[k] = std::nanf("");
100
+ phaseResponseOutput[k] = std::nanf("");
101
+ continue;
102
+ }
103
+
104
+ float omega = -PI * normalizedFreq;
105
+ auto z = std::complex<float>(std::cos(omega), std::sin(omega));
106
+
107
+ auto numerator = IIRFilterNode::evaluatePolynomial(feedforward_, z, feedforward_.size() - 1);
108
+ auto denominator = IIRFilterNode::evaluatePolynomial(feedback_, z, feedback_.size() - 1);
109
+ auto response = numerator / denominator;
110
+
111
+ magResponseOutput[k] = static_cast<float>(std::abs(response));
112
+ phaseResponseOutput[k] = static_cast<float>(atan2(imag(response), real(response)));
113
+ }
114
+ }
115
+
116
+ // y[n] = sum(b[k] * x[n - k], k = 0, M) - sum(a[k] * y[n - k], k = 1, N)
117
+ // where b[k] are the feedforward coefficients and a[k] are the feedback coefficients of the filter
118
+
119
+ // TODO: tail
120
+
121
+ std::shared_ptr<AudioBus> IIRFilterNode::processNode(
122
+ const std::shared_ptr<AudioBus> &processingBus,
123
+ int framesToProcess) {
124
+ int numChannels = processingBus->getNumberOfChannels();
125
+
126
+ size_t feedforwardLength = feedforward_.size();
127
+ size_t feedbackLength = feedback_.size();
128
+ int minLength = std::min(feedbackLength, feedforwardLength);
129
+
130
+ int mask = bufferLength - 1;
131
+
132
+ for (int c = 0; c < numChannels; ++c) {
133
+ auto channelData = processingBus->getChannel(c)->getData();
134
+ auto &x = xBuffers_[c];
135
+ auto &y = yBuffers_[c];
136
+ size_t bufferIndex = bufferIndices[c];
137
+
138
+ for (int n = 0; n < framesToProcess; ++n) {
139
+ float yn = feedforward_[0] * channelData[n];
140
+
141
+ for (int k = 1; k < minLength; ++k) {
142
+ int m = (bufferIndex - k) & mask;
143
+ yn = std::fma(feedforward_[k], x[m], yn);
144
+ yn = std::fma(-feedback_[k], y[m], yn);
145
+ }
146
+
147
+ for (int k = minLength; k < feedforwardLength; ++k) {
148
+ yn = std::fma(feedforward_[k], x[(bufferIndex - k) & mask], yn);
149
+ }
150
+ for (int k = minLength; k < feedbackLength; ++k) {
151
+ yn = std::fma(-feedback_[k], y[(bufferIndex - k) & (bufferLength - 1)], yn);
152
+ }
153
+
154
+ channelData[n] = yn;
155
+
156
+ x[bufferIndex] = channelData[n];
157
+ y[bufferIndex] = yn;
158
+
159
+ bufferIndex = (bufferIndex + 1) & (bufferLength - 1);
160
+ }
161
+ bufferIndices[c] = bufferIndex;
162
+ }
163
+ return processingBus;
164
+ }
165
+
166
+ } // namespace audioapi
@@ -0,0 +1,74 @@
1
+ /*
2
+ * Copyright 2016 The Chromium Authors. All rights reserved.
3
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
4
+ *
5
+ * Redistribution and use in source and binary forms, with or without
6
+ * modification, are permitted provided that the following conditions
7
+ * are met:
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
+ *
14
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
15
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17
+ * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
18
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
21
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
23
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24
+ */
25
+
26
+ #pragma once
27
+
28
+ #include <audioapi/core/AudioNode.h>
29
+ #include <complex>
30
+ #include <vector>
31
+
32
+ #include <memory>
33
+
34
+ namespace audioapi {
35
+
36
+ class IIRFilterNode : public AudioNode {
37
+
38
+ public:
39
+ explicit IIRFilterNode(
40
+ BaseAudioContext *context,
41
+ const std::vector<float> &feedforward,
42
+ const std::vector<float> &feedback);
43
+
44
+ void getFrequencyResponse(
45
+ const float *frequencyArray,
46
+ float *magResponseOutput,
47
+ float *phaseResponseOutput,
48
+ size_t length);
49
+
50
+ protected:
51
+ std::shared_ptr<AudioBus> processNode(
52
+ const std::shared_ptr<AudioBus> &processingBus,
53
+ int framesToProcess) override;
54
+
55
+ private:
56
+ static constexpr size_t bufferLength = 32;
57
+
58
+ std::vector<float> feedforward_;
59
+ std::vector<float> feedback_;
60
+
61
+ std::vector<std::vector<float>> xBuffers_; // xBuffers_[channel][index]
62
+ std::vector<std::vector<float>> yBuffers_;
63
+ std::vector<size_t> bufferIndices;
64
+
65
+ static std::complex<float>
66
+ evaluatePolynomial(const std::vector<float> coefficients, std::complex<float> z, int order) {
67
+ // Use Horner's method to evaluate the polynomial P(z) = sum(coef[k]*z^k, k, 0, order);
68
+ std::complex<float> result = 0;
69
+ for (int k = order; k >= 0; --k)
70
+ result = result * z + std::complex<float>(coefficients[k]);
71
+ return result;
72
+ }
73
+ };
74
+ } // namespace audioapi
@@ -29,6 +29,9 @@
29
29
  #include <audioapi/core/effects/PeriodicWave.h>
30
30
  #include <audioapi/core/utils/Constants.h>
31
31
  #include <audioapi/dsp/VectorMath.h>
32
+ #include <algorithm>
33
+ #include <memory>
34
+ #include <vector>
32
35
 
33
36
  constexpr unsigned NumberOfOctaveBands = 3;
34
37
  constexpr float CentsPerRange = 1200.0f / NumberOfOctaveBands;
@@ -38,13 +41,12 @@ constexpr float interpolate3Point = 0.16;
38
41
  namespace audioapi {
39
42
  PeriodicWave::PeriodicWave(float sampleRate, bool disableNormalization)
40
43
  : sampleRate_(sampleRate), disableNormalization_(disableNormalization) {
41
- numberOfRanges_ = static_cast<int>(round(
42
- NumberOfOctaveBands * log2f(static_cast<float>(getPeriodicWaveSize()))));
44
+ numberOfRanges_ = static_cast<int>(
45
+ round(NumberOfOctaveBands * log2f(static_cast<float>(getPeriodicWaveSize()))));
43
46
  auto nyquistFrequency = sampleRate_ / 2;
44
- lowestFundamentalFrequency_ = static_cast<float>(nyquistFrequency) /
45
- static_cast<float>(getMaxNumberOfPartials());
46
- scale_ = static_cast<float>(getPeriodicWaveSize()) /
47
- static_cast<float>(sampleRate_);
47
+ lowestFundamentalFrequency_ =
48
+ static_cast<float>(nyquistFrequency) / static_cast<float>(getMaxNumberOfPartials());
49
+ scale_ = static_cast<float>(getPeriodicWaveSize()) / static_cast<float>(sampleRate_);
48
50
  bandLimitedTables_ = new float *[numberOfRanges_];
49
51
 
50
52
  fft_ = std::make_unique<dsp::FFT>(getPeriodicWaveSize());
@@ -91,22 +93,14 @@ float PeriodicWave::getScale() const {
91
93
  return scale_;
92
94
  }
93
95
 
94
- float PeriodicWave::getSample(
95
- float fundamentalFrequency,
96
- float phase,
97
- float phaseIncrement) {
96
+ float PeriodicWave::getSample(float fundamentalFrequency, float phase, float phaseIncrement) {
98
97
  float *lowerWaveData = nullptr;
99
98
  float *higherWaveData = nullptr;
100
99
 
101
- auto interpolationFactor = getWaveDataForFundamentalFrequency(
102
- fundamentalFrequency, lowerWaveData, higherWaveData);
100
+ auto interpolationFactor =
101
+ getWaveDataForFundamentalFrequency(fundamentalFrequency, lowerWaveData, higherWaveData);
103
102
 
104
- return doInterpolation(
105
- phase,
106
- phaseIncrement,
107
- interpolationFactor,
108
- lowerWaveData,
109
- higherWaveData);
103
+ return doInterpolation(phase, phaseIncrement, interpolationFactor, lowerWaveData, higherWaveData);
110
104
  }
111
105
 
112
106
  int PeriodicWave::getMaxNumberOfPartials() const {
@@ -122,7 +116,7 @@ int PeriodicWave::getNumberOfPartialsPerRange(int rangeIndex) const {
122
116
 
123
117
  // The very top range will have all the partials culled.
124
118
  int numberOfPartials =
125
- int(static_cast<float>(getMaxNumberOfPartials()) * cullingScale);
119
+ static_cast<int>(static_cast<float>(getMaxNumberOfPartials()) * cullingScale);
126
120
 
127
121
  return numberOfPartials;
128
122
  }
@@ -230,8 +224,7 @@ void PeriodicWave::createBandLimitedTables(
230
224
  fft_->doInverseFFT(complexFFTData, bandLimitedTables_[rangeIndex]);
231
225
 
232
226
  if (!disableNormalization_ && rangeIndex == 0) {
233
- float maxValue =
234
- dsp::maximumMagnitude(bandLimitedTables_[rangeIndex], fftSize);
227
+ float maxValue = dsp::maximumMagnitude(bandLimitedTables_[rangeIndex], fftSize);
235
228
  if (maxValue != 0) {
236
229
  normalizationFactor = 1.0f / maxValue;
237
230
  }
@@ -254,20 +247,17 @@ float PeriodicWave::getWaveDataForFundamentalFrequency(
254
247
 
255
248
  // calculating lower and higher range index for the given fundamental
256
249
  // frequency.
257
- float ratio = fundamentalFrequency > 0
258
- ? fundamentalFrequency / lowestFundamentalFrequency_
259
- : 0.5f;
250
+ float ratio =
251
+ fundamentalFrequency > 0 ? fundamentalFrequency / lowestFundamentalFrequency_ : 0.5f;
260
252
  float centsAboveLowestFrequency = log2f(ratio) * 1200;
261
253
 
262
254
  float pitchRange = 1 + centsAboveLowestFrequency / CentsPerRange;
263
255
 
264
- pitchRange =
265
- std::clamp(pitchRange, 0.0f, static_cast<float>(numberOfRanges_ - 1));
256
+ pitchRange = std::clamp(pitchRange, 0.0f, static_cast<float>(numberOfRanges_ - 1));
266
257
 
267
258
  int lowerRangeIndex = static_cast<int>(pitchRange);
268
- int higherRangeIndex = lowerRangeIndex < numberOfRanges_ - 1
269
- ? lowerRangeIndex + 1
270
- : lowerRangeIndex;
259
+ int higherRangeIndex =
260
+ lowerRangeIndex < numberOfRanges_ - 1 ? lowerRangeIndex + 1 : lowerRangeIndex;
271
261
 
272
262
  // get the wave data for the lower and higher range index.
273
263
  lowerWaveData = bandLimitedTables_[lowerRangeIndex];
@@ -297,8 +287,7 @@ float PeriodicWave::doInterpolation(
297
287
 
298
288
  for (int i = 0; i < 2; i++) {
299
289
  indices[i] = (index + i) &
300
- (getPeriodicWaveSize() -
301
- 1); // more efficient alternative to % getPeriodicWaveSize()
290
+ (getPeriodicWaveSize() - 1); // more efficient alternative to % getPeriodicWaveSize()
302
291
  }
303
292
 
304
293
  auto lowerWaveDataSample1 = lowerWaveData[indices[0]];
@@ -306,10 +295,8 @@ float PeriodicWave::doInterpolation(
306
295
  auto higherWaveDataSample1 = higherWaveData[indices[0]];
307
296
  auto higherWaveDataSample2 = higherWaveData[indices[1]];
308
297
 
309
- lowerWaveDataSample =
310
- (1 - factor) * lowerWaveDataSample1 + factor * lowerWaveDataSample2;
311
- higherWaveDataSample =
312
- (1 - factor) * higherWaveDataSample1 + factor * higherWaveDataSample2;
298
+ lowerWaveDataSample = (1 - factor) * lowerWaveDataSample1 + factor * lowerWaveDataSample2;
299
+ higherWaveDataSample = (1 - factor) * higherWaveDataSample1 + factor * higherWaveDataSample2;
313
300
  } else if (phaseIncrement >= interpolate3Point) { // 3-point Lagrange
314
301
  // interpolation
315
302
  int indices[3];
@@ -33,17 +33,14 @@
33
33
 
34
34
  #include <algorithm>
35
35
  #include <cmath>
36
+ #include <complex>
36
37
  #include <memory>
37
38
  #include <vector>
38
- #include <complex>
39
39
 
40
40
  namespace audioapi {
41
41
  class PeriodicWave {
42
42
  public:
43
- explicit PeriodicWave(
44
- float sampleRate,
45
- OscillatorType type,
46
- bool disableNormalization);
43
+ explicit PeriodicWave(float sampleRate, OscillatorType type, bool disableNormalization);
47
44
  explicit PeriodicWave(
48
45
  float sampleRate,
49
46
  const std::vector<std::complex<float>> &complexData,
@@ -54,8 +51,7 @@ class PeriodicWave {
54
51
  [[nodiscard]] int getPeriodicWaveSize() const;
55
52
  [[nodiscard]] float getScale() const;
56
53
 
57
- float
58
- getSample(float fundamentalFrequency, float phase, float phaseIncrement);
54
+ float getSample(float fundamentalFrequency, float phase, float phaseIncrement);
59
55
 
60
56
  private:
61
57
  explicit PeriodicWave(float sampleRate, bool disableNormalization);
@@ -80,8 +76,7 @@ class PeriodicWave {
80
76
  // The higher frequencies are culled to band-limit the waveform.
81
77
  // For each range, the inverse FFT is performed to get the time domain
82
78
  // representation of the band-limited waveform.
83
- void
84
- createBandLimitedTables(const std::vector<std::complex<float>> &complexData, int size);
79
+ void createBandLimitedTables(const std::vector<std::complex<float>> &complexData, int size);
85
80
 
86
81
  // This function returns the interpolation factor between the lower and higher
87
82
  // range data and sets the lower and higher wave data for the given
@@ -3,13 +3,13 @@
3
3
  #include <audioapi/core/utils/Constants.h>
4
4
  #include <audioapi/utils/AudioArray.h>
5
5
  #include <audioapi/utils/AudioBus.h>
6
+ #include <memory>
6
7
 
7
8
  // https://webaudio.github.io/web-audio-api/#stereopanner-algorithm
8
9
 
9
10
  namespace audioapi {
10
11
 
11
- StereoPannerNode::StereoPannerNode(BaseAudioContext *context)
12
- : AudioNode(context) {
12
+ StereoPannerNode::StereoPannerNode(BaseAudioContext *context) : AudioNode(context) {
13
13
  channelCountMode_ = ChannelCountMode::CLAMPED_MAX;
14
14
  panParam_ = std::make_shared<AudioParam>(0.0, -1.0f, 1.0f, context);
15
15
  isInitialized_ = true;
@@ -26,9 +26,8 @@ std::shared_ptr<AudioBus> StereoPannerNode::processNode(
26
26
  double deltaTime = 1.0 / context_->getSampleRate();
27
27
 
28
28
  auto *inputLeft = processingBus->getChannelByType(AudioBus::ChannelLeft);
29
- auto panParamValues = panParam_->processARateParam(framesToProcess, time)
30
- ->getChannel(0)
31
- ->getData();
29
+ auto panParamValues =
30
+ panParam_->processARateParam(framesToProcess, time)->getChannel(0)->getData();
32
31
 
33
32
  auto *outputLeft = audioBus_->getChannelByType(AudioBus::ChannelLeft);
34
33
  auto *outputRight = audioBus_->getChannelByType(AudioBus::ChannelRight);
@@ -4,8 +4,8 @@
4
4
  #include <audioapi/core/AudioParam.h>
5
5
 
6
6
  #include <algorithm>
7
- #include <memory>
8
7
  #include <cassert>
8
+ #include <memory>
9
9
 
10
10
  namespace audioapi {
11
11
 
@@ -18,7 +18,9 @@ class StereoPannerNode : public AudioNode {
18
18
  [[nodiscard]] std::shared_ptr<AudioParam> getPanParam() const;
19
19
 
20
20
  protected:
21
- std::shared_ptr<AudioBus> processNode(const std::shared_ptr<AudioBus>& processingBus, int framesToProcess) override;
21
+ std::shared_ptr<AudioBus> processNode(
22
+ const std::shared_ptr<AudioBus> &processingBus,
23
+ int framesToProcess) override;
22
24
 
23
25
  private:
24
26
  std::shared_ptr<AudioParam> panParam_;