react-native-audio-api 0.11.0-alpha.1 → 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 +219 -84
  8. package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +24 -23
  9. package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +13 -20
  10. package/android/src/main/cpp/audioapi/android/core/utils/AndroidFileWriterBackend.h +14 -18
  11. package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.cpp +72 -89
  12. package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.h +12 -23
  13. package/android/src/main/cpp/audioapi/android/core/utils/AudioDecoder.cpp +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 +379 -298
  18. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.h +48 -91
  19. package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/ptrs.hpp +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 +132 -104
  23. package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.h +8 -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 +98 -50
  72. package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +5 -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 +58 -36
  125. package/common/cpp/audioapi/core/inputs/AudioRecorder.h +41 -44
  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 +26 -18
  267. package/ios/audioapi/ios/core/IOSAudioRecorder.mm +193 -53
  268. package/ios/audioapi/ios/core/NativeAudioPlayer.m +16 -13
  269. package/ios/audioapi/ios/core/NativeAudioRecorder.h +4 -0
  270. package/ios/audioapi/ios/core/NativeAudioRecorder.m +42 -7
  271. package/ios/audioapi/ios/core/utils/AudioDecoder.mm +21 -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/{IOSAudioFileWriter.h → utils/IOSFileWriter.h} +16 -14
  275. package/ios/audioapi/ios/core/utils/IOSFileWriter.mm +224 -0
  276. package/ios/audioapi/ios/core/{IOSRecorderCallback.h → utils/IOSRecorderCallback.h} +7 -17
  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 +43 -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 +44 -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 +13 -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 +34 -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 +42 -34
  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 +63 -78
  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 +51 -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 +45 -36
  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 -36
  498. package/ios/audioapi/ios/core/IOSAudioFileOptions.mm +0 -140
  499. package/ios/audioapi/ios/core/IOSAudioFileWriter.mm +0 -223
  500. package/ios/audioapi/ios/core/IOSRecorderCallback.mm +0 -189
  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
@@ -2,6 +2,7 @@
2
2
 
3
3
  #include <audioapi/HostObjects/sources/AudioBufferHostObject.h>
4
4
  #include <audioapi/core/sources/AudioBufferSourceNode.h>
5
+ #include <memory>
5
6
 
6
7
  namespace audioapi {
7
8
 
@@ -31,32 +32,28 @@ AudioBufferSourceNodeHostObject::AudioBufferSourceNodeHostObject(
31
32
  }
32
33
 
33
34
  AudioBufferSourceNodeHostObject::~AudioBufferSourceNodeHostObject() {
34
- auto audioBufferSourceNode =
35
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
35
+ auto audioBufferSourceNode = std::static_pointer_cast<AudioBufferSourceNode>(node_);
36
36
 
37
37
  // When JSI object is garbage collected (together with the eventual callback),
38
38
  // underlying source node might still be active and try to call the
39
39
  // non-existing callback.
40
- audioBufferSourceNode->clearOnLoopEndedCallback();
40
+ audioBufferSourceNode->setOnLoopEndedCallbackId(0);
41
41
  }
42
42
 
43
43
  JSI_PROPERTY_GETTER_IMPL(AudioBufferSourceNodeHostObject, loop) {
44
- auto audioBufferSourceNode =
45
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
44
+ auto audioBufferSourceNode = std::static_pointer_cast<AudioBufferSourceNode>(node_);
46
45
  auto loop = audioBufferSourceNode->getLoop();
47
46
  return {loop};
48
47
  }
49
48
 
50
49
  JSI_PROPERTY_GETTER_IMPL(AudioBufferSourceNodeHostObject, loopSkip) {
51
- auto audioBufferSourceNode =
52
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
50
+ auto audioBufferSourceNode = std::static_pointer_cast<AudioBufferSourceNode>(node_);
53
51
  auto loopSkip = audioBufferSourceNode->getLoopSkip();
54
52
  return {loopSkip};
55
53
  }
56
54
 
57
55
  JSI_PROPERTY_GETTER_IMPL(AudioBufferSourceNodeHostObject, buffer) {
58
- auto audioBufferSourceNode =
59
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
56
+ auto audioBufferSourceNode = std::static_pointer_cast<AudioBufferSourceNode>(node_);
60
57
  auto buffer = audioBufferSourceNode->getBuffer();
61
58
 
62
59
  if (!buffer) {
@@ -64,50 +61,45 @@ JSI_PROPERTY_GETTER_IMPL(AudioBufferSourceNodeHostObject, buffer) {
64
61
  }
65
62
 
66
63
  auto bufferHostObject = std::make_shared<AudioBufferHostObject>(buffer);
67
- return jsi::Object::createFromHostObject(runtime, bufferHostObject);
64
+ auto jsiObject = jsi::Object::createFromHostObject(runtime, bufferHostObject);
65
+ jsiObject.setExternalMemoryPressure(runtime, bufferHostObject->getSizeInBytes() + 16);
66
+ return jsiObject;
68
67
  }
69
68
 
70
69
  JSI_PROPERTY_GETTER_IMPL(AudioBufferSourceNodeHostObject, loopStart) {
71
- auto audioBufferSourceNode =
72
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
70
+ auto audioBufferSourceNode = std::static_pointer_cast<AudioBufferSourceNode>(node_);
73
71
  auto loopStart = audioBufferSourceNode->getLoopStart();
74
72
  return {loopStart};
75
73
  }
76
74
 
77
75
  JSI_PROPERTY_GETTER_IMPL(AudioBufferSourceNodeHostObject, loopEnd) {
78
- auto audioBufferSourceNode =
79
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
76
+ auto audioBufferSourceNode = std::static_pointer_cast<AudioBufferSourceNode>(node_);
80
77
  auto loopEnd = audioBufferSourceNode->getLoopEnd();
81
78
  return {loopEnd};
82
79
  }
83
80
 
84
81
  JSI_PROPERTY_SETTER_IMPL(AudioBufferSourceNodeHostObject, loop) {
85
- auto audioBufferSourceNode =
86
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
82
+ auto audioBufferSourceNode = std::static_pointer_cast<AudioBufferSourceNode>(node_);
87
83
  audioBufferSourceNode->setLoop(value.getBool());
88
84
  }
89
85
 
90
86
  JSI_PROPERTY_SETTER_IMPL(AudioBufferSourceNodeHostObject, loopSkip) {
91
- auto audioBufferSourceNode =
92
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
87
+ auto audioBufferSourceNode = std::static_pointer_cast<AudioBufferSourceNode>(node_);
93
88
  audioBufferSourceNode->setLoopSkip(value.getBool());
94
89
  }
95
90
 
96
91
  JSI_PROPERTY_SETTER_IMPL(AudioBufferSourceNodeHostObject, loopStart) {
97
- auto audioBufferSourceNode =
98
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
92
+ auto audioBufferSourceNode = std::static_pointer_cast<AudioBufferSourceNode>(node_);
99
93
  audioBufferSourceNode->setLoopStart(value.getNumber());
100
94
  }
101
95
 
102
96
  JSI_PROPERTY_SETTER_IMPL(AudioBufferSourceNodeHostObject, loopEnd) {
103
- auto audioBufferSourceNode =
104
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
97
+ auto audioBufferSourceNode = std::static_pointer_cast<AudioBufferSourceNode>(node_);
105
98
  audioBufferSourceNode->setLoopEnd(value.getNumber());
106
99
  }
107
100
 
108
101
  JSI_PROPERTY_SETTER_IMPL(AudioBufferSourceNodeHostObject, onLoopEnded) {
109
- auto audioBufferSourceNode =
110
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
102
+ auto audioBufferSourceNode = std::static_pointer_cast<AudioBufferSourceNode>(node_);
111
103
 
112
104
  audioBufferSourceNode->setOnLoopEndedCallbackId(
113
105
  std::stoull(value.getString(runtime).utf8(runtime)));
@@ -117,8 +109,7 @@ JSI_HOST_FUNCTION_IMPL(AudioBufferSourceNodeHostObject, start) {
117
109
  auto when = args[0].getNumber();
118
110
  auto offset = args[1].getNumber();
119
111
 
120
- auto audioBufferSourceNode =
121
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
112
+ auto audioBufferSourceNode = std::static_pointer_cast<AudioBufferSourceNode>(node_);
122
113
 
123
114
  if (args[2].isUndefined()) {
124
115
  audioBufferSourceNode->start(when, offset);
@@ -133,16 +124,14 @@ JSI_HOST_FUNCTION_IMPL(AudioBufferSourceNodeHostObject, start) {
133
124
  }
134
125
 
135
126
  JSI_HOST_FUNCTION_IMPL(AudioBufferSourceNodeHostObject, setBuffer) {
136
- auto audioBufferSourceNode =
137
- std::static_pointer_cast<AudioBufferSourceNode>(node_);
127
+ auto audioBufferSourceNode = std::static_pointer_cast<AudioBufferSourceNode>(node_);
138
128
 
139
129
  if (args[0].isNull()) {
140
130
  audioBufferSourceNode->setBuffer(std::shared_ptr<AudioBuffer>(nullptr));
141
131
  return jsi::Value::undefined();
142
132
  }
143
133
 
144
- auto bufferHostObject =
145
- args[0].getObject(runtime).asHostObject<AudioBufferHostObject>(runtime);
134
+ auto bufferHostObject = args[0].getObject(runtime).asHostObject<AudioBufferHostObject>(runtime);
146
135
  thisValue.asObject(runtime).setExternalMemoryPressure(
147
136
  runtime, bufferHostObject->getSizeInBytes() + 16);
148
137
  audioBufferSourceNode->setBuffer(bufferHostObject->audioBuffer_);
@@ -10,11 +10,9 @@ using namespace facebook;
10
10
 
11
11
  class AudioBufferSourceNode;
12
12
 
13
- class AudioBufferSourceNodeHostObject
14
- : public AudioBufferBaseSourceNodeHostObject {
13
+ class AudioBufferSourceNodeHostObject : public AudioBufferBaseSourceNodeHostObject {
15
14
  public:
16
- explicit AudioBufferSourceNodeHostObject(
17
- const std::shared_ptr<AudioBufferSourceNode> &node);
15
+ explicit AudioBufferSourceNodeHostObject(const std::shared_ptr<AudioBufferSourceNode> &node);
18
16
 
19
17
  ~AudioBufferSourceNodeHostObject() override;
20
18
 
@@ -1,14 +1,14 @@
1
1
  #include <audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.h>
2
2
 
3
3
  #include <audioapi/core/sources/AudioScheduledSourceNode.h>
4
+ #include <memory>
4
5
 
5
6
  namespace audioapi {
6
7
 
7
8
  AudioScheduledSourceNodeHostObject::AudioScheduledSourceNodeHostObject(
8
9
  const std::shared_ptr<AudioScheduledSourceNode> &node)
9
10
  : AudioNodeHostObject(node) {
10
- addSetters(
11
- JSI_EXPORT_PROPERTY_SETTER(AudioScheduledSourceNodeHostObject, onEnded));
11
+ addSetters(JSI_EXPORT_PROPERTY_SETTER(AudioScheduledSourceNodeHostObject, onEnded));
12
12
 
13
13
  addFunctions(
14
14
  JSI_EXPORT_FUNCTION(AudioScheduledSourceNodeHostObject, start),
@@ -16,18 +16,16 @@ AudioScheduledSourceNodeHostObject::AudioScheduledSourceNodeHostObject(
16
16
  }
17
17
 
18
18
  AudioScheduledSourceNodeHostObject::~AudioScheduledSourceNodeHostObject() {
19
- auto audioScheduledSourceNode =
20
- std::static_pointer_cast<AudioScheduledSourceNode>(node_);
19
+ auto audioScheduledSourceNode = std::static_pointer_cast<AudioScheduledSourceNode>(node_);
21
20
 
22
21
  // When JSI object is garbage collected (together with the eventual callback),
23
22
  // underlying source node might still be active and try to call the
24
23
  // non-existing callback.
25
- audioScheduledSourceNode->clearOnEndedCallback();
24
+ audioScheduledSourceNode->setOnEndedCallbackId(0);
26
25
  }
27
26
 
28
27
  JSI_PROPERTY_SETTER_IMPL(AudioScheduledSourceNodeHostObject, onEnded) {
29
- auto audioScheduleSourceNode =
30
- std::static_pointer_cast<AudioScheduledSourceNode>(node_);
28
+ auto audioScheduleSourceNode = std::static_pointer_cast<AudioScheduledSourceNode>(node_);
31
29
 
32
30
  audioScheduleSourceNode->setOnEndedCallbackId(
33
31
  std::stoull(value.getString(runtime).utf8(runtime)));
@@ -35,16 +33,14 @@ JSI_PROPERTY_SETTER_IMPL(AudioScheduledSourceNodeHostObject, onEnded) {
35
33
 
36
34
  JSI_HOST_FUNCTION_IMPL(AudioScheduledSourceNodeHostObject, start) {
37
35
  auto when = args[0].getNumber();
38
- auto audioScheduleSourceNode =
39
- std::static_pointer_cast<AudioScheduledSourceNode>(node_);
36
+ auto audioScheduleSourceNode = std::static_pointer_cast<AudioScheduledSourceNode>(node_);
40
37
  audioScheduleSourceNode->start(when);
41
38
  return jsi::Value::undefined();
42
39
  }
43
40
 
44
41
  JSI_HOST_FUNCTION_IMPL(AudioScheduledSourceNodeHostObject, stop) {
45
42
  auto time = args[0].getNumber();
46
- auto audioScheduleSourceNode =
47
- std::static_pointer_cast<AudioScheduledSourceNode>(node_);
43
+ auto audioScheduleSourceNode = std::static_pointer_cast<AudioScheduledSourceNode>(node_);
48
44
  audioScheduleSourceNode->stop(time);
49
45
  return jsi::Value::undefined();
50
46
  }
@@ -1,6 +1,7 @@
1
1
  #include <audioapi/HostObjects/AudioParamHostObject.h>
2
2
  #include <audioapi/HostObjects/sources/ConstantSourceNodeHostObject.h>
3
3
  #include <audioapi/core/sources/ConstantSourceNode.h>
4
+ #include <memory>
4
5
 
5
6
  namespace audioapi {
6
7
 
@@ -12,8 +13,7 @@ ConstantSourceNodeHostObject::ConstantSourceNodeHostObject(
12
13
 
13
14
  JSI_PROPERTY_GETTER_IMPL(ConstantSourceNodeHostObject, offset) {
14
15
  auto constantSourceNode = std::static_pointer_cast<ConstantSourceNode>(node_);
15
- auto offsetParam_ = std::make_shared<AudioParamHostObject>(
16
- constantSourceNode->getOffsetParam());
16
+ auto offsetParam_ = std::make_shared<AudioParamHostObject>(constantSourceNode->getOffsetParam());
17
17
  return jsi::Object::createFromHostObject(runtime, offsetParam_);
18
18
  }
19
19
  } // namespace audioapi
@@ -13,8 +13,7 @@ class ConstantSourceNode;
13
13
 
14
14
  class ConstantSourceNodeHostObject : public AudioScheduledSourceNodeHostObject {
15
15
  public:
16
- explicit ConstantSourceNodeHostObject(
17
- const std::shared_ptr<ConstantSourceNode> &node);
16
+ explicit ConstantSourceNodeHostObject(const std::shared_ptr<ConstantSourceNode> &node);
18
17
 
19
18
  JSI_PROPERTY_GETTER_DECL(offset);
20
19
  };
@@ -3,11 +3,11 @@
3
3
  #include <audioapi/HostObjects/AudioParamHostObject.h>
4
4
  #include <audioapi/HostObjects/effects/PeriodicWaveHostObject.h>
5
5
  #include <audioapi/core/sources/OscillatorNode.h>
6
+ #include <memory>
6
7
 
7
8
  namespace audioapi {
8
9
 
9
- OscillatorNodeHostObject::OscillatorNodeHostObject(
10
- const std::shared_ptr<OscillatorNode> &node)
10
+ OscillatorNodeHostObject::OscillatorNodeHostObject(const std::shared_ptr<OscillatorNode> &node)
11
11
  : AudioScheduledSourceNodeHostObject(node) {
12
12
  addGetters(
13
13
  JSI_EXPORT_PROPERTY_GETTER(OscillatorNodeHostObject, frequency),
@@ -21,15 +21,14 @@ OscillatorNodeHostObject::OscillatorNodeHostObject(
21
21
 
22
22
  JSI_PROPERTY_GETTER_IMPL(OscillatorNodeHostObject, frequency) {
23
23
  auto oscillatorNode = std::static_pointer_cast<OscillatorNode>(node_);
24
- auto frequencyParam_ = std::make_shared<AudioParamHostObject>(
25
- oscillatorNode->getFrequencyParam());
24
+ auto frequencyParam_ =
25
+ std::make_shared<AudioParamHostObject>(oscillatorNode->getFrequencyParam());
26
26
  return jsi::Object::createFromHostObject(runtime, frequencyParam_);
27
27
  }
28
28
 
29
29
  JSI_PROPERTY_GETTER_IMPL(OscillatorNodeHostObject, detune) {
30
30
  auto oscillatorNode = std::static_pointer_cast<OscillatorNode>(node_);
31
- auto detuneParam_ =
32
- std::make_shared<AudioParamHostObject>(oscillatorNode->getDetuneParam());
31
+ auto detuneParam_ = std::make_shared<AudioParamHostObject>(oscillatorNode->getDetuneParam());
33
32
  return jsi::Object::createFromHostObject(runtime, detuneParam_);
34
33
  }
35
34
 
@@ -41,8 +40,7 @@ JSI_PROPERTY_GETTER_IMPL(OscillatorNodeHostObject, type) {
41
40
 
42
41
  JSI_HOST_FUNCTION_IMPL(OscillatorNodeHostObject, setPeriodicWave) {
43
42
  auto oscillatorNode = std::static_pointer_cast<OscillatorNode>(node_);
44
- auto periodicWave =
45
- args[0].getObject(runtime).getHostObject<PeriodicWaveHostObject>(runtime);
43
+ auto periodicWave = args[0].getObject(runtime).getHostObject<PeriodicWaveHostObject>(runtime);
46
44
  oscillatorNode->setPeriodicWave(periodicWave->periodicWave_);
47
45
  return jsi::Value::undefined();
48
46
  }
@@ -13,8 +13,7 @@ class OscillatorNode;
13
13
 
14
14
  class OscillatorNodeHostObject : public AudioScheduledSourceNodeHostObject {
15
15
  public:
16
- explicit OscillatorNodeHostObject(
17
- const std::shared_ptr<OscillatorNode> &node);
16
+ explicit OscillatorNodeHostObject(const std::shared_ptr<OscillatorNode> &node);
18
17
 
19
18
  JSI_PROPERTY_GETTER_DECL(frequency);
20
19
  JSI_PROPERTY_GETTER_DECL(detune);
@@ -1,7 +1,7 @@
1
1
  #pragma once
2
2
 
3
- #include <audioapi/core/sources/RecorderAdapterNode.h>
4
3
  #include <audioapi/HostObjects/AudioNodeHostObject.h>
4
+ #include <audioapi/core/sources/RecorderAdapterNode.h>
5
5
 
6
6
  #include <memory>
7
7
  #include <string>
@@ -14,12 +14,11 @@ class AudioRecorderHostObject;
14
14
 
15
15
  class RecorderAdapterNodeHostObject : public AudioNodeHostObject {
16
16
  public:
17
- explicit RecorderAdapterNodeHostObject(
18
- const std::shared_ptr<RecorderAdapterNode> &node)
19
- : AudioNodeHostObject(node) {}
17
+ explicit RecorderAdapterNodeHostObject(const std::shared_ptr<RecorderAdapterNode> &node)
18
+ : AudioNodeHostObject(node) {}
20
19
 
21
20
  private:
22
- friend class AudioRecorderHostObject;
21
+ friend class AudioRecorderHostObject;
23
22
  };
24
23
 
25
24
  } // namespace audioapi
@@ -3,20 +3,24 @@
3
3
  #include <audioapi/HostObjects/AudioParamHostObject.h>
4
4
  #include <audioapi/HostObjects/effects/PeriodicWaveHostObject.h>
5
5
  #include <audioapi/core/sources/StreamerNode.h>
6
+ #include <memory>
6
7
 
7
8
  namespace audioapi {
8
9
 
9
- StreamerNodeHostObject::StreamerNodeHostObject(
10
- const std::shared_ptr<StreamerNode> &node)
10
+ StreamerNodeHostObject::StreamerNodeHostObject(const std::shared_ptr<StreamerNode> &node)
11
11
  : AudioScheduledSourceNodeHostObject(node) {
12
12
  addFunctions(JSI_EXPORT_FUNCTION(StreamerNodeHostObject, initialize));
13
13
  }
14
14
 
15
15
  JSI_HOST_FUNCTION_IMPL(StreamerNodeHostObject, initialize) {
16
+ #if !RN_AUDIO_API_FFMPEG_DISABLED
16
17
  auto streamerNode = std::static_pointer_cast<StreamerNode>(node_);
17
18
  auto path = args[0].getString(runtime).utf8(runtime);
18
19
  auto result = streamerNode->initialize(path);
19
20
  return {result};
21
+ #else
22
+ return false;
23
+ #endif
20
24
  }
21
25
 
22
26
  } // namespace audioapi
@@ -13,16 +13,15 @@ class StreamerNode;
13
13
 
14
14
  class StreamerNodeHostObject : public AudioScheduledSourceNodeHostObject {
15
15
  public:
16
- explicit StreamerNodeHostObject(
17
- const std::shared_ptr<StreamerNode> &node);
16
+ explicit StreamerNodeHostObject(const std::shared_ptr<StreamerNode> &node);
18
17
 
19
- [[nodiscard]] static inline size_t getSizeInBytes() {
20
- return SIZE;
21
- }
18
+ [[nodiscard]] static inline size_t getSizeInBytes() {
19
+ return SIZE;
20
+ }
22
21
 
23
22
  JSI_HOST_FUNCTION_DECL(initialize);
24
23
 
25
24
  private:
26
- static constexpr size_t SIZE = 4'000'000; // 4MB
25
+ static constexpr size_t SIZE = 4'000'000; // 4MB
27
26
  };
28
27
  } // namespace audioapi
@@ -12,7 +12,6 @@ using namespace facebook;
12
12
  class WorkletSourceNodeHostObject : public AudioScheduledSourceNodeHostObject {
13
13
  public:
14
14
  explicit WorkletSourceNodeHostObject(const std::shared_ptr<WorkletSourceNode> &node)
15
- : AudioScheduledSourceNodeHostObject(node) {
16
- }
15
+ : AudioScheduledSourceNodeHostObject(node) {}
17
16
  };
18
17
  } // namespace audioapi
@@ -21,40 +21,31 @@ AudioDecoderHostObject::AudioDecoderHostObject(
21
21
  }
22
22
 
23
23
  JSI_HOST_FUNCTION_IMPL(AudioDecoderHostObject, decodeWithMemoryBlock) {
24
- auto arrayBuffer = args[0]
25
- .getObject(runtime)
26
- .getPropertyAsObject(runtime, "buffer")
27
- .getArrayBuffer(runtime);
24
+ auto arrayBuffer =
25
+ args[0].getObject(runtime).getPropertyAsObject(runtime, "buffer").getArrayBuffer(runtime);
28
26
  auto data = arrayBuffer.data(runtime);
29
27
  auto size = static_cast<int>(arrayBuffer.size(runtime));
30
28
 
31
29
  auto sampleRate = args[1].getNumber();
32
30
 
33
- auto promise = promiseVendor_->createAsyncPromise(
34
- [data, size, sampleRate]() -> PromiseResolver {
35
- auto result =
36
- AudioDecoder::decodeWithMemoryBlock(data, size, sampleRate);
31
+ auto promise = promiseVendor_->createAsyncPromise([data, size, sampleRate]() -> PromiseResolver {
32
+ auto result = AudioDecoder::decodeWithMemoryBlock(data, size, sampleRate);
37
33
 
38
- if (!result) {
39
- return [](jsi::Runtime &runtime)
40
- -> std::variant<jsi::Value, std::string> {
41
- return std::string("Failed to decode audio data.");
42
- };
43
- }
34
+ if (!result) {
35
+ return [](jsi::Runtime &runtime) -> std::variant<jsi::Value, std::string> {
36
+ return std::string("Failed to decode audio data.");
37
+ };
38
+ }
44
39
 
45
- auto audioBufferHostObject =
46
- std::make_shared<AudioBufferHostObject>(result);
40
+ auto audioBufferHostObject = std::make_shared<AudioBufferHostObject>(result);
47
41
 
48
- return [audioBufferHostObject =
49
- std::move(audioBufferHostObject)](jsi::Runtime &runtime)
50
- -> std::variant<jsi::Value, std::string> {
51
- auto jsiObject =
52
- jsi::Object::createFromHostObject(runtime, audioBufferHostObject);
53
- jsiObject.setExternalMemoryPressure(
54
- runtime, audioBufferHostObject->getSizeInBytes());
55
- return jsiObject;
56
- };
57
- });
42
+ return [audioBufferHostObject = std::move(audioBufferHostObject)](
43
+ jsi::Runtime &runtime) -> std::variant<jsi::Value, std::string> {
44
+ auto jsiObject = jsi::Object::createFromHostObject(runtime, audioBufferHostObject);
45
+ jsiObject.setExternalMemoryPressure(runtime, audioBufferHostObject->getSizeInBytes());
46
+ return jsiObject;
47
+ };
48
+ });
58
49
  return promise;
59
50
  }
60
51
 
@@ -62,30 +53,24 @@ JSI_HOST_FUNCTION_IMPL(AudioDecoderHostObject, decodeWithFilePath) {
62
53
  auto sourcePath = args[0].getString(runtime).utf8(runtime);
63
54
  auto sampleRate = args[1].getNumber();
64
55
 
65
- auto promise = promiseVendor_->createAsyncPromise(
66
- [sourcePath, sampleRate]() -> PromiseResolver {
67
- auto result = AudioDecoder::decodeWithFilePath(sourcePath, sampleRate);
56
+ auto promise = promiseVendor_->createAsyncPromise([sourcePath, sampleRate]() -> PromiseResolver {
57
+ auto result = AudioDecoder::decodeWithFilePath(sourcePath, sampleRate);
68
58
 
69
- if (!result) {
70
- return [](jsi::Runtime &runtime)
71
- -> std::variant<jsi::Value, std::string> {
72
- return std::string("Failed to decode audio data source.");
73
- };
74
- }
59
+ if (!result) {
60
+ return [](jsi::Runtime &runtime) -> std::variant<jsi::Value, std::string> {
61
+ return std::string("Failed to decode audio data source.");
62
+ };
63
+ }
75
64
 
76
- auto audioBufferHostObject =
77
- std::make_shared<AudioBufferHostObject>(result);
65
+ auto audioBufferHostObject = std::make_shared<AudioBufferHostObject>(result);
78
66
 
79
- return [audioBufferHostObject =
80
- std::move(audioBufferHostObject)](jsi::Runtime &runtime)
81
- -> std::variant<jsi::Value, std::string> {
82
- auto jsiObject =
83
- jsi::Object::createFromHostObject(runtime, audioBufferHostObject);
84
- jsiObject.setExternalMemoryPressure(
85
- runtime, audioBufferHostObject->getSizeInBytes());
86
- return jsiObject;
87
- };
88
- });
67
+ return [audioBufferHostObject = std::move(audioBufferHostObject)](
68
+ jsi::Runtime &runtime) -> std::variant<jsi::Value, std::string> {
69
+ auto jsiObject = jsi::Object::createFromHostObject(runtime, audioBufferHostObject);
70
+ jsiObject.setExternalMemoryPressure(runtime, audioBufferHostObject->getSizeInBytes());
71
+ return jsiObject;
72
+ };
73
+ });
89
74
 
90
75
  return promise;
91
76
  }
@@ -97,28 +82,22 @@ JSI_HOST_FUNCTION_IMPL(AudioDecoderHostObject, decodeWithPCMInBase64) {
97
82
  auto interleaved = args[3].getBool();
98
83
 
99
84
  auto promise = promiseVendor_->createAsyncPromise(
100
- [b64, inputSampleRate, inputChannelCount, interleaved]()
101
- -> PromiseResolver {
85
+ [b64, inputSampleRate, inputChannelCount, interleaved]() -> PromiseResolver {
102
86
  auto result = AudioDecoder::decodeWithPCMInBase64(
103
87
  b64, inputSampleRate, inputChannelCount, interleaved);
104
88
 
105
89
  if (!result) {
106
- return [](jsi::Runtime &runtime)
107
- -> std::variant<jsi::Value, std::string> {
90
+ return [](jsi::Runtime &runtime) -> std::variant<jsi::Value, std::string> {
108
91
  return std::string("Failed to decode audio data source.");
109
92
  };
110
93
  }
111
94
 
112
- auto audioBufferHostObject =
113
- std::make_shared<AudioBufferHostObject>(result);
95
+ auto audioBufferHostObject = std::make_shared<AudioBufferHostObject>(result);
114
96
 
115
- return [audioBufferHostObject =
116
- std::move(audioBufferHostObject)](jsi::Runtime &runtime)
117
- -> std::variant<jsi::Value, std::string> {
118
- auto jsiObject =
119
- jsi::Object::createFromHostObject(runtime, audioBufferHostObject);
120
- jsiObject.setExternalMemoryPressure(
121
- runtime, audioBufferHostObject->getSizeInBytes());
97
+ return [audioBufferHostObject = std::move(audioBufferHostObject)](
98
+ jsi::Runtime &runtime) -> std::variant<jsi::Value, std::string> {
99
+ auto jsiObject = jsi::Object::createFromHostObject(runtime, audioBufferHostObject);
100
+ jsiObject.setExternalMemoryPressure(runtime, audioBufferHostObject->getSizeInBytes());
122
101
  return jsiObject;
123
102
  };
124
103
  });
@@ -15,41 +15,26 @@ AudioStretcherHostObject::AudioStretcherHostObject(
15
15
  jsi::Runtime *runtime,
16
16
  const std::shared_ptr<react::CallInvoker> &callInvoker) {
17
17
  promiseVendor_ = std::make_shared<PromiseVendor>(runtime, callInvoker);
18
- addFunctions(
19
- JSI_EXPORT_FUNCTION(AudioStretcherHostObject, changePlaybackSpeed));
18
+ addFunctions(JSI_EXPORT_FUNCTION(AudioStretcherHostObject, changePlaybackSpeed));
20
19
  }
21
20
 
22
21
  JSI_HOST_FUNCTION_IMPL(AudioStretcherHostObject, changePlaybackSpeed) {
23
- auto audioBuffer =
24
- args[0].getObject(runtime).asHostObject<AudioBufferHostObject>(runtime);
22
+ auto audioBuffer = args[0].getObject(runtime).asHostObject<AudioBufferHostObject>(runtime);
25
23
  auto playbackSpeed = static_cast<float>(args[1].asNumber());
26
24
 
27
- auto promise = promiseVendor_->createPromise(
28
- [audioBuffer, playbackSpeed](std::shared_ptr<Promise> promise) {
29
- std::thread([audioBuffer,
30
- playbackSpeed,
31
- promise = std::move(promise)]() {
32
- auto result = AudioStretcher::changePlaybackSpeed(
33
- *audioBuffer->audioBuffer_, playbackSpeed);
34
-
35
- if (!result) {
36
- promise->reject("Failed to change audio playback speed.");
37
- return;
38
- }
39
-
40
- auto audioBufferHostObject =
41
- std::make_shared<AudioBufferHostObject>(result);
42
-
43
- promise->resolve([audioBufferHostObject = std::move(
44
- audioBufferHostObject)](jsi::Runtime &runtime) {
45
- auto jsiObject = jsi::Object::createFromHostObject(
46
- runtime, audioBufferHostObject);
47
- jsiObject.setExternalMemoryPressure(
48
- runtime, audioBufferHostObject->getSizeInBytes());
49
- return jsiObject;
50
- });
51
- }).detach();
52
- });
25
+ auto promise = promiseVendor_->createAsyncPromise([=]() -> PromiseResolver {
26
+ auto result = AudioStretcher::changePlaybackSpeed(*audioBuffer->audioBuffer_, playbackSpeed);
27
+
28
+ if (result == nullptr) {
29
+ return [](jsi::Runtime &runtime) {
30
+ return std::string("Failed to change audio playback speed.");
31
+ };
32
+ }
33
+ return [result](jsi::Runtime &runtime) {
34
+ auto audioBufferHostObject = std::make_shared<AudioBufferHostObject>(result);
35
+ return jsi::Object::createFromHostObject(runtime, audioBufferHostObject);
36
+ };
37
+ });
53
38
  return promise;
54
39
  }
55
40
 
@@ -7,13 +7,13 @@
7
7
  #include <audioapi/core/AudioContext.h>
8
8
  #include <audioapi/core/destinations/AudioDestinationNode.h>
9
9
  #include <audioapi/core/utils/AudioNodeManager.h>
10
+ #include <memory>
11
+ #include <string>
10
12
 
11
13
  namespace audioapi {
12
14
  AudioContext::AudioContext(
13
15
  float sampleRate,
14
- bool initSuspended,
15
- const std::shared_ptr<IAudioEventHandlerRegistry>
16
- &audioEventHandlerRegistry,
16
+ const std::shared_ptr<IAudioEventHandlerRegistry> &audioEventHandlerRegistry,
17
17
  const RuntimeRegistry &runtimeRegistry)
18
18
  : BaseAudioContext(audioEventHandlerRegistry, runtimeRegistry) {
19
19
  #ifdef ANDROID
@@ -25,17 +25,8 @@ AudioContext::AudioContext(
25
25
  #endif
26
26
 
27
27
  sampleRate_ = sampleRate;
28
-
29
- if (initSuspended) {
30
- playerHasBeenStarted_ = false;
31
- state_ = ContextState::SUSPENDED;
32
-
33
- return;
34
- }
35
-
36
- playerHasBeenStarted_ = true;
37
- audioPlayer_->start();
38
- state_ = ContextState::RUNNING;
28
+ playerHasBeenStarted_ = false;
29
+ state_ = ContextState::SUSPENDED;
39
30
  }
40
31
 
41
32
  AudioContext::~AudioContext() {
@@ -61,22 +52,12 @@ bool AudioContext::resume() {
61
52
  return true;
62
53
  }
63
54
 
64
- if (!playerHasBeenStarted_) {
65
- if (audioPlayer_->start()) {
66
- playerHasBeenStarted_ = true;
67
- state_ = ContextState::RUNNING;
68
- return true;
69
- }
70
-
71
- return false;
72
- }
73
-
74
- if (audioPlayer_->resume()) {
55
+ if (playerHasBeenStarted_ && audioPlayer_->resume()) {
75
56
  state_ = ContextState::RUNNING;
76
57
  return true;
77
58
  }
78
59
 
79
- return false;
60
+ return start();
80
61
  }
81
62
 
82
63
  bool AudioContext::suspend() {
@@ -94,8 +75,22 @@ bool AudioContext::suspend() {
94
75
  return true;
95
76
  }
96
77
 
97
- std::function<void(std::shared_ptr<AudioBus>, int)>
98
- AudioContext::renderAudio() {
78
+ bool AudioContext::start() {
79
+ if (isClosed()) {
80
+ return false;
81
+ }
82
+
83
+ if (!playerHasBeenStarted_ && audioPlayer_->start()) {
84
+ playerHasBeenStarted_ = true;
85
+ state_ = ContextState::RUNNING;
86
+
87
+ return true;
88
+ }
89
+
90
+ return false;
91
+ }
92
+
93
+ std::function<void(std::shared_ptr<AudioBus>, int)> AudioContext::renderAudio() {
99
94
  return [this](const std::shared_ptr<AudioBus> &data, int frames) {
100
95
  destination_->renderAudio(data, frames);
101
96
  };