react-native-audio-api 0.11.0-alpha.1 → 0.11.0-alpha.11
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
|
@@ -1,29 +1,39 @@
|
|
|
1
|
-
import
|
|
1
|
+
import AudioAPIModule from '../AudioAPIModule';
|
|
2
|
+
import {
|
|
3
|
+
InvalidAccessError,
|
|
4
|
+
InvalidStateError,
|
|
5
|
+
NotSupportedError,
|
|
6
|
+
} from '../errors';
|
|
2
7
|
import { IBaseAudioContext } from '../interfaces';
|
|
3
8
|
import {
|
|
4
9
|
AudioBufferBaseSourceNodeOptions,
|
|
10
|
+
AudioWorkletRuntime,
|
|
5
11
|
ContextState,
|
|
12
|
+
ConvolverNodeOptions,
|
|
13
|
+
IIRFilterNodeOptions,
|
|
6
14
|
PeriodicWaveConstraints,
|
|
7
|
-
AudioWorkletRuntime,
|
|
8
15
|
} from '../types';
|
|
9
|
-
import {
|
|
10
|
-
import WorkletSourceNode from './WorkletSourceNode';
|
|
11
|
-
import WorkletProcessingNode from './WorkletProcessingNode';
|
|
16
|
+
import { assertWorkletsEnabled } from '../utils';
|
|
12
17
|
import AnalyserNode from './AnalyserNode';
|
|
13
18
|
import AudioBuffer from './AudioBuffer';
|
|
14
19
|
import AudioBufferQueueSourceNode from './AudioBufferQueueSourceNode';
|
|
15
20
|
import AudioBufferSourceNode from './AudioBufferSourceNode';
|
|
21
|
+
import { decodeAudioData, decodePCMInBase64 } from './AudioDecoder';
|
|
16
22
|
import AudioDestinationNode from './AudioDestinationNode';
|
|
17
23
|
import BiquadFilterNode from './BiquadFilterNode';
|
|
18
24
|
import ConstantSourceNode from './ConstantSourceNode';
|
|
25
|
+
import ConvolverNode from './ConvolverNode';
|
|
26
|
+
import DelayNode from './DelayNode';
|
|
19
27
|
import GainNode from './GainNode';
|
|
28
|
+
import IIRFilterNode from './IIRFilterNode';
|
|
20
29
|
import OscillatorNode from './OscillatorNode';
|
|
21
30
|
import PeriodicWave from './PeriodicWave';
|
|
22
31
|
import RecorderAdapterNode from './RecorderAdapterNode';
|
|
23
32
|
import StereoPannerNode from './StereoPannerNode';
|
|
24
33
|
import StreamerNode from './StreamerNode';
|
|
25
34
|
import WorkletNode from './WorkletNode';
|
|
26
|
-
import
|
|
35
|
+
import WorkletProcessingNode from './WorkletProcessingNode';
|
|
36
|
+
import WorkletSourceNode from './WorkletSourceNode';
|
|
27
37
|
|
|
28
38
|
export default class BaseAudioContext {
|
|
29
39
|
readonly destination: AudioDestinationNode;
|
|
@@ -79,14 +89,17 @@ export default class BaseAudioContext {
|
|
|
79
89
|
`The number of input channels provided (${inputChannelCount}) can not be less than 1 or greater than 32`
|
|
80
90
|
);
|
|
81
91
|
}
|
|
92
|
+
|
|
82
93
|
if (bufferLength < 1) {
|
|
83
94
|
throw new NotSupportedError(
|
|
84
95
|
`The buffer length provided (${bufferLength}) can not be less than 1`
|
|
85
96
|
);
|
|
86
97
|
}
|
|
87
98
|
|
|
88
|
-
|
|
89
|
-
|
|
99
|
+
assertWorkletsEnabled();
|
|
100
|
+
|
|
101
|
+
const shareableWorklet =
|
|
102
|
+
AudioAPIModule.workletsModule!.makeShareableCloneRecursive(
|
|
90
103
|
(audioBuffers: Array<ArrayBuffer>, channelCount: number) => {
|
|
91
104
|
'worklet';
|
|
92
105
|
const floatAudioData: Array<Float32Array> = audioBuffers.map(
|
|
@@ -95,19 +108,15 @@ export default class BaseAudioContext {
|
|
|
95
108
|
callback(floatAudioData, channelCount);
|
|
96
109
|
}
|
|
97
110
|
);
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
)
|
|
107
|
-
}
|
|
108
|
-
/// User does not have worklets as a dependency so he cannot use the worklet API.
|
|
109
|
-
throw new Error(
|
|
110
|
-
'[RnAudioApi] Worklets are not available, please install react-native-worklets as a dependency. Refer to documentation for more details.'
|
|
111
|
+
|
|
112
|
+
return new WorkletNode(
|
|
113
|
+
this,
|
|
114
|
+
this.context.createWorkletNode(
|
|
115
|
+
shareableWorklet,
|
|
116
|
+
workletRuntime === 'UIRuntime',
|
|
117
|
+
bufferLength,
|
|
118
|
+
inputChannelCount
|
|
119
|
+
)
|
|
111
120
|
);
|
|
112
121
|
}
|
|
113
122
|
|
|
@@ -120,8 +129,10 @@ export default class BaseAudioContext {
|
|
|
120
129
|
) => void,
|
|
121
130
|
workletRuntime: AudioWorkletRuntime = 'AudioRuntime'
|
|
122
131
|
): WorkletProcessingNode {
|
|
123
|
-
|
|
124
|
-
|
|
132
|
+
assertWorkletsEnabled();
|
|
133
|
+
|
|
134
|
+
const shareableWorklet =
|
|
135
|
+
AudioAPIModule.workletsModule!.makeShareableCloneRecursive(
|
|
125
136
|
(
|
|
126
137
|
inputBuffers: Array<ArrayBuffer>,
|
|
127
138
|
outputBuffers: Array<ArrayBuffer>,
|
|
@@ -138,17 +149,13 @@ export default class BaseAudioContext {
|
|
|
138
149
|
callback(inputData, outputData, framesToProcess, currentTime);
|
|
139
150
|
}
|
|
140
151
|
);
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
)
|
|
148
|
-
}
|
|
149
|
-
/// User does not have worklets as a dependency so he cannot use the worklet API.
|
|
150
|
-
throw new Error(
|
|
151
|
-
'[RnAudioApi] Worklets are not available, please install react-native-worklets as a dependency. Refer to documentation for more details.'
|
|
152
|
+
|
|
153
|
+
return new WorkletProcessingNode(
|
|
154
|
+
this,
|
|
155
|
+
this.context.createWorkletProcessingNode(
|
|
156
|
+
shareableWorklet,
|
|
157
|
+
workletRuntime === 'UIRuntime'
|
|
158
|
+
)
|
|
152
159
|
);
|
|
153
160
|
}
|
|
154
161
|
|
|
@@ -161,26 +168,23 @@ export default class BaseAudioContext {
|
|
|
161
168
|
) => void,
|
|
162
169
|
workletRuntime: AudioWorkletRuntime = 'AudioRuntime'
|
|
163
170
|
): WorkletSourceNode {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
171
|
+
assertWorkletsEnabled();
|
|
172
|
+
const shareableWorklet =
|
|
173
|
+
AudioAPIModule.workletsModule!.makeShareableCloneRecursive(
|
|
174
|
+
(
|
|
175
|
+
audioBuffers: Array<ArrayBuffer>,
|
|
176
|
+
framesToProcess: number,
|
|
177
|
+
currentTime: number,
|
|
178
|
+
startOffset: number
|
|
179
|
+
) => {
|
|
180
|
+
'worklet';
|
|
181
|
+
const floatAudioData: Array<Float32Array> = audioBuffers.map(
|
|
182
|
+
(buffer) => new Float32Array(buffer)
|
|
183
|
+
);
|
|
184
|
+
callback(floatAudioData, framesToProcess, currentTime, startOffset);
|
|
185
|
+
}
|
|
168
186
|
);
|
|
169
|
-
|
|
170
|
-
const shareableWorklet = workletsModule.makeShareableCloneRecursive(
|
|
171
|
-
(
|
|
172
|
-
audioBuffers: Array<ArrayBuffer>,
|
|
173
|
-
framesToProcess: number,
|
|
174
|
-
currentTime: number,
|
|
175
|
-
startOffset: number
|
|
176
|
-
) => {
|
|
177
|
-
'worklet';
|
|
178
|
-
const floatAudioData: Array<Float32Array> = audioBuffers.map(
|
|
179
|
-
(buffer) => new Float32Array(buffer)
|
|
180
|
-
);
|
|
181
|
-
callback(floatAudioData, framesToProcess, currentTime, startOffset);
|
|
182
|
-
}
|
|
183
|
-
);
|
|
187
|
+
|
|
184
188
|
return new WorkletSourceNode(
|
|
185
189
|
this,
|
|
186
190
|
this.context.createWorkletSourceNode(
|
|
@@ -199,7 +203,11 @@ export default class BaseAudioContext {
|
|
|
199
203
|
}
|
|
200
204
|
|
|
201
205
|
createStreamer(): StreamerNode {
|
|
202
|
-
|
|
206
|
+
const streamer = this.context.createStreamer();
|
|
207
|
+
if (!streamer) {
|
|
208
|
+
throw new NotSupportedError('StreamerNode requires FFmpeg build');
|
|
209
|
+
}
|
|
210
|
+
return new StreamerNode(this, streamer);
|
|
203
211
|
}
|
|
204
212
|
|
|
205
213
|
createConstantSource(): ConstantSourceNode {
|
|
@@ -210,6 +218,11 @@ export default class BaseAudioContext {
|
|
|
210
218
|
return new GainNode(this, this.context.createGain());
|
|
211
219
|
}
|
|
212
220
|
|
|
221
|
+
createDelay(maxDelayTime?: number): DelayNode {
|
|
222
|
+
const maxTime = maxDelayTime ?? 1.0;
|
|
223
|
+
return new DelayNode(this, this.context.createDelay(maxTime));
|
|
224
|
+
}
|
|
225
|
+
|
|
213
226
|
createStereoPanner(): StereoPannerNode {
|
|
214
227
|
return new StereoPannerNode(this, this.context.createStereoPanner());
|
|
215
228
|
}
|
|
@@ -218,6 +231,38 @@ export default class BaseAudioContext {
|
|
|
218
231
|
return new BiquadFilterNode(this, this.context.createBiquadFilter());
|
|
219
232
|
}
|
|
220
233
|
|
|
234
|
+
createIIRFilter(options: IIRFilterNodeOptions): IIRFilterNode {
|
|
235
|
+
const feedforward = options.feedforward;
|
|
236
|
+
const feedback = options.feedback;
|
|
237
|
+
if (feedforward.length < 1 || feedforward.length > 20) {
|
|
238
|
+
throw new NotSupportedError(
|
|
239
|
+
`The provided feedforward array has length (${feedforward.length}) outside the range [1, 20]`
|
|
240
|
+
);
|
|
241
|
+
}
|
|
242
|
+
if (feedback.length < 1 || feedback.length > 20) {
|
|
243
|
+
throw new NotSupportedError(
|
|
244
|
+
`The provided feedback array has length (${feedback.length}) outside the range [1, 20]`
|
|
245
|
+
);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
if (feedforward.every((value) => value === 0)) {
|
|
249
|
+
throw new InvalidStateError(
|
|
250
|
+
`Feedforward array must contain at least one non-zero value`
|
|
251
|
+
);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
if (feedback[0] === 0) {
|
|
255
|
+
throw new InvalidStateError(
|
|
256
|
+
`First value of feedback array cannot be zero`
|
|
257
|
+
);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
return new IIRFilterNode(
|
|
261
|
+
this,
|
|
262
|
+
this.context.createIIRFilter(feedforward, feedback)
|
|
263
|
+
);
|
|
264
|
+
}
|
|
265
|
+
|
|
221
266
|
createBufferSource(
|
|
222
267
|
options?: AudioBufferBaseSourceNodeOptions
|
|
223
268
|
): AudioBufferSourceNode {
|
|
@@ -289,4 +334,25 @@ export default class BaseAudioContext {
|
|
|
289
334
|
createAnalyser(): AnalyserNode {
|
|
290
335
|
return new AnalyserNode(this, this.context.createAnalyser());
|
|
291
336
|
}
|
|
337
|
+
|
|
338
|
+
createConvolver(options?: ConvolverNodeOptions): ConvolverNode {
|
|
339
|
+
if (options?.buffer) {
|
|
340
|
+
const numberOfChannels = options.buffer.numberOfChannels;
|
|
341
|
+
if (
|
|
342
|
+
numberOfChannels !== 1 &&
|
|
343
|
+
numberOfChannels !== 2 &&
|
|
344
|
+
numberOfChannels !== 4
|
|
345
|
+
) {
|
|
346
|
+
throw new NotSupportedError(
|
|
347
|
+
`The number of channels provided (${numberOfChannels}) in impulse response for ConvolverNode buffer must be 1 or 2 or 4.`
|
|
348
|
+
);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
const buffer = options?.buffer ?? null;
|
|
352
|
+
const disableNormalization = options?.disableNormalization ?? false;
|
|
353
|
+
return new ConvolverNode(
|
|
354
|
+
this,
|
|
355
|
+
this.context.createConvolver(buffer?.buffer, disableNormalization)
|
|
356
|
+
);
|
|
357
|
+
}
|
|
292
358
|
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { IConvolverNode } from '../interfaces';
|
|
2
|
+
import BaseAudioContext from './BaseAudioContext';
|
|
3
|
+
import AudioNode from './AudioNode';
|
|
4
|
+
import AudioBuffer from './AudioBuffer';
|
|
5
|
+
|
|
6
|
+
export default class ConvolverNode extends AudioNode {
|
|
7
|
+
constructor(context: BaseAudioContext, node: IConvolverNode) {
|
|
8
|
+
super(context, node);
|
|
9
|
+
this.normalize = node.normalize;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
public get buffer(): AudioBuffer | null {
|
|
13
|
+
const buffer = (this.node as IConvolverNode).buffer;
|
|
14
|
+
if (!buffer) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
return new AudioBuffer(buffer);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
public set buffer(buffer: AudioBuffer | null) {
|
|
21
|
+
if (!buffer) {
|
|
22
|
+
(this.node as IConvolverNode).setBuffer(null);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
(this.node as IConvolverNode).setBuffer(buffer.buffer);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
public get normalize(): boolean {
|
|
29
|
+
return (this.node as IConvolverNode).normalize;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
public set normalize(value: boolean) {
|
|
33
|
+
(this.node as IConvolverNode).normalize = value;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { IDelayNode } from '../interfaces';
|
|
2
|
+
import AudioNode from './AudioNode';
|
|
3
|
+
import AudioParam from './AudioParam';
|
|
4
|
+
import BaseAudioContext from './BaseAudioContext';
|
|
5
|
+
|
|
6
|
+
export default class DelayNode extends AudioNode {
|
|
7
|
+
readonly delayTime: AudioParam;
|
|
8
|
+
|
|
9
|
+
constructor(context: BaseAudioContext, delay: IDelayNode) {
|
|
10
|
+
super(context, delay);
|
|
11
|
+
this.delayTime = new AudioParam(delay.delayTime, context);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { NotSupportedError } from '../errors';
|
|
2
|
+
import { IIIRFilterNode } from '../interfaces';
|
|
3
|
+
import AudioNode from './AudioNode';
|
|
4
|
+
|
|
5
|
+
export default class IIRFilterNode extends AudioNode {
|
|
6
|
+
public getFrequencyResponse(
|
|
7
|
+
frequencyArray: Float32Array,
|
|
8
|
+
magResponseOutput: Float32Array,
|
|
9
|
+
phaseResponseOutput: Float32Array
|
|
10
|
+
) {
|
|
11
|
+
if (
|
|
12
|
+
frequencyArray.length !== magResponseOutput.length ||
|
|
13
|
+
frequencyArray.length !== phaseResponseOutput.length
|
|
14
|
+
) {
|
|
15
|
+
throw new NotSupportedError(
|
|
16
|
+
`The lengths of the arrays are not the same frequencyArray: ${frequencyArray.length}, magResponseOutput: ${magResponseOutput.length}, phaseResponseOutput: ${phaseResponseOutput.length}`
|
|
17
|
+
);
|
|
18
|
+
}
|
|
19
|
+
(this.node as IIIRFilterNode).getFrequencyResponse(
|
|
20
|
+
frequencyArray,
|
|
21
|
+
magResponseOutput,
|
|
22
|
+
phaseResponseOutput
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import AudioAPIModule from '../AudioAPIModule';
|
|
2
|
+
import { InvalidStateError, NotSupportedError } from '../errors';
|
|
1
3
|
import { IOfflineAudioContext } from '../interfaces';
|
|
2
|
-
import BaseAudioContext from './BaseAudioContext';
|
|
3
4
|
import { OfflineAudioContextOptions } from '../types';
|
|
4
|
-
import { InvalidStateError, NotSupportedError } from '../errors';
|
|
5
5
|
import AudioBuffer from './AudioBuffer';
|
|
6
|
-
import
|
|
6
|
+
import BaseAudioContext from './BaseAudioContext';
|
|
7
7
|
|
|
8
8
|
export default class OfflineAudioContext extends BaseAudioContext {
|
|
9
9
|
private isSuspended: boolean;
|
|
@@ -17,10 +17,7 @@ export default class OfflineAudioContext extends BaseAudioContext {
|
|
|
17
17
|
arg1?: number,
|
|
18
18
|
arg2?: number
|
|
19
19
|
) {
|
|
20
|
-
|
|
21
|
-
if (isWorkletsAvailable) {
|
|
22
|
-
audioRuntime = workletsModule.createWorkletRuntime('AudioWorkletRuntime');
|
|
23
|
-
}
|
|
20
|
+
const audioRuntime = AudioAPIModule.createAudioRuntime();
|
|
24
21
|
|
|
25
22
|
if (typeof arg0 === 'object') {
|
|
26
23
|
const { numberOfChannels, length, sampleRate } = arg0;
|
package/src/events/types.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import AudioBuffer from '../core/AudioBuffer';
|
|
2
|
+
import { NotificationEvents } from '../system';
|
|
2
3
|
|
|
3
4
|
export interface EventEmptyType {}
|
|
4
5
|
|
|
@@ -23,6 +24,10 @@ interface OnRouteChangeEventType {
|
|
|
23
24
|
| 'NoSuitableRouteForCategory';
|
|
24
25
|
}
|
|
25
26
|
|
|
27
|
+
export interface OnRecorderErrorEventType {
|
|
28
|
+
message: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
26
31
|
interface RemoteCommandEvents {
|
|
27
32
|
remotePlay: EventEmptyType;
|
|
28
33
|
remotePause: EventEmptyType;
|
|
@@ -80,11 +85,10 @@ interface AudioAPIEvents {
|
|
|
80
85
|
positionChanged: EventTypeWithValue;
|
|
81
86
|
audioError: EventEmptyType; // to change
|
|
82
87
|
systemStateChanged: EventEmptyType; // to change
|
|
88
|
+
recorderError: OnRecorderErrorEventType;
|
|
83
89
|
}
|
|
84
90
|
|
|
85
|
-
type AudioEvents = SystemEvents & AudioAPIEvents;
|
|
86
|
-
|
|
87
|
-
export type RemoteCommandEventName = keyof RemoteCommandEvents;
|
|
91
|
+
type AudioEvents = SystemEvents & AudioAPIEvents & NotificationEvents;
|
|
88
92
|
|
|
89
93
|
export type SystemEventName = keyof SystemEvents;
|
|
90
94
|
export type SystemEventCallback<Name extends SystemEventName> = (
|
package/src/interfaces.ts
CHANGED
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
import { AudioEventCallback, AudioEventName } from './events/types';
|
|
2
2
|
import type {
|
|
3
|
+
AudioRecorderCallbackOptions,
|
|
4
|
+
AudioRecorderFileOptions,
|
|
3
5
|
BiquadFilterType,
|
|
4
6
|
ChannelCountMode,
|
|
5
7
|
ChannelInterpretation,
|
|
6
8
|
ContextState,
|
|
7
9
|
FileInfo,
|
|
8
10
|
OscillatorType,
|
|
11
|
+
Result,
|
|
9
12
|
WindowType,
|
|
10
13
|
} from './types';
|
|
11
14
|
|
|
15
|
+
// IMPORTANT: use only IClass, because it is a part of contract between cpp host object and js layer
|
|
16
|
+
|
|
12
17
|
export type WorkletNodeCallback = (
|
|
13
18
|
audioData: Array<ArrayBuffer>,
|
|
14
19
|
channelCount: number
|
|
@@ -59,8 +64,13 @@ export interface IBaseAudioContext {
|
|
|
59
64
|
createOscillator(): IOscillatorNode;
|
|
60
65
|
createConstantSource(): IConstantSourceNode;
|
|
61
66
|
createGain(): IGainNode;
|
|
67
|
+
createDelay(maxDelayTime: number): IDelayNode;
|
|
62
68
|
createStereoPanner(): IStereoPannerNode;
|
|
63
69
|
createBiquadFilter: () => IBiquadFilterNode;
|
|
70
|
+
createIIRFilter: (
|
|
71
|
+
feedforward: number[],
|
|
72
|
+
feedback: number[]
|
|
73
|
+
) => IIIRFilterNode;
|
|
64
74
|
createBufferSource: (pitchCorrection: boolean) => IAudioBufferSourceNode;
|
|
65
75
|
createBufferQueueSource: (
|
|
66
76
|
pitchCorrection: boolean
|
|
@@ -76,7 +86,11 @@ export interface IBaseAudioContext {
|
|
|
76
86
|
disableNormalization: boolean
|
|
77
87
|
) => IPeriodicWave;
|
|
78
88
|
createAnalyser: () => IAnalyserNode;
|
|
79
|
-
|
|
89
|
+
createConvolver: (
|
|
90
|
+
buffer: IAudioBuffer | undefined,
|
|
91
|
+
disableNormalization: boolean
|
|
92
|
+
) => IConvolverNode;
|
|
93
|
+
createStreamer: () => IStreamerNode | null; // null when FFmpeg is not enabled
|
|
80
94
|
}
|
|
81
95
|
|
|
82
96
|
export interface IAudioContext extends IBaseAudioContext {
|
|
@@ -103,6 +117,11 @@ export interface IAudioNode {
|
|
|
103
117
|
disconnect: (destination?: IAudioNode | IAudioParam) => void;
|
|
104
118
|
}
|
|
105
119
|
|
|
120
|
+
export interface IDelayNode extends IAudioNode {
|
|
121
|
+
readonly delayTime: IAudioParam;
|
|
122
|
+
maxDelayTime: number;
|
|
123
|
+
}
|
|
124
|
+
|
|
106
125
|
export interface IGainNode extends IAudioNode {
|
|
107
126
|
readonly gain: IAudioParam;
|
|
108
127
|
}
|
|
@@ -125,6 +144,14 @@ export interface IBiquadFilterNode extends IAudioNode {
|
|
|
125
144
|
): void;
|
|
126
145
|
}
|
|
127
146
|
|
|
147
|
+
export interface IIIRFilterNode extends IAudioNode {
|
|
148
|
+
getFrequencyResponse(
|
|
149
|
+
frequencyArray: Float32Array,
|
|
150
|
+
magResponseOutput: Float32Array,
|
|
151
|
+
phaseResponseOutput: Float32Array
|
|
152
|
+
): void;
|
|
153
|
+
}
|
|
154
|
+
|
|
128
155
|
export interface IAudioDestinationNode extends IAudioNode {}
|
|
129
156
|
|
|
130
157
|
export interface IAudioScheduledSourceNode extends IAudioNode {
|
|
@@ -139,6 +166,9 @@ export interface IAudioBufferBaseSourceNode extends IAudioScheduledSourceNode {
|
|
|
139
166
|
detune: IAudioParam;
|
|
140
167
|
playbackRate: IAudioParam;
|
|
141
168
|
|
|
169
|
+
getInputLatency: () => number;
|
|
170
|
+
getOutputLatency: () => number;
|
|
171
|
+
|
|
142
172
|
// passing subscriptionId(uint_64 in cpp, string in js) to the cpp
|
|
143
173
|
onPositionChanged: string;
|
|
144
174
|
// set how often the onPositionChanged event is called
|
|
@@ -182,9 +212,17 @@ export interface IAudioBufferQueueSourceNode
|
|
|
182
212
|
|
|
183
213
|
// returns bufferId
|
|
184
214
|
enqueueBuffer: (audioBuffer: IAudioBuffer) => string;
|
|
215
|
+
start: (when?: number, offset?: number) => void;
|
|
185
216
|
pause: () => void;
|
|
186
217
|
}
|
|
187
218
|
|
|
219
|
+
export interface IConvolverNode extends IAudioNode {
|
|
220
|
+
readonly buffer: IAudioBuffer | null;
|
|
221
|
+
normalize: boolean;
|
|
222
|
+
|
|
223
|
+
setBuffer: (audioBuffer: IAudioBuffer | null) => void;
|
|
224
|
+
}
|
|
225
|
+
|
|
188
226
|
export interface IAudioBuffer {
|
|
189
227
|
readonly length: number;
|
|
190
228
|
readonly duration: number;
|
|
@@ -251,46 +289,21 @@ export interface IWorkletSourceNode extends IAudioScheduledSourceNode {}
|
|
|
251
289
|
|
|
252
290
|
export interface IWorkletProcessingNode extends IAudioNode {}
|
|
253
291
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
interface IAudioRecorderFileOptions {
|
|
258
|
-
sampleRate: number;
|
|
259
|
-
channels: number;
|
|
260
|
-
bitRate: number;
|
|
261
|
-
/**
|
|
262
|
-
* IOS specific file recording options
|
|
263
|
-
*
|
|
264
|
-
* - `format` - IOSFormat, bitmask 0 x 0000000F
|
|
265
|
-
* - `quality` - IOSAudioQuality, bitmask 0 x 000000F0
|
|
266
|
-
* - `flacCompressionLevel` - FlacCompressionLevel, bitmask 0 x 00000F00
|
|
267
|
-
* - `directory` - FileDirectory, bitmask 0 x 0000F000
|
|
268
|
-
* - `bitDepth` - BitDepth, bitmask 0 x 000F0000
|
|
269
|
-
*/
|
|
270
|
-
ios: IOSAudioRecorderFileDescriptor;
|
|
271
|
-
/**
|
|
272
|
-
* Android specific file recording options
|
|
273
|
-
*
|
|
274
|
-
* - He he
|
|
275
|
-
*/
|
|
276
|
-
android: AndroidAudioRecorderFileDescriptor;
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
interface IAudioRecorderCallbackOptions {
|
|
280
|
-
sampleRate: number;
|
|
281
|
-
bufferLength: number;
|
|
282
|
-
channelCount: number;
|
|
292
|
+
export interface IAudioRecorderCallbackOptions
|
|
293
|
+
extends AudioRecorderCallbackOptions {
|
|
283
294
|
callbackId: string;
|
|
284
295
|
}
|
|
285
296
|
|
|
286
297
|
export interface IAudioRecorder {
|
|
287
298
|
// default recorder methods
|
|
288
|
-
start: () => string
|
|
289
|
-
stop: () => FileInfo
|
|
299
|
+
start: () => Result<{ path: string }>;
|
|
300
|
+
stop: () => Result<FileInfo>;
|
|
290
301
|
isRecording: () => boolean;
|
|
291
302
|
isPaused: () => boolean;
|
|
292
303
|
|
|
293
|
-
enableFileOutput: (
|
|
304
|
+
enableFileOutput: (
|
|
305
|
+
options: AudioRecorderFileOptions
|
|
306
|
+
) => Result<{ path: string }>;
|
|
294
307
|
disableFileOutput: () => void;
|
|
295
308
|
|
|
296
309
|
// pause and resume methods for file recording
|
|
@@ -301,10 +314,14 @@ export interface IAudioRecorder {
|
|
|
301
314
|
connect: (node: IRecorderAdapterNode) => void;
|
|
302
315
|
disconnect: () => void;
|
|
303
316
|
|
|
304
|
-
setOnAudioReady: (options: IAudioRecorderCallbackOptions) => void
|
|
317
|
+
setOnAudioReady: (options: IAudioRecorderCallbackOptions) => Result<void>;
|
|
305
318
|
clearOnAudioReady: () => void;
|
|
306
319
|
|
|
320
|
+
setOnError: (options: { callbackId: string }) => void;
|
|
321
|
+
clearOnError: () => void;
|
|
322
|
+
|
|
307
323
|
getCurrentDuration: () => number;
|
|
324
|
+
getFilePath: () => string | null;
|
|
308
325
|
}
|
|
309
326
|
|
|
310
327
|
export interface IAudioDecoder {
|
|
@@ -4,6 +4,8 @@ import {
|
|
|
4
4
|
ConfigPlugin,
|
|
5
5
|
withInfoPlist,
|
|
6
6
|
withAndroidManifest,
|
|
7
|
+
withGradleProperties,
|
|
8
|
+
withPodfile,
|
|
7
9
|
} from '@expo/config-plugins';
|
|
8
10
|
const pkg = require('react-native-audio-api/package.json');
|
|
9
11
|
|
|
@@ -13,6 +15,7 @@ interface Options {
|
|
|
13
15
|
androidPermissions: string[];
|
|
14
16
|
androidForegroundService: boolean;
|
|
15
17
|
androidFSTypes: string[];
|
|
18
|
+
disableFFmpeg: boolean;
|
|
16
19
|
}
|
|
17
20
|
|
|
18
21
|
const withDefaultOptions = (options: Partial<Options>): Options => {
|
|
@@ -24,6 +27,7 @@ const withDefaultOptions = (options: Partial<Options>): Options => {
|
|
|
24
27
|
],
|
|
25
28
|
androidForegroundService: true,
|
|
26
29
|
androidFSTypes: ['mediaPlayback'],
|
|
30
|
+
disableFFmpeg: false,
|
|
27
31
|
...options,
|
|
28
32
|
};
|
|
29
33
|
};
|
|
@@ -88,6 +92,59 @@ const withForegroundService: ConfigPlugin<Options> = (
|
|
|
88
92
|
});
|
|
89
93
|
};
|
|
90
94
|
|
|
95
|
+
const withFFmpegConfig: ConfigPlugin<Options> = (config, options) => {
|
|
96
|
+
const iosConf = withPodfile(config, (mod) => {
|
|
97
|
+
let contents = mod.modResults.contents;
|
|
98
|
+
const ffmpegRegex = /^.*ENV\['DISABLE_AUDIOAPI_FFMPEG'\].*$/gm;
|
|
99
|
+
const podfileString = options.disableFFmpeg
|
|
100
|
+
? `ENV['DISABLE_AUDIOAPI_FFMPEG'] = '1'`
|
|
101
|
+
: '';
|
|
102
|
+
// No existing setting
|
|
103
|
+
if (contents.search(ffmpegRegex) === -1) {
|
|
104
|
+
if (options.disableFFmpeg) {
|
|
105
|
+
if (contents.endsWith('\n')) {
|
|
106
|
+
contents = `${contents}${podfileString}`;
|
|
107
|
+
} else {
|
|
108
|
+
contents = `${contents}\n${podfileString}`;
|
|
109
|
+
}
|
|
110
|
+
mod.modResults.contents = contents;
|
|
111
|
+
}
|
|
112
|
+
} else {
|
|
113
|
+
// Existing setting found, will replace
|
|
114
|
+
contents = contents.replace(ffmpegRegex, podfileString);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
mod.modResults.contents = contents;
|
|
118
|
+
return mod;
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
const finalConf = withGradleProperties(iosConf, (mod) => {
|
|
122
|
+
const gradleProperties = mod.modResults;
|
|
123
|
+
|
|
124
|
+
const existingIndex = gradleProperties.findIndex(
|
|
125
|
+
(prop) => prop.type === 'property' && prop.key === 'disableAudioapiFFmpeg'
|
|
126
|
+
);
|
|
127
|
+
if (existingIndex !== -1) {
|
|
128
|
+
gradleProperties.splice(existingIndex, 1);
|
|
129
|
+
} else if (!options.disableFFmpeg) {
|
|
130
|
+
// No existing setting and FFmpeg is enabled, do nothing.
|
|
131
|
+
return mod;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
if (options.disableFFmpeg) {
|
|
135
|
+
gradleProperties.push({
|
|
136
|
+
type: 'property',
|
|
137
|
+
key: 'disableAudioapiFFmpeg',
|
|
138
|
+
value: options.disableFFmpeg ? 'true' : 'false',
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
return mod;
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
return finalConf;
|
|
146
|
+
};
|
|
147
|
+
|
|
91
148
|
const withAudioAPI: ConfigPlugin<Options> = (config, optionsIn) => {
|
|
92
149
|
const options = withDefaultOptions(optionsIn ?? {});
|
|
93
150
|
|
|
@@ -105,6 +162,10 @@ const withAudioAPI: ConfigPlugin<Options> = (config, optionsIn) => {
|
|
|
105
162
|
config = withIosMicrophonePermission(config, options);
|
|
106
163
|
}
|
|
107
164
|
|
|
165
|
+
if (options.disableFFmpeg !== undefined) {
|
|
166
|
+
config = withFFmpegConfig(config, options);
|
|
167
|
+
}
|
|
168
|
+
|
|
108
169
|
return config;
|
|
109
170
|
};
|
|
110
171
|
|