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