react-native-audio-api 0.11.0-alpha.1 → 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 +315 -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 +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 +363 -299
- 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 +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 +132 -105
- package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.h +9 -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 +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 +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 +66 -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 +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 +26 -18
- package/ios/audioapi/ios/core/IOSAudioRecorder.mm +244 -54
- package/ios/audioapi/ios/core/NativeAudioPlayer.m +17 -14
- package/ios/audioapi/ios/core/NativeAudioRecorder.h +4 -0
- package/ios/audioapi/ios/core/NativeAudioRecorder.m +49 -7
- package/ios/audioapi/ios/core/utils/AudioDecoder.mm +21 -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/{IOSAudioFileWriter.h → utils/IOSFileWriter.h} +16 -14
- package/ios/audioapi/ios/core/utils/IOSFileWriter.mm +239 -0
- package/ios/audioapi/ios/core/{IOSRecorderCallback.h → utils/IOSRecorderCallback.h} +7 -17
- 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 +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 +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 +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 +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 +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 +6 -2
- 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 +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 +57 -49
- 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 +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 +7 -3
- package/src/interfaces.ts +51 -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 +59 -50
- 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 -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/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,65 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) 2010 Google Inc. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Redistribution and use in source and binary forms, with or without
|
|
5
|
+
* modification, are permitted provided that the following conditions
|
|
6
|
+
* are met:
|
|
7
|
+
*
|
|
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
|
+
* 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
|
|
14
|
+
* its contributors may be used to endorse or promote products derived
|
|
15
|
+
* from this software without specific prior written permission.
|
|
16
|
+
*
|
|
17
|
+
* THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
|
|
18
|
+
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
19
|
+
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
20
|
+
* DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
|
|
21
|
+
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
22
|
+
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
23
|
+
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
24
|
+
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
25
|
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
26
|
+
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
#pragma once
|
|
30
|
+
|
|
31
|
+
#include <numbers>
|
|
32
|
+
#include <span>
|
|
33
|
+
|
|
34
|
+
namespace audioapi {
|
|
35
|
+
|
|
36
|
+
constexpr double kPiDouble = std::numbers::pi_v<double>;
|
|
37
|
+
|
|
38
|
+
struct BiquadCoefficients {
|
|
39
|
+
double b0;
|
|
40
|
+
double b1;
|
|
41
|
+
double b2;
|
|
42
|
+
double a1;
|
|
43
|
+
double a2;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
void getFrequencyResponse(
|
|
47
|
+
const BiquadCoefficients &coeffs,
|
|
48
|
+
std::span<const float> frequency,
|
|
49
|
+
std::span<float> mag_response,
|
|
50
|
+
std::span<float> phase_response,
|
|
51
|
+
float nyquistFrequency);
|
|
52
|
+
|
|
53
|
+
BiquadCoefficients
|
|
54
|
+
normalizeCoefficients(double b0, double b1, double b2, double a0, double a1, double a2);
|
|
55
|
+
|
|
56
|
+
BiquadCoefficients calculateLowpassCoefficients(double cutoff, double Q);
|
|
57
|
+
BiquadCoefficients calculateHighpassCoefficients(double cutoff, double Q);
|
|
58
|
+
BiquadCoefficients calculateBandpassCoefficients(double frequency, double Q);
|
|
59
|
+
BiquadCoefficients calculateNotchCoefficients(double frequency, double Q);
|
|
60
|
+
BiquadCoefficients calculateAllpassCoefficients(double frequency, double Q);
|
|
61
|
+
BiquadCoefficients calculatePeakingCoefficients(double frequency, double Q, double db_gain);
|
|
62
|
+
BiquadCoefficients calculateLowshelfCoefficients(double frequency, double db_gain);
|
|
63
|
+
BiquadCoefficients calculateHighshelfCoefficients(double frequency, double db_gain);
|
|
64
|
+
|
|
65
|
+
} // namespace audioapi
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
#include <test/src/biquad/BiquadFilterChromium.h>
|
|
2
|
+
#include <test/src/biquad/BiquadFilterTest.h>
|
|
3
|
+
#include <memory>
|
|
4
|
+
#include <vector>
|
|
5
|
+
|
|
6
|
+
namespace audioapi {
|
|
7
|
+
|
|
8
|
+
void BiquadFilterTest::expectCoefficientsNear(
|
|
9
|
+
const std::shared_ptr<BiquadFilterNode> &biquadNode,
|
|
10
|
+
const BiquadCoefficients &expected) {
|
|
11
|
+
EXPECT_NEAR(biquadNode->b0_, expected.b0, tolerance);
|
|
12
|
+
EXPECT_NEAR(biquadNode->b1_, expected.b1, tolerance);
|
|
13
|
+
EXPECT_NEAR(biquadNode->b2_, expected.b2, tolerance);
|
|
14
|
+
EXPECT_NEAR(biquadNode->a1_, expected.a1, tolerance);
|
|
15
|
+
EXPECT_NEAR(biquadNode->a2_, expected.a2, tolerance);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
void BiquadFilterTest::testLowpass(float frequency, float Q) {
|
|
19
|
+
auto node = std::make_shared<BiquadFilterNode>(context.get());
|
|
20
|
+
float normalizedFrequency = frequency / nyquistFrequency;
|
|
21
|
+
|
|
22
|
+
node->setLowpassCoefficients(normalizedFrequency, Q);
|
|
23
|
+
expectCoefficientsNear(node, calculateLowpassCoefficients(normalizedFrequency, Q));
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
void BiquadFilterTest::testHighpass(float frequency, float Q) {
|
|
27
|
+
auto node = std::make_shared<BiquadFilterNode>(context.get());
|
|
28
|
+
float normalizedFrequency = frequency / nyquistFrequency;
|
|
29
|
+
|
|
30
|
+
node->setHighpassCoefficients(normalizedFrequency, Q);
|
|
31
|
+
expectCoefficientsNear(node, calculateHighpassCoefficients(normalizedFrequency, Q));
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
void BiquadFilterTest::testBandpass(float frequency, float Q) {
|
|
35
|
+
auto node = std::make_shared<BiquadFilterNode>(context.get());
|
|
36
|
+
float normalizedFrequency = frequency / nyquistFrequency;
|
|
37
|
+
|
|
38
|
+
node->setBandpassCoefficients(normalizedFrequency, Q);
|
|
39
|
+
expectCoefficientsNear(node, calculateBandpassCoefficients(normalizedFrequency, Q));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
void BiquadFilterTest::testNotch(float frequency, float Q) {
|
|
43
|
+
auto node = std::make_shared<BiquadFilterNode>(context.get());
|
|
44
|
+
float normalizedFrequency = frequency / nyquistFrequency;
|
|
45
|
+
|
|
46
|
+
node->setNotchCoefficients(normalizedFrequency, Q);
|
|
47
|
+
expectCoefficientsNear(node, calculateNotchCoefficients(normalizedFrequency, Q));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
void BiquadFilterTest::testAllpass(float frequency, float Q) {
|
|
51
|
+
auto node = std::make_shared<BiquadFilterNode>(context.get());
|
|
52
|
+
float normalizedFrequency = frequency / nyquistFrequency;
|
|
53
|
+
|
|
54
|
+
node->setAllpassCoefficients(normalizedFrequency, Q);
|
|
55
|
+
expectCoefficientsNear(node, calculateAllpassCoefficients(normalizedFrequency, Q));
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
void BiquadFilterTest::testPeaking(float frequency, float Q, float gain) {
|
|
59
|
+
auto node = std::make_shared<BiquadFilterNode>(context.get());
|
|
60
|
+
float normalizedFrequency = frequency / nyquistFrequency;
|
|
61
|
+
|
|
62
|
+
node->setPeakingCoefficients(normalizedFrequency, Q, gain);
|
|
63
|
+
expectCoefficientsNear(node, calculatePeakingCoefficients(normalizedFrequency, Q, gain));
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
void BiquadFilterTest::testLowshelf(float frequency, float gain) {
|
|
67
|
+
auto node = std::make_shared<BiquadFilterNode>(context.get());
|
|
68
|
+
float normalizedFrequency = frequency / nyquistFrequency;
|
|
69
|
+
|
|
70
|
+
node->setLowshelfCoefficients(normalizedFrequency, gain);
|
|
71
|
+
expectCoefficientsNear(node, calculateLowshelfCoefficients(normalizedFrequency, gain));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
void BiquadFilterTest::testHighshelf(float frequency, float gain) {
|
|
75
|
+
auto node = std::make_shared<BiquadFilterNode>(context.get());
|
|
76
|
+
float normalizedFrequency = frequency / nyquistFrequency;
|
|
77
|
+
|
|
78
|
+
node->setHighshelfCoefficients(normalizedFrequency, gain);
|
|
79
|
+
expectCoefficientsNear(node, calculateHighshelfCoefficients(normalizedFrequency, gain));
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
INSTANTIATE_TEST_SUITE_P(
|
|
83
|
+
Frequencies,
|
|
84
|
+
BiquadFilterFrequencyTest,
|
|
85
|
+
::testing::Values(
|
|
86
|
+
0.0f, // 0 Hz - the filter should block all input signal
|
|
87
|
+
10.0f, // very low frequency
|
|
88
|
+
350.0f, // default
|
|
89
|
+
nyquistFrequency - 0.0001f, // frequency near Nyquist
|
|
90
|
+
nyquistFrequency)); // maximal frequency
|
|
91
|
+
|
|
92
|
+
INSTANTIATE_TEST_SUITE_P(
|
|
93
|
+
QEdgeCases,
|
|
94
|
+
BiquadFilterQTestLowpassHighpass,
|
|
95
|
+
::testing::Values(
|
|
96
|
+
-770.63678f, // min value for lowpass and highpass
|
|
97
|
+
0.0f, // default
|
|
98
|
+
770.63678f)); // max value for lowpass and highpass
|
|
99
|
+
|
|
100
|
+
INSTANTIATE_TEST_SUITE_P(
|
|
101
|
+
QEdgeCases,
|
|
102
|
+
BiquadFilterQTestRestTypes, // bandpass, notch, allpass, peaking
|
|
103
|
+
::testing::Values(
|
|
104
|
+
0.0f, // default and min value
|
|
105
|
+
MOST_POSITIVE_SINGLE_FLOAT));
|
|
106
|
+
|
|
107
|
+
INSTANTIATE_TEST_SUITE_P(
|
|
108
|
+
GainEdgeCases,
|
|
109
|
+
BiquadFilterGainTest,
|
|
110
|
+
::testing::Values(
|
|
111
|
+
-40.0f,
|
|
112
|
+
0.0f, // default
|
|
113
|
+
40.0f));
|
|
114
|
+
|
|
115
|
+
TEST_P(BiquadFilterFrequencyTest, SetLowpassCoefficients) {
|
|
116
|
+
float frequency = GetParam();
|
|
117
|
+
float Q = 1.0f;
|
|
118
|
+
testLowpass(frequency, Q);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
TEST_P(BiquadFilterFrequencyTest, SetHighpassCoefficients) {
|
|
122
|
+
float frequency = GetParam();
|
|
123
|
+
float Q = 1.0f;
|
|
124
|
+
testHighpass(frequency, Q);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
TEST_P(BiquadFilterFrequencyTest, SetBandpassCoefficients) {
|
|
128
|
+
float frequency = GetParam();
|
|
129
|
+
float Q = 1.0f;
|
|
130
|
+
testBandpass(frequency, Q);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
TEST_P(BiquadFilterFrequencyTest, SetNotchCoefficients) {
|
|
134
|
+
float frequency = GetParam();
|
|
135
|
+
float Q = 1.0f;
|
|
136
|
+
testNotch(frequency, Q);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
TEST_P(BiquadFilterFrequencyTest, SetAllpassCoefficients) {
|
|
140
|
+
float frequency = GetParam();
|
|
141
|
+
float Q = 1.0f;
|
|
142
|
+
testAllpass(frequency, Q);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
TEST_P(BiquadFilterFrequencyTest, SetPeakingCoefficients) {
|
|
146
|
+
float frequency = GetParam();
|
|
147
|
+
float Q = 1.0f;
|
|
148
|
+
float gain = 2.0f;
|
|
149
|
+
testPeaking(frequency, Q, gain);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
TEST_P(BiquadFilterFrequencyTest, SetLowshelfCoefficients) {
|
|
153
|
+
float frequency = GetParam();
|
|
154
|
+
float gain = 2.0f;
|
|
155
|
+
testLowshelf(frequency, gain);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
TEST_P(BiquadFilterFrequencyTest, SetHighshelfCoefficients) {
|
|
159
|
+
float frequency = GetParam();
|
|
160
|
+
float gain = 2.0f;
|
|
161
|
+
testHighshelf(frequency, gain);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
TEST_P(BiquadFilterQTestLowpassHighpass, SetLowpassCoefficients) {
|
|
165
|
+
float frequency = 1000.0f;
|
|
166
|
+
float Q = GetParam();
|
|
167
|
+
testLowpass(frequency, Q);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
TEST_P(BiquadFilterQTestLowpassHighpass, SetHighpassCoefficients) {
|
|
171
|
+
float frequency = 1000.0f;
|
|
172
|
+
float Q = GetParam();
|
|
173
|
+
testHighpass(frequency, Q);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
TEST_P(BiquadFilterQTestRestTypes, SetBandpassCoefficients) {
|
|
177
|
+
float frequency = 1000.0f;
|
|
178
|
+
float Q = GetParam();
|
|
179
|
+
testBandpass(frequency, Q);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
TEST_P(BiquadFilterQTestRestTypes, SetNotchCoefficients) {
|
|
183
|
+
float frequency = 1000.0f;
|
|
184
|
+
float Q = GetParam();
|
|
185
|
+
testNotch(frequency, Q);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
TEST_P(BiquadFilterQTestRestTypes, SetAllpassCoefficients) {
|
|
189
|
+
float frequency = 1000.0f;
|
|
190
|
+
float Q = GetParam();
|
|
191
|
+
testAllpass(frequency, Q);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
TEST_P(BiquadFilterQTestRestTypes, SetPeakingCoefficients) {
|
|
195
|
+
float frequency = 1000.0f;
|
|
196
|
+
float Q = GetParam();
|
|
197
|
+
float gain = 2.0f;
|
|
198
|
+
testPeaking(frequency, Q, gain);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
TEST_P(BiquadFilterGainTest, SetPeakingCoefficients) {
|
|
202
|
+
float frequency = 1000.0f;
|
|
203
|
+
float Q = 1.0f;
|
|
204
|
+
float gain = GetParam();
|
|
205
|
+
testPeaking(frequency, Q, gain);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
TEST_P(BiquadFilterGainTest, SetLowshelfCoefficients) {
|
|
209
|
+
float frequency = 1000.0f;
|
|
210
|
+
float gain = GetParam();
|
|
211
|
+
testLowshelf(frequency, gain);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
TEST_P(BiquadFilterGainTest, SetHighshelfCoefficients) {
|
|
215
|
+
float frequency = 1000.0f;
|
|
216
|
+
float gain = GetParam();
|
|
217
|
+
testHighshelf(frequency, gain);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
TEST_F(BiquadFilterTest, GetFrequencyResponse) {
|
|
221
|
+
auto node = std::make_shared<BiquadFilterNode>(context.get());
|
|
222
|
+
|
|
223
|
+
float frequency = 1000.0f;
|
|
224
|
+
float Q = 1.0f;
|
|
225
|
+
float normalizedFrequency = frequency / nyquistFrequency;
|
|
226
|
+
|
|
227
|
+
node->setLowpassCoefficients(normalizedFrequency, Q);
|
|
228
|
+
auto coeffs = calculateLowpassCoefficients(normalizedFrequency, Q);
|
|
229
|
+
|
|
230
|
+
std::vector<float> TestFrequencies = {
|
|
231
|
+
-0.0001f,
|
|
232
|
+
0.0f,
|
|
233
|
+
0.0001f,
|
|
234
|
+
0.25f * nyquistFrequency,
|
|
235
|
+
0.5f * nyquistFrequency,
|
|
236
|
+
0.75f * nyquistFrequency,
|
|
237
|
+
nyquistFrequency - 0.0001f,
|
|
238
|
+
nyquistFrequency,
|
|
239
|
+
nyquistFrequency + 0.0001f};
|
|
240
|
+
|
|
241
|
+
std::vector<float> magResponseNode(TestFrequencies.size());
|
|
242
|
+
std::vector<float> phaseResponseNode(TestFrequencies.size());
|
|
243
|
+
std::vector<float> magResponseExpected(TestFrequencies.size());
|
|
244
|
+
std::vector<float> phaseResponseExpected(TestFrequencies.size());
|
|
245
|
+
|
|
246
|
+
node->getFrequencyResponse(
|
|
247
|
+
TestFrequencies.data(),
|
|
248
|
+
magResponseNode.data(),
|
|
249
|
+
phaseResponseNode.data(),
|
|
250
|
+
TestFrequencies.size());
|
|
251
|
+
getFrequencyResponse(
|
|
252
|
+
coeffs, TestFrequencies, magResponseExpected, phaseResponseExpected, nyquistFrequency);
|
|
253
|
+
|
|
254
|
+
for (size_t i = 0; i < TestFrequencies.size(); ++i) {
|
|
255
|
+
float f = TestFrequencies[i];
|
|
256
|
+
if (std::isnan(magResponseExpected[i])) {
|
|
257
|
+
EXPECT_TRUE(std::isnan(magResponseNode[i])) << "Expected NaN at frequency " << f;
|
|
258
|
+
} else {
|
|
259
|
+
EXPECT_NEAR(magResponseNode[i], magResponseExpected[i], tolerance)
|
|
260
|
+
<< "Magnitude mismatch at " << f << " Hz";
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
if (std::isnan(phaseResponseExpected[i])) {
|
|
264
|
+
EXPECT_TRUE(std::isnan(phaseResponseNode[i])) << "Expected NaN at frequency " << f;
|
|
265
|
+
} else {
|
|
266
|
+
EXPECT_NEAR(phaseResponseNode[i], phaseResponseExpected[i], tolerance)
|
|
267
|
+
<< "Phase mismatch at " << f << " Hz";
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
} // namespace audioapi
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <audioapi/core/OfflineAudioContext.h>
|
|
4
|
+
#include <audioapi/core/effects/BiquadFilterNode.h>
|
|
5
|
+
#include <audioapi/core/utils/worklets/SafeIncludes.h>
|
|
6
|
+
#include <gtest/gtest.h>
|
|
7
|
+
#include <test/src/MockAudioEventHandlerRegistry.h>
|
|
8
|
+
#include <memory>
|
|
9
|
+
|
|
10
|
+
static constexpr int sampleRate = 44100;
|
|
11
|
+
static constexpr float nyquistFrequency = sampleRate / 2.0f;
|
|
12
|
+
static constexpr float tolerance = 0.0001f;
|
|
13
|
+
|
|
14
|
+
namespace audioapi {
|
|
15
|
+
class BiquadFilterTest : public ::testing::Test {
|
|
16
|
+
protected:
|
|
17
|
+
std::shared_ptr<MockAudioEventHandlerRegistry> eventRegistry;
|
|
18
|
+
std::unique_ptr<OfflineAudioContext> context;
|
|
19
|
+
|
|
20
|
+
void SetUp() override {
|
|
21
|
+
eventRegistry = std::make_shared<MockAudioEventHandlerRegistry>();
|
|
22
|
+
context = std::make_unique<OfflineAudioContext>(
|
|
23
|
+
2, 5 * sampleRate, sampleRate, eventRegistry, RuntimeRegistry{});
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
void expectCoefficientsNear(
|
|
27
|
+
const std::shared_ptr<BiquadFilterNode> &node,
|
|
28
|
+
const BiquadCoefficients &expected);
|
|
29
|
+
void testLowpass(float frequency, float Q);
|
|
30
|
+
void testHighpass(float frequency, float Q);
|
|
31
|
+
void testBandpass(float frequency, float Q);
|
|
32
|
+
void testNotch(float frequency, float Q);
|
|
33
|
+
void testAllpass(float frequency, float Q);
|
|
34
|
+
void testPeaking(float frequency, float Q, float gain);
|
|
35
|
+
void testLowshelf(float frequency, float gain);
|
|
36
|
+
void testHighshelf(float frequency, float gain);
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
class BiquadFilterQTestLowpassHighpass : public BiquadFilterTest,
|
|
40
|
+
public ::testing::WithParamInterface<float> {};
|
|
41
|
+
class BiquadFilterQTestRestTypes : public BiquadFilterTest,
|
|
42
|
+
public ::testing::WithParamInterface<float> {};
|
|
43
|
+
class BiquadFilterFrequencyTest : public BiquadFilterTest,
|
|
44
|
+
public ::testing::WithParamInterface<float> {};
|
|
45
|
+
class BiquadFilterGainTest : public BiquadFilterTest,
|
|
46
|
+
public ::testing::WithParamInterface<float> {};
|
|
47
|
+
} // namespace audioapi
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#ifdef RCT_NEW_ARCH_ENABLED
|
|
2
2
|
#import <React/RCTCallInvokerModule.h>
|
|
3
|
+
#import <React/RCTInvalidating.h>
|
|
3
4
|
#import <rnaudioapi/rnaudioapi.h>
|
|
4
5
|
#else // RCT_NEW_ARCH_ENABLED
|
|
5
6
|
#import <React/RCTBridgeModule.h>
|
|
@@ -10,11 +11,11 @@
|
|
|
10
11
|
@class AudioEngine;
|
|
11
12
|
@class NotificationManager;
|
|
12
13
|
@class AudioSessionManager;
|
|
13
|
-
@class
|
|
14
|
+
@class NotificationRegistry;
|
|
14
15
|
|
|
15
16
|
@interface AudioAPIModule : RCTEventEmitter
|
|
16
17
|
#ifdef RCT_NEW_ARCH_ENABLED
|
|
17
|
-
<NativeAudioAPIModuleSpec, RCTCallInvokerModule>
|
|
18
|
+
<NativeAudioAPIModuleSpec, RCTCallInvokerModule, RCTInvalidating>
|
|
18
19
|
#else
|
|
19
20
|
<RCTBridgeModule>
|
|
20
21
|
#endif // RCT_NEW_ARCH_ENABLED
|
|
@@ -22,7 +23,7 @@
|
|
|
22
23
|
@property (nonatomic, strong) AudioEngine *audioEngine;
|
|
23
24
|
@property (nonatomic, strong) NotificationManager *notificationManager;
|
|
24
25
|
@property (nonatomic, strong) AudioSessionManager *audioSessionManager;
|
|
25
|
-
@property (nonatomic, strong)
|
|
26
|
+
@property (nonatomic, strong) NotificationRegistry *notificationRegistry;
|
|
26
27
|
|
|
27
28
|
- (void)invokeHandlerWithEventName:(NSString *)eventName eventBody:(NSDictionary *)eventBody;
|
|
28
29
|
|
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
#import <audioapi/AudioAPIModuleInstaller.h>
|
|
12
12
|
#import <audioapi/ios/system/AudioEngine.h>
|
|
13
13
|
#import <audioapi/ios/system/AudioSessionManager.h>
|
|
14
|
-
#import <audioapi/ios/system/LockScreenManager.h>
|
|
15
14
|
#import <audioapi/ios/system/NotificationManager.h>
|
|
15
|
+
#import <audioapi/ios/system/notification/NotificationRegistry.h>
|
|
16
16
|
|
|
17
17
|
#import <audioapi/events/AudioEventHandlerRegistry.h>
|
|
18
18
|
|
|
@@ -26,7 +26,7 @@ using namespace worklets;
|
|
|
26
26
|
|
|
27
27
|
#if defined(RCT_NEW_ARCH_ENABLED)
|
|
28
28
|
// nothing
|
|
29
|
-
#else
|
|
29
|
+
#else // defined(RCT_NEW_ARCH_ENABLED)
|
|
30
30
|
@interface RCTBridge (RCTTurboModule)
|
|
31
31
|
- (std::shared_ptr<facebook::react::CallInvoker>)jsCallInvoker;
|
|
32
32
|
- (void)_tryAndHandleError:(dispatch_block_t)block;
|
|
@@ -50,25 +50,30 @@ RCT_EXPORT_MODULE(AudioAPIModule);
|
|
|
50
50
|
[self.audioEngine cleanup];
|
|
51
51
|
[self.notificationManager cleanup];
|
|
52
52
|
[self.audioSessionManager cleanup];
|
|
53
|
-
[self.
|
|
53
|
+
[self.notificationRegistry cleanup];
|
|
54
54
|
|
|
55
55
|
_eventHandler = nullptr;
|
|
56
56
|
|
|
57
57
|
[super invalidate];
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
+
- (dispatch_queue_t)methodQueue
|
|
61
|
+
{
|
|
62
|
+
return dispatch_queue_create("com.swmansion.audioapi.MainModuleQueue", DISPATCH_QUEUE_SERIAL);
|
|
63
|
+
}
|
|
64
|
+
|
|
60
65
|
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(install)
|
|
61
66
|
{
|
|
62
67
|
self.audioSessionManager = [[AudioSessionManager alloc] init];
|
|
63
|
-
self.audioEngine = [[AudioEngine alloc]
|
|
64
|
-
self.lockScreenManager = [[LockScreenManager alloc] initWithAudioAPIModule:self];
|
|
68
|
+
self.audioEngine = [[AudioEngine alloc] init];
|
|
65
69
|
self.notificationManager = [[NotificationManager alloc] initWithAudioAPIModule:self];
|
|
70
|
+
self.notificationRegistry = [[NotificationRegistry alloc] initWithAudioAPIModule:self];
|
|
66
71
|
|
|
67
72
|
auto jsiRuntime = reinterpret_cast<facebook::jsi::Runtime *>(self.bridge.runtime);
|
|
68
73
|
|
|
69
74
|
#if defined(RCT_NEW_ARCH_ENABLED)
|
|
70
75
|
auto jsCallInvoker = _callInvoker.callInvoker;
|
|
71
|
-
#else
|
|
76
|
+
#else // defined(RCT_NEW_ARCH_ENABLED)
|
|
72
77
|
auto jsCallInvoker = self.bridge.jsCallInvoker;
|
|
73
78
|
#endif // defined(RCT_NEW_ARCH_ENABLED)
|
|
74
79
|
|
|
@@ -98,7 +103,8 @@ RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(install)
|
|
|
98
103
|
}
|
|
99
104
|
|
|
100
105
|
// Get the actual JSI Runtime reference
|
|
101
|
-
audioapi::AudioAPIModuleInstaller::injectJSIBindings(
|
|
106
|
+
audioapi::AudioAPIModuleInstaller::injectJSIBindings(
|
|
107
|
+
jsiRuntime, jsCallInvoker, _eventHandler, uiWorkletRuntime);
|
|
102
108
|
#else
|
|
103
109
|
audioapi::AudioAPIModuleInstaller::injectJSIBindings(jsiRuntime, jsCallInvoker, _eventHandler);
|
|
104
110
|
#endif
|
|
@@ -113,71 +119,179 @@ RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(getDevicePreferredSampleRate)
|
|
|
113
119
|
}
|
|
114
120
|
|
|
115
121
|
RCT_EXPORT_METHOD(
|
|
116
|
-
setAudioSessionActivity : (BOOL)enabled resolve : (RCTPromiseResolveBlock)
|
|
117
|
-
reject)
|
|
122
|
+
setAudioSessionActivity : (BOOL)enabled resolve : (RCTPromiseResolveBlock)
|
|
123
|
+
resolve reject : (RCTPromiseRejectBlock)reject)
|
|
118
124
|
{
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
return;
|
|
122
|
-
}
|
|
125
|
+
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
|
126
|
+
auto success = [self.audioSessionManager setActive:enabled];
|
|
123
127
|
|
|
124
|
-
|
|
128
|
+
resolve(@(success));
|
|
129
|
+
});
|
|
125
130
|
}
|
|
126
131
|
|
|
127
132
|
RCT_EXPORT_METHOD(
|
|
128
133
|
setAudioSessionOptions : (NSString *)category mode : (NSString *)mode options : (NSArray *)
|
|
129
134
|
options allowHaptics : (BOOL)allowHaptics)
|
|
130
135
|
{
|
|
131
|
-
|
|
136
|
+
if (!self.audioSessionManager.shouldManageSession) {
|
|
137
|
+
[self.audioSessionManager setShouldManageSession:true];
|
|
138
|
+
}
|
|
139
|
+
[self.audioSessionManager setAudioSessionOptions:category
|
|
140
|
+
mode:mode
|
|
141
|
+
options:options
|
|
142
|
+
allowHaptics:allowHaptics];
|
|
132
143
|
}
|
|
133
144
|
|
|
134
|
-
RCT_EXPORT_METHOD(
|
|
145
|
+
RCT_EXPORT_METHOD(observeAudioInterruptions : (BOOL)enabled)
|
|
135
146
|
{
|
|
136
|
-
[self.
|
|
147
|
+
[self.notificationManager observeAudioInterruptions:enabled];
|
|
137
148
|
}
|
|
138
149
|
|
|
139
|
-
RCT_EXPORT_METHOD(
|
|
150
|
+
RCT_EXPORT_METHOD(activelyReclaimSession : (BOOL)enabled)
|
|
140
151
|
{
|
|
141
|
-
[self.
|
|
152
|
+
[self.notificationManager activelyReclaimSession:enabled];
|
|
142
153
|
}
|
|
143
154
|
|
|
144
|
-
RCT_EXPORT_METHOD(
|
|
155
|
+
RCT_EXPORT_METHOD(observeVolumeChanges : (BOOL)enabled)
|
|
145
156
|
{
|
|
146
|
-
[self.
|
|
157
|
+
[self.notificationManager observeVolumeChanges:(BOOL)enabled];
|
|
147
158
|
}
|
|
148
159
|
|
|
149
|
-
RCT_EXPORT_METHOD(
|
|
160
|
+
RCT_EXPORT_METHOD(
|
|
161
|
+
requestRecordingPermissions : (nonnull RCTPromiseResolveBlock)
|
|
162
|
+
resolve reject : (nonnull RCTPromiseRejectBlock)reject)
|
|
150
163
|
{
|
|
151
|
-
|
|
164
|
+
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
|
165
|
+
[self.audioSessionManager requestRecordingPermissions:resolve reject:reject];
|
|
166
|
+
});
|
|
152
167
|
}
|
|
153
168
|
|
|
154
|
-
RCT_EXPORT_METHOD(
|
|
169
|
+
RCT_EXPORT_METHOD(
|
|
170
|
+
checkRecordingPermissions : (nonnull RCTPromiseResolveBlock)
|
|
171
|
+
resolve reject : (nonnull RCTPromiseRejectBlock)reject)
|
|
155
172
|
{
|
|
156
|
-
|
|
173
|
+
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
|
174
|
+
[self.audioSessionManager checkRecordingPermissions:resolve reject:reject];
|
|
175
|
+
});
|
|
157
176
|
}
|
|
158
177
|
|
|
159
|
-
RCT_EXPORT_METHOD(
|
|
178
|
+
RCT_EXPORT_METHOD(
|
|
179
|
+
requestNotificationPermissions : (nonnull RCTPromiseResolveBlock)
|
|
180
|
+
resolve reject : (nonnull RCTPromiseRejectBlock)reject)
|
|
160
181
|
{
|
|
161
|
-
|
|
182
|
+
// iOS doesn't require explicit notification permissions for media controls
|
|
183
|
+
// MPNowPlayingInfoCenter and MPRemoteCommandCenter work without permissions
|
|
184
|
+
// Return 'granted' to match the spec interface
|
|
185
|
+
resolve(@"granted");
|
|
162
186
|
}
|
|
163
187
|
|
|
164
188
|
RCT_EXPORT_METHOD(
|
|
165
|
-
|
|
166
|
-
reject)
|
|
189
|
+
checkNotificationPermissions : (nonnull RCTPromiseResolveBlock)
|
|
190
|
+
resolve reject : (nonnull RCTPromiseRejectBlock)reject)
|
|
191
|
+
{
|
|
192
|
+
// iOS doesn't require explicit notification permissions for media controls
|
|
193
|
+
// Return 'granted' to match the spec interface
|
|
194
|
+
resolve(@"granted");
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
RCT_EXPORT_METHOD(
|
|
198
|
+
getDevicesInfo : (nonnull RCTPromiseResolveBlock)
|
|
199
|
+
resolve reject : (nonnull RCTPromiseRejectBlock)reject)
|
|
200
|
+
{
|
|
201
|
+
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
|
202
|
+
[self.audioSessionManager getDevicesInfo:resolve reject:reject];
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
RCT_EXPORT_METHOD(disableSessionManagement)
|
|
167
207
|
{
|
|
168
|
-
[self.audioSessionManager
|
|
208
|
+
[self.audioSessionManager disableSessionManagement];
|
|
169
209
|
}
|
|
170
210
|
|
|
211
|
+
// New notification system methods
|
|
171
212
|
RCT_EXPORT_METHOD(
|
|
172
|
-
|
|
213
|
+
registerNotification : (NSString *)type key : (NSString *)key resolve : (RCTPromiseResolveBlock)
|
|
214
|
+
resolve reject : (RCTPromiseRejectBlock)reject)
|
|
173
215
|
{
|
|
174
|
-
|
|
216
|
+
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
|
217
|
+
BOOL success = [self.notificationRegistry registerNotificationType:type withKey:key];
|
|
218
|
+
|
|
219
|
+
if (success) {
|
|
220
|
+
resolve(@{@"success" : @true});
|
|
221
|
+
} else {
|
|
222
|
+
resolve(@{@"success" : @false, @"error" : @"Failed to register notification"});
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
RCT_EXPORT_METHOD(
|
|
228
|
+
showNotification : (NSString *)key options : (NSDictionary *)
|
|
229
|
+
options resolve : (RCTPromiseResolveBlock)resolve reject : (RCTPromiseRejectBlock)reject)
|
|
230
|
+
{
|
|
231
|
+
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
|
232
|
+
BOOL success = [self.notificationRegistry showNotificationWithKey:key options:options];
|
|
233
|
+
|
|
234
|
+
if (success) {
|
|
235
|
+
resolve(@{@"success" : @true});
|
|
236
|
+
} else {
|
|
237
|
+
resolve(@{@"success" : @false, @"error" : @"Failed to show notification"});
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
RCT_EXPORT_METHOD(
|
|
243
|
+
updateNotification : (NSString *)key options : (NSDictionary *)
|
|
244
|
+
options resolve : (RCTPromiseResolveBlock)resolve reject : (RCTPromiseRejectBlock)reject)
|
|
245
|
+
{
|
|
246
|
+
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
|
247
|
+
BOOL success = [self.notificationRegistry updateNotificationWithKey:key options:options];
|
|
248
|
+
|
|
249
|
+
if (success) {
|
|
250
|
+
resolve(@{@"success" : @true});
|
|
251
|
+
} else {
|
|
252
|
+
resolve(@{@"success" : @false, @"error" : @"Failed to update notification"});
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
RCT_EXPORT_METHOD(
|
|
258
|
+
hideNotification : (NSString *)key resolve : (RCTPromiseResolveBlock)
|
|
259
|
+
resolve reject : (RCTPromiseRejectBlock)reject)
|
|
260
|
+
{
|
|
261
|
+
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
|
262
|
+
BOOL success = [self.notificationRegistry hideNotificationWithKey:key];
|
|
263
|
+
|
|
264
|
+
if (success) {
|
|
265
|
+
resolve(@{@"success" : @true});
|
|
266
|
+
} else {
|
|
267
|
+
resolve(@{@"success" : @false, @"error" : @"Failed to hide notification"});
|
|
268
|
+
}
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
RCT_EXPORT_METHOD(
|
|
273
|
+
unregisterNotification : (NSString *)key resolve : (RCTPromiseResolveBlock)
|
|
274
|
+
resolve reject : (RCTPromiseRejectBlock)reject)
|
|
275
|
+
{
|
|
276
|
+
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
|
277
|
+
BOOL success = [self.notificationRegistry unregisterNotificationWithKey:key];
|
|
278
|
+
|
|
279
|
+
if (success) {
|
|
280
|
+
resolve(@{@"success" : @true});
|
|
281
|
+
} else {
|
|
282
|
+
resolve(@{@"success" : @false, @"error" : @"Failed to unregister notification"});
|
|
283
|
+
}
|
|
284
|
+
});
|
|
175
285
|
}
|
|
176
286
|
|
|
177
287
|
RCT_EXPORT_METHOD(
|
|
178
|
-
|
|
288
|
+
isNotificationActive : (NSString *)key resolve : (RCTPromiseResolveBlock)
|
|
289
|
+
resolve reject : (RCTPromiseRejectBlock)reject)
|
|
179
290
|
{
|
|
180
|
-
|
|
291
|
+
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
|
292
|
+
BOOL isActive = [self.notificationRegistry isNotificationActiveWithKey:key];
|
|
293
|
+
resolve(@(isActive));
|
|
294
|
+
});
|
|
181
295
|
}
|
|
182
296
|
|
|
183
297
|
#ifdef RCT_NEW_ARCH_ENABLED
|