react-native-audio-api 0.11.0-alpha.0 → 0.11.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (522) hide show
  1. package/README.md +13 -11
  2. package/RNAudioAPI.podspec +25 -18
  3. package/android/build.gradle +41 -5
  4. package/android/src/main/cpp/audioapi/CMakeLists.txt +6 -3
  5. package/android/src/main/cpp/audioapi/android/AudioAPIModule.cpp +10 -16
  6. package/android/src/main/cpp/audioapi/android/OnLoad.cpp +1 -2
  7. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.cpp +257 -74
  8. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +33 -19
  9. package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +13 -20
  10. package/android/src/main/cpp/audioapi/android/core/utils/AndroidFileWriterBackend.h +15 -15
  11. package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.cpp +170 -0
  12. package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.h +46 -0
  13. package/android/src/main/cpp/audioapi/android/core/utils/AudioDecoder.cpp +47 -47
  14. package/android/src/main/cpp/audioapi/android/core/utils/FileOptions.cpp +83 -0
  15. package/android/src/main/cpp/audioapi/android/core/utils/FileOptions.h +22 -0
  16. package/android/src/main/cpp/audioapi/android/core/utils/MiniaudioImplementation.cpp +5 -0
  17. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.cpp +381 -302
  18. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.h +49 -91
  19. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/ptrs.hpp +48 -0
  20. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/utils.cpp +110 -0
  21. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/utils.h +34 -0
  22. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.cpp +155 -95
  23. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.h +9 -16
  24. package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +28 -1
  25. package/android/src/main/java/com/swmansion/audioapi/system/LockScreenManager.kt +28 -6
  26. package/android/src/main/java/com/swmansion/audioapi/system/MediaNotificationManager.kt +11 -0
  27. package/android/src/main/jniLibs/arm64-v8a/libavcodec.so +0 -0
  28. package/android/src/main/jniLibs/arm64-v8a/libavformat.so +0 -0
  29. package/android/src/main/jniLibs/arm64-v8a/libavutil.so +0 -0
  30. package/android/src/main/jniLibs/arm64-v8a/libswresample.so +0 -0
  31. package/android/src/main/jniLibs/armeabi-v7a/libavcodec.so +0 -0
  32. package/android/src/main/jniLibs/armeabi-v7a/libavformat.so +0 -0
  33. package/android/src/main/jniLibs/armeabi-v7a/libavutil.so +0 -0
  34. package/android/src/main/jniLibs/armeabi-v7a/libswresample.so +0 -0
  35. package/android/src/main/jniLibs/x86/libavcodec.so +0 -0
  36. package/android/src/main/jniLibs/x86/libavformat.so +0 -0
  37. package/android/src/main/jniLibs/x86/libavutil.so +0 -0
  38. package/android/src/main/jniLibs/x86/libswresample.so +0 -0
  39. package/android/src/main/jniLibs/x86_64/libavcodec.so +0 -0
  40. package/android/src/main/jniLibs/x86_64/libavformat.so +0 -0
  41. package/android/src/main/jniLibs/x86_64/libavutil.so +0 -0
  42. package/android/src/main/jniLibs/x86_64/libswresample.so +0 -0
  43. package/android/src/oldarch/NativeAudioAPIModuleSpec.java +4 -0
  44. package/common/cpp/audioapi/AudioAPIModuleInstaller.h +45 -70
  45. package/common/cpp/audioapi/HostObjects/AudioContextHostObject.cpp +20 -22
  46. package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.cpp +3 -4
  47. package/common/cpp/audioapi/HostObjects/AudioParamHostObject.cpp +6 -8
  48. package/common/cpp/audioapi/HostObjects/AudioParamHostObject.h +2 -2
  49. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +102 -63
  50. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +4 -1
  51. package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.cpp +25 -31
  52. package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.h +3 -3
  53. package/common/cpp/audioapi/HostObjects/WorkletNodeHostObject.h +1 -2
  54. package/common/cpp/audioapi/HostObjects/WorkletProcessingNodeHostObject.h +1 -2
  55. package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.cpp +10 -18
  56. package/common/cpp/audioapi/HostObjects/destinations/AudioDestinationNodeHostObject.h +2 -3
  57. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp +18 -30
  58. package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.h +1 -2
  59. package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.cpp +50 -0
  60. package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.h +20 -0
  61. package/common/cpp/audioapi/HostObjects/effects/DelayNodeHostObject.cpp +27 -0
  62. package/common/cpp/audioapi/HostObjects/effects/DelayNodeHostObject.h +21 -0
  63. package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.cpp +2 -2
  64. package/common/cpp/audioapi/HostObjects/effects/IIRFilterNodeHostObject.cpp +33 -0
  65. package/common/cpp/audioapi/HostObjects/effects/IIRFilterNodeHostObject.h +20 -0
  66. package/common/cpp/audioapi/HostObjects/effects/PeriodicWaveHostObject.h +1 -2
  67. package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.cpp +2 -2
  68. package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.h +1 -2
  69. package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.cpp +6 -12
  70. package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.h +7 -7
  71. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.cpp +109 -44
  72. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +8 -2
  73. package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.cpp +27 -22
  74. package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.h +12 -10
  75. package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.cpp +17 -22
  76. package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.h +5 -7
  77. package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.cpp +25 -11
  78. package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.h +8 -8
  79. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.cpp +19 -30
  80. package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.h +2 -4
  81. package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.cpp +7 -11
  82. package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.cpp +2 -2
  83. package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.h +1 -2
  84. package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.cpp +6 -8
  85. package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.h +1 -2
  86. package/common/cpp/audioapi/HostObjects/sources/RecorderAdapterNodeHostObject.h +4 -5
  87. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.cpp +6 -2
  88. package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.h +5 -6
  89. package/common/cpp/audioapi/HostObjects/sources/WorkletSourceNodeHostObject.h +1 -2
  90. package/common/cpp/audioapi/HostObjects/utils/AudioDecoderHostObject.cpp +39 -60
  91. package/common/cpp/audioapi/HostObjects/utils/AudioStretcherHostObject.cpp +15 -30
  92. package/common/cpp/audioapi/core/AudioContext.cpp +23 -28
  93. package/common/cpp/audioapi/core/AudioContext.h +6 -3
  94. package/common/cpp/audioapi/core/AudioNode.cpp +17 -19
  95. package/common/cpp/audioapi/core/AudioNode.h +19 -8
  96. package/common/cpp/audioapi/core/AudioParam.cpp +68 -100
  97. package/common/cpp/audioapi/core/AudioParam.h +20 -12
  98. package/common/cpp/audioapi/core/BaseAudioContext.cpp +52 -34
  99. package/common/cpp/audioapi/core/BaseAudioContext.h +26 -14
  100. package/common/cpp/audioapi/core/OfflineAudioContext.cpp +12 -17
  101. package/common/cpp/audioapi/core/OfflineAudioContext.h +10 -5
  102. package/common/cpp/audioapi/core/analysis/AnalyserNode.cpp +13 -21
  103. package/common/cpp/audioapi/core/analysis/AnalyserNode.h +8 -6
  104. package/common/cpp/audioapi/core/destinations/AudioDestinationNode.cpp +1 -0
  105. package/common/cpp/audioapi/core/destinations/AudioDestinationNode.h +5 -3
  106. package/common/cpp/audioapi/core/effects/BiquadFilterNode.cpp +84 -66
  107. package/common/cpp/audioapi/core/effects/BiquadFilterNode.h +39 -10
  108. package/common/cpp/audioapi/core/effects/ConvolverNode.cpp +201 -0
  109. package/common/cpp/audioapi/core/effects/ConvolverNode.h +64 -0
  110. package/common/cpp/audioapi/core/effects/DelayNode.cpp +101 -0
  111. package/common/cpp/audioapi/core/effects/DelayNode.h +39 -0
  112. package/common/cpp/audioapi/core/effects/GainNode.cpp +1 -0
  113. package/common/cpp/audioapi/core/effects/GainNode.h +3 -1
  114. package/common/cpp/audioapi/core/effects/IIRFilterNode.cpp +166 -0
  115. package/common/cpp/audioapi/core/effects/IIRFilterNode.h +74 -0
  116. package/common/cpp/audioapi/core/effects/PeriodicWave.cpp +22 -35
  117. package/common/cpp/audioapi/core/effects/PeriodicWave.h +4 -9
  118. package/common/cpp/audioapi/core/effects/StereoPannerNode.cpp +4 -5
  119. package/common/cpp/audioapi/core/effects/StereoPannerNode.h +4 -2
  120. package/common/cpp/audioapi/core/effects/WorkletNode.cpp +11 -13
  121. package/common/cpp/audioapi/core/effects/WorkletNode.h +15 -12
  122. package/common/cpp/audioapi/core/effects/WorkletProcessingNode.cpp +4 -4
  123. package/common/cpp/audioapi/core/effects/WorkletProcessingNode.h +15 -14
  124. package/common/cpp/audioapi/core/inputs/AudioRecorder.cpp +31 -108
  125. package/common/cpp/audioapi/core/inputs/AudioRecorder.h +46 -46
  126. package/common/cpp/audioapi/core/sources/AudioBuffer.cpp +4 -6
  127. package/common/cpp/audioapi/core/sources/AudioBuffer.h +4 -7
  128. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +48 -57
  129. package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +37 -34
  130. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +55 -17
  131. package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +35 -28
  132. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +41 -49
  133. package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +8 -6
  134. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +29 -24
  135. package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +6 -6
  136. package/common/cpp/audioapi/core/sources/ConstantSourceNode.cpp +3 -4
  137. package/common/cpp/audioapi/core/sources/ConstantSourceNode.h +3 -1
  138. package/common/cpp/audioapi/core/sources/OscillatorNode.cpp +12 -23
  139. package/common/cpp/audioapi/core/sources/OscillatorNode.h +6 -4
  140. package/common/cpp/audioapi/core/sources/RecorderAdapterNode.cpp +43 -16
  141. package/common/cpp/audioapi/core/sources/RecorderAdapterNode.h +22 -17
  142. package/common/cpp/audioapi/core/sources/StreamerNode.cpp +104 -87
  143. package/common/cpp/audioapi/core/sources/StreamerNode.h +69 -33
  144. package/common/cpp/audioapi/core/sources/WorkletSourceNode.cpp +5 -7
  145. package/common/cpp/audioapi/core/sources/WorkletSourceNode.h +15 -13
  146. package/common/cpp/audioapi/core/types/AudioFormat.h +1 -11
  147. package/common/cpp/audioapi/core/utils/AudioDecoder.h +15 -6
  148. package/common/cpp/audioapi/core/utils/AudioFileWriter.cpp +41 -0
  149. package/common/cpp/audioapi/core/utils/AudioFileWriter.h +43 -0
  150. package/common/cpp/audioapi/core/utils/AudioNodeDestructor.cpp +5 -6
  151. package/common/cpp/audioapi/core/utils/AudioNodeDestructor.h +7 -10
  152. package/common/cpp/audioapi/core/utils/AudioNodeManager.cpp +17 -19
  153. package/common/cpp/audioapi/core/utils/AudioNodeManager.h +8 -11
  154. package/common/cpp/audioapi/core/utils/AudioParamEventQueue.cpp +3 -3
  155. package/common/cpp/audioapi/core/utils/AudioParamEventQueue.h +5 -5
  156. package/common/cpp/audioapi/core/utils/AudioRecorderCallback.cpp +101 -0
  157. package/common/cpp/audioapi/core/utils/AudioRecorderCallback.h +51 -0
  158. package/common/cpp/audioapi/core/utils/AudioStretcher.cpp +6 -6
  159. package/common/cpp/audioapi/core/utils/Constants.h +7 -3
  160. package/common/cpp/audioapi/core/utils/ParamChangeEvent.cpp +1 -0
  161. package/common/cpp/audioapi/core/utils/ParamChangeEvent.h +9 -9
  162. package/common/cpp/audioapi/core/utils/worklets/SafeIncludes.h +33 -34
  163. package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.cpp +17 -19
  164. package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.h +23 -19
  165. package/common/cpp/audioapi/dsp/AudioUtils.cpp +4 -10
  166. package/common/cpp/audioapi/dsp/AudioUtils.h +1 -1
  167. package/common/cpp/audioapi/dsp/Convolver.cpp +201 -0
  168. package/common/cpp/audioapi/dsp/Convolver.h +47 -0
  169. package/common/cpp/audioapi/dsp/FFT.cpp +1 -27
  170. package/common/cpp/audioapi/dsp/FFT.h +19 -3
  171. package/common/cpp/audioapi/dsp/VectorMath.cpp +24 -58
  172. package/common/cpp/audioapi/dsp/VectorMath.h +35 -8
  173. package/common/cpp/audioapi/dsp/Windows.cpp +4 -9
  174. package/common/cpp/audioapi/dsp/Windows.h +24 -23
  175. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.cpp +12 -17
  176. package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +45 -40
  177. package/common/cpp/audioapi/events/IAudioEventHandlerRegistry.h +15 -7
  178. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/avcodec.h +4 -4
  179. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec.h +1 -1
  180. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_desc.h +1 -1
  181. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_id.h +3 -1
  182. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_par.h +2 -2
  183. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/defs.h +3 -0
  184. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/packet.h +1 -1
  185. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/smpte_436m.h +254 -0
  186. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/version.h +1 -1
  187. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/avformat.h +6 -6
  188. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version.h +2 -2
  189. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version_major.h +2 -0
  190. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avassert.h +5 -2
  191. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avutil.h +2 -2
  192. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/channel_layout.h +2 -2
  193. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/csp.h +1 -1
  194. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/dict.h +1 -1
  195. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/ffversion.h +1 -1
  196. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/film_grain_params.h +1 -1
  197. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/frame.h +1 -1
  198. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hdr_dynamic_vivid_metadata.h +3 -3
  199. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext.h +1 -1
  200. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_opencl.h +1 -1
  201. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_qsv.h +0 -1
  202. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_vulkan.h +1 -1
  203. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/iamf.h +2 -2
  204. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/lfg.h +2 -2
  205. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/log.h +2 -2
  206. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/mathematics.h +1 -1
  207. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/opt.h +4 -4
  208. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rational.h +1 -1
  209. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rc4.h +1 -1
  210. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/refstruct.h +1 -1
  211. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/spherical.h +6 -0
  212. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tdrdi.h +1 -1
  213. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tx.h +1 -1
  214. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/version.h +3 -3
  215. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/video_hint.h +1 -1
  216. package/common/cpp/audioapi/external/ffmpeg_include/libswresample/swresample.h +1 -1
  217. package/common/cpp/audioapi/external/ffmpeg_include/libswresample/version.h +1 -1
  218. package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64/libavcodec.framework/libavcodec +0 -0
  219. package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64_x86_64-simulator/libavcodec.framework/libavcodec +0 -0
  220. package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64/libavformat.framework/libavformat +0 -0
  221. package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64_x86_64-simulator/libavformat.framework/libavformat +0 -0
  222. package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64/libavutil.framework/libavutil +0 -0
  223. package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64_x86_64-simulator/libavutil.framework/libavutil +0 -0
  224. package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64/libswresample.framework/libswresample +0 -0
  225. package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64_x86_64-simulator/libswresample.framework/libswresample +0 -0
  226. package/common/cpp/audioapi/jsi/AudioArrayBuffer.h +4 -5
  227. package/common/cpp/audioapi/jsi/JsiHostObject.cpp +11 -13
  228. package/common/cpp/audioapi/jsi/JsiHostObject.h +26 -33
  229. package/common/cpp/audioapi/jsi/JsiPromise.cpp +34 -67
  230. package/common/cpp/audioapi/jsi/JsiPromise.h +65 -26
  231. package/common/cpp/audioapi/jsi/RuntimeLifecycleMonitor.cpp +7 -10
  232. package/common/cpp/audioapi/jsi/RuntimeLifecycleMonitor.h +1 -3
  233. package/common/cpp/audioapi/libs/ffmpeg/FFmpegDecoding.cpp +4 -3
  234. package/common/cpp/audioapi/libs/ffmpeg/relinking.md +24 -0
  235. package/common/cpp/audioapi/utils/AlignedAllocator.hpp +50 -0
  236. package/common/cpp/audioapi/utils/AudioArray.cpp +3 -8
  237. package/common/cpp/audioapi/utils/AudioArray.h +3 -11
  238. package/common/cpp/audioapi/utils/AudioBus.cpp +79 -149
  239. package/common/cpp/audioapi/utils/AudioBus.h +17 -14
  240. package/common/cpp/audioapi/utils/AudioFileProperties.cpp +92 -0
  241. package/common/cpp/audioapi/utils/AudioFileProperties.h +76 -0
  242. package/common/cpp/audioapi/utils/CircularAudioArray.cpp +6 -18
  243. package/common/cpp/audioapi/utils/CircularOverflowableAudioArray.cpp +6 -10
  244. package/common/cpp/audioapi/utils/CircularOverflowableAudioArray.h +2 -2
  245. package/common/cpp/audioapi/utils/Result.hpp +286 -0
  246. package/common/cpp/audioapi/utils/ThreadPool.hpp +59 -1
  247. package/common/cpp/audioapi/utils/UnitConversion.h +9 -0
  248. package/common/cpp/test/CMakeLists.txt +20 -14
  249. package/common/cpp/test/src/AudioParamTest.cpp +4 -3
  250. package/common/cpp/test/src/AudioScheduledSourceTest.cpp +113 -0
  251. package/common/cpp/test/src/ConstantSourceTest.cpp +5 -7
  252. package/common/cpp/test/src/DelayTest.cpp +108 -0
  253. package/common/cpp/test/src/GainTest.cpp +4 -5
  254. package/common/cpp/test/src/IIRFilterTest.cpp +153 -0
  255. package/common/cpp/test/src/MockAudioEventHandlerRegistry.h +19 -11
  256. package/common/cpp/test/src/OscillatorTest.cpp +2 -1
  257. package/common/cpp/test/src/StereoPannerTest.cpp +6 -9
  258. package/common/cpp/test/src/biquad/BiquadFilterChromium.cpp +372 -0
  259. package/common/cpp/test/src/biquad/BiquadFilterChromium.h +65 -0
  260. package/common/cpp/test/src/biquad/BiquadFilterTest.cpp +272 -0
  261. package/common/cpp/test/src/biquad/BiquadFilterTest.h +47 -0
  262. package/ios/audioapi/ios/AudioAPIModule.h +2 -1
  263. package/ios/audioapi/ios/AudioAPIModule.mm +44 -20
  264. package/ios/audioapi/ios/core/IOSAudioPlayer.h +2 -2
  265. package/ios/audioapi/ios/core/IOSAudioPlayer.mm +7 -6
  266. package/ios/audioapi/ios/core/IOSAudioRecorder.h +28 -11
  267. package/ios/audioapi/ios/core/IOSAudioRecorder.mm +229 -44
  268. package/ios/audioapi/ios/core/NativeAudioPlayer.m +16 -13
  269. package/ios/audioapi/ios/core/NativeAudioRecorder.h +6 -3
  270. package/ios/audioapi/ios/core/NativeAudioRecorder.m +67 -6
  271. package/ios/audioapi/ios/core/utils/AudioDecoder.mm +22 -4
  272. package/ios/audioapi/ios/core/utils/FileOptions.h +31 -0
  273. package/ios/audioapi/ios/core/utils/FileOptions.mm +177 -0
  274. package/ios/audioapi/ios/core/utils/IOSFileWriter.h +53 -0
  275. package/ios/audioapi/ios/core/utils/IOSFileWriter.mm +224 -0
  276. package/ios/audioapi/ios/core/utils/IOSRecorderCallback.h +47 -0
  277. package/ios/audioapi/ios/core/utils/IOSRecorderCallback.mm +172 -0
  278. package/ios/audioapi/ios/system/AudioEngine.h +19 -16
  279. package/ios/audioapi/ios/system/AudioEngine.mm +101 -134
  280. package/ios/audioapi/ios/system/AudioSessionManager.h +25 -11
  281. package/ios/audioapi/ios/system/AudioSessionManager.mm +273 -202
  282. package/ios/audioapi/ios/system/LockScreenManager.mm +39 -23
  283. package/ios/audioapi/ios/system/NotificationManager.mm +37 -52
  284. package/lib/commonjs/AudioAPIModule/AudioAPIModule.js +90 -0
  285. package/lib/commonjs/AudioAPIModule/AudioAPIModule.js.map +1 -0
  286. package/lib/commonjs/AudioAPIModule/globals.d.js +6 -0
  287. package/lib/commonjs/AudioAPIModule/globals.d.js.map +1 -0
  288. package/lib/commonjs/AudioAPIModule/index.js +14 -0
  289. package/lib/commonjs/AudioAPIModule/index.js.map +1 -0
  290. package/lib/commonjs/api.js +18 -12
  291. package/lib/commonjs/api.js.map +1 -1
  292. package/lib/commonjs/api.web.js +8 -0
  293. package/lib/commonjs/api.web.js.map +1 -1
  294. package/lib/commonjs/core/AudioBufferBaseSourceNode.js +3 -0
  295. package/lib/commonjs/core/AudioBufferBaseSourceNode.js.map +1 -1
  296. package/lib/commonjs/core/AudioBufferQueueSourceNode.js +5 -2
  297. package/lib/commonjs/core/AudioBufferQueueSourceNode.js.map +1 -1
  298. package/lib/commonjs/core/AudioContext.js +5 -8
  299. package/lib/commonjs/core/AudioContext.js.map +1 -1
  300. package/lib/commonjs/core/AudioNode.js +1 -1
  301. package/lib/commonjs/core/AudioNode.js.map +1 -1
  302. package/lib/commonjs/core/AudioParam.js +18 -11
  303. package/lib/commonjs/core/AudioParam.js.map +1 -1
  304. package/lib/commonjs/core/AudioRecorder.js +56 -55
  305. package/lib/commonjs/core/AudioRecorder.js.map +1 -1
  306. package/lib/commonjs/core/BaseAudioContext.js +61 -30
  307. package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
  308. package/lib/commonjs/core/ConvolverNode.js +37 -0
  309. package/lib/commonjs/core/ConvolverNode.js.map +1 -0
  310. package/lib/commonjs/core/DelayNode.js +17 -0
  311. package/lib/commonjs/core/DelayNode.js.map +1 -0
  312. package/lib/commonjs/core/IIRFilterNode.js +19 -0
  313. package/lib/commonjs/core/IIRFilterNode.js.map +1 -0
  314. package/lib/commonjs/core/OfflineAudioContext.js +3 -6
  315. package/lib/commonjs/core/OfflineAudioContext.js.map +1 -1
  316. package/lib/commonjs/plugin/withAudioAPI.js +46 -0
  317. package/lib/commonjs/plugin/withAudioAPI.js.map +1 -1
  318. package/lib/commonjs/specs/NativeAudioAPIModule.js.map +1 -1
  319. package/lib/commonjs/system/AudioManager.js +4 -7
  320. package/lib/commonjs/system/AudioManager.js.map +1 -1
  321. package/lib/commonjs/types.js +16 -23
  322. package/lib/commonjs/types.js.map +1 -1
  323. package/lib/commonjs/utils/filePresets.js +43 -0
  324. package/lib/commonjs/utils/filePresets.js.map +1 -0
  325. package/lib/commonjs/utils/index.js +12 -27
  326. package/lib/commonjs/utils/index.js.map +1 -1
  327. package/lib/commonjs/web-core/AudioContext.js +21 -1
  328. package/lib/commonjs/web-core/AudioContext.js.map +1 -1
  329. package/lib/commonjs/web-core/ConvolverNode.js +40 -0
  330. package/lib/commonjs/web-core/ConvolverNode.js.map +1 -0
  331. package/lib/commonjs/web-core/ConvolverNodeOptions.js +6 -0
  332. package/lib/commonjs/web-core/ConvolverNodeOptions.js.map +1 -0
  333. package/lib/commonjs/web-core/DelayNode.js +17 -0
  334. package/lib/commonjs/web-core/DelayNode.js.map +1 -0
  335. package/lib/commonjs/web-core/IIRFilterNode.js +19 -0
  336. package/lib/commonjs/web-core/IIRFilterNode.js.map +1 -0
  337. package/lib/commonjs/web-core/OfflineAudioContext.js +20 -0
  338. package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
  339. package/lib/module/AudioAPIModule/AudioAPIModule.js +87 -0
  340. package/lib/module/AudioAPIModule/AudioAPIModule.js.map +1 -0
  341. package/lib/module/AudioAPIModule/globals.d.js +4 -0
  342. package/lib/module/AudioAPIModule/globals.d.js.map +1 -0
  343. package/lib/module/AudioAPIModule/index.js +4 -0
  344. package/lib/module/AudioAPIModule/index.js.map +1 -0
  345. package/lib/module/api.js +3 -12
  346. package/lib/module/api.js.map +1 -1
  347. package/lib/module/api.web.js +1 -0
  348. package/lib/module/api.web.js.map +1 -1
  349. package/lib/module/core/AudioBufferBaseSourceNode.js +3 -0
  350. package/lib/module/core/AudioBufferBaseSourceNode.js.map +1 -1
  351. package/lib/module/core/AudioBufferQueueSourceNode.js +5 -2
  352. package/lib/module/core/AudioBufferQueueSourceNode.js.map +1 -1
  353. package/lib/module/core/AudioContext.js +5 -8
  354. package/lib/module/core/AudioContext.js.map +1 -1
  355. package/lib/module/core/AudioNode.js +1 -1
  356. package/lib/module/core/AudioNode.js.map +1 -1
  357. package/lib/module/core/AudioParam.js +18 -11
  358. package/lib/module/core/AudioParam.js.map +1 -1
  359. package/lib/module/core/AudioRecorder.js +57 -56
  360. package/lib/module/core/AudioRecorder.js.map +1 -1
  361. package/lib/module/core/BaseAudioContext.js +63 -32
  362. package/lib/module/core/BaseAudioContext.js.map +1 -1
  363. package/lib/module/core/ConvolverNode.js +31 -0
  364. package/lib/module/core/ConvolverNode.js.map +1 -0
  365. package/lib/module/core/DelayNode.js +11 -0
  366. package/lib/module/core/DelayNode.js.map +1 -0
  367. package/lib/module/core/IIRFilterNode.js +13 -0
  368. package/lib/module/core/IIRFilterNode.js.map +1 -0
  369. package/lib/module/core/OfflineAudioContext.js +3 -6
  370. package/lib/module/core/OfflineAudioContext.js.map +1 -1
  371. package/lib/module/plugin/withAudioAPI.js +47 -1
  372. package/lib/module/plugin/withAudioAPI.js.map +1 -1
  373. package/lib/module/specs/NativeAudioAPIModule.js.map +1 -1
  374. package/lib/module/system/AudioManager.js +4 -7
  375. package/lib/module/system/AudioManager.js.map +1 -1
  376. package/lib/module/types.js +15 -22
  377. package/lib/module/types.js.map +1 -1
  378. package/lib/module/utils/filePresets.js +39 -0
  379. package/lib/module/utils/filePresets.js.map +1 -0
  380. package/lib/module/utils/index.js +10 -10
  381. package/lib/module/utils/index.js.map +1 -1
  382. package/lib/module/web-core/AudioContext.js +21 -1
  383. package/lib/module/web-core/AudioContext.js.map +1 -1
  384. package/lib/module/web-core/ConvolverNode.js +34 -0
  385. package/lib/module/web-core/ConvolverNode.js.map +1 -0
  386. package/lib/module/web-core/ConvolverNodeOptions.js +4 -0
  387. package/lib/module/web-core/ConvolverNodeOptions.js.map +1 -0
  388. package/lib/module/web-core/DelayNode.js +11 -0
  389. package/lib/module/web-core/DelayNode.js.map +1 -0
  390. package/lib/module/web-core/IIRFilterNode.js +13 -0
  391. package/lib/module/web-core/IIRFilterNode.js.map +1 -0
  392. package/lib/module/web-core/OfflineAudioContext.js +20 -0
  393. package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
  394. package/lib/typescript/AudioAPIModule/AudioAPIModule.d.ts +36 -0
  395. package/lib/typescript/AudioAPIModule/AudioAPIModule.d.ts.map +1 -0
  396. package/lib/typescript/AudioAPIModule/index.d.ts +2 -0
  397. package/lib/typescript/AudioAPIModule/index.d.ts.map +1 -0
  398. package/lib/typescript/api.d.ts +3 -9
  399. package/lib/typescript/api.d.ts.map +1 -1
  400. package/lib/typescript/api.web.d.ts +1 -0
  401. package/lib/typescript/api.web.d.ts.map +1 -1
  402. package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts +1 -0
  403. package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts.map +1 -1
  404. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts +1 -1
  405. package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts.map +1 -1
  406. package/lib/typescript/core/AudioContext.d.ts +1 -1
  407. package/lib/typescript/core/AudioContext.d.ts.map +1 -1
  408. package/lib/typescript/core/AudioNode.d.ts +2 -1
  409. package/lib/typescript/core/AudioNode.d.ts.map +1 -1
  410. package/lib/typescript/core/AudioParam.d.ts.map +1 -1
  411. package/lib/typescript/core/AudioRecorder.d.ts +16 -6
  412. package/lib/typescript/core/AudioRecorder.d.ts.map +1 -1
  413. package/lib/typescript/core/BaseAudioContext.d.ts +9 -3
  414. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
  415. package/lib/typescript/core/ConvolverNode.d.ts +12 -0
  416. package/lib/typescript/core/ConvolverNode.d.ts.map +1 -0
  417. package/lib/typescript/core/DelayNode.d.ts +9 -0
  418. package/lib/typescript/core/DelayNode.d.ts.map +1 -0
  419. package/lib/typescript/core/IIRFilterNode.d.ts +5 -0
  420. package/lib/typescript/core/IIRFilterNode.d.ts.map +1 -0
  421. package/lib/typescript/core/OfflineAudioContext.d.ts +1 -1
  422. package/lib/typescript/core/OfflineAudioContext.d.ts.map +1 -1
  423. package/lib/typescript/events/types.d.ts +4 -0
  424. package/lib/typescript/events/types.d.ts.map +1 -1
  425. package/lib/typescript/interfaces.d.ts +36 -34
  426. package/lib/typescript/interfaces.d.ts.map +1 -1
  427. package/lib/typescript/plugin/withAudioAPI.d.ts +1 -0
  428. package/lib/typescript/plugin/withAudioAPI.d.ts.map +1 -1
  429. package/lib/typescript/specs/NativeAudioAPIModule.d.ts +2 -1
  430. package/lib/typescript/specs/NativeAudioAPIModule.d.ts.map +1 -1
  431. package/lib/typescript/system/AudioManager.d.ts +3 -2
  432. package/lib/typescript/system/AudioManager.d.ts.map +1 -1
  433. package/lib/typescript/types.d.ts +43 -30
  434. package/lib/typescript/types.d.ts.map +1 -1
  435. package/lib/typescript/utils/filePresets.d.ts +9 -0
  436. package/lib/typescript/utils/filePresets.d.ts.map +1 -0
  437. package/lib/typescript/utils/index.d.ts +1 -8
  438. package/lib/typescript/utils/index.d.ts.map +1 -1
  439. package/lib/typescript/web-core/AudioContext.d.ts +9 -2
  440. package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
  441. package/lib/typescript/web-core/BaseAudioContext.d.ts +7 -1
  442. package/lib/typescript/web-core/BaseAudioContext.d.ts.map +1 -1
  443. package/lib/typescript/web-core/ConvolverNode.d.ts +11 -0
  444. package/lib/typescript/web-core/ConvolverNode.d.ts.map +1 -0
  445. package/lib/typescript/web-core/ConvolverNodeOptions.d.ts +6 -0
  446. package/lib/typescript/web-core/ConvolverNodeOptions.d.ts.map +1 -0
  447. package/lib/typescript/web-core/DelayNode.d.ts +8 -0
  448. package/lib/typescript/web-core/DelayNode.d.ts.map +1 -0
  449. package/lib/typescript/web-core/IIRFilterNode.d.ts +5 -0
  450. package/lib/typescript/web-core/IIRFilterNode.d.ts.map +1 -0
  451. package/lib/typescript/web-core/OfflineAudioContext.d.ts +8 -1
  452. package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
  453. package/package.json +11 -4
  454. package/scripts/download-prebuilt-binaries.sh +61 -0
  455. package/scripts/rnaa_utils.rb +8 -0
  456. package/scripts/validate-worklets-version.js +27 -0
  457. package/src/AudioAPIModule/AudioAPIModule.ts +122 -0
  458. package/src/AudioAPIModule/globals.d.ts +33 -0
  459. package/src/AudioAPIModule/index.ts +1 -0
  460. package/src/api.ts +4 -52
  461. package/src/api.web.ts +1 -0
  462. package/src/core/AudioBufferBaseSourceNode.ts +8 -0
  463. package/src/core/AudioBufferQueueSourceNode.ts +8 -2
  464. package/src/core/AudioContext.ts +5 -8
  465. package/src/core/AudioNode.ts +4 -3
  466. package/src/core/AudioParam.ts +18 -11
  467. package/src/core/AudioRecorder.ts +86 -84
  468. package/src/core/BaseAudioContext.ts +120 -54
  469. package/src/core/ConvolverNode.ts +35 -0
  470. package/src/core/DelayNode.ts +13 -0
  471. package/src/core/IIRFilterNode.ts +25 -0
  472. package/src/core/OfflineAudioContext.ts +4 -7
  473. package/src/events/types.ts +5 -0
  474. package/src/interfaces.ts +55 -34
  475. package/src/plugin/withAudioAPI.ts +61 -0
  476. package/src/specs/NativeAudioAPIModule.ts +3 -2
  477. package/src/system/AudioManager.ts +13 -19
  478. package/src/types.ts +47 -32
  479. package/src/utils/filePresets.ts +47 -0
  480. package/src/utils/index.ts +13 -19
  481. package/src/web-core/AudioContext.tsx +40 -1
  482. package/src/web-core/BaseAudioContext.tsx +11 -1
  483. package/src/web-core/ConvolverNode.tsx +43 -0
  484. package/src/web-core/ConvolverNodeOptions.tsx +6 -0
  485. package/src/web-core/DelayNode.tsx +12 -0
  486. package/src/web-core/IIRFilterNode.tsx +25 -0
  487. package/src/web-core/OfflineAudioContext.tsx +39 -0
  488. package/android/src/main/cpp/audioapi/android/core/utils/FileUtils.h +0 -34
  489. package/android/src/main/cpp/audioapi/android/core/utils/FileUtilts.cpp +0 -133
  490. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.cpp +0 -154
  491. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.h +0 -41
  492. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.cpp +0 -47
  493. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.h +0 -28
  494. package/common/cpp/audioapi/libs/ffmpeg/INSTRUCTIONS.md +0 -32
  495. package/common/cpp/audioapi/libs/ffmpeg/create_xcframework.sh +0 -111
  496. package/common/cpp/audioapi/libs/ffmpeg/ffmpeg_setup.sh +0 -391
  497. package/ios/audioapi/ios/core/IOSAudioFileOptions.h +0 -35
  498. package/ios/audioapi/ios/core/IOSAudioFileOptions.mm +0 -135
  499. package/ios/audioapi/ios/core/IOSAudioFileWriter.h +0 -38
  500. package/ios/audioapi/ios/core/IOSAudioFileWriter.mm +0 -187
  501. package/lib/commonjs/utils/bitEnums.js +0 -33
  502. package/lib/commonjs/utils/bitEnums.js.map +0 -1
  503. package/lib/module/utils/bitEnums.js +0 -27
  504. package/lib/module/utils/bitEnums.js.map +0 -1
  505. package/lib/typescript/utils/bitEnums.d.ts +0 -4
  506. package/lib/typescript/utils/bitEnums.d.ts.map +0 -1
  507. package/metro-config/index.d.ts +0 -5
  508. package/metro-config/index.js +0 -41
  509. package/metro-config/tsconfig.json +0 -3
  510. package/src/utils/bitEnums.ts +0 -51
  511. package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/Info.plist +5 -5
  512. package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64/libavcodec.framework/Info.plist +0 -0
  513. package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64_x86_64-simulator/libavcodec.framework/Info.plist +0 -0
  514. package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/Info.plist +0 -0
  515. package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64/libavformat.framework/Info.plist +0 -0
  516. package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64_x86_64-simulator/libavformat.framework/Info.plist +0 -0
  517. package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/Info.plist +5 -5
  518. package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64/libavutil.framework/Info.plist +0 -0
  519. package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64_x86_64-simulator/libavutil.framework/Info.plist +0 -0
  520. package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/Info.plist +5 -5
  521. /package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64/libswresample.framework/Info.plist +0 -0
  522. /package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64_x86_64-simulator/libswresample.framework/Info.plist +0 -0
@@ -0,0 +1,170 @@
1
+ #include <android/log.h>
2
+ #include <audioapi/HostObjects/sources/AudioBufferHostObject.h>
3
+ #include <audioapi/android/core/utils/AndroidRecorderCallback.h>
4
+ #include <audioapi/events/AudioEventHandlerRegistry.h>
5
+ #include <audioapi/libs/miniaudio/miniaudio.h>
6
+ #include <audioapi/utils/AudioArray.h>
7
+ #include <audioapi/utils/AudioBus.h>
8
+ #include <audioapi/utils/CircularAudioArray.h>
9
+
10
+ #include <algorithm>
11
+ #include <memory>
12
+ #include <string>
13
+ #include <unordered_map>
14
+
15
+ namespace audioapi {
16
+
17
+ /// @brief Constructor
18
+ /// Allocates circular buffer (as every property to do so is already known at this point).
19
+ /// @param audioEventHandlerRegistry The audio event handler registry
20
+ /// @param sampleRate The user desired sample rate
21
+ /// @param bufferLength The user desired buffer length
22
+ /// @param channelCount The user desired channel count
23
+ /// @param callbackId The callback identifier
24
+ AndroidRecorderCallback::AndroidRecorderCallback(
25
+ const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
26
+ float sampleRate,
27
+ size_t bufferLength,
28
+ int channelCount,
29
+ uint64_t callbackId)
30
+ : AudioRecorderCallback(
31
+ audioEventHandlerRegistry,
32
+ sampleRate,
33
+ bufferLength,
34
+ channelCount,
35
+ callbackId) {}
36
+
37
+ AndroidRecorderCallback::~AndroidRecorderCallback() {
38
+ if (converter_ != nullptr) {
39
+ ma_data_converter_uninit(converter_.get(), NULL);
40
+ converter_.reset();
41
+ }
42
+
43
+ if (processingBuffer_ != nullptr) {
44
+ ma_free(processingBuffer_, NULL);
45
+ processingBuffer_ = nullptr;
46
+ processingBufferLength_ = 0;
47
+ }
48
+
49
+ for (size_t i = 0; i < circularBus_.size(); ++i) {
50
+ circularBus_[i]->zero();
51
+ }
52
+ }
53
+
54
+ /// @brief Prepares the recorder callback by initializing the data converter and allocating necessary buffers.
55
+ /// @param streamSampleRate The sample rate of the incoming audio stream.
56
+ /// @param streamChannelCount The channel count of the incoming audio stream.
57
+ /// @param maxInputBufferLength The maximum buffer length of the incoming audio stream.
58
+ Result<NoneType, std::string> AndroidRecorderCallback::prepare(
59
+ float streamSampleRate,
60
+ int32_t streamChannelCount,
61
+ size_t maxInputBufferLength) {
62
+ ma_result result;
63
+
64
+ streamSampleRate_ = streamSampleRate;
65
+ streamChannelCount_ = streamChannelCount;
66
+ maxInputBufferLength_ = maxInputBufferLength;
67
+
68
+ ma_data_converter_config converterConfig = ma_data_converter_config_init(
69
+ ma_format_f32,
70
+ ma_format_f32,
71
+ streamChannelCount_,
72
+ channelCount_,
73
+ streamSampleRate_,
74
+ static_cast<int32_t>(sampleRate_));
75
+
76
+ converter_ = std::make_unique<ma_data_converter>();
77
+ result = ma_data_converter_init(&converterConfig, NULL, converter_.get());
78
+
79
+ if (result != MA_SUCCESS) {
80
+ return Result<NoneType, std::string>::Err(
81
+ "Failed to initialize miniaudio data converter" +
82
+ std::string(ma_result_description(result)));
83
+ }
84
+
85
+ if (streamSampleRate_ <= 0 || streamChannelCount_ <= 0) {
86
+ return Result<NoneType, std::string>::Err("Invalid stream sample rate or channel count");
87
+ }
88
+
89
+ if (sampleRate_ <= 0 || channelCount_ <= 0) {
90
+ return Result<NoneType, std::string>::Err("Invalid callback sample rate or channel count");
91
+ }
92
+
93
+ ma_data_converter_get_expected_output_frame_count(
94
+ converter_.get(), maxInputBufferLength_, &processingBufferLength_);
95
+
96
+ processingBufferLength_ = std::max(processingBufferLength_, (ma_uint64)maxInputBufferLength_);
97
+
98
+ deinterleavingArray_ = std::make_shared<AudioArray>(processingBufferLength_);
99
+ processingBuffer_ = ma_malloc(
100
+ processingBufferLength_ * channelCount_ * ma_get_bytes_per_sample(ma_format_f32), NULL);
101
+
102
+ return Result<NoneType, std::string>::Ok(None);
103
+ }
104
+
105
+ void AndroidRecorderCallback::cleanup() {
106
+ emitAudioData(true);
107
+
108
+ if (converter_ != nullptr) {
109
+ ma_data_converter_uninit(converter_.get(), NULL);
110
+ converter_.reset();
111
+ }
112
+
113
+ if (processingBuffer_ != nullptr) {
114
+ ma_free(processingBuffer_, NULL);
115
+ processingBuffer_ = nullptr;
116
+ processingBufferLength_ = 0;
117
+ }
118
+
119
+ for (size_t i = 0; i < circularBus_.size(); ++i) {
120
+ circularBus_[i]->zero();
121
+ }
122
+ }
123
+
124
+ /// @brief Receives audio data from the recorder, processes it (resampling and deinterleaving if necessary),
125
+ /// and pushes it into the circular buffer.
126
+ /// @param data Pointer to the incoming audio data.
127
+ /// @param numFrames Number of frames in the incoming audio data.
128
+ void AndroidRecorderCallback::receiveAudioData(void *data, int numFrames) {
129
+ if (!isInitialized_.load(std::memory_order_acquire)) {
130
+ return;
131
+ }
132
+
133
+ ma_uint64 inputFrameCount = numFrames;
134
+ ma_uint64 outputFrameCount = 0;
135
+
136
+ if (static_cast<float>(streamSampleRate_) == sampleRate_ &&
137
+ streamChannelCount_ == channelCount_) {
138
+ deinterleaveAndPushAudioData(data, numFrames);
139
+ emitAudioData();
140
+ return;
141
+ }
142
+
143
+ ma_data_converter_get_expected_output_frame_count(
144
+ converter_.get(), inputFrameCount, &outputFrameCount);
145
+
146
+ ma_data_converter_process_pcm_frames(
147
+ converter_.get(), data, &inputFrameCount, processingBuffer_, &outputFrameCount);
148
+
149
+ deinterleaveAndPushAudioData(processingBuffer_, static_cast<int>(outputFrameCount));
150
+ emitAudioData();
151
+ }
152
+
153
+ /// @brief Deinterleaves the audio data and pushes it into the circular buffer.
154
+ /// @param data Pointer to the interleaved audio data.
155
+ /// @param numFrames Number of frames in the audio data.
156
+ void AndroidRecorderCallback::deinterleaveAndPushAudioData(void *data, int numFrames) {
157
+ auto *inputData = static_cast<float *>(data);
158
+
159
+ for (int channel = 0; channel < channelCount_; ++channel) {
160
+ float *channelData = deinterleavingArray_->getData();
161
+
162
+ for (int frame = 0; frame < numFrames; ++frame) {
163
+ channelData[frame] = inputData[frame * channelCount_ + channel];
164
+ }
165
+
166
+ circularBus_[channel]->push_back(channelData, numFrames);
167
+ }
168
+ }
169
+
170
+ } // namespace audioapi
@@ -0,0 +1,46 @@
1
+ #pragma once
2
+
3
+
4
+ #include <audioapi/libs/miniaudio/miniaudio.h>
5
+ #include <audioapi/core/utils/AudioRecorderCallback.h>
6
+ #include <memory>
7
+ #include <vector>
8
+ #include <string>
9
+
10
+ namespace audioapi {
11
+
12
+ class AudioBus;
13
+ class AudioArray;
14
+ class CircularAudioArray;
15
+ class AudioEventHandlerRegistry;
16
+
17
+ class AndroidRecorderCallback : public AudioRecorderCallback {
18
+ public:
19
+ AndroidRecorderCallback(
20
+ const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
21
+ float sampleRate,
22
+ size_t bufferLength,
23
+ int channelCount,
24
+ uint64_t callbackId);
25
+ ~AndroidRecorderCallback();
26
+
27
+ Result<NoneType, std::string> prepare(float streamSampleRate, int streamChannelCount, size_t maxInputBufferLength);
28
+ void cleanup() override;
29
+
30
+ void receiveAudioData(void *data, int numFrames);
31
+
32
+ protected:
33
+ float streamSampleRate_{0.0};
34
+ int streamChannelCount_{0};
35
+ size_t maxInputBufferLength_{0};
36
+
37
+ void *processingBuffer_{nullptr};
38
+ ma_uint64 processingBufferLength_{0};
39
+ std::unique_ptr<ma_data_converter> converter_{nullptr};
40
+
41
+ std::shared_ptr<AudioArray> deinterleavingArray_;
42
+
43
+ void deinterleaveAndPushAudioData(void *data, int numFrames);
44
+ };
45
+
46
+ } // namespace audioapi
@@ -11,17 +11,21 @@
11
11
 
12
12
  #ifndef AUDIO_API_TEST_SUITE
13
13
  #include <android/log.h>
14
+ #endif // AUDIO_API_TEST_SUITE
15
+ #if !RN_AUDIO_API_FFMPEG_DISABLED
14
16
  #include <audioapi/libs/ffmpeg/FFmpegDecoding.h>
15
- #endif
17
+ #endif // RN_AUDIO_API_FFMPEG_DISABLED
18
+
19
+ #include <memory>
20
+ #include <string>
21
+ #include <vector>
16
22
 
17
23
  namespace audioapi {
18
24
 
19
25
  // Decoding audio in fixed-size chunks because total frame count can't be
20
26
  // determined in advance. Note: ma_decoder_get_length_in_pcm_frames() always
21
27
  // returns 0 for Vorbis decoders.
22
- std::vector<float> AudioDecoder::readAllPcmFrames(
23
- ma_decoder &decoder,
24
- int outputChannels) {
28
+ std::vector<float> AudioDecoder::readAllPcmFrames(ma_decoder &decoder, int outputChannels) {
25
29
  std::vector<float> buffer;
26
30
  std::vector<float> temp(CHUNK_SIZE * outputChannels);
27
31
  ma_uint64 outFramesRead = 0;
@@ -29,16 +33,12 @@ std::vector<float> AudioDecoder::readAllPcmFrames(
29
33
  #ifndef AUDIO_API_TEST_SUITE
30
34
  while (true) {
31
35
  ma_uint64 tempFramesDecoded = 0;
32
- ma_decoder_read_pcm_frames(
33
- &decoder, temp.data(), CHUNK_SIZE, &tempFramesDecoded);
36
+ ma_decoder_read_pcm_frames(&decoder, temp.data(), CHUNK_SIZE, &tempFramesDecoded);
34
37
  if (tempFramesDecoded == 0) {
35
38
  break;
36
39
  }
37
40
 
38
- buffer.insert(
39
- buffer.end(),
40
- temp.data(),
41
- temp.data() + tempFramesDecoded * outputChannels);
41
+ buffer.insert(buffer.end(), temp.data(), temp.data() + tempFramesDecoded * outputChannels);
42
42
  outFramesRead += tempFramesDecoded;
43
43
  }
44
44
 
@@ -58,8 +58,7 @@ std::shared_ptr<AudioBuffer> AudioDecoder::makeAudioBufferFromFloatBuffer(
58
58
  }
59
59
 
60
60
  auto outputFrames = buffer.size() / outputChannels;
61
- auto audioBus = std::make_shared<AudioBus>(
62
- outputFrames, outputChannels, outputSampleRate);
61
+ auto audioBus = std::make_shared<AudioBus>(outputFrames, outputChannels, outputSampleRate);
63
62
 
64
63
  for (int ch = 0; ch < outputChannels; ++ch) {
65
64
  auto channelData = audioBus->getChannel(ch)->getData();
@@ -75,29 +74,37 @@ std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithFilePath(
75
74
  float sampleRate) {
76
75
  #ifndef AUDIO_API_TEST_SUITE
77
76
  if (AudioDecoder::pathHasExtension(path, {".mp4", ".m4a", ".aac"})) {
78
- auto buffer =
79
- ffmpegdecoder::decodeWithFilePath(path, static_cast<int>(sampleRate));
77
+ #if !RN_AUDIO_API_FFMPEG_DISABLED
78
+ auto buffer = ffmpegdecoder::decodeWithFilePath(path, static_cast<int>(sampleRate));
80
79
  if (buffer == nullptr) {
81
80
  __android_log_print(
82
- ANDROID_LOG_ERROR,
83
- "AudioDecoder",
84
- "Failed to decode with FFmpeg: %s",
85
- path.c_str());
81
+ ANDROID_LOG_ERROR, "AudioDecoder", "Failed to decode with FFmpeg: %s", path.c_str());
86
82
  return nullptr;
87
83
  }
88
84
  return buffer;
85
+ #else
86
+ __android_log_print(
87
+ ANDROID_LOG_ERROR,
88
+ "AudioDecoder",
89
+ "FFmpeg is disabled, cannot decode file: %s",
90
+ path.c_str());
91
+ return nullptr;
92
+ #endif // RN_AUDIO_API_FFMPEG_DISABLED
89
93
  }
90
94
  ma_decoder decoder;
91
- ma_decoder_config config =
92
- ma_decoder_config_init(ma_format_f32, 0, static_cast<int>(sampleRate));
95
+ ma_decoder_config config = ma_decoder_config_init(ma_format_f32, 0, static_cast<int>(sampleRate));
93
96
  ma_decoding_backend_vtable *customBackends[] = {
94
97
  ma_decoding_backend_libvorbis, ma_decoding_backend_libopus};
95
98
 
96
99
  config.ppCustomBackendVTables = customBackends;
97
- config.customBackendCount =
98
- sizeof(customBackends) / sizeof(customBackends[0]);
100
+ config.customBackendCount = sizeof(customBackends) / sizeof(customBackends[0]);
99
101
 
100
102
  if (ma_decoder_init_file(path.c_str(), &config, &decoder) != MA_SUCCESS) {
103
+ __android_log_print(
104
+ ANDROID_LOG_ERROR,
105
+ "AudioDecoder",
106
+ "Failed to initialize decoder for file: %s",
107
+ path.c_str());
101
108
  ma_decoder_uninit(&decoder);
102
109
  return nullptr;
103
110
  }
@@ -107,46 +114,42 @@ std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithFilePath(
107
114
 
108
115
  std::vector<float> buffer = readAllPcmFrames(decoder, outputChannels);
109
116
  ma_decoder_uninit(&decoder);
110
- return makeAudioBufferFromFloatBuffer(
111
- buffer, outputSampleRate, outputChannels);
117
+ return makeAudioBufferFromFloatBuffer(buffer, outputSampleRate, outputChannels);
112
118
  #else
113
119
  return nullptr;
114
120
  #endif
115
121
  }
116
122
 
117
- std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithMemoryBlock(
118
- const void *data,
119
- size_t size,
120
- float sampleRate) {
123
+ std::shared_ptr<AudioBuffer>
124
+ AudioDecoder::decodeWithMemoryBlock(const void *data, size_t size, float sampleRate) {
121
125
  #ifndef AUDIO_API_TEST_SUITE
122
126
  const AudioFormat format = AudioDecoder::detectAudioFormat(data, size);
123
- if (format == AudioFormat::MP4 || format == AudioFormat::M4A ||
124
- format == AudioFormat::AAC) {
125
- auto buffer = ffmpegdecoder::decodeWithMemoryBlock(
126
- data, size, static_cast<int>(sampleRate));
127
+ if (format == AudioFormat::MP4 || format == AudioFormat::M4A || format == AudioFormat::AAC) {
128
+ #if !RN_AUDIO_API_FFMPEG_DISABLED
129
+ auto buffer = ffmpegdecoder::decodeWithMemoryBlock(data, size, static_cast<int>(sampleRate));
127
130
  if (buffer == nullptr) {
128
- __android_log_print(
129
- ANDROID_LOG_ERROR, "AudioDecoder", "Failed to decode with FFmpeg");
131
+ __android_log_print(ANDROID_LOG_ERROR, "AudioDecoder", "Failed to decode with FFmpeg");
130
132
  return nullptr;
131
133
  }
132
134
  return buffer;
135
+ #else
136
+ __android_log_print(
137
+ ANDROID_LOG_ERROR, "AudioDecoder", "FFmpeg is disabled, cannot decode memory block");
138
+ return nullptr;
139
+ #endif // RN_AUDIO_API_FFMPEG_DISABLED
133
140
  }
134
141
  ma_decoder decoder;
135
- ma_decoder_config config =
136
- ma_decoder_config_init(ma_format_f32, 0, static_cast<int>(sampleRate));
142
+ ma_decoder_config config = ma_decoder_config_init(ma_format_f32, 0, static_cast<int>(sampleRate));
137
143
 
138
144
  ma_decoding_backend_vtable *customBackends[] = {
139
145
  ma_decoding_backend_libvorbis, ma_decoding_backend_libopus};
140
146
 
141
147
  config.ppCustomBackendVTables = customBackends;
142
- config.customBackendCount =
143
- sizeof(customBackends) / sizeof(customBackends[0]);
148
+ config.customBackendCount = sizeof(customBackends) / sizeof(customBackends[0]);
144
149
 
145
150
  if (ma_decoder_init_memory(data, size, &config, &decoder) != MA_SUCCESS) {
146
151
  __android_log_print(
147
- ANDROID_LOG_ERROR,
148
- "AudioDecoder",
149
- "Failed to initialize decoder for memory block");
152
+ ANDROID_LOG_ERROR, "AudioDecoder", "Failed to initialize decoder for memory block");
150
153
  ma_decoder_uninit(&decoder);
151
154
  return nullptr;
152
155
  }
@@ -156,8 +159,7 @@ std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithMemoryBlock(
156
159
 
157
160
  std::vector<float> buffer = readAllPcmFrames(decoder, outputChannels);
158
161
  ma_decoder_uninit(&decoder);
159
- return makeAudioBufferFromFloatBuffer(
160
- buffer, outputSampleRate, outputChannels);
162
+ return makeAudioBufferFromFloatBuffer(buffer, outputSampleRate, outputChannels);
161
163
  #else
162
164
  return nullptr;
163
165
  #endif
@@ -170,11 +172,9 @@ std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithPCMInBase64(
170
172
  bool interleaved) {
171
173
  auto decodedData = base64_decode(data, false);
172
174
  const auto uint8Data = reinterpret_cast<uint8_t *>(decodedData.data());
173
- size_t numFramesDecoded =
174
- decodedData.size() / (inputChannelCount * sizeof(int16_t));
175
+ size_t numFramesDecoded = decodedData.size() / (inputChannelCount * sizeof(int16_t));
175
176
 
176
- auto audioBus = std::make_shared<AudioBus>(
177
- numFramesDecoded, inputChannelCount, inputSampleRate);
177
+ auto audioBus = std::make_shared<AudioBus>(numFramesDecoded, inputChannelCount, inputSampleRate);
178
178
 
179
179
  for (int ch = 0; ch < inputChannelCount; ++ch) {
180
180
  auto channelData = audioBus->getChannel(ch)->getData();
@@ -0,0 +1,83 @@
1
+ #include <android/log.h>
2
+ #include <audioapi/android/core/utils/FileOptions.h>
3
+ #include <audioapi/android/system/NativeFileInfo.hpp>
4
+ #include <audioapi/utils/AudioFileProperties.h>
5
+ #include <chrono>
6
+ #include <filesystem>
7
+ #include <format>
8
+ #include <iostream>
9
+ #include <memory>
10
+ #include <string>
11
+
12
+ namespace audioapi::android::fileoptions {
13
+
14
+ Result<NoneType, std::string> createDirectoryIfNotExists(const std::string &directoryPath) {
15
+ std::error_code ec;
16
+
17
+ if (std::filesystem::exists(directoryPath, ec)) {
18
+ return Result<NoneType, std::string>::Ok(None);
19
+ }
20
+
21
+ bool created = std::filesystem::create_directories(directoryPath, ec);
22
+
23
+ if (!created) {
24
+ return Result<NoneType, std::string>::Err("Failed to create directory: " + directoryPath);
25
+ }
26
+
27
+ if (ec) {
28
+ return Result<NoneType, std::string>::Err(ec.message());
29
+ }
30
+
31
+ return Result<NoneType, std::string>::Ok(None);
32
+ }
33
+
34
+ std::string getTimestampString() {
35
+ auto tNow = std::chrono::system_clock::now();
36
+ return std::format("{:%Y%m%d_%H%M%S}", std::chrono::floor<std::chrono::seconds>(tNow));
37
+ }
38
+
39
+ std::string getDirectory(const std::shared_ptr<AudioFileProperties> &properties) {
40
+ switch (properties->directory) {
41
+ case AudioFileProperties::FileDirectory::Document:
42
+ return NativeFileInfo::getFilesDir();
43
+ case AudioFileProperties::FileDirectory::Cache:
44
+ return NativeFileInfo::getCacheDir();
45
+ default:
46
+ return NativeFileInfo::getCacheDir();
47
+ }
48
+ }
49
+
50
+ std::string getFileExtension(const std::shared_ptr<AudioFileProperties> &properties) {
51
+ switch (properties->format) {
52
+ case AudioFileProperties::Format::WAV:
53
+ return "wav";
54
+ case AudioFileProperties::Format::CAF:
55
+ return "caf";
56
+ case AudioFileProperties::Format::M4A:
57
+ return "m4a";
58
+ case AudioFileProperties::Format::FLAC:
59
+ return "flac";
60
+ default:
61
+ return "m4a";
62
+ }
63
+ }
64
+
65
+ Result<std::string, std::string> getFilePath(
66
+ const std::shared_ptr<AudioFileProperties> &properties) {
67
+ std::string directory = getDirectory(properties);
68
+ std::string subDirectory = std::format("{}/{}", directory, properties->subDirectory);
69
+ std::string fileTimestamp = getTimestampString();
70
+ std::string extension = getFileExtension(properties);
71
+
72
+ auto result = createDirectoryIfNotExists(subDirectory);
73
+
74
+ if (!result.is_ok()) {
75
+ return Result<std::string, std::string>::Err(result.unwrap_err());
76
+ }
77
+
78
+ auto filePath = std::format(
79
+ "{}/{}_{}.{}", subDirectory, properties->fileNamePrefix, fileTimestamp, extension);
80
+ return Result<std::string, std::string>::Ok(filePath);
81
+ }
82
+
83
+ } // namespace audioapi::android::fileoptions
@@ -0,0 +1,22 @@
1
+ #pragma once
2
+
3
+ #include <string>
4
+ #include <memory>
5
+ #include <audioapi/utils/Result.hpp>
6
+
7
+ namespace audioapi {
8
+
9
+ class AudioFileProperties;
10
+
11
+ namespace android::fileoptions {
12
+
13
+ Result<NoneType, std::string> createDirectoryIfNotExists(const std::string &directoryPath);
14
+ std::string getTimestampString();
15
+
16
+ std::string getDirectory(const std::shared_ptr<AudioFileProperties> &properties);
17
+ std::string getFileExtension(const std::shared_ptr<AudioFileProperties> &properties);
18
+ Result<std::string, std::string> getFilePath(const std::shared_ptr<AudioFileProperties> &properties);
19
+
20
+ } // namespace android::fileoptions
21
+
22
+ } // namespace audioapi
@@ -1,3 +1,8 @@
1
+ /// Miniaudio implementation for Android platform.
2
+ /// this define tells the miniaudio to also include the definitions and not only declarations.
3
+ /// Which should be done only once in the whole project.
4
+ /// This make its safe to include the header file in multiple places, without causing multiple definition errors.
5
+ /// TODO: Consider moving this file to common scope to re-use the miniaudio also for iOS platform.
1
6
  #define MINIAUDIO_IMPLEMENTATION
2
7
  #define MA_DEBUG_OUTPUT
3
8
  #include <audioapi/libs/miniaudio/miniaudio.h>