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.
- package/README.md +13 -11
- package/RNAudioAPI.podspec +25 -18
- package/android/build.gradle +41 -5
- package/android/src/main/cpp/audioapi/CMakeLists.txt +6 -3
- package/android/src/main/cpp/audioapi/android/AudioAPIModule.cpp +10 -16
- package/android/src/main/cpp/audioapi/android/OnLoad.cpp +1 -2
- package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.cpp +219 -84
- package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +24 -23
- package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +13 -20
- package/android/src/main/cpp/audioapi/android/core/utils/AndroidFileWriterBackend.h +14 -18
- package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.cpp +72 -89
- package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.h +12 -23
- package/android/src/main/cpp/audioapi/android/core/utils/AudioDecoder.cpp +47 -47
- package/android/src/main/cpp/audioapi/android/core/utils/FileOptions.cpp +83 -0
- package/android/src/main/cpp/audioapi/android/core/utils/FileOptions.h +22 -0
- package/android/src/main/cpp/audioapi/android/core/utils/MiniaudioImplementation.cpp +5 -0
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.cpp +379 -298
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.h +48 -91
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/ptrs.hpp +48 -0
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/utils.cpp +110 -0
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/utils.h +34 -0
- package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.cpp +132 -104
- package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.h +8 -16
- package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +28 -1
- package/android/src/main/java/com/swmansion/audioapi/system/LockScreenManager.kt +28 -6
- package/android/src/main/java/com/swmansion/audioapi/system/MediaNotificationManager.kt +11 -0
- package/android/src/main/jniLibs/arm64-v8a/libavcodec.so +0 -0
- package/android/src/main/jniLibs/arm64-v8a/libavformat.so +0 -0
- package/android/src/main/jniLibs/arm64-v8a/libavutil.so +0 -0
- package/android/src/main/jniLibs/arm64-v8a/libswresample.so +0 -0
- package/android/src/main/jniLibs/armeabi-v7a/libavcodec.so +0 -0
- package/android/src/main/jniLibs/armeabi-v7a/libavformat.so +0 -0
- package/android/src/main/jniLibs/armeabi-v7a/libavutil.so +0 -0
- package/android/src/main/jniLibs/armeabi-v7a/libswresample.so +0 -0
- package/android/src/main/jniLibs/x86/libavcodec.so +0 -0
- package/android/src/main/jniLibs/x86/libavformat.so +0 -0
- package/android/src/main/jniLibs/x86/libavutil.so +0 -0
- package/android/src/main/jniLibs/x86/libswresample.so +0 -0
- package/android/src/main/jniLibs/x86_64/libavcodec.so +0 -0
- package/android/src/main/jniLibs/x86_64/libavformat.so +0 -0
- package/android/src/main/jniLibs/x86_64/libavutil.so +0 -0
- package/android/src/main/jniLibs/x86_64/libswresample.so +0 -0
- package/android/src/oldarch/NativeAudioAPIModuleSpec.java +4 -0
- package/common/cpp/audioapi/AudioAPIModuleInstaller.h +45 -70
- package/common/cpp/audioapi/HostObjects/AudioContextHostObject.cpp +20 -22
- package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.cpp +3 -4
- package/common/cpp/audioapi/HostObjects/AudioParamHostObject.cpp +6 -8
- package/common/cpp/audioapi/HostObjects/AudioParamHostObject.h +2 -2
- package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +102 -63
- package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +4 -1
- package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.cpp +25 -31
- package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.h +3 -3
- package/common/cpp/audioapi/HostObjects/WorkletNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/WorkletProcessingNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.cpp +10 -18
- package/common/cpp/audioapi/HostObjects/destinations/AudioDestinationNodeHostObject.h +2 -3
- package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp +18 -30
- package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.cpp +50 -0
- package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.h +20 -0
- package/common/cpp/audioapi/HostObjects/effects/DelayNodeHostObject.cpp +27 -0
- package/common/cpp/audioapi/HostObjects/effects/DelayNodeHostObject.h +21 -0
- package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.cpp +2 -2
- package/common/cpp/audioapi/HostObjects/effects/IIRFilterNodeHostObject.cpp +33 -0
- package/common/cpp/audioapi/HostObjects/effects/IIRFilterNodeHostObject.h +20 -0
- package/common/cpp/audioapi/HostObjects/effects/PeriodicWaveHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.cpp +2 -2
- package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.cpp +6 -12
- package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.h +7 -7
- package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.cpp +98 -50
- package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +5 -2
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.cpp +27 -22
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.h +12 -10
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.cpp +17 -22
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.h +5 -7
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.cpp +25 -11
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.h +8 -8
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.cpp +19 -30
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.h +2 -4
- package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.cpp +7 -11
- package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.cpp +2 -2
- package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.cpp +6 -8
- package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/sources/RecorderAdapterNodeHostObject.h +4 -5
- package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.cpp +6 -2
- package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.h +5 -6
- package/common/cpp/audioapi/HostObjects/sources/WorkletSourceNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/utils/AudioDecoderHostObject.cpp +39 -60
- package/common/cpp/audioapi/HostObjects/utils/AudioStretcherHostObject.cpp +15 -30
- package/common/cpp/audioapi/core/AudioContext.cpp +23 -28
- package/common/cpp/audioapi/core/AudioContext.h +6 -3
- package/common/cpp/audioapi/core/AudioNode.cpp +17 -19
- package/common/cpp/audioapi/core/AudioNode.h +19 -8
- package/common/cpp/audioapi/core/AudioParam.cpp +68 -100
- package/common/cpp/audioapi/core/AudioParam.h +20 -12
- package/common/cpp/audioapi/core/BaseAudioContext.cpp +52 -34
- package/common/cpp/audioapi/core/BaseAudioContext.h +26 -14
- package/common/cpp/audioapi/core/OfflineAudioContext.cpp +12 -17
- package/common/cpp/audioapi/core/OfflineAudioContext.h +10 -5
- package/common/cpp/audioapi/core/analysis/AnalyserNode.cpp +13 -21
- package/common/cpp/audioapi/core/analysis/AnalyserNode.h +8 -6
- package/common/cpp/audioapi/core/destinations/AudioDestinationNode.cpp +1 -0
- package/common/cpp/audioapi/core/destinations/AudioDestinationNode.h +5 -3
- package/common/cpp/audioapi/core/effects/BiquadFilterNode.cpp +84 -66
- package/common/cpp/audioapi/core/effects/BiquadFilterNode.h +39 -10
- package/common/cpp/audioapi/core/effects/ConvolverNode.cpp +201 -0
- package/common/cpp/audioapi/core/effects/ConvolverNode.h +64 -0
- package/common/cpp/audioapi/core/effects/DelayNode.cpp +101 -0
- package/common/cpp/audioapi/core/effects/DelayNode.h +39 -0
- package/common/cpp/audioapi/core/effects/GainNode.cpp +1 -0
- package/common/cpp/audioapi/core/effects/GainNode.h +3 -1
- package/common/cpp/audioapi/core/effects/IIRFilterNode.cpp +166 -0
- package/common/cpp/audioapi/core/effects/IIRFilterNode.h +74 -0
- package/common/cpp/audioapi/core/effects/PeriodicWave.cpp +22 -35
- package/common/cpp/audioapi/core/effects/PeriodicWave.h +4 -9
- package/common/cpp/audioapi/core/effects/StereoPannerNode.cpp +4 -5
- package/common/cpp/audioapi/core/effects/StereoPannerNode.h +4 -2
- package/common/cpp/audioapi/core/effects/WorkletNode.cpp +11 -13
- package/common/cpp/audioapi/core/effects/WorkletNode.h +15 -12
- package/common/cpp/audioapi/core/effects/WorkletProcessingNode.cpp +4 -4
- package/common/cpp/audioapi/core/effects/WorkletProcessingNode.h +15 -14
- package/common/cpp/audioapi/core/inputs/AudioRecorder.cpp +58 -36
- package/common/cpp/audioapi/core/inputs/AudioRecorder.h +41 -44
- package/common/cpp/audioapi/core/sources/AudioBuffer.cpp +4 -6
- package/common/cpp/audioapi/core/sources/AudioBuffer.h +4 -7
- package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +48 -57
- package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +37 -34
- package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +55 -17
- package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +35 -28
- package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +41 -49
- package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +8 -6
- package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +29 -24
- package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +6 -6
- package/common/cpp/audioapi/core/sources/ConstantSourceNode.cpp +3 -4
- package/common/cpp/audioapi/core/sources/ConstantSourceNode.h +3 -1
- package/common/cpp/audioapi/core/sources/OscillatorNode.cpp +12 -23
- package/common/cpp/audioapi/core/sources/OscillatorNode.h +6 -4
- package/common/cpp/audioapi/core/sources/RecorderAdapterNode.cpp +43 -16
- package/common/cpp/audioapi/core/sources/RecorderAdapterNode.h +22 -17
- package/common/cpp/audioapi/core/sources/StreamerNode.cpp +104 -87
- package/common/cpp/audioapi/core/sources/StreamerNode.h +69 -33
- package/common/cpp/audioapi/core/sources/WorkletSourceNode.cpp +5 -7
- package/common/cpp/audioapi/core/sources/WorkletSourceNode.h +15 -13
- package/common/cpp/audioapi/core/types/AudioFormat.h +1 -11
- package/common/cpp/audioapi/core/utils/AudioDecoder.h +15 -6
- package/common/cpp/audioapi/core/utils/AudioFileWriter.cpp +41 -0
- package/common/cpp/audioapi/core/utils/AudioFileWriter.h +43 -0
- package/common/cpp/audioapi/core/utils/AudioNodeDestructor.cpp +5 -6
- package/common/cpp/audioapi/core/utils/AudioNodeDestructor.h +7 -10
- package/common/cpp/audioapi/core/utils/AudioNodeManager.cpp +17 -19
- package/common/cpp/audioapi/core/utils/AudioNodeManager.h +8 -11
- package/common/cpp/audioapi/core/utils/AudioParamEventQueue.cpp +3 -3
- package/common/cpp/audioapi/core/utils/AudioParamEventQueue.h +5 -5
- package/common/cpp/audioapi/core/utils/AudioRecorderCallback.cpp +101 -0
- package/common/cpp/audioapi/core/utils/AudioRecorderCallback.h +51 -0
- package/common/cpp/audioapi/core/utils/AudioStretcher.cpp +6 -6
- package/common/cpp/audioapi/core/utils/Constants.h +7 -3
- package/common/cpp/audioapi/core/utils/ParamChangeEvent.cpp +1 -0
- package/common/cpp/audioapi/core/utils/ParamChangeEvent.h +9 -9
- package/common/cpp/audioapi/core/utils/worklets/SafeIncludes.h +33 -34
- package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.cpp +17 -19
- package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.h +23 -19
- package/common/cpp/audioapi/dsp/AudioUtils.cpp +4 -10
- package/common/cpp/audioapi/dsp/AudioUtils.h +1 -1
- package/common/cpp/audioapi/dsp/Convolver.cpp +201 -0
- package/common/cpp/audioapi/dsp/Convolver.h +47 -0
- package/common/cpp/audioapi/dsp/FFT.cpp +1 -27
- package/common/cpp/audioapi/dsp/FFT.h +19 -3
- package/common/cpp/audioapi/dsp/VectorMath.cpp +24 -58
- package/common/cpp/audioapi/dsp/VectorMath.h +35 -8
- package/common/cpp/audioapi/dsp/Windows.cpp +4 -9
- package/common/cpp/audioapi/dsp/Windows.h +24 -23
- package/common/cpp/audioapi/events/AudioEventHandlerRegistry.cpp +12 -17
- package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +45 -40
- package/common/cpp/audioapi/events/IAudioEventHandlerRegistry.h +15 -7
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/avcodec.h +4 -4
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_desc.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_id.h +3 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_par.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/defs.h +3 -0
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/packet.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/smpte_436m.h +254 -0
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/version.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavformat/avformat.h +6 -6
- package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version_major.h +2 -0
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avassert.h +5 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avutil.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/channel_layout.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/csp.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/dict.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/ffversion.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/film_grain_params.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/frame.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hdr_dynamic_vivid_metadata.h +3 -3
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_opencl.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_qsv.h +0 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_vulkan.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/iamf.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/lfg.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/log.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/mathematics.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/opt.h +4 -4
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rational.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rc4.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/refstruct.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/spherical.h +6 -0
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tdrdi.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tx.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/version.h +3 -3
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/video_hint.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libswresample/swresample.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libswresample/version.h +1 -1
- package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64/libavcodec.framework/libavcodec +0 -0
- package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64_x86_64-simulator/libavcodec.framework/libavcodec +0 -0
- package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64/libavformat.framework/libavformat +0 -0
- package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64_x86_64-simulator/libavformat.framework/libavformat +0 -0
- package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64/libavutil.framework/libavutil +0 -0
- package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64_x86_64-simulator/libavutil.framework/libavutil +0 -0
- package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64/libswresample.framework/libswresample +0 -0
- package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64_x86_64-simulator/libswresample.framework/libswresample +0 -0
- package/common/cpp/audioapi/jsi/AudioArrayBuffer.h +4 -5
- package/common/cpp/audioapi/jsi/JsiHostObject.cpp +11 -13
- package/common/cpp/audioapi/jsi/JsiHostObject.h +26 -33
- package/common/cpp/audioapi/jsi/JsiPromise.cpp +34 -67
- package/common/cpp/audioapi/jsi/JsiPromise.h +65 -26
- package/common/cpp/audioapi/jsi/RuntimeLifecycleMonitor.cpp +7 -10
- package/common/cpp/audioapi/jsi/RuntimeLifecycleMonitor.h +1 -3
- package/common/cpp/audioapi/libs/ffmpeg/FFmpegDecoding.cpp +4 -3
- package/common/cpp/audioapi/libs/ffmpeg/relinking.md +24 -0
- package/common/cpp/audioapi/utils/AlignedAllocator.hpp +50 -0
- package/common/cpp/audioapi/utils/AudioArray.cpp +3 -8
- package/common/cpp/audioapi/utils/AudioArray.h +3 -11
- package/common/cpp/audioapi/utils/AudioBus.cpp +79 -149
- package/common/cpp/audioapi/utils/AudioBus.h +17 -14
- package/common/cpp/audioapi/utils/AudioFileProperties.cpp +92 -0
- package/common/cpp/audioapi/utils/AudioFileProperties.h +76 -0
- package/common/cpp/audioapi/utils/CircularAudioArray.cpp +6 -18
- package/common/cpp/audioapi/utils/CircularOverflowableAudioArray.cpp +6 -10
- package/common/cpp/audioapi/utils/CircularOverflowableAudioArray.h +2 -2
- package/common/cpp/audioapi/utils/Result.hpp +286 -0
- package/common/cpp/audioapi/utils/ThreadPool.hpp +59 -1
- package/common/cpp/audioapi/utils/UnitConversion.h +9 -0
- package/common/cpp/test/CMakeLists.txt +20 -14
- package/common/cpp/test/src/AudioParamTest.cpp +4 -3
- package/common/cpp/test/src/AudioScheduledSourceTest.cpp +113 -0
- package/common/cpp/test/src/ConstantSourceTest.cpp +5 -7
- package/common/cpp/test/src/DelayTest.cpp +108 -0
- package/common/cpp/test/src/GainTest.cpp +4 -5
- package/common/cpp/test/src/IIRFilterTest.cpp +153 -0
- package/common/cpp/test/src/MockAudioEventHandlerRegistry.h +19 -11
- package/common/cpp/test/src/OscillatorTest.cpp +2 -1
- package/common/cpp/test/src/StereoPannerTest.cpp +6 -9
- package/common/cpp/test/src/biquad/BiquadFilterChromium.cpp +372 -0
- package/common/cpp/test/src/biquad/BiquadFilterChromium.h +65 -0
- package/common/cpp/test/src/biquad/BiquadFilterTest.cpp +272 -0
- package/common/cpp/test/src/biquad/BiquadFilterTest.h +47 -0
- package/ios/audioapi/ios/AudioAPIModule.h +2 -1
- package/ios/audioapi/ios/AudioAPIModule.mm +44 -20
- package/ios/audioapi/ios/core/IOSAudioPlayer.h +2 -2
- package/ios/audioapi/ios/core/IOSAudioPlayer.mm +7 -6
- package/ios/audioapi/ios/core/IOSAudioRecorder.h +26 -18
- package/ios/audioapi/ios/core/IOSAudioRecorder.mm +193 -53
- package/ios/audioapi/ios/core/NativeAudioPlayer.m +16 -13
- package/ios/audioapi/ios/core/NativeAudioRecorder.h +4 -0
- package/ios/audioapi/ios/core/NativeAudioRecorder.m +42 -7
- package/ios/audioapi/ios/core/utils/AudioDecoder.mm +21 -4
- package/ios/audioapi/ios/core/utils/FileOptions.h +31 -0
- package/ios/audioapi/ios/core/utils/FileOptions.mm +177 -0
- package/ios/audioapi/ios/core/{IOSAudioFileWriter.h → utils/IOSFileWriter.h} +16 -14
- package/ios/audioapi/ios/core/utils/IOSFileWriter.mm +224 -0
- package/ios/audioapi/ios/core/{IOSRecorderCallback.h → utils/IOSRecorderCallback.h} +7 -17
- package/ios/audioapi/ios/core/utils/IOSRecorderCallback.mm +172 -0
- package/ios/audioapi/ios/system/AudioEngine.h +19 -16
- package/ios/audioapi/ios/system/AudioEngine.mm +101 -134
- package/ios/audioapi/ios/system/AudioSessionManager.h +25 -11
- package/ios/audioapi/ios/system/AudioSessionManager.mm +273 -202
- package/ios/audioapi/ios/system/LockScreenManager.mm +39 -23
- package/ios/audioapi/ios/system/NotificationManager.mm +37 -52
- package/lib/commonjs/AudioAPIModule/AudioAPIModule.js +90 -0
- package/lib/commonjs/AudioAPIModule/AudioAPIModule.js.map +1 -0
- package/lib/commonjs/AudioAPIModule/globals.d.js +6 -0
- package/lib/commonjs/AudioAPIModule/globals.d.js.map +1 -0
- package/lib/commonjs/AudioAPIModule/index.js +14 -0
- package/lib/commonjs/AudioAPIModule/index.js.map +1 -0
- package/lib/commonjs/api.js +18 -12
- package/lib/commonjs/api.js.map +1 -1
- package/lib/commonjs/api.web.js +8 -0
- package/lib/commonjs/api.web.js.map +1 -1
- package/lib/commonjs/core/AudioBufferBaseSourceNode.js +3 -0
- package/lib/commonjs/core/AudioBufferBaseSourceNode.js.map +1 -1
- package/lib/commonjs/core/AudioBufferQueueSourceNode.js +5 -2
- package/lib/commonjs/core/AudioBufferQueueSourceNode.js.map +1 -1
- package/lib/commonjs/core/AudioContext.js +5 -8
- package/lib/commonjs/core/AudioContext.js.map +1 -1
- package/lib/commonjs/core/AudioNode.js +1 -1
- package/lib/commonjs/core/AudioNode.js.map +1 -1
- package/lib/commonjs/core/AudioParam.js +18 -11
- package/lib/commonjs/core/AudioParam.js.map +1 -1
- package/lib/commonjs/core/AudioRecorder.js +43 -55
- package/lib/commonjs/core/AudioRecorder.js.map +1 -1
- package/lib/commonjs/core/BaseAudioContext.js +61 -30
- package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
- package/lib/commonjs/core/ConvolverNode.js +37 -0
- package/lib/commonjs/core/ConvolverNode.js.map +1 -0
- package/lib/commonjs/core/DelayNode.js +17 -0
- package/lib/commonjs/core/DelayNode.js.map +1 -0
- package/lib/commonjs/core/IIRFilterNode.js +19 -0
- package/lib/commonjs/core/IIRFilterNode.js.map +1 -0
- package/lib/commonjs/core/OfflineAudioContext.js +3 -6
- package/lib/commonjs/core/OfflineAudioContext.js.map +1 -1
- package/lib/commonjs/plugin/withAudioAPI.js +46 -0
- package/lib/commonjs/plugin/withAudioAPI.js.map +1 -1
- package/lib/commonjs/specs/NativeAudioAPIModule.js.map +1 -1
- package/lib/commonjs/system/AudioManager.js +4 -7
- package/lib/commonjs/system/AudioManager.js.map +1 -1
- package/lib/commonjs/types.js +16 -23
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/utils/filePresets.js +43 -0
- package/lib/commonjs/utils/filePresets.js.map +1 -0
- package/lib/commonjs/utils/index.js +12 -27
- package/lib/commonjs/utils/index.js.map +1 -1
- package/lib/commonjs/web-core/AudioContext.js +21 -1
- package/lib/commonjs/web-core/AudioContext.js.map +1 -1
- package/lib/commonjs/web-core/ConvolverNode.js +40 -0
- package/lib/commonjs/web-core/ConvolverNode.js.map +1 -0
- package/lib/commonjs/web-core/ConvolverNodeOptions.js +6 -0
- package/lib/commonjs/web-core/ConvolverNodeOptions.js.map +1 -0
- package/lib/commonjs/web-core/DelayNode.js +17 -0
- package/lib/commonjs/web-core/DelayNode.js.map +1 -0
- package/lib/commonjs/web-core/IIRFilterNode.js +19 -0
- package/lib/commonjs/web-core/IIRFilterNode.js.map +1 -0
- package/lib/commonjs/web-core/OfflineAudioContext.js +20 -0
- package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
- package/lib/module/AudioAPIModule/AudioAPIModule.js +87 -0
- package/lib/module/AudioAPIModule/AudioAPIModule.js.map +1 -0
- package/lib/module/AudioAPIModule/globals.d.js +4 -0
- package/lib/module/AudioAPIModule/globals.d.js.map +1 -0
- package/lib/module/AudioAPIModule/index.js +4 -0
- package/lib/module/AudioAPIModule/index.js.map +1 -0
- package/lib/module/api.js +3 -12
- package/lib/module/api.js.map +1 -1
- package/lib/module/api.web.js +1 -0
- package/lib/module/api.web.js.map +1 -1
- package/lib/module/core/AudioBufferBaseSourceNode.js +3 -0
- package/lib/module/core/AudioBufferBaseSourceNode.js.map +1 -1
- package/lib/module/core/AudioBufferQueueSourceNode.js +5 -2
- package/lib/module/core/AudioBufferQueueSourceNode.js.map +1 -1
- package/lib/module/core/AudioContext.js +5 -8
- package/lib/module/core/AudioContext.js.map +1 -1
- package/lib/module/core/AudioNode.js +1 -1
- package/lib/module/core/AudioNode.js.map +1 -1
- package/lib/module/core/AudioParam.js +18 -11
- package/lib/module/core/AudioParam.js.map +1 -1
- package/lib/module/core/AudioRecorder.js +44 -56
- package/lib/module/core/AudioRecorder.js.map +1 -1
- package/lib/module/core/BaseAudioContext.js +63 -32
- package/lib/module/core/BaseAudioContext.js.map +1 -1
- package/lib/module/core/ConvolverNode.js +31 -0
- package/lib/module/core/ConvolverNode.js.map +1 -0
- package/lib/module/core/DelayNode.js +11 -0
- package/lib/module/core/DelayNode.js.map +1 -0
- package/lib/module/core/IIRFilterNode.js +13 -0
- package/lib/module/core/IIRFilterNode.js.map +1 -0
- package/lib/module/core/OfflineAudioContext.js +3 -6
- package/lib/module/core/OfflineAudioContext.js.map +1 -1
- package/lib/module/plugin/withAudioAPI.js +47 -1
- package/lib/module/plugin/withAudioAPI.js.map +1 -1
- package/lib/module/specs/NativeAudioAPIModule.js.map +1 -1
- package/lib/module/system/AudioManager.js +4 -7
- package/lib/module/system/AudioManager.js.map +1 -1
- package/lib/module/types.js +15 -22
- package/lib/module/types.js.map +1 -1
- package/lib/module/utils/filePresets.js +39 -0
- package/lib/module/utils/filePresets.js.map +1 -0
- package/lib/module/utils/index.js +10 -10
- package/lib/module/utils/index.js.map +1 -1
- package/lib/module/web-core/AudioContext.js +21 -1
- package/lib/module/web-core/AudioContext.js.map +1 -1
- package/lib/module/web-core/ConvolverNode.js +34 -0
- package/lib/module/web-core/ConvolverNode.js.map +1 -0
- package/lib/module/web-core/ConvolverNodeOptions.js +4 -0
- package/lib/module/web-core/ConvolverNodeOptions.js.map +1 -0
- package/lib/module/web-core/DelayNode.js +11 -0
- package/lib/module/web-core/DelayNode.js.map +1 -0
- package/lib/module/web-core/IIRFilterNode.js +13 -0
- package/lib/module/web-core/IIRFilterNode.js.map +1 -0
- package/lib/module/web-core/OfflineAudioContext.js +20 -0
- package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
- package/lib/typescript/AudioAPIModule/AudioAPIModule.d.ts +36 -0
- package/lib/typescript/AudioAPIModule/AudioAPIModule.d.ts.map +1 -0
- package/lib/typescript/AudioAPIModule/index.d.ts +2 -0
- package/lib/typescript/AudioAPIModule/index.d.ts.map +1 -0
- package/lib/typescript/api.d.ts +3 -9
- package/lib/typescript/api.d.ts.map +1 -1
- package/lib/typescript/api.web.d.ts +1 -0
- package/lib/typescript/api.web.d.ts.map +1 -1
- package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts +1 -0
- package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts.map +1 -1
- package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts +1 -1
- package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts.map +1 -1
- package/lib/typescript/core/AudioContext.d.ts +1 -1
- package/lib/typescript/core/AudioContext.d.ts.map +1 -1
- package/lib/typescript/core/AudioNode.d.ts +2 -1
- package/lib/typescript/core/AudioNode.d.ts.map +1 -1
- package/lib/typescript/core/AudioParam.d.ts.map +1 -1
- package/lib/typescript/core/AudioRecorder.d.ts +13 -6
- package/lib/typescript/core/AudioRecorder.d.ts.map +1 -1
- package/lib/typescript/core/BaseAudioContext.d.ts +9 -3
- package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
- package/lib/typescript/core/ConvolverNode.d.ts +12 -0
- package/lib/typescript/core/ConvolverNode.d.ts.map +1 -0
- package/lib/typescript/core/DelayNode.d.ts +9 -0
- package/lib/typescript/core/DelayNode.d.ts.map +1 -0
- package/lib/typescript/core/IIRFilterNode.d.ts +5 -0
- package/lib/typescript/core/IIRFilterNode.d.ts.map +1 -0
- package/lib/typescript/core/OfflineAudioContext.d.ts +1 -1
- package/lib/typescript/core/OfflineAudioContext.d.ts.map +1 -1
- package/lib/typescript/events/types.d.ts +4 -0
- package/lib/typescript/events/types.d.ts.map +1 -1
- package/lib/typescript/interfaces.d.ts +34 -34
- package/lib/typescript/interfaces.d.ts.map +1 -1
- package/lib/typescript/plugin/withAudioAPI.d.ts +1 -0
- package/lib/typescript/plugin/withAudioAPI.d.ts.map +1 -1
- package/lib/typescript/specs/NativeAudioAPIModule.d.ts +2 -1
- package/lib/typescript/specs/NativeAudioAPIModule.d.ts.map +1 -1
- package/lib/typescript/system/AudioManager.d.ts +3 -2
- package/lib/typescript/system/AudioManager.d.ts.map +1 -1
- package/lib/typescript/types.d.ts +42 -34
- package/lib/typescript/types.d.ts.map +1 -1
- package/lib/typescript/utils/filePresets.d.ts +9 -0
- package/lib/typescript/utils/filePresets.d.ts.map +1 -0
- package/lib/typescript/utils/index.d.ts +1 -8
- package/lib/typescript/utils/index.d.ts.map +1 -1
- package/lib/typescript/web-core/AudioContext.d.ts +9 -2
- package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
- package/lib/typescript/web-core/BaseAudioContext.d.ts +7 -1
- package/lib/typescript/web-core/BaseAudioContext.d.ts.map +1 -1
- package/lib/typescript/web-core/ConvolverNode.d.ts +11 -0
- package/lib/typescript/web-core/ConvolverNode.d.ts.map +1 -0
- package/lib/typescript/web-core/ConvolverNodeOptions.d.ts +6 -0
- package/lib/typescript/web-core/ConvolverNodeOptions.d.ts.map +1 -0
- package/lib/typescript/web-core/DelayNode.d.ts +8 -0
- package/lib/typescript/web-core/DelayNode.d.ts.map +1 -0
- package/lib/typescript/web-core/IIRFilterNode.d.ts +5 -0
- package/lib/typescript/web-core/IIRFilterNode.d.ts.map +1 -0
- package/lib/typescript/web-core/OfflineAudioContext.d.ts +8 -1
- package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
- package/package.json +11 -4
- package/scripts/download-prebuilt-binaries.sh +61 -0
- package/scripts/rnaa_utils.rb +8 -0
- package/scripts/validate-worklets-version.js +27 -0
- package/src/AudioAPIModule/AudioAPIModule.ts +122 -0
- package/src/AudioAPIModule/globals.d.ts +33 -0
- package/src/AudioAPIModule/index.ts +1 -0
- package/src/api.ts +4 -52
- package/src/api.web.ts +1 -0
- package/src/core/AudioBufferBaseSourceNode.ts +8 -0
- package/src/core/AudioBufferQueueSourceNode.ts +8 -2
- package/src/core/AudioContext.ts +5 -8
- package/src/core/AudioNode.ts +4 -3
- package/src/core/AudioParam.ts +18 -11
- package/src/core/AudioRecorder.ts +63 -78
- package/src/core/BaseAudioContext.ts +120 -54
- package/src/core/ConvolverNode.ts +35 -0
- package/src/core/DelayNode.ts +13 -0
- package/src/core/IIRFilterNode.ts +25 -0
- package/src/core/OfflineAudioContext.ts +4 -7
- package/src/events/types.ts +5 -0
- package/src/interfaces.ts +51 -34
- package/src/plugin/withAudioAPI.ts +61 -0
- package/src/specs/NativeAudioAPIModule.ts +3 -2
- package/src/system/AudioManager.ts +13 -19
- package/src/types.ts +45 -36
- package/src/utils/filePresets.ts +47 -0
- package/src/utils/index.ts +13 -19
- package/src/web-core/AudioContext.tsx +40 -1
- package/src/web-core/BaseAudioContext.tsx +11 -1
- package/src/web-core/ConvolverNode.tsx +43 -0
- package/src/web-core/ConvolverNodeOptions.tsx +6 -0
- package/src/web-core/DelayNode.tsx +12 -0
- package/src/web-core/IIRFilterNode.tsx +25 -0
- package/src/web-core/OfflineAudioContext.tsx +39 -0
- package/android/src/main/cpp/audioapi/android/core/utils/FileUtils.h +0 -34
- package/android/src/main/cpp/audioapi/android/core/utils/FileUtilts.cpp +0 -133
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.cpp +0 -154
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.h +0 -41
- package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.cpp +0 -47
- package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.h +0 -28
- package/common/cpp/audioapi/libs/ffmpeg/INSTRUCTIONS.md +0 -32
- package/common/cpp/audioapi/libs/ffmpeg/create_xcframework.sh +0 -111
- package/common/cpp/audioapi/libs/ffmpeg/ffmpeg_setup.sh +0 -391
- package/ios/audioapi/ios/core/IOSAudioFileOptions.h +0 -36
- package/ios/audioapi/ios/core/IOSAudioFileOptions.mm +0 -140
- package/ios/audioapi/ios/core/IOSAudioFileWriter.mm +0 -223
- package/ios/audioapi/ios/core/IOSRecorderCallback.mm +0 -189
- package/lib/commonjs/utils/bitEnums.js +0 -33
- package/lib/commonjs/utils/bitEnums.js.map +0 -1
- package/lib/module/utils/bitEnums.js +0 -27
- package/lib/module/utils/bitEnums.js.map +0 -1
- package/lib/typescript/utils/bitEnums.d.ts +0 -4
- package/lib/typescript/utils/bitEnums.d.ts.map +0 -1
- package/metro-config/index.d.ts +0 -5
- package/metro-config/index.js +0 -41
- package/metro-config/tsconfig.json +0 -3
- package/src/utils/bitEnums.ts +0 -51
- package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/Info.plist +5 -5
- package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64/libavcodec.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64_x86_64-simulator/libavcodec.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64/libavformat.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64_x86_64-simulator/libavformat.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/Info.plist +5 -5
- package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64/libavutil.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64_x86_64-simulator/libavutil.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/Info.plist +5 -5
- /package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64/libswresample.framework/Info.plist +0 -0
- /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,101 @@
|
|
|
1
|
+
|
|
2
|
+
#include <audioapi/core/utils/AudioRecorderCallback.h>
|
|
3
|
+
|
|
4
|
+
#include <audioapi/HostObjects/sources/AudioBufferHostObject.h>
|
|
5
|
+
#include <audioapi/events/AudioEventHandlerRegistry.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
|
+
AudioRecorderCallback::AudioRecorderCallback(
|
|
25
|
+
const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
|
|
26
|
+
float sampleRate,
|
|
27
|
+
size_t bufferLength,
|
|
28
|
+
int channelCount,
|
|
29
|
+
uint64_t callbackId)
|
|
30
|
+
: sampleRate_(sampleRate),
|
|
31
|
+
bufferLength_(bufferLength),
|
|
32
|
+
channelCount_(channelCount),
|
|
33
|
+
callbackId_(callbackId),
|
|
34
|
+
audioEventHandlerRegistry_(audioEventHandlerRegistry) {
|
|
35
|
+
ringBufferSize_ = std::max(bufferLength * 2, static_cast<size_t>(8192));
|
|
36
|
+
circularBus_.resize(channelCount_);
|
|
37
|
+
|
|
38
|
+
for (size_t i = 0; i < channelCount_; ++i) {
|
|
39
|
+
circularBus_[i] = std::make_shared<CircularAudioArray>(ringBufferSize_);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
isInitialized_.store(true, std::memory_order_release);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
AudioRecorderCallback::~AudioRecorderCallback() {
|
|
46
|
+
isInitialized_.store(false, std::memory_order_release);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/// @brief Emits audio data from the circular buffer when enough frames are available.
|
|
50
|
+
/// @param flush If true, emits all available data regardless of buffer length.
|
|
51
|
+
void AudioRecorderCallback::emitAudioData(bool flush) {
|
|
52
|
+
size_t sizeLimit = flush ? circularBus_[0]->getNumberOfAvailableFrames() : bufferLength_;
|
|
53
|
+
|
|
54
|
+
while (circularBus_[0]->getNumberOfAvailableFrames() >= sizeLimit) {
|
|
55
|
+
auto bus = std::make_shared<AudioBus>(sizeLimit, channelCount_, sampleRate_);
|
|
56
|
+
|
|
57
|
+
for (int i = 0; i < channelCount_; ++i) {
|
|
58
|
+
auto *outputChannel = bus->getChannel(i)->getData();
|
|
59
|
+
circularBus_[i]->pop_front(outputChannel, sizeLimit);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
invokeCallback(bus, static_cast<int>(sizeLimit));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
void AudioRecorderCallback::invokeCallback(const std::shared_ptr<AudioBus> &bus, int numFrames) {
|
|
67
|
+
auto audioBuffer = std::make_shared<AudioBuffer>(bus);
|
|
68
|
+
auto audioBufferHostObject = std::make_shared<AudioBufferHostObject>(audioBuffer);
|
|
69
|
+
|
|
70
|
+
std::unordered_map<std::string, EventValue> eventPayload = {};
|
|
71
|
+
eventPayload.insert({"buffer", audioBufferHostObject});
|
|
72
|
+
eventPayload.insert({"numFrames", numFrames});
|
|
73
|
+
|
|
74
|
+
if (audioEventHandlerRegistry_) {
|
|
75
|
+
audioEventHandlerRegistry_->invokeHandlerWithEventBody("audioReady", callbackId_, eventPayload);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
void AudioRecorderCallback::setOnErrorCallback(uint64_t callbackId) {
|
|
80
|
+
errorCallbackId_.store(callbackId, std::memory_order_release);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
void AudioRecorderCallback::clearOnErrorCallback() {
|
|
84
|
+
errorCallbackId_.store(0, std::memory_order_release);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/// @brief Invokes the error callback with the provided message.
|
|
88
|
+
/// @param message The error message to be sent to the callback.
|
|
89
|
+
void AudioRecorderCallback::invokeOnErrorCallback(const std::string &message) {
|
|
90
|
+
uint64_t callbackId = errorCallbackId_.load(std::memory_order_acquire);
|
|
91
|
+
|
|
92
|
+
if (audioEventHandlerRegistry_ == nullptr || callbackId == 0) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
std::unordered_map<std::string, EventValue> eventPayload = {};
|
|
97
|
+
eventPayload.insert({"message", message});
|
|
98
|
+
audioEventHandlerRegistry_->invokeHandlerWithEventBody("error", callbackId, eventPayload);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
} // namespace audioapi
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <audioapi/utils/Result.hpp>
|
|
4
|
+
#include <memory>
|
|
5
|
+
#include <string>
|
|
6
|
+
#include <vector>
|
|
7
|
+
|
|
8
|
+
namespace audioapi {
|
|
9
|
+
|
|
10
|
+
class AudioBus;
|
|
11
|
+
class AudioArray;
|
|
12
|
+
class CircularAudioArray;
|
|
13
|
+
class AudioEventHandlerRegistry;
|
|
14
|
+
|
|
15
|
+
class AudioRecorderCallback {
|
|
16
|
+
public:
|
|
17
|
+
AudioRecorderCallback(
|
|
18
|
+
const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
|
|
19
|
+
float sampleRate,
|
|
20
|
+
size_t bufferLength,
|
|
21
|
+
int channelCount,
|
|
22
|
+
uint64_t callbackId);
|
|
23
|
+
virtual ~AudioRecorderCallback();
|
|
24
|
+
|
|
25
|
+
virtual void cleanup() = 0;
|
|
26
|
+
|
|
27
|
+
void emitAudioData(bool flush = false);
|
|
28
|
+
void invokeCallback(const std::shared_ptr<AudioBus> &bus, int numFrames);
|
|
29
|
+
|
|
30
|
+
void setOnErrorCallback(uint64_t callbackId);
|
|
31
|
+
void clearOnErrorCallback();
|
|
32
|
+
void invokeOnErrorCallback(const std::string &message);
|
|
33
|
+
|
|
34
|
+
protected:
|
|
35
|
+
std::atomic<bool> isInitialized_{false};
|
|
36
|
+
|
|
37
|
+
float sampleRate_;
|
|
38
|
+
size_t bufferLength_;
|
|
39
|
+
int channelCount_;
|
|
40
|
+
uint64_t callbackId_;
|
|
41
|
+
size_t ringBufferSize_;
|
|
42
|
+
|
|
43
|
+
std::atomic<uint64_t> errorCallbackId_{0};
|
|
44
|
+
|
|
45
|
+
std::shared_ptr<AudioEventHandlerRegistry> audioEventHandlerRegistry_;
|
|
46
|
+
|
|
47
|
+
// TODO: CircularAudioBus
|
|
48
|
+
std::vector<std::shared_ptr<CircularAudioArray>> circularBus_;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
} // namespace audioapi
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
#include <audioapi/utils/AudioArray.h>
|
|
6
6
|
#include <audioapi/utils/AudioBus.h>
|
|
7
7
|
#include <cstdint>
|
|
8
|
+
#include <memory>
|
|
9
|
+
#include <vector>
|
|
8
10
|
|
|
9
11
|
namespace audioapi {
|
|
10
12
|
|
|
@@ -43,8 +45,8 @@ std::shared_ptr<AudioBuffer> AudioStretcher::changePlaybackSpeed(
|
|
|
43
45
|
outputChannels,
|
|
44
46
|
0x1);
|
|
45
47
|
|
|
46
|
-
int maxOutputFrames =
|
|
47
|
-
stretcher, static_cast<int>(numFrames), 1 / playbackSpeed);
|
|
48
|
+
int maxOutputFrames =
|
|
49
|
+
stretch_output_capacity(stretcher, static_cast<int>(numFrames), 1 / playbackSpeed);
|
|
48
50
|
std::vector<int16_t> stretchedBuffer(maxOutputFrames * outputChannels);
|
|
49
51
|
|
|
50
52
|
int outputFrames = stretch_samples(
|
|
@@ -54,13 +56,11 @@ std::shared_ptr<AudioBuffer> AudioStretcher::changePlaybackSpeed(
|
|
|
54
56
|
stretchedBuffer.data(),
|
|
55
57
|
1 / playbackSpeed);
|
|
56
58
|
|
|
57
|
-
outputFrames +=
|
|
58
|
-
stretch_flush(stretcher, stretchedBuffer.data() + (outputFrames));
|
|
59
|
+
outputFrames += stretch_flush(stretcher, stretchedBuffer.data() + (outputFrames));
|
|
59
60
|
stretchedBuffer.resize(outputFrames * outputChannels);
|
|
60
61
|
stretch_deinit(stretcher);
|
|
61
62
|
|
|
62
|
-
auto audioBus =
|
|
63
|
-
std::make_shared<AudioBus>(outputFrames, outputChannels, sampleRate);
|
|
63
|
+
auto audioBus = std::make_shared<AudioBus>(outputFrames, outputChannels, sampleRate);
|
|
64
64
|
|
|
65
65
|
for (int ch = 0; ch < outputChannels; ++ch) {
|
|
66
66
|
auto channelData = audioBus->getChannel(ch)->getData();
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
#include <cmath>
|
|
4
4
|
#include <limits>
|
|
5
|
+
#include <numbers>
|
|
5
6
|
|
|
6
7
|
// https://webaudio.github.io/web-audio-api/
|
|
7
8
|
|
|
@@ -9,17 +10,20 @@ namespace audioapi {
|
|
|
9
10
|
// audio
|
|
10
11
|
static constexpr int RENDER_QUANTUM_SIZE = 128;
|
|
11
12
|
static constexpr size_t MAX_FFT_SIZE = 32768;
|
|
13
|
+
static constexpr int MAX_CHANNEL_COUNT = 32;
|
|
12
14
|
|
|
13
15
|
// stretcher
|
|
14
16
|
static constexpr float UPPER_FREQUENCY_LIMIT_DETECTION = 333.0f;
|
|
15
17
|
static constexpr float LOWER_FREQUENCY_LIMIT_DETECTION = 55.0f;
|
|
16
18
|
|
|
17
19
|
// general
|
|
18
|
-
static constexpr float MOST_POSITIVE_SINGLE_FLOAT =
|
|
19
|
-
|
|
20
|
+
static constexpr float MOST_POSITIVE_SINGLE_FLOAT =
|
|
21
|
+
static_cast<float>(std::numeric_limits<float>::max());
|
|
22
|
+
static constexpr float MOST_NEGATIVE_SINGLE_FLOAT =
|
|
23
|
+
static_cast<float>(std::numeric_limits<float>::lowest());
|
|
20
24
|
static float LOG2_MOST_POSITIVE_SINGLE_FLOAT = std::log2(MOST_POSITIVE_SINGLE_FLOAT);
|
|
21
25
|
static float LOG10_MOST_POSITIVE_SINGLE_FLOAT = std::log10(MOST_POSITIVE_SINGLE_FLOAT);
|
|
22
|
-
static constexpr float PI =
|
|
26
|
+
static constexpr float PI = std::numbers::pi_v<float>;
|
|
23
27
|
|
|
24
28
|
// buffer sizes
|
|
25
29
|
static constexpr size_t PROMISE_VENDOR_THREAD_POOL_WORKER_COUNT = 4;
|
|
@@ -20,16 +20,16 @@ class ParamChangeEvent {
|
|
|
20
20
|
ParamChangeEventType type);
|
|
21
21
|
|
|
22
22
|
ParamChangeEvent(const ParamChangeEvent &other) = delete;
|
|
23
|
-
ParamChangeEvent&
|
|
23
|
+
ParamChangeEvent &operator=(const ParamChangeEvent &other) = delete;
|
|
24
24
|
|
|
25
25
|
explicit ParamChangeEvent(ParamChangeEvent &&other) noexcept
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
ParamChangeEvent&
|
|
26
|
+
: startTime_(other.startTime_),
|
|
27
|
+
endTime_(other.endTime_),
|
|
28
|
+
calculateValue_(std::move(other.calculateValue_)),
|
|
29
|
+
startValue_(other.startValue_),
|
|
30
|
+
endValue_(other.endValue_),
|
|
31
|
+
type_(other.type_) {}
|
|
32
|
+
ParamChangeEvent &operator=(ParamChangeEvent &&other) noexcept {
|
|
33
33
|
if (this != &other) {
|
|
34
34
|
startTime_ = other.startTime_;
|
|
35
35
|
endTime_ = other.endTime_;
|
|
@@ -53,7 +53,7 @@ class ParamChangeEvent {
|
|
|
53
53
|
[[nodiscard]] inline float getStartValue() const noexcept {
|
|
54
54
|
return startValue_;
|
|
55
55
|
}
|
|
56
|
-
[[nodiscard]] inline const std::function<float(double, double, float, float, double)
|
|
56
|
+
[[nodiscard]] inline const std::function<float(double, double, float, float, double)> &
|
|
57
57
|
getCalculateValue() const noexcept {
|
|
58
58
|
return calculateValue_;
|
|
59
59
|
}
|
|
@@ -2,34 +2,28 @@
|
|
|
2
2
|
|
|
3
3
|
#include <jsi/jsi.h>
|
|
4
4
|
|
|
5
|
-
#include <string>
|
|
6
5
|
#include <memory>
|
|
6
|
+
#include <string>
|
|
7
7
|
|
|
8
|
-
#
|
|
9
|
-
|
|
10
|
-
/// they should be accessible if someone has react-native-worklets in node_modules
|
|
11
|
-
#if __has_include(<worklets/WorkletRuntime/WorkletRuntime.h>)
|
|
12
|
-
#define RN_AUDIO_API_ENABLE_WORKLETS 1
|
|
13
|
-
#else
|
|
14
|
-
#define RN_AUDIO_API_ENABLE_WORKLETS 0
|
|
15
|
-
#endif
|
|
8
|
+
#if ANDROID
|
|
9
|
+
#include <fbjni/detail/Environment.h>
|
|
16
10
|
#endif
|
|
17
11
|
|
|
18
12
|
#ifndef RN_AUDIO_API_TEST
|
|
19
|
-
|
|
13
|
+
#define RN_AUDIO_API_TEST 0
|
|
20
14
|
#endif
|
|
21
15
|
|
|
22
16
|
#if RN_AUDIO_API_ENABLE_WORKLETS
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
17
|
+
#include <worklets/NativeModules/WorkletsModuleProxy.h>
|
|
18
|
+
#include <worklets/SharedItems/Serializable.h>
|
|
19
|
+
#include <worklets/WorkletRuntime/WorkletRuntime.h>
|
|
20
|
+
#if ANDROID
|
|
21
|
+
#include <worklets/android/WorkletsModule.h>
|
|
22
|
+
#endif
|
|
29
23
|
#else
|
|
30
24
|
|
|
31
25
|
#define RN_AUDIO_API_WORKLETS_DISABLED_ERROR \
|
|
32
|
-
std::runtime_error(
|
|
26
|
+
std::runtime_error( \
|
|
33
27
|
"Worklets are disabled. Please install react-native-worklets or check if you have supported version to enable these features.");
|
|
34
28
|
|
|
35
29
|
/// @brief Dummy implementation of worklets for non-worklet builds they should do nothing and mock necessary methods
|
|
@@ -42,28 +36,24 @@ class MessageQueueThread {};
|
|
|
42
36
|
class WorkletsModuleProxy {};
|
|
43
37
|
class WorkletRuntime {
|
|
44
38
|
public:
|
|
45
|
-
explicit WorkletRuntime(
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
jsi::Value executeSync(const std::function<jsi::Value(jsi::Runtime &)> &job) const {
|
|
39
|
+
explicit WorkletRuntime(
|
|
40
|
+
uint64_t,
|
|
41
|
+
const std::shared_ptr<MessageQueueThread> &,
|
|
42
|
+
const std::string &,
|
|
43
|
+
const bool){throw RN_AUDIO_API_WORKLETS_DISABLED_ERROR} jsi::Runtime &getJSIRuntime() const {
|
|
44
|
+
throw RN_AUDIO_API_WORKLETS_DISABLED_ERROR} jsi::Value
|
|
45
|
+
executeSync(jsi::Runtime &rt, const jsi::Value &worklet) const {
|
|
46
|
+
throw RN_AUDIO_API_WORKLETS_DISABLED_ERROR} jsi::Value
|
|
47
|
+
executeSync(std::function<jsi::Value(jsi::Runtime &)> &&job) const {
|
|
48
|
+
throw RN_AUDIO_API_WORKLETS_DISABLED_ERROR} jsi::Value
|
|
49
|
+
executeSync(const std::function<jsi::Value(jsi::Runtime &)> &job) const {
|
|
58
50
|
throw RN_AUDIO_API_WORKLETS_DISABLED_ERROR
|
|
59
51
|
}
|
|
60
52
|
};
|
|
61
53
|
class SerializableWorklet {
|
|
62
54
|
public:
|
|
63
|
-
SerializableWorklet(jsi::Runtime*, const jsi::Object &)
|
|
64
|
-
|
|
65
|
-
}
|
|
66
|
-
jsi::Value toJSValue(jsi::Runtime &rt) {
|
|
55
|
+
SerializableWorklet(jsi::Runtime *, const jsi::Object &){
|
|
56
|
+
throw RN_AUDIO_API_WORKLETS_DISABLED_ERROR} jsi::Value toJSValue(jsi::Runtime &rt) {
|
|
67
57
|
throw RN_AUDIO_API_WORKLETS_DISABLED_ERROR
|
|
68
58
|
}
|
|
69
59
|
};
|
|
@@ -78,4 +68,13 @@ class SerializableWorklet {
|
|
|
78
68
|
struct RuntimeRegistry {
|
|
79
69
|
std::weak_ptr<worklets::WorkletRuntime> uiRuntime;
|
|
80
70
|
std::shared_ptr<worklets::WorkletRuntime> audioRuntime;
|
|
71
|
+
|
|
72
|
+
#if ANDROID
|
|
73
|
+
~RuntimeRegistry() {
|
|
74
|
+
facebook::jni::ThreadScope::WithClassLoader([this]() {
|
|
75
|
+
uiRuntime.reset();
|
|
76
|
+
audioRuntime.reset();
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
#endif
|
|
81
80
|
};
|
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
#include <audioapi/core/utils/worklets/WorkletsRunner.h>
|
|
2
|
+
#include <memory>
|
|
3
|
+
#include <utility>
|
|
2
4
|
|
|
3
5
|
namespace audioapi {
|
|
4
6
|
|
|
5
7
|
WorkletsRunner::WorkletsRunner(
|
|
6
8
|
std::weak_ptr<worklets::WorkletRuntime> weakRuntime,
|
|
7
|
-
std::shared_ptr<worklets::SerializableWorklet> shareableWorklet,
|
|
9
|
+
const std::shared_ptr<worklets::SerializableWorklet> &shareableWorklet,
|
|
8
10
|
bool shouldLockRuntime)
|
|
9
|
-
: weakRuntime_(std::move(weakRuntime)),
|
|
10
|
-
shouldLockRuntime(shouldLockRuntime) {
|
|
11
|
+
: weakRuntime_(std::move(weakRuntime)), shouldLockRuntime(shouldLockRuntime) {
|
|
11
12
|
auto strongRuntime = weakRuntime_.lock();
|
|
12
13
|
if (strongRuntime == nullptr) {
|
|
13
14
|
return;
|
|
14
15
|
}
|
|
15
16
|
#if RN_AUDIO_API_ENABLE_WORKLETS
|
|
16
17
|
unsafeRuntimePtr = &strongRuntime->getJSIRuntime();
|
|
17
|
-
strongRuntime->executeSync(
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
});
|
|
18
|
+
strongRuntime->executeSync([this, shareableWorklet](jsi::Runtime &rt) -> jsi::Value {
|
|
19
|
+
/// Placement new to avoid dynamic memory allocation
|
|
20
|
+
new (reinterpret_cast<jsi::Function *>(&unsafeWorklet))
|
|
21
|
+
jsi::Function(shareableWorklet->toJSValue(*unsafeRuntimePtr)
|
|
22
|
+
.asObject(*unsafeRuntimePtr)
|
|
23
|
+
.asFunction(*unsafeRuntimePtr));
|
|
24
|
+
return jsi::Value::undefined();
|
|
25
|
+
});
|
|
26
26
|
workletInitialized = true;
|
|
27
27
|
#else
|
|
28
28
|
unsafeRuntimePtr = nullptr;
|
|
@@ -33,8 +33,8 @@ WorkletsRunner::WorkletsRunner(
|
|
|
33
33
|
WorkletsRunner::WorkletsRunner(WorkletsRunner &&other)
|
|
34
34
|
: weakRuntime_(std::move(other.weakRuntime_)),
|
|
35
35
|
unsafeRuntimePtr(other.unsafeRuntimePtr),
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
workletInitialized(other.workletInitialized),
|
|
37
|
+
shouldLockRuntime(other.shouldLockRuntime) {
|
|
38
38
|
if (workletInitialized) {
|
|
39
39
|
std::memcpy(&unsafeWorklet, &other.unsafeWorklet, sizeof(unsafeWorklet));
|
|
40
40
|
other.workletInitialized = false;
|
|
@@ -56,8 +56,7 @@ WorkletsRunner::~WorkletsRunner() {
|
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
std::optional<jsi::Value> WorkletsRunner::executeOnRuntimeGuarded(
|
|
59
|
-
const std::function<jsi::Value(jsi::Runtime &)> &&job) const
|
|
60
|
-
noexcept(noexcept(job)) {
|
|
59
|
+
const std::function<jsi::Value(jsi::Runtime &)> &&job) const noexcept(noexcept(job)) {
|
|
61
60
|
auto strongRuntime = weakRuntime_.lock();
|
|
62
61
|
if (strongRuntime == nullptr) {
|
|
63
62
|
return std::nullopt;
|
|
@@ -70,13 +69,12 @@ std::optional<jsi::Value> WorkletsRunner::executeOnRuntimeGuarded(
|
|
|
70
69
|
}
|
|
71
70
|
|
|
72
71
|
std::optional<jsi::Value> WorkletsRunner::executeOnRuntimeUnsafe(
|
|
73
|
-
const std::function<jsi::Value(jsi::Runtime &)> &&job) const
|
|
74
|
-
noexcept(noexcept(job)) {
|
|
72
|
+
const std::function<jsi::Value(jsi::Runtime &)> &&job) const noexcept(noexcept(job)) {
|
|
75
73
|
#if RN_AUDIO_API_ENABLE_WORKLETS
|
|
76
74
|
return job(*unsafeRuntimePtr);
|
|
77
75
|
#else
|
|
78
76
|
return std::nullopt;
|
|
79
77
|
#endif
|
|
80
|
-
}
|
|
78
|
+
}
|
|
81
79
|
|
|
82
80
|
}; // namespace audioapi
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
|
-
#include <jsi/jsi.h>
|
|
4
3
|
#include <audioapi/core/utils/worklets/SafeIncludes.h>
|
|
4
|
+
#include <jsi/jsi.h>
|
|
5
5
|
|
|
6
|
-
#include <functional>
|
|
7
6
|
#include <atomic>
|
|
7
|
+
#include <functional>
|
|
8
8
|
#include <memory>
|
|
9
|
-
#include <utility>
|
|
10
9
|
#include <optional>
|
|
10
|
+
#include <utility>
|
|
11
11
|
|
|
12
12
|
namespace audioapi {
|
|
13
13
|
using namespace facebook;
|
|
@@ -27,10 +27,10 @@ using namespace facebook;
|
|
|
27
27
|
class WorkletsRunner {
|
|
28
28
|
public:
|
|
29
29
|
explicit WorkletsRunner(
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
WorkletsRunner(WorkletsRunner&&);
|
|
30
|
+
std::weak_ptr<worklets::WorkletRuntime> weakRuntime,
|
|
31
|
+
const std::shared_ptr<worklets::SerializableWorklet> &shareableWorklet,
|
|
32
|
+
bool shouldLockRuntime = true);
|
|
33
|
+
WorkletsRunner(WorkletsRunner &&);
|
|
34
34
|
~WorkletsRunner();
|
|
35
35
|
|
|
36
36
|
/// @brief Call the worklet function with the given arguments.
|
|
@@ -38,19 +38,18 @@ class WorkletsRunner {
|
|
|
38
38
|
/// @param ...args
|
|
39
39
|
/// @return The result of the worklet function call.
|
|
40
40
|
/// @note This method is unsafe and should be used with caution. It assumes that the runtime and worklet are valid and runtime is locked.
|
|
41
|
-
template<typename... Args>
|
|
42
|
-
inline jsi::Value callUnsafe(Args&&...
|
|
41
|
+
template <typename... Args>
|
|
42
|
+
inline jsi::Value callUnsafe(Args &&...args) {
|
|
43
43
|
return getUnsafeWorklet().call(*unsafeRuntimePtr, std::forward<Args>(args)...);
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
|
|
47
46
|
/// @brief Call the worklet function with the given arguments.
|
|
48
47
|
/// @tparam ...Args
|
|
49
48
|
/// @param ...args
|
|
50
49
|
/// @return The result of the worklet function call.
|
|
51
50
|
/// @note This method is safe and will check if the runtime is available before calling the worklet. If the runtime is not available, it will return nullopt.
|
|
52
|
-
template<typename... Args>
|
|
53
|
-
inline std::optional<jsi::Value> call(Args&&...
|
|
51
|
+
template <typename... Args>
|
|
52
|
+
inline std::optional<jsi::Value> call(Args &&...args) {
|
|
54
53
|
return executeOnRuntimeGuarded([this, args...](jsi::Runtime &rt) -> jsi::Value {
|
|
55
54
|
return callUnsafe(std::forward<Args>(args)...);
|
|
56
55
|
});
|
|
@@ -60,14 +59,17 @@ class WorkletsRunner {
|
|
|
60
59
|
/// @param job
|
|
61
60
|
/// @return nullopt if the runtime is not available or the result of the job execution
|
|
62
61
|
/// @note Execution is synchronous and will be guarded if shouldLockRuntime is true.
|
|
63
|
-
inline std::optional<jsi::Value> executeOnRuntimeSync(
|
|
64
|
-
|
|
65
|
-
|
|
62
|
+
inline std::optional<jsi::Value> executeOnRuntimeSync(
|
|
63
|
+
const std::function<jsi::Value(jsi::Runtime &)> &&job) const noexcept(noexcept(job)) {
|
|
64
|
+
if (shouldLockRuntime)
|
|
65
|
+
return executeOnRuntimeGuarded(std::move(job));
|
|
66
|
+
else
|
|
67
|
+
return executeOnRuntimeUnsafe(std::move(job));
|
|
66
68
|
}
|
|
67
69
|
|
|
68
70
|
private:
|
|
69
71
|
std::weak_ptr<worklets::WorkletRuntime> weakRuntime_;
|
|
70
|
-
jsi::Runtime*
|
|
72
|
+
jsi::Runtime *unsafeRuntimePtr = nullptr;
|
|
71
73
|
|
|
72
74
|
/// @note We want to avoid automatic destruction as
|
|
73
75
|
/// when runtime is destroyed, underlying pointer will be invalid
|
|
@@ -76,12 +78,14 @@ class WorkletsRunner {
|
|
|
76
78
|
bool shouldLockRuntime = true;
|
|
77
79
|
|
|
78
80
|
inline jsi::Function &getUnsafeWorklet() {
|
|
79
|
-
return *reinterpret_cast<jsi::Function*>(&unsafeWorklet);
|
|
81
|
+
return *reinterpret_cast<jsi::Function *>(&unsafeWorklet);
|
|
80
82
|
}
|
|
81
83
|
|
|
82
|
-
std::optional<jsi::Value> executeOnRuntimeGuarded(
|
|
84
|
+
std::optional<jsi::Value> executeOnRuntimeGuarded(
|
|
85
|
+
const std::function<jsi::Value(jsi::Runtime &)> &&job) const noexcept(noexcept(job));
|
|
83
86
|
|
|
84
|
-
std::optional<jsi::Value> executeOnRuntimeUnsafe(
|
|
87
|
+
std::optional<jsi::Value> executeOnRuntimeUnsafe(
|
|
88
|
+
const std::function<jsi::Value(jsi::Runtime &)> &&job) const noexcept(noexcept(job));
|
|
85
89
|
};
|
|
86
90
|
|
|
87
91
|
} // namespace audioapi
|
|
@@ -9,18 +9,12 @@ double sampleFrameToTime(int sampleFrame, float sampleRate) {
|
|
|
9
9
|
return static_cast<double>(sampleFrame) / sampleRate;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
float linearInterpolate(
|
|
13
|
-
const float *source,
|
|
14
|
-
size_t firstIndex,
|
|
15
|
-
size_t secondIndex,
|
|
16
|
-
float factor) {
|
|
12
|
+
float linearInterpolate(const float *source, size_t firstIndex, size_t secondIndex, float factor) {
|
|
17
13
|
if (firstIndex == secondIndex && firstIndex >= 1) {
|
|
18
|
-
return source[firstIndex] +
|
|
19
|
-
factor * (source[firstIndex] - source[firstIndex - 1]);
|
|
14
|
+
return source[firstIndex] + factor * (source[firstIndex] - source[firstIndex - 1]);
|
|
20
15
|
}
|
|
21
16
|
|
|
22
|
-
return source[firstIndex] +
|
|
23
|
-
factor * (source[secondIndex] - source[firstIndex]);
|
|
17
|
+
return source[firstIndex] + factor * (source[secondIndex] - source[firstIndex]);
|
|
24
18
|
}
|
|
25
19
|
|
|
26
20
|
float linearToDecibels(float value) {
|
|
@@ -30,4 +24,4 @@ float linearToDecibels(float value) {
|
|
|
30
24
|
float decibelsToLinear(float value) {
|
|
31
25
|
return pow(10, value / 20);
|
|
32
26
|
}
|
|
33
|
-
} // namespace audioapi::dsp
|
|
27
|
+
} // namespace audioapi::dsp
|