react-native-audio-api 0.11.0-alpha.1 → 0.11.0-alpha.3
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 +23 -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 +42 -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
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
#include <audioapi/core/analysis/AnalyserNode.h>
|
|
3
3
|
#include <audioapi/core/destinations/AudioDestinationNode.h>
|
|
4
4
|
#include <audioapi/core/effects/BiquadFilterNode.h>
|
|
5
|
+
#include <audioapi/core/effects/ConvolverNode.h>
|
|
6
|
+
#include <audioapi/core/effects/DelayNode.h>
|
|
5
7
|
#include <audioapi/core/effects/GainNode.h>
|
|
8
|
+
#include <audioapi/core/effects/IIRFilterNode.h>
|
|
6
9
|
#include <audioapi/core/effects/StereoPannerNode.h>
|
|
7
10
|
#include <audioapi/core/effects/WorkletNode.h>
|
|
8
11
|
#include <audioapi/core/effects/WorkletProcessingNode.h>
|
|
@@ -12,7 +15,9 @@
|
|
|
12
15
|
#include <audioapi/core/sources/ConstantSourceNode.h>
|
|
13
16
|
#include <audioapi/core/sources/OscillatorNode.h>
|
|
14
17
|
#include <audioapi/core/sources/RecorderAdapterNode.h>
|
|
18
|
+
#if !RN_AUDIO_API_FFMPEG_DISABLED
|
|
15
19
|
#include <audioapi/core/sources/StreamerNode.h>
|
|
20
|
+
#endif // RN_AUDIO_API_FFMPEG_DISABLED
|
|
16
21
|
#include <audioapi/core/sources/WorkletSourceNode.h>
|
|
17
22
|
#include <audioapi/core/utils/AudioDecoder.h>
|
|
18
23
|
#include <audioapi/core/utils/AudioNodeManager.h>
|
|
@@ -21,12 +26,15 @@
|
|
|
21
26
|
#include <audioapi/utils/AudioArray.h>
|
|
22
27
|
#include <audioapi/utils/AudioBus.h>
|
|
23
28
|
#include <audioapi/utils/CircularAudioArray.h>
|
|
29
|
+
#include <memory>
|
|
30
|
+
#include <string>
|
|
31
|
+
#include <utility>
|
|
32
|
+
#include <vector>
|
|
24
33
|
|
|
25
34
|
namespace audioapi {
|
|
26
35
|
|
|
27
36
|
BaseAudioContext::BaseAudioContext(
|
|
28
|
-
const std::shared_ptr<IAudioEventHandlerRegistry>
|
|
29
|
-
&audioEventHandlerRegistry,
|
|
37
|
+
const std::shared_ptr<IAudioEventHandlerRegistry> &audioEventHandlerRegistry,
|
|
30
38
|
const RuntimeRegistry &runtimeRegistry) {
|
|
31
39
|
nodeManager_ = std::make_shared<AudioNodeManager>();
|
|
32
40
|
destination_ = std::make_shared<AudioDestinationNode>(this);
|
|
@@ -70,8 +78,7 @@ std::shared_ptr<WorkletSourceNode> BaseAudioContext::createWorkletSourceNode(
|
|
|
70
78
|
std::weak_ptr<worklets::WorkletRuntime> runtime,
|
|
71
79
|
bool shouldLockRuntime) {
|
|
72
80
|
WorkletsRunner workletRunner(runtime, shareableWorklet, shouldLockRuntime);
|
|
73
|
-
auto workletSourceNode =
|
|
74
|
-
std::make_shared<WorkletSourceNode>(this, std::move(workletRunner));
|
|
81
|
+
auto workletSourceNode = std::make_shared<WorkletSourceNode>(this, std::move(workletRunner));
|
|
75
82
|
nodeManager_->addSourceNode(workletSourceNode);
|
|
76
83
|
return workletSourceNode;
|
|
77
84
|
}
|
|
@@ -89,8 +96,7 @@ std::shared_ptr<WorkletNode> BaseAudioContext::createWorkletNode(
|
|
|
89
96
|
return workletNode;
|
|
90
97
|
}
|
|
91
98
|
|
|
92
|
-
std::shared_ptr<WorkletProcessingNode>
|
|
93
|
-
BaseAudioContext::createWorkletProcessingNode(
|
|
99
|
+
std::shared_ptr<WorkletProcessingNode> BaseAudioContext::createWorkletProcessingNode(
|
|
94
100
|
std::shared_ptr<worklets::SerializableWorklet> &shareableWorklet,
|
|
95
101
|
std::weak_ptr<worklets::WorkletRuntime> runtime,
|
|
96
102
|
bool shouldLockRuntime) {
|
|
@@ -119,13 +125,15 @@ std::shared_ptr<ConstantSourceNode> BaseAudioContext::createConstantSource() {
|
|
|
119
125
|
return constantSource;
|
|
120
126
|
}
|
|
121
127
|
|
|
122
|
-
#ifndef AUDIO_API_TEST_SUITE
|
|
123
128
|
std::shared_ptr<StreamerNode> BaseAudioContext::createStreamer() {
|
|
129
|
+
#if !RN_AUDIO_API_FFMPEG_DISABLED
|
|
124
130
|
auto streamer = std::make_shared<StreamerNode>(this);
|
|
125
131
|
nodeManager_->addSourceNode(streamer);
|
|
126
132
|
return streamer;
|
|
133
|
+
#else
|
|
134
|
+
return nullptr;
|
|
135
|
+
#endif // RN_AUDIO_API_FFMPEG_DISABLED
|
|
127
136
|
}
|
|
128
|
-
#endif
|
|
129
137
|
|
|
130
138
|
std::shared_ptr<GainNode> BaseAudioContext::createGain() {
|
|
131
139
|
auto gain = std::make_shared<GainNode>(this);
|
|
@@ -133,6 +141,12 @@ std::shared_ptr<GainNode> BaseAudioContext::createGain() {
|
|
|
133
141
|
return gain;
|
|
134
142
|
}
|
|
135
143
|
|
|
144
|
+
std::shared_ptr<DelayNode> BaseAudioContext::createDelay(float maxDelayTime) {
|
|
145
|
+
auto delay = std::make_shared<DelayNode>(this, maxDelayTime);
|
|
146
|
+
nodeManager_->addProcessingNode(delay);
|
|
147
|
+
return delay;
|
|
148
|
+
}
|
|
149
|
+
|
|
136
150
|
std::shared_ptr<StereoPannerNode> BaseAudioContext::createStereoPanner() {
|
|
137
151
|
auto stereoPanner = std::make_shared<StereoPannerNode>(this);
|
|
138
152
|
nodeManager_->addProcessingNode(stereoPanner);
|
|
@@ -145,26 +159,29 @@ std::shared_ptr<BiquadFilterNode> BaseAudioContext::createBiquadFilter() {
|
|
|
145
159
|
return biquadFilter;
|
|
146
160
|
}
|
|
147
161
|
|
|
148
|
-
std::shared_ptr<
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
162
|
+
std::shared_ptr<IIRFilterNode> BaseAudioContext::createIIRFilter(
|
|
163
|
+
const std::vector<float> &feedforward,
|
|
164
|
+
const std::vector<float> &feedback) {
|
|
165
|
+
auto iirFilter = std::make_shared<IIRFilterNode>(this, feedforward, feedback);
|
|
166
|
+
nodeManager_->addProcessingNode(iirFilter);
|
|
167
|
+
return iirFilter;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
std::shared_ptr<AudioBufferSourceNode> BaseAudioContext::createBufferSource(bool pitchCorrection) {
|
|
171
|
+
auto bufferSource = std::make_shared<AudioBufferSourceNode>(this, pitchCorrection);
|
|
152
172
|
nodeManager_->addSourceNode(bufferSource);
|
|
153
173
|
return bufferSource;
|
|
154
174
|
}
|
|
155
175
|
|
|
156
|
-
std::shared_ptr<AudioBufferQueueSourceNode>
|
|
157
|
-
|
|
158
|
-
auto bufferSource =
|
|
159
|
-
std::make_shared<AudioBufferQueueSourceNode>(this, pitchCorrection);
|
|
176
|
+
std::shared_ptr<AudioBufferQueueSourceNode> BaseAudioContext::createBufferQueueSource(
|
|
177
|
+
bool pitchCorrection) {
|
|
178
|
+
auto bufferSource = std::make_shared<AudioBufferQueueSourceNode>(this, pitchCorrection);
|
|
160
179
|
nodeManager_->addSourceNode(bufferSource);
|
|
161
180
|
return bufferSource;
|
|
162
181
|
}
|
|
163
182
|
|
|
164
|
-
std::shared_ptr<AudioBuffer>
|
|
165
|
-
|
|
166
|
-
size_t length,
|
|
167
|
-
float sampleRate) {
|
|
183
|
+
std::shared_ptr<AudioBuffer>
|
|
184
|
+
BaseAudioContext::createBuffer(int numberOfChannels, size_t length, float sampleRate) {
|
|
168
185
|
return std::make_shared<AudioBuffer>(numberOfChannels, length, sampleRate);
|
|
169
186
|
}
|
|
170
187
|
|
|
@@ -172,8 +189,7 @@ std::shared_ptr<PeriodicWave> BaseAudioContext::createPeriodicWave(
|
|
|
172
189
|
const std::vector<std::complex<float>> &complexData,
|
|
173
190
|
bool disableNormalization,
|
|
174
191
|
int length) {
|
|
175
|
-
return std::make_shared<PeriodicWave>(
|
|
176
|
-
sampleRate_, complexData, length, disableNormalization);
|
|
192
|
+
return std::make_shared<PeriodicWave>(sampleRate_, complexData, length, disableNormalization);
|
|
177
193
|
}
|
|
178
194
|
|
|
179
195
|
std::shared_ptr<AnalyserNode> BaseAudioContext::createAnalyser() {
|
|
@@ -182,6 +198,14 @@ std::shared_ptr<AnalyserNode> BaseAudioContext::createAnalyser() {
|
|
|
182
198
|
return analyser;
|
|
183
199
|
}
|
|
184
200
|
|
|
201
|
+
std::shared_ptr<ConvolverNode> BaseAudioContext::createConvolver(
|
|
202
|
+
std::shared_ptr<AudioBuffer> buffer,
|
|
203
|
+
bool disableNormalization) {
|
|
204
|
+
auto convolver = std::make_shared<ConvolverNode>(this, buffer, disableNormalization);
|
|
205
|
+
nodeManager_->addProcessingNode(convolver);
|
|
206
|
+
return convolver;
|
|
207
|
+
}
|
|
208
|
+
|
|
185
209
|
AudioNodeManager *BaseAudioContext::getNodeManager() {
|
|
186
210
|
return nodeManager_.get();
|
|
187
211
|
}
|
|
@@ -215,36 +239,30 @@ std::string BaseAudioContext::toString(ContextState state) {
|
|
|
215
239
|
}
|
|
216
240
|
}
|
|
217
241
|
|
|
218
|
-
std::shared_ptr<PeriodicWave> BaseAudioContext::getBasicWaveForm(
|
|
219
|
-
OscillatorType type) {
|
|
242
|
+
std::shared_ptr<PeriodicWave> BaseAudioContext::getBasicWaveForm(OscillatorType type) {
|
|
220
243
|
switch (type) {
|
|
221
244
|
case OscillatorType::SINE:
|
|
222
245
|
if (cachedSineWave_ == nullptr) {
|
|
223
|
-
cachedSineWave_ =
|
|
224
|
-
std::make_shared<PeriodicWave>(sampleRate_, type, false);
|
|
246
|
+
cachedSineWave_ = std::make_shared<PeriodicWave>(sampleRate_, type, false);
|
|
225
247
|
}
|
|
226
248
|
return cachedSineWave_;
|
|
227
249
|
case OscillatorType::SQUARE:
|
|
228
250
|
if (cachedSquareWave_ == nullptr) {
|
|
229
|
-
cachedSquareWave_ =
|
|
230
|
-
std::make_shared<PeriodicWave>(sampleRate_, type, false);
|
|
251
|
+
cachedSquareWave_ = std::make_shared<PeriodicWave>(sampleRate_, type, false);
|
|
231
252
|
}
|
|
232
253
|
return cachedSquareWave_;
|
|
233
254
|
case OscillatorType::SAWTOOTH:
|
|
234
255
|
if (cachedSawtoothWave_ == nullptr) {
|
|
235
|
-
cachedSawtoothWave_ =
|
|
236
|
-
std::make_shared<PeriodicWave>(sampleRate_, type, false);
|
|
256
|
+
cachedSawtoothWave_ = std::make_shared<PeriodicWave>(sampleRate_, type, false);
|
|
237
257
|
}
|
|
238
258
|
return cachedSawtoothWave_;
|
|
239
259
|
case OscillatorType::TRIANGLE:
|
|
240
260
|
if (cachedTriangleWave_ == nullptr) {
|
|
241
|
-
cachedTriangleWave_ =
|
|
242
|
-
std::make_shared<PeriodicWave>(sampleRate_, type, false);
|
|
261
|
+
cachedTriangleWave_ = std::make_shared<PeriodicWave>(sampleRate_, type, false);
|
|
243
262
|
}
|
|
244
263
|
return cachedTriangleWave_;
|
|
245
264
|
case OscillatorType::CUSTOM:
|
|
246
|
-
throw std::invalid_argument(
|
|
247
|
-
"You can't get a custom wave form. You need to create it.");
|
|
265
|
+
throw std::invalid_argument("You can't get a custom wave form. You need to create it.");
|
|
248
266
|
break;
|
|
249
267
|
}
|
|
250
268
|
}
|
|
@@ -16,6 +16,7 @@ namespace audioapi {
|
|
|
16
16
|
|
|
17
17
|
class AudioBus;
|
|
18
18
|
class GainNode;
|
|
19
|
+
class DelayNode;
|
|
19
20
|
class AudioBuffer;
|
|
20
21
|
class PeriodicWave;
|
|
21
22
|
class OscillatorNode;
|
|
@@ -23,11 +24,13 @@ class ConstantSourceNode;
|
|
|
23
24
|
class StereoPannerNode;
|
|
24
25
|
class AudioNodeManager;
|
|
25
26
|
class BiquadFilterNode;
|
|
27
|
+
class IIRFilterNode;
|
|
26
28
|
class AudioDestinationNode;
|
|
27
29
|
class AudioBufferSourceNode;
|
|
28
30
|
class AudioBufferQueueSourceNode;
|
|
29
31
|
class AnalyserNode;
|
|
30
32
|
class AudioEventHandlerRegistry;
|
|
33
|
+
class ConvolverNode;
|
|
31
34
|
class IAudioEventHandlerRegistry;
|
|
32
35
|
class RecorderAdapterNode;
|
|
33
36
|
class WorkletSourceNode;
|
|
@@ -37,7 +40,9 @@ class StreamerNode;
|
|
|
37
40
|
|
|
38
41
|
class BaseAudioContext {
|
|
39
42
|
public:
|
|
40
|
-
explicit BaseAudioContext(
|
|
43
|
+
explicit BaseAudioContext(
|
|
44
|
+
const std::shared_ptr<IAudioEventHandlerRegistry> &audioEventHandlerRegistry,
|
|
45
|
+
const RuntimeRegistry &runtimeRegistry);
|
|
41
46
|
virtual ~BaseAudioContext() = default;
|
|
42
47
|
|
|
43
48
|
std::string getState();
|
|
@@ -48,25 +53,29 @@ class BaseAudioContext {
|
|
|
48
53
|
|
|
49
54
|
std::shared_ptr<RecorderAdapterNode> createRecorderAdapter();
|
|
50
55
|
std::shared_ptr<WorkletSourceNode> createWorkletSourceNode(
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
56
|
+
std::shared_ptr<worklets::SerializableWorklet> &shareableWorklet,
|
|
57
|
+
std::weak_ptr<worklets::WorkletRuntime> runtime,
|
|
58
|
+
bool shouldLockRuntime = true);
|
|
54
59
|
std::shared_ptr<WorkletNode> createWorkletNode(
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
+
std::shared_ptr<worklets::SerializableWorklet> &shareableWorklet,
|
|
61
|
+
std::weak_ptr<worklets::WorkletRuntime> runtime,
|
|
62
|
+
size_t bufferLength,
|
|
63
|
+
size_t inputChannelCount,
|
|
64
|
+
bool shouldLockRuntime = true);
|
|
60
65
|
std::shared_ptr<WorkletProcessingNode> createWorkletProcessingNode(
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
66
|
+
std::shared_ptr<worklets::SerializableWorklet> &shareableWorklet,
|
|
67
|
+
std::weak_ptr<worklets::WorkletRuntime> runtime,
|
|
68
|
+
bool shouldLockRuntime = true);
|
|
64
69
|
std::shared_ptr<OscillatorNode> createOscillator();
|
|
65
70
|
std::shared_ptr<ConstantSourceNode> createConstantSource();
|
|
66
71
|
std::shared_ptr<StreamerNode> createStreamer();
|
|
67
72
|
std::shared_ptr<GainNode> createGain();
|
|
73
|
+
std::shared_ptr<DelayNode> createDelay(float maxDelayTime);
|
|
68
74
|
std::shared_ptr<StereoPannerNode> createStereoPanner();
|
|
69
75
|
std::shared_ptr<BiquadFilterNode> createBiquadFilter();
|
|
76
|
+
std::shared_ptr<IIRFilterNode> createIIRFilter(
|
|
77
|
+
const std::vector<float> &feedforward,
|
|
78
|
+
const std::vector<float> &feedback);
|
|
70
79
|
std::shared_ptr<AudioBufferSourceNode> createBufferSource(bool pitchCorrection);
|
|
71
80
|
std::shared_ptr<AudioBufferQueueSourceNode> createBufferQueueSource(bool pitchCorrection);
|
|
72
81
|
static std::shared_ptr<AudioBuffer>
|
|
@@ -76,6 +85,9 @@ class BaseAudioContext {
|
|
|
76
85
|
bool disableNormalization,
|
|
77
86
|
int length);
|
|
78
87
|
std::shared_ptr<AnalyserNode> createAnalyser();
|
|
88
|
+
std::shared_ptr<ConvolverNode> createConvolver(
|
|
89
|
+
std::shared_ptr<AudioBuffer> buffer,
|
|
90
|
+
bool disableNormalization);
|
|
79
91
|
|
|
80
92
|
std::shared_ptr<PeriodicWave> getBasicWaveForm(OscillatorType type);
|
|
81
93
|
[[nodiscard]] float getNyquistFrequency() const;
|
|
@@ -103,8 +115,8 @@ class BaseAudioContext {
|
|
|
103
115
|
[[nodiscard]] virtual bool isDriverRunning() const = 0;
|
|
104
116
|
|
|
105
117
|
public:
|
|
106
|
-
|
|
107
|
-
|
|
118
|
+
std::shared_ptr<IAudioEventHandlerRegistry> audioEventHandlerRegistry_;
|
|
119
|
+
RuntimeRegistry runtimeRegistry_;
|
|
108
120
|
};
|
|
109
121
|
|
|
110
122
|
} // namespace audioapi
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
#include <algorithm>
|
|
13
13
|
#include <cassert>
|
|
14
14
|
#include <iostream>
|
|
15
|
+
#include <memory>
|
|
15
16
|
#include <thread>
|
|
16
17
|
#include <utility>
|
|
17
18
|
|
|
@@ -21,16 +22,15 @@ OfflineAudioContext::OfflineAudioContext(
|
|
|
21
22
|
int numberOfChannels,
|
|
22
23
|
size_t length,
|
|
23
24
|
float sampleRate,
|
|
24
|
-
const std::shared_ptr<IAudioEventHandlerRegistry>
|
|
25
|
-
&audioEventHandlerRegistry,
|
|
25
|
+
const std::shared_ptr<IAudioEventHandlerRegistry> &audioEventHandlerRegistry,
|
|
26
26
|
const RuntimeRegistry &runtimeRegistry)
|
|
27
27
|
: BaseAudioContext(audioEventHandlerRegistry, runtimeRegistry),
|
|
28
28
|
length_(length),
|
|
29
29
|
numberOfChannels_(numberOfChannels),
|
|
30
30
|
currentSampleFrame_(0) {
|
|
31
31
|
sampleRate_ = sampleRate;
|
|
32
|
-
resultBus_ =
|
|
33
|
-
static_cast<int>(length_), numberOfChannels_, sampleRate_);
|
|
32
|
+
resultBus_ =
|
|
33
|
+
std::make_shared<AudioBus>(static_cast<int>(length_), numberOfChannels_, sampleRate_);
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
OfflineAudioContext::~OfflineAudioContext() {
|
|
@@ -47,21 +47,18 @@ void OfflineAudioContext::resume() {
|
|
|
47
47
|
renderAudio();
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
void OfflineAudioContext::suspend(
|
|
51
|
-
double when,
|
|
52
|
-
const std::function<void()> &callback) {
|
|
50
|
+
void OfflineAudioContext::suspend(double when, const std::function<void()> &callback) {
|
|
53
51
|
Locker locker(mutex_);
|
|
54
52
|
|
|
55
53
|
// we can only suspend once per render quantum at the end of the quantum
|
|
56
54
|
// first quantum is [0, RENDER_QUANTUM_SIZE)
|
|
57
55
|
auto frame = static_cast<size_t>(when * sampleRate_);
|
|
58
|
-
frame = RENDER_QUANTUM_SIZE *
|
|
59
|
-
((frame + RENDER_QUANTUM_SIZE - 1) / RENDER_QUANTUM_SIZE);
|
|
56
|
+
frame = RENDER_QUANTUM_SIZE * ((frame + RENDER_QUANTUM_SIZE - 1) / RENDER_QUANTUM_SIZE);
|
|
60
57
|
|
|
61
58
|
if (scheduledSuspends_.find(frame) != scheduledSuspends_.end()) {
|
|
62
59
|
throw std::runtime_error(
|
|
63
|
-
"cannot schedule more than one suspend at frame " +
|
|
64
|
-
std::to_string(
|
|
60
|
+
"cannot schedule more than one suspend at frame " + std::to_string(frame) + " (" +
|
|
61
|
+
std::to_string(when) + " seconds)");
|
|
65
62
|
}
|
|
66
63
|
|
|
67
64
|
scheduledSuspends_.emplace(frame, callback);
|
|
@@ -70,13 +67,12 @@ void OfflineAudioContext::suspend(
|
|
|
70
67
|
void OfflineAudioContext::renderAudio() {
|
|
71
68
|
state_ = ContextState::RUNNING;
|
|
72
69
|
std::thread([this]() {
|
|
73
|
-
auto audioBus = std::make_shared<AudioBus>(
|
|
74
|
-
RENDER_QUANTUM_SIZE, numberOfChannels_, sampleRate_);
|
|
70
|
+
auto audioBus = std::make_shared<AudioBus>(RENDER_QUANTUM_SIZE, numberOfChannels_, sampleRate_);
|
|
75
71
|
|
|
76
72
|
while (currentSampleFrame_ < length_) {
|
|
77
73
|
Locker locker(mutex_);
|
|
78
|
-
int framesToProcess =
|
|
79
|
-
static_cast<int>(length_ - currentSampleFrame_), RENDER_QUANTUM_SIZE);
|
|
74
|
+
int framesToProcess =
|
|
75
|
+
std::min(static_cast<int>(length_ - currentSampleFrame_), RENDER_QUANTUM_SIZE);
|
|
80
76
|
|
|
81
77
|
destination_->renderAudio(audioBus, framesToProcess);
|
|
82
78
|
|
|
@@ -107,8 +103,7 @@ void OfflineAudioContext::renderAudio() {
|
|
|
107
103
|
}).detach();
|
|
108
104
|
}
|
|
109
105
|
|
|
110
|
-
void OfflineAudioContext::startRendering(
|
|
111
|
-
OfflineAudioContextResultCallback callback) {
|
|
106
|
+
void OfflineAudioContext::startRendering(OfflineAudioContextResultCallback callback) {
|
|
112
107
|
Locker locker(mutex_);
|
|
113
108
|
|
|
114
109
|
resultCallback_ = std::move(callback);
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
|
-
#include "BaseAudioContext.h"
|
|
4
3
|
#include <audioapi/core/utils/worklets/SafeIncludes.h>
|
|
4
|
+
#include "BaseAudioContext.h"
|
|
5
5
|
|
|
6
|
-
#include <mutex>
|
|
7
6
|
#include <map>
|
|
8
|
-
#include <unordered_map>
|
|
9
7
|
#include <memory>
|
|
8
|
+
#include <mutex>
|
|
9
|
+
#include <unordered_map>
|
|
10
10
|
|
|
11
11
|
namespace audioapi {
|
|
12
12
|
|
|
@@ -15,11 +15,16 @@ using OfflineAudioContextResultCallback = std::function<void(std::shared_ptr<Aud
|
|
|
15
15
|
|
|
16
16
|
class OfflineAudioContext : public BaseAudioContext {
|
|
17
17
|
public:
|
|
18
|
-
explicit OfflineAudioContext(
|
|
18
|
+
explicit OfflineAudioContext(
|
|
19
|
+
int numberOfChannels,
|
|
20
|
+
size_t length,
|
|
21
|
+
float sampleRate,
|
|
22
|
+
const std::shared_ptr<IAudioEventHandlerRegistry> &audioEventHandlerRegistry,
|
|
23
|
+
const RuntimeRegistry &runtimeRegistry);
|
|
19
24
|
~OfflineAudioContext() override;
|
|
20
25
|
|
|
21
26
|
void resume();
|
|
22
|
-
void suspend(double when, const OfflineAudioContextSuspendCallback&
|
|
27
|
+
void suspend(double when, const OfflineAudioContextSuspendCallback &callback);
|
|
23
28
|
|
|
24
29
|
void startRendering(OfflineAudioContextResultCallback callback);
|
|
25
30
|
|
|
@@ -6,6 +6,10 @@
|
|
|
6
6
|
#include <audioapi/utils/AudioArray.h>
|
|
7
7
|
#include <audioapi/utils/AudioBus.h>
|
|
8
8
|
#include <audioapi/utils/CircularAudioArray.h>
|
|
9
|
+
#include <algorithm>
|
|
10
|
+
#include <memory>
|
|
11
|
+
#include <string>
|
|
12
|
+
#include <vector>
|
|
9
13
|
|
|
10
14
|
namespace audioapi {
|
|
11
15
|
AnalyserNode::AnalyserNode(audioapi::BaseAudioContext *context)
|
|
@@ -18,8 +22,7 @@ AnalyserNode::AnalyserNode(audioapi::BaseAudioContext *context)
|
|
|
18
22
|
inputBuffer_ = std::make_unique<CircularAudioArray>(MAX_FFT_SIZE * 2);
|
|
19
23
|
tempBuffer_ = std::make_unique<AudioArray>(fftSize_);
|
|
20
24
|
magnitudeBuffer_ = std::make_unique<AudioArray>(fftSize_ / 2);
|
|
21
|
-
downMixBus_ = std::make_unique<AudioBus>(
|
|
22
|
-
RENDER_QUANTUM_SIZE, 1, context_->getSampleRate());
|
|
25
|
+
downMixBus_ = std::make_unique<AudioBus>(RENDER_QUANTUM_SIZE, 1, context_->getSampleRate());
|
|
23
26
|
|
|
24
27
|
fft_ = std::make_unique<dsp::FFT>(fftSize_);
|
|
25
28
|
complexData_ = std::vector<std::complex<float>>(fftSize_);
|
|
@@ -100,9 +103,8 @@ void AnalyserNode::getByteFrequencyData(uint8_t *data, int length) {
|
|
|
100
103
|
maxDecibels_ == minDecibels_ ? 1 : 1 / (maxDecibels_ - minDecibels_);
|
|
101
104
|
|
|
102
105
|
for (int i = 0; i < length; i++) {
|
|
103
|
-
auto dbMag =
|
|
104
|
-
? minDecibels_
|
|
105
|
-
: dsp::linearToDecibels(magnitudeBufferData[i]);
|
|
106
|
+
auto dbMag =
|
|
107
|
+
magnitudeBufferData[i] == 0 ? minDecibels_ : dsp::linearToDecibels(magnitudeBufferData[i]);
|
|
106
108
|
auto scaledValue = UINT8_MAX * (dbMag - minDecibels_) * rangeScaleFactor;
|
|
107
109
|
|
|
108
110
|
if (scaledValue < 0) {
|
|
@@ -124,8 +126,7 @@ void AnalyserNode::getFloatTimeDomainData(float *data, int length) {
|
|
|
124
126
|
void AnalyserNode::getByteTimeDomainData(uint8_t *data, int length) {
|
|
125
127
|
auto size = std::min(fftSize_, length);
|
|
126
128
|
|
|
127
|
-
inputBuffer_->pop_back(
|
|
128
|
-
tempBuffer_->getData(), fftSize_, std::max(0, fftSize_ - size), true);
|
|
129
|
+
inputBuffer_->pop_back(tempBuffer_->getData(), fftSize_, std::max(0, fftSize_ - size), true);
|
|
129
130
|
|
|
130
131
|
for (int i = 0; i < size; i++) {
|
|
131
132
|
auto value = tempBuffer_->getData()[i];
|
|
@@ -152,8 +153,7 @@ std::shared_ptr<AudioBus> AnalyserNode::processNode(
|
|
|
152
153
|
// Down mix the input bus to mono
|
|
153
154
|
downMixBus_->copy(processingBus.get());
|
|
154
155
|
// Copy the down mixed bus to the input buffer (circular buffer)
|
|
155
|
-
inputBuffer_->push_back(
|
|
156
|
-
downMixBus_->getChannel(0)->getData(), framesToProcess, true);
|
|
156
|
+
inputBuffer_->push_back(downMixBus_->getChannel(0)->getData(), framesToProcess, true);
|
|
157
157
|
|
|
158
158
|
shouldDoFFTAnalysis_ = true;
|
|
159
159
|
|
|
@@ -171,11 +171,7 @@ void AnalyserNode::doFFTAnalysis() {
|
|
|
171
171
|
// the window.
|
|
172
172
|
inputBuffer_->pop_back(tempBuffer_->getData(), fftSize_, 0, true);
|
|
173
173
|
|
|
174
|
-
dsp::multiply(
|
|
175
|
-
tempBuffer_->getData(),
|
|
176
|
-
windowData_->getData(),
|
|
177
|
-
tempBuffer_->getData(),
|
|
178
|
-
fftSize_);
|
|
174
|
+
dsp::multiply(tempBuffer_->getData(), windowData_->getData(), tempBuffer_->getData(), fftSize_);
|
|
179
175
|
|
|
180
176
|
// do fft analysis - get frequency domain data
|
|
181
177
|
fft_->doFFT(tempBuffer_->getData(), complexData_);
|
|
@@ -194,9 +190,7 @@ void AnalyserNode::doFFTAnalysis() {
|
|
|
194
190
|
}
|
|
195
191
|
}
|
|
196
192
|
|
|
197
|
-
void AnalyserNode::setWindowData(
|
|
198
|
-
audioapi::AnalyserNode::WindowType type,
|
|
199
|
-
int size) {
|
|
193
|
+
void AnalyserNode::setWindowData(audioapi::AnalyserNode::WindowType type, int size) {
|
|
200
194
|
if (windowType_ == type && windowData_ && windowData_->getSize() == size) {
|
|
201
195
|
return;
|
|
202
196
|
}
|
|
@@ -207,12 +201,10 @@ void AnalyserNode::setWindowData(
|
|
|
207
201
|
|
|
208
202
|
switch (windowType_) {
|
|
209
203
|
case WindowType::BLACKMAN:
|
|
210
|
-
dsp::Blackman().apply(
|
|
211
|
-
windowData_->getData(), static_cast<int>(windowData_->getSize()));
|
|
204
|
+
dsp::Blackman().apply(windowData_->getData(), static_cast<int>(windowData_->getSize()));
|
|
212
205
|
break;
|
|
213
206
|
case WindowType::HANN:
|
|
214
|
-
dsp::Hann().apply(
|
|
215
|
-
windowData_->getData(), static_cast<int>(windowData_->getSize()));
|
|
207
|
+
dsp::Hann().apply(windowData_->getData(), static_cast<int>(windowData_->getSize()));
|
|
216
208
|
break;
|
|
217
209
|
}
|
|
218
210
|
}
|
|
@@ -3,10 +3,11 @@
|
|
|
3
3
|
#include <audioapi/core/AudioNode.h>
|
|
4
4
|
#include <audioapi/dsp/FFT.h>
|
|
5
5
|
|
|
6
|
-
#include <
|
|
6
|
+
#include <algorithm>
|
|
7
|
+
#include <complex>
|
|
7
8
|
#include <cstddef>
|
|
9
|
+
#include <memory>
|
|
8
10
|
#include <string>
|
|
9
|
-
#include <complex>
|
|
10
11
|
#include <vector>
|
|
11
12
|
|
|
12
13
|
namespace audioapi {
|
|
@@ -39,7 +40,9 @@ class AnalyserNode : public AudioNode {
|
|
|
39
40
|
void getByteTimeDomainData(uint8_t *data, int length);
|
|
40
41
|
|
|
41
42
|
protected:
|
|
42
|
-
std::shared_ptr<AudioBus> processNode(
|
|
43
|
+
std::shared_ptr<AudioBus> processNode(
|
|
44
|
+
const std::shared_ptr<AudioBus> &processingBus,
|
|
45
|
+
int framesToProcess) override;
|
|
43
46
|
|
|
44
47
|
private:
|
|
45
48
|
int fftSize_;
|
|
@@ -57,12 +60,11 @@ class AnalyserNode : public AudioNode {
|
|
|
57
60
|
std::unique_ptr<dsp::FFT> fft_;
|
|
58
61
|
std::vector<std::complex<float>> complexData_;
|
|
59
62
|
std::unique_ptr<AudioArray> magnitudeBuffer_;
|
|
60
|
-
bool shouldDoFFTAnalysis_
|
|
63
|
+
bool shouldDoFFTAnalysis_{true};
|
|
61
64
|
|
|
62
65
|
static WindowType fromString(const std::string &type) {
|
|
63
66
|
std::string lowerType = type;
|
|
64
|
-
std::transform(
|
|
65
|
-
lowerType.begin(), lowerType.end(), lowerType.begin(), ::tolower);
|
|
67
|
+
std::transform(lowerType.begin(), lowerType.end(), lowerType.begin(), ::tolower);
|
|
66
68
|
if (lowerType == "blackman") {
|
|
67
69
|
return WindowType::BLACKMAN;
|
|
68
70
|
}
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
#include <audioapi/core/AudioNode.h>
|
|
4
4
|
|
|
5
5
|
#include <algorithm>
|
|
6
|
+
#include <cstddef>
|
|
6
7
|
#include <memory>
|
|
7
8
|
#include <vector>
|
|
8
|
-
#include <cstddef>
|
|
9
9
|
|
|
10
10
|
namespace audioapi {
|
|
11
11
|
|
|
@@ -19,12 +19,14 @@ class AudioDestinationNode : public AudioNode {
|
|
|
19
19
|
std::size_t getCurrentSampleFrame() const;
|
|
20
20
|
double getCurrentTime() const;
|
|
21
21
|
|
|
22
|
-
void renderAudio(const std::shared_ptr<AudioBus
|
|
22
|
+
void renderAudio(const std::shared_ptr<AudioBus> &audioData, int numFrames);
|
|
23
23
|
|
|
24
24
|
protected:
|
|
25
25
|
// DestinationNode is triggered by AudioContext using renderAudio
|
|
26
26
|
// processNode function is not necessary and is never called.
|
|
27
|
-
std::shared_ptr<AudioBus> processNode(const std::shared_ptr<AudioBus
|
|
27
|
+
std::shared_ptr<AudioBus> processNode(const std::shared_ptr<AudioBus> &processingBus, int) final {
|
|
28
|
+
return processingBus;
|
|
29
|
+
};
|
|
28
30
|
|
|
29
31
|
private:
|
|
30
32
|
std::size_t currentSampleFrame_;
|