react-native-audio-api 0.11.0-alpha.0 → 0.11.0-alpha.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -11
- package/RNAudioAPI.podspec +25 -18
- package/android/build.gradle +41 -5
- package/android/src/main/cpp/audioapi/CMakeLists.txt +6 -3
- package/android/src/main/cpp/audioapi/android/AudioAPIModule.cpp +10 -16
- package/android/src/main/cpp/audioapi/android/OnLoad.cpp +1 -2
- package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.cpp +353 -74
- package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +32 -19
- package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +13 -20
- package/android/src/main/cpp/audioapi/android/core/utils/AndroidFileWriterBackend.h +15 -15
- package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.cpp +170 -0
- package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.h +46 -0
- package/android/src/main/cpp/audioapi/android/core/utils/AudioDecoder.cpp +46 -58
- package/android/src/main/cpp/audioapi/android/core/utils/FileOptions.cpp +83 -0
- package/android/src/main/cpp/audioapi/android/core/utils/FileOptions.h +22 -0
- package/android/src/main/cpp/audioapi/android/core/utils/MiniaudioImplementation.cpp +5 -0
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.cpp +366 -304
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.h +49 -91
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/ptrs.hpp +56 -0
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/utils.cpp +114 -0
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/utils.h +34 -0
- package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.cpp +154 -95
- package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.h +10 -16
- package/android/src/main/cpp/audioapi/android/system/NativeFileInfo.hpp +2 -1
- package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +189 -14
- package/android/src/main/java/com/swmansion/audioapi/core/NativeAudioPlayer.kt +10 -8
- package/android/src/main/java/com/swmansion/audioapi/core/NativeAudioRecorder.kt +10 -8
- package/android/src/main/java/com/swmansion/audioapi/system/AudioFocusListener.kt +5 -2
- package/android/src/main/java/com/swmansion/audioapi/system/CentralizedForegroundService.kt +128 -0
- package/android/src/main/java/com/swmansion/audioapi/system/ForegroundServiceManager.kt +116 -0
- package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionManager.kt +115 -107
- package/android/src/main/java/com/swmansion/audioapi/system/PermissionRequestListener.kt +2 -1
- package/android/src/main/java/com/swmansion/audioapi/system/notification/BaseNotification.kt +47 -0
- package/android/src/main/java/com/swmansion/audioapi/system/notification/NotificationRegistry.kt +191 -0
- package/android/src/main/java/com/swmansion/audioapi/system/notification/PlaybackNotification.kt +669 -0
- package/android/src/main/java/com/swmansion/audioapi/system/notification/PlaybackNotificationReceiver.kt +33 -0
- package/android/src/main/java/com/swmansion/audioapi/system/notification/RecordingNotification.kt +303 -0
- package/android/src/main/java/com/swmansion/audioapi/system/notification/RecordingNotificationReceiver.kt +45 -0
- package/android/src/main/java/com/swmansion/audioapi/system/notification/SimpleNotification.kt +119 -0
- package/android/src/main/jniLibs/arm64-v8a/libavcodec.so +0 -0
- package/android/src/main/jniLibs/arm64-v8a/libavformat.so +0 -0
- package/android/src/main/jniLibs/arm64-v8a/libavutil.so +0 -0
- package/android/src/main/jniLibs/arm64-v8a/libswresample.so +0 -0
- package/android/src/main/jniLibs/armeabi-v7a/libavcodec.so +0 -0
- package/android/src/main/jniLibs/armeabi-v7a/libavformat.so +0 -0
- package/android/src/main/jniLibs/armeabi-v7a/libavutil.so +0 -0
- package/android/src/main/jniLibs/armeabi-v7a/libswresample.so +0 -0
- package/android/src/main/jniLibs/x86/libavcodec.so +0 -0
- package/android/src/main/jniLibs/x86/libavformat.so +0 -0
- package/android/src/main/jniLibs/x86/libavutil.so +0 -0
- package/android/src/main/jniLibs/x86/libswresample.so +0 -0
- package/android/src/main/jniLibs/x86_64/libavcodec.so +0 -0
- package/android/src/main/jniLibs/x86_64/libavformat.so +0 -0
- package/android/src/main/jniLibs/x86_64/libavutil.so +0 -0
- package/android/src/main/jniLibs/x86_64/libswresample.so +0 -0
- package/android/src/oldarch/NativeAudioAPIModuleSpec.java +100 -76
- package/common/cpp/audioapi/AudioAPIModuleInstaller.h +45 -70
- package/common/cpp/audioapi/HostObjects/AudioContextHostObject.cpp +20 -22
- package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.cpp +3 -4
- package/common/cpp/audioapi/HostObjects/AudioParamHostObject.cpp +6 -8
- package/common/cpp/audioapi/HostObjects/AudioParamHostObject.h +2 -2
- package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +102 -63
- package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +4 -1
- package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.cpp +25 -31
- package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.h +3 -3
- package/common/cpp/audioapi/HostObjects/WorkletNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/WorkletProcessingNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.cpp +10 -18
- package/common/cpp/audioapi/HostObjects/destinations/AudioDestinationNodeHostObject.h +2 -3
- package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp +18 -30
- package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.cpp +50 -0
- package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.h +20 -0
- package/common/cpp/audioapi/HostObjects/effects/DelayNodeHostObject.cpp +27 -0
- package/common/cpp/audioapi/HostObjects/effects/DelayNodeHostObject.h +21 -0
- package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.cpp +2 -2
- package/common/cpp/audioapi/HostObjects/effects/IIRFilterNodeHostObject.cpp +33 -0
- package/common/cpp/audioapi/HostObjects/effects/IIRFilterNodeHostObject.h +20 -0
- package/common/cpp/audioapi/HostObjects/effects/PeriodicWaveHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.cpp +2 -2
- package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.cpp +6 -12
- package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.h +7 -7
- package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.cpp +109 -44
- package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +8 -2
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.cpp +27 -22
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.h +12 -10
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.cpp +17 -22
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.h +5 -7
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.cpp +25 -11
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.h +8 -8
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.cpp +19 -30
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.h +2 -4
- package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.cpp +7 -11
- package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.cpp +2 -2
- package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.cpp +6 -8
- package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/sources/RecorderAdapterNodeHostObject.h +4 -5
- package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.cpp +6 -2
- package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.h +5 -6
- package/common/cpp/audioapi/HostObjects/sources/WorkletSourceNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/utils/AudioDecoderHostObject.cpp +39 -60
- package/common/cpp/audioapi/HostObjects/utils/AudioStretcherHostObject.cpp +15 -30
- package/common/cpp/audioapi/core/AudioContext.cpp +23 -28
- package/common/cpp/audioapi/core/AudioContext.h +6 -3
- package/common/cpp/audioapi/core/AudioNode.cpp +17 -19
- package/common/cpp/audioapi/core/AudioNode.h +19 -8
- package/common/cpp/audioapi/core/AudioParam.cpp +68 -100
- package/common/cpp/audioapi/core/AudioParam.h +20 -12
- package/common/cpp/audioapi/core/BaseAudioContext.cpp +52 -34
- package/common/cpp/audioapi/core/BaseAudioContext.h +26 -14
- package/common/cpp/audioapi/core/OfflineAudioContext.cpp +12 -17
- package/common/cpp/audioapi/core/OfflineAudioContext.h +10 -5
- package/common/cpp/audioapi/core/analysis/AnalyserNode.cpp +13 -21
- package/common/cpp/audioapi/core/analysis/AnalyserNode.h +8 -6
- package/common/cpp/audioapi/core/destinations/AudioDestinationNode.cpp +1 -0
- package/common/cpp/audioapi/core/destinations/AudioDestinationNode.h +5 -3
- package/common/cpp/audioapi/core/effects/BiquadFilterNode.cpp +96 -74
- package/common/cpp/audioapi/core/effects/BiquadFilterNode.h +44 -15
- package/common/cpp/audioapi/core/effects/ConvolverNode.cpp +201 -0
- package/common/cpp/audioapi/core/effects/ConvolverNode.h +64 -0
- package/common/cpp/audioapi/core/effects/DelayNode.cpp +101 -0
- package/common/cpp/audioapi/core/effects/DelayNode.h +39 -0
- package/common/cpp/audioapi/core/effects/GainNode.cpp +1 -0
- package/common/cpp/audioapi/core/effects/GainNode.h +3 -1
- package/common/cpp/audioapi/core/effects/IIRFilterNode.cpp +166 -0
- package/common/cpp/audioapi/core/effects/IIRFilterNode.h +74 -0
- package/common/cpp/audioapi/core/effects/PeriodicWave.cpp +22 -35
- package/common/cpp/audioapi/core/effects/PeriodicWave.h +4 -9
- package/common/cpp/audioapi/core/effects/StereoPannerNode.cpp +4 -5
- package/common/cpp/audioapi/core/effects/StereoPannerNode.h +4 -2
- package/common/cpp/audioapi/core/effects/WorkletNode.cpp +11 -13
- package/common/cpp/audioapi/core/effects/WorkletNode.h +15 -12
- package/common/cpp/audioapi/core/effects/WorkletProcessingNode.cpp +4 -4
- package/common/cpp/audioapi/core/effects/WorkletProcessingNode.h +15 -14
- package/common/cpp/audioapi/core/inputs/AudioRecorder.cpp +39 -108
- package/common/cpp/audioapi/core/inputs/AudioRecorder.h +47 -46
- package/common/cpp/audioapi/core/sources/AudioBuffer.cpp +4 -6
- package/common/cpp/audioapi/core/sources/AudioBuffer.h +4 -7
- package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +48 -57
- package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +37 -34
- package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +55 -17
- package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +35 -28
- package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +41 -49
- package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +8 -6
- package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +29 -24
- package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +6 -6
- package/common/cpp/audioapi/core/sources/ConstantSourceNode.cpp +3 -4
- package/common/cpp/audioapi/core/sources/ConstantSourceNode.h +3 -1
- package/common/cpp/audioapi/core/sources/OscillatorNode.cpp +12 -23
- package/common/cpp/audioapi/core/sources/OscillatorNode.h +6 -4
- package/common/cpp/audioapi/core/sources/RecorderAdapterNode.cpp +43 -16
- package/common/cpp/audioapi/core/sources/RecorderAdapterNode.h +22 -17
- package/common/cpp/audioapi/core/sources/StreamerNode.cpp +105 -87
- package/common/cpp/audioapi/core/sources/StreamerNode.h +67 -33
- package/common/cpp/audioapi/core/sources/WorkletSourceNode.cpp +5 -7
- package/common/cpp/audioapi/core/sources/WorkletSourceNode.h +15 -13
- package/common/cpp/audioapi/core/types/AudioFormat.h +1 -11
- package/common/cpp/audioapi/core/utils/AudioDecoder.h +15 -6
- package/common/cpp/audioapi/core/utils/AudioFileWriter.cpp +41 -0
- package/common/cpp/audioapi/core/utils/AudioFileWriter.h +44 -0
- package/common/cpp/audioapi/core/utils/AudioNodeDestructor.cpp +5 -6
- package/common/cpp/audioapi/core/utils/AudioNodeDestructor.h +7 -10
- package/common/cpp/audioapi/core/utils/AudioNodeManager.cpp +17 -19
- package/common/cpp/audioapi/core/utils/AudioNodeManager.h +8 -11
- package/common/cpp/audioapi/core/utils/AudioParamEventQueue.cpp +3 -3
- package/common/cpp/audioapi/core/utils/AudioParamEventQueue.h +5 -5
- package/common/cpp/audioapi/core/utils/AudioRecorderCallback.cpp +101 -0
- package/common/cpp/audioapi/core/utils/AudioRecorderCallback.h +52 -0
- package/common/cpp/audioapi/core/utils/AudioStretcher.cpp +6 -6
- package/common/cpp/audioapi/core/utils/Constants.h +7 -3
- package/common/cpp/audioapi/core/utils/ParamChangeEvent.cpp +1 -0
- package/common/cpp/audioapi/core/utils/ParamChangeEvent.h +9 -9
- package/common/cpp/audioapi/core/utils/worklets/SafeIncludes.h +33 -34
- package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.cpp +17 -19
- package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.h +23 -19
- package/common/cpp/audioapi/dsp/AudioUtils.cpp +4 -10
- package/common/cpp/audioapi/dsp/AudioUtils.h +1 -1
- package/common/cpp/audioapi/dsp/Convolver.cpp +201 -0
- package/common/cpp/audioapi/dsp/Convolver.h +47 -0
- package/common/cpp/audioapi/dsp/FFT.cpp +1 -27
- package/common/cpp/audioapi/dsp/FFT.h +19 -3
- package/common/cpp/audioapi/dsp/VectorMath.cpp +24 -58
- package/common/cpp/audioapi/dsp/VectorMath.h +35 -8
- package/common/cpp/audioapi/dsp/Windows.cpp +4 -9
- package/common/cpp/audioapi/dsp/Windows.h +24 -23
- package/common/cpp/audioapi/events/AudioEventHandlerRegistry.cpp +12 -17
- package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +45 -40
- package/common/cpp/audioapi/events/IAudioEventHandlerRegistry.h +15 -7
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/avcodec.h +4 -4
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_desc.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_id.h +3 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_par.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/defs.h +3 -0
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/packet.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/smpte_436m.h +254 -0
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/version.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavformat/avformat.h +6 -6
- package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version_major.h +2 -0
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avassert.h +5 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avutil.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/channel_layout.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/csp.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/dict.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/ffversion.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/film_grain_params.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/frame.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hdr_dynamic_vivid_metadata.h +3 -3
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_opencl.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_qsv.h +0 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_vulkan.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/iamf.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/lfg.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/log.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/mathematics.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/opt.h +4 -4
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rational.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rc4.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/refstruct.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/spherical.h +6 -0
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tdrdi.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tx.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/version.h +3 -3
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/video_hint.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libswresample/swresample.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libswresample/version.h +1 -1
- package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64/libavcodec.framework/libavcodec +0 -0
- package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64_x86_64-simulator/libavcodec.framework/libavcodec +0 -0
- package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64/libavformat.framework/libavformat +0 -0
- package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64_x86_64-simulator/libavformat.framework/libavformat +0 -0
- package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64/libavutil.framework/libavutil +0 -0
- package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64_x86_64-simulator/libavutil.framework/libavutil +0 -0
- package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64/libswresample.framework/libswresample +0 -0
- package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64_x86_64-simulator/libswresample.framework/libswresample +0 -0
- package/common/cpp/audioapi/jsi/AudioArrayBuffer.h +4 -5
- package/common/cpp/audioapi/jsi/JsiHostObject.cpp +11 -13
- package/common/cpp/audioapi/jsi/JsiHostObject.h +26 -33
- package/common/cpp/audioapi/jsi/JsiPromise.cpp +34 -67
- package/common/cpp/audioapi/jsi/JsiPromise.h +65 -26
- package/common/cpp/audioapi/jsi/RuntimeLifecycleMonitor.cpp +7 -10
- package/common/cpp/audioapi/jsi/RuntimeLifecycleMonitor.h +1 -3
- package/common/cpp/audioapi/libs/ffmpeg/FFmpegDecoding.cpp +4 -3
- package/common/cpp/audioapi/libs/ffmpeg/relinking.md +24 -0
- package/common/cpp/audioapi/utils/AlignedAllocator.hpp +53 -0
- package/common/cpp/audioapi/utils/AudioArray.cpp +3 -8
- package/common/cpp/audioapi/utils/AudioArray.h +3 -11
- package/common/cpp/audioapi/utils/AudioBus.cpp +79 -149
- package/common/cpp/audioapi/utils/AudioBus.h +17 -14
- package/common/cpp/audioapi/utils/AudioFileProperties.cpp +92 -0
- package/common/cpp/audioapi/utils/AudioFileProperties.h +76 -0
- package/common/cpp/audioapi/utils/Benchmark.hpp +50 -47
- package/common/cpp/audioapi/utils/CircularAudioArray.cpp +6 -18
- package/common/cpp/audioapi/utils/CircularOverflowableAudioArray.cpp +6 -10
- package/common/cpp/audioapi/utils/CircularOverflowableAudioArray.h +2 -2
- package/common/cpp/audioapi/utils/CrossThreadEventScheduler.hpp +12 -9
- package/common/cpp/audioapi/utils/MoveOnlyFunction.hpp +17 -15
- package/common/cpp/audioapi/utils/Result.hpp +323 -0
- package/common/cpp/audioapi/utils/RingBiDirectionalBuffer.hpp +22 -28
- package/common/cpp/audioapi/utils/SpscChannel.hpp +329 -305
- package/common/cpp/audioapi/utils/ThreadPool.hpp +104 -20
- package/common/cpp/audioapi/utils/UnitConversion.h +9 -0
- package/common/cpp/test/CMakeLists.txt +15 -15
- package/common/cpp/test/src/AudioParamTest.cpp +4 -3
- package/common/cpp/test/src/AudioScheduledSourceTest.cpp +113 -0
- package/common/cpp/test/src/ConstantSourceTest.cpp +5 -7
- package/common/cpp/test/src/DelayTest.cpp +108 -0
- package/common/cpp/test/src/GainTest.cpp +4 -5
- package/common/cpp/test/src/IIRFilterTest.cpp +153 -0
- package/common/cpp/test/src/MockAudioEventHandlerRegistry.h +19 -11
- package/common/cpp/test/src/OscillatorTest.cpp +2 -1
- package/common/cpp/test/src/StereoPannerTest.cpp +6 -9
- package/common/cpp/test/src/biquad/BiquadFilterChromium.cpp +372 -0
- package/common/cpp/test/src/biquad/BiquadFilterChromium.h +65 -0
- package/common/cpp/test/src/biquad/BiquadFilterTest.cpp +272 -0
- package/common/cpp/test/src/biquad/BiquadFilterTest.h +47 -0
- package/ios/audioapi/ios/AudioAPIModule.h +4 -3
- package/ios/audioapi/ios/AudioAPIModule.mm +148 -34
- package/ios/audioapi/ios/core/IOSAudioPlayer.h +2 -2
- package/ios/audioapi/ios/core/IOSAudioPlayer.mm +7 -6
- package/ios/audioapi/ios/core/IOSAudioRecorder.h +28 -11
- package/ios/audioapi/ios/core/IOSAudioRecorder.mm +280 -45
- package/ios/audioapi/ios/core/NativeAudioPlayer.m +17 -14
- package/ios/audioapi/ios/core/NativeAudioRecorder.h +6 -3
- package/ios/audioapi/ios/core/NativeAudioRecorder.m +74 -6
- package/ios/audioapi/ios/core/utils/AudioDecoder.mm +22 -4
- package/ios/audioapi/ios/core/utils/FileOptions.h +33 -0
- package/ios/audioapi/ios/core/utils/FileOptions.mm +195 -0
- package/ios/audioapi/ios/core/utils/IOSFileWriter.h +53 -0
- package/ios/audioapi/ios/core/utils/IOSFileWriter.mm +239 -0
- package/ios/audioapi/ios/core/utils/IOSRecorderCallback.h +47 -0
- package/ios/audioapi/ios/core/utils/IOSRecorderCallback.mm +185 -0
- package/ios/audioapi/ios/system/AudioEngine.h +21 -16
- package/ios/audioapi/ios/system/AudioEngine.mm +153 -132
- package/ios/audioapi/ios/system/AudioSessionManager.h +25 -11
- package/ios/audioapi/ios/system/AudioSessionManager.mm +277 -203
- package/ios/audioapi/ios/system/NotificationManager.mm +47 -53
- package/ios/audioapi/ios/system/notification/BaseNotification.h +58 -0
- package/ios/audioapi/ios/system/notification/NotificationRegistry.h +70 -0
- package/ios/audioapi/ios/system/notification/NotificationRegistry.mm +172 -0
- package/ios/audioapi/ios/system/notification/PlaybackNotification.h +27 -0
- package/ios/audioapi/ios/system/notification/PlaybackNotification.mm +427 -0
- package/lib/commonjs/AudioAPIModule/AudioAPIModule.js +90 -0
- package/lib/commonjs/AudioAPIModule/AudioAPIModule.js.map +1 -0
- package/lib/commonjs/AudioAPIModule/globals.d.js +6 -0
- package/lib/commonjs/AudioAPIModule/globals.d.js.map +1 -0
- package/lib/commonjs/AudioAPIModule/index.js +14 -0
- package/lib/commonjs/AudioAPIModule/index.js.map +1 -0
- package/lib/commonjs/api.js +89 -12
- package/lib/commonjs/api.js.map +1 -1
- package/lib/commonjs/api.web.js +35 -14
- package/lib/commonjs/api.web.js.map +1 -1
- package/lib/commonjs/core/AudioBufferBaseSourceNode.js +3 -0
- package/lib/commonjs/core/AudioBufferBaseSourceNode.js.map +1 -1
- package/lib/commonjs/core/AudioBufferQueueSourceNode.js +5 -2
- package/lib/commonjs/core/AudioBufferQueueSourceNode.js.map +1 -1
- package/lib/commonjs/core/AudioContext.js +5 -8
- package/lib/commonjs/core/AudioContext.js.map +1 -1
- package/lib/commonjs/core/AudioNode.js +1 -1
- package/lib/commonjs/core/AudioNode.js.map +1 -1
- package/lib/commonjs/core/AudioParam.js +18 -11
- package/lib/commonjs/core/AudioParam.js.map +1 -1
- package/lib/commonjs/core/AudioRecorder.js +56 -55
- package/lib/commonjs/core/AudioRecorder.js.map +1 -1
- package/lib/commonjs/core/BaseAudioContext.js +61 -30
- package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
- package/lib/commonjs/core/ConvolverNode.js +37 -0
- package/lib/commonjs/core/ConvolverNode.js.map +1 -0
- package/lib/commonjs/core/DelayNode.js +17 -0
- package/lib/commonjs/core/DelayNode.js.map +1 -0
- package/lib/commonjs/core/IIRFilterNode.js +19 -0
- package/lib/commonjs/core/IIRFilterNode.js.map +1 -0
- package/lib/commonjs/core/OfflineAudioContext.js +3 -6
- package/lib/commonjs/core/OfflineAudioContext.js.map +1 -1
- package/lib/commonjs/plugin/withAudioAPI.js +46 -0
- package/lib/commonjs/plugin/withAudioAPI.js.map +1 -1
- package/lib/commonjs/specs/NativeAudioAPIModule.js.map +1 -1
- package/lib/commonjs/system/AudioManager.js +9 -15
- package/lib/commonjs/system/AudioManager.js.map +1 -1
- package/lib/commonjs/system/index.js +13 -0
- package/lib/commonjs/system/index.js.map +1 -1
- package/lib/commonjs/system/notification/PlaybackNotificationManager.js +138 -0
- package/lib/commonjs/system/notification/PlaybackNotificationManager.js.map +1 -0
- package/lib/commonjs/system/notification/RecordingNotificationManager.js +185 -0
- package/lib/commonjs/system/notification/RecordingNotificationManager.js.map +1 -0
- package/lib/commonjs/system/notification/SimpleNotificationManager.js +125 -0
- package/lib/commonjs/system/notification/SimpleNotificationManager.js.map +1 -0
- package/lib/commonjs/system/notification/index.js +45 -0
- package/lib/commonjs/system/notification/index.js.map +1 -0
- package/lib/commonjs/system/notification/types.js +6 -0
- package/lib/commonjs/system/notification/types.js.map +1 -0
- package/lib/commonjs/types.js +28 -35
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/utils/filePresets.js +43 -0
- package/lib/commonjs/utils/filePresets.js.map +1 -0
- package/lib/commonjs/utils/index.js +12 -27
- package/lib/commonjs/utils/index.js.map +1 -1
- package/lib/commonjs/web-core/AudioContext.js +21 -1
- package/lib/commonjs/web-core/AudioContext.js.map +1 -1
- package/lib/commonjs/web-core/ConvolverNode.js +40 -0
- package/lib/commonjs/web-core/ConvolverNode.js.map +1 -0
- package/lib/commonjs/web-core/ConvolverNodeOptions.js +6 -0
- package/lib/commonjs/web-core/ConvolverNodeOptions.js.map +1 -0
- package/lib/commonjs/web-core/DelayNode.js +17 -0
- package/lib/commonjs/web-core/DelayNode.js.map +1 -0
- package/lib/commonjs/web-core/IIRFilterNode.js +19 -0
- package/lib/commonjs/web-core/IIRFilterNode.js.map +1 -0
- package/lib/commonjs/web-core/OfflineAudioContext.js +20 -0
- package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
- package/lib/commonjs/web-system/index.js +17 -0
- package/lib/commonjs/web-system/index.js.map +1 -0
- package/lib/commonjs/web-system/notification/PlaybackNotificationManager.js +37 -0
- package/lib/commonjs/web-system/notification/PlaybackNotificationManager.js.map +1 -0
- package/lib/commonjs/web-system/notification/RecordingNotificationManager.js +37 -0
- package/lib/commonjs/web-system/notification/RecordingNotificationManager.js.map +1 -0
- package/lib/commonjs/web-system/notification/index.js +21 -0
- package/lib/commonjs/web-system/notification/index.js.map +1 -0
- package/lib/module/AudioAPIModule/AudioAPIModule.js +87 -0
- package/lib/module/AudioAPIModule/AudioAPIModule.js.map +1 -0
- package/lib/module/AudioAPIModule/globals.d.js +4 -0
- package/lib/module/AudioAPIModule/globals.d.js.map +1 -0
- package/lib/module/AudioAPIModule/index.js +4 -0
- package/lib/module/AudioAPIModule/index.js.map +1 -0
- package/lib/module/api.js +7 -12
- package/lib/module/api.js.map +1 -1
- package/lib/module/api.web.js +4 -1
- package/lib/module/api.web.js.map +1 -1
- package/lib/module/core/AudioBufferBaseSourceNode.js +3 -0
- package/lib/module/core/AudioBufferBaseSourceNode.js.map +1 -1
- package/lib/module/core/AudioBufferQueueSourceNode.js +5 -2
- package/lib/module/core/AudioBufferQueueSourceNode.js.map +1 -1
- package/lib/module/core/AudioContext.js +5 -8
- package/lib/module/core/AudioContext.js.map +1 -1
- package/lib/module/core/AudioNode.js +1 -1
- package/lib/module/core/AudioNode.js.map +1 -1
- package/lib/module/core/AudioParam.js +18 -11
- package/lib/module/core/AudioParam.js.map +1 -1
- package/lib/module/core/AudioRecorder.js +57 -56
- package/lib/module/core/AudioRecorder.js.map +1 -1
- package/lib/module/core/BaseAudioContext.js +63 -32
- package/lib/module/core/BaseAudioContext.js.map +1 -1
- package/lib/module/core/ConvolverNode.js +31 -0
- package/lib/module/core/ConvolverNode.js.map +1 -0
- package/lib/module/core/DelayNode.js +11 -0
- package/lib/module/core/DelayNode.js.map +1 -0
- package/lib/module/core/IIRFilterNode.js +13 -0
- package/lib/module/core/IIRFilterNode.js.map +1 -0
- package/lib/module/core/OfflineAudioContext.js +3 -6
- package/lib/module/core/OfflineAudioContext.js.map +1 -1
- package/lib/module/plugin/withAudioAPI.js +47 -1
- package/lib/module/plugin/withAudioAPI.js.map +1 -1
- package/lib/module/specs/NativeAudioAPIModule.js.map +1 -1
- package/lib/module/system/AudioManager.js +9 -15
- package/lib/module/system/AudioManager.js.map +1 -1
- package/lib/module/system/index.js +1 -0
- package/lib/module/system/index.js.map +1 -1
- package/lib/module/system/notification/PlaybackNotificationManager.js +134 -0
- package/lib/module/system/notification/PlaybackNotificationManager.js.map +1 -0
- package/lib/module/system/notification/RecordingNotificationManager.js +181 -0
- package/lib/module/system/notification/RecordingNotificationManager.js.map +1 -0
- package/lib/module/system/notification/SimpleNotificationManager.js +121 -0
- package/lib/module/system/notification/SimpleNotificationManager.js.map +1 -0
- package/lib/module/system/notification/index.js +7 -0
- package/lib/module/system/notification/index.js.map +1 -0
- package/lib/module/system/notification/types.js +4 -0
- package/lib/module/system/notification/types.js.map +1 -0
- package/lib/module/types.js +27 -34
- package/lib/module/types.js.map +1 -1
- package/lib/module/utils/filePresets.js +39 -0
- package/lib/module/utils/filePresets.js.map +1 -0
- package/lib/module/utils/index.js +10 -10
- package/lib/module/utils/index.js.map +1 -1
- package/lib/module/web-core/AudioContext.js +21 -1
- package/lib/module/web-core/AudioContext.js.map +1 -1
- package/lib/module/web-core/ConvolverNode.js +34 -0
- package/lib/module/web-core/ConvolverNode.js.map +1 -0
- package/lib/module/web-core/ConvolverNodeOptions.js +4 -0
- package/lib/module/web-core/ConvolverNodeOptions.js.map +1 -0
- package/lib/module/web-core/DelayNode.js +11 -0
- package/lib/module/web-core/DelayNode.js.map +1 -0
- package/lib/module/web-core/IIRFilterNode.js +13 -0
- package/lib/module/web-core/IIRFilterNode.js.map +1 -0
- package/lib/module/web-core/OfflineAudioContext.js +20 -0
- package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
- package/lib/module/web-system/index.js +4 -0
- package/lib/module/web-system/index.js.map +1 -0
- package/lib/module/web-system/notification/PlaybackNotificationManager.js +33 -0
- package/lib/module/web-system/notification/PlaybackNotificationManager.js.map +1 -0
- package/lib/module/web-system/notification/RecordingNotificationManager.js +33 -0
- package/lib/module/web-system/notification/RecordingNotificationManager.js.map +1 -0
- package/lib/module/web-system/notification/index.js +5 -0
- package/lib/module/web-system/notification/index.js.map +1 -0
- package/lib/typescript/AudioAPIModule/AudioAPIModule.d.ts +36 -0
- package/lib/typescript/AudioAPIModule/AudioAPIModule.d.ts.map +1 -0
- package/lib/typescript/AudioAPIModule/index.d.ts +2 -0
- package/lib/typescript/AudioAPIModule/index.d.ts.map +1 -0
- package/lib/typescript/api.d.ts +5 -9
- package/lib/typescript/api.d.ts.map +1 -1
- package/lib/typescript/api.web.d.ts +4 -1
- package/lib/typescript/api.web.d.ts.map +1 -1
- package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts +1 -0
- package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts.map +1 -1
- package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts +1 -1
- package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts.map +1 -1
- package/lib/typescript/core/AudioContext.d.ts +1 -1
- package/lib/typescript/core/AudioContext.d.ts.map +1 -1
- package/lib/typescript/core/AudioNode.d.ts +2 -1
- package/lib/typescript/core/AudioNode.d.ts.map +1 -1
- package/lib/typescript/core/AudioParam.d.ts.map +1 -1
- package/lib/typescript/core/AudioRecorder.d.ts +16 -6
- package/lib/typescript/core/AudioRecorder.d.ts.map +1 -1
- package/lib/typescript/core/BaseAudioContext.d.ts +9 -3
- package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
- package/lib/typescript/core/ConvolverNode.d.ts +12 -0
- package/lib/typescript/core/ConvolverNode.d.ts.map +1 -0
- package/lib/typescript/core/DelayNode.d.ts +9 -0
- package/lib/typescript/core/DelayNode.d.ts.map +1 -0
- package/lib/typescript/core/IIRFilterNode.d.ts +5 -0
- package/lib/typescript/core/IIRFilterNode.d.ts.map +1 -0
- package/lib/typescript/core/OfflineAudioContext.d.ts +1 -1
- package/lib/typescript/core/OfflineAudioContext.d.ts.map +1 -1
- package/lib/typescript/events/types.d.ts +6 -2
- package/lib/typescript/events/types.d.ts.map +1 -1
- package/lib/typescript/interfaces.d.ts +36 -34
- package/lib/typescript/interfaces.d.ts.map +1 -1
- package/lib/typescript/plugin/withAudioAPI.d.ts +1 -0
- package/lib/typescript/plugin/withAudioAPI.d.ts.map +1 -1
- package/lib/typescript/specs/NativeAudioAPIModule.d.ts +18 -6
- package/lib/typescript/specs/NativeAudioAPIModule.d.ts.map +1 -1
- package/lib/typescript/system/AudioManager.d.ts +5 -5
- package/lib/typescript/system/AudioManager.d.ts.map +1 -1
- package/lib/typescript/system/index.d.ts +1 -0
- package/lib/typescript/system/index.d.ts.map +1 -1
- package/lib/typescript/system/notification/PlaybackNotificationManager.d.ts +23 -0
- package/lib/typescript/system/notification/PlaybackNotificationManager.d.ts.map +1 -0
- package/lib/typescript/system/notification/RecordingNotificationManager.d.ts +24 -0
- package/lib/typescript/system/notification/RecordingNotificationManager.d.ts.map +1 -0
- package/lib/typescript/system/notification/SimpleNotificationManager.d.ts +21 -0
- package/lib/typescript/system/notification/SimpleNotificationManager.d.ts.map +1 -0
- package/lib/typescript/system/notification/index.d.ts +5 -0
- package/lib/typescript/system/notification/index.d.ts.map +1 -0
- package/lib/typescript/system/notification/types.d.ts +65 -0
- package/lib/typescript/system/notification/types.d.ts.map +1 -0
- package/lib/typescript/system/types.d.ts +0 -16
- package/lib/typescript/system/types.d.ts.map +1 -1
- package/lib/typescript/types.d.ts +58 -45
- package/lib/typescript/types.d.ts.map +1 -1
- package/lib/typescript/utils/filePresets.d.ts +9 -0
- package/lib/typescript/utils/filePresets.d.ts.map +1 -0
- package/lib/typescript/utils/index.d.ts +1 -8
- package/lib/typescript/utils/index.d.ts.map +1 -1
- package/lib/typescript/web-core/AudioContext.d.ts +9 -2
- package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
- package/lib/typescript/web-core/BaseAudioContext.d.ts +7 -1
- package/lib/typescript/web-core/BaseAudioContext.d.ts.map +1 -1
- package/lib/typescript/web-core/ConvolverNode.d.ts +11 -0
- package/lib/typescript/web-core/ConvolverNode.d.ts.map +1 -0
- package/lib/typescript/web-core/ConvolverNodeOptions.d.ts +6 -0
- package/lib/typescript/web-core/ConvolverNodeOptions.d.ts.map +1 -0
- package/lib/typescript/web-core/DelayNode.d.ts +8 -0
- package/lib/typescript/web-core/DelayNode.d.ts.map +1 -0
- package/lib/typescript/web-core/IIRFilterNode.d.ts +5 -0
- package/lib/typescript/web-core/IIRFilterNode.d.ts.map +1 -0
- package/lib/typescript/web-core/OfflineAudioContext.d.ts +8 -1
- package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
- package/lib/typescript/web-system/index.d.ts +2 -0
- package/lib/typescript/web-system/index.d.ts.map +1 -0
- package/lib/typescript/web-system/notification/PlaybackNotificationManager.d.ts +20 -0
- package/lib/typescript/web-system/notification/PlaybackNotificationManager.d.ts.map +1 -0
- package/lib/typescript/web-system/notification/RecordingNotificationManager.d.ts +20 -0
- package/lib/typescript/web-system/notification/RecordingNotificationManager.d.ts.map +1 -0
- package/lib/typescript/web-system/notification/index.d.ts +3 -0
- package/lib/typescript/web-system/notification/index.d.ts.map +1 -0
- package/package.json +11 -5
- package/scripts/download-prebuilt-binaries.sh +61 -0
- package/scripts/rnaa_utils.rb +8 -0
- package/scripts/validate-worklets-version.js +27 -0
- package/src/AudioAPIModule/AudioAPIModule.ts +122 -0
- package/src/AudioAPIModule/globals.d.ts +33 -0
- package/src/AudioAPIModule/index.ts +1 -0
- package/src/api.ts +21 -52
- package/src/api.web.ts +8 -2
- package/src/core/AudioBufferBaseSourceNode.ts +8 -0
- package/src/core/AudioBufferQueueSourceNode.ts +8 -2
- package/src/core/AudioContext.ts +5 -8
- package/src/core/AudioNode.ts +4 -3
- package/src/core/AudioParam.ts +18 -11
- package/src/core/AudioRecorder.ts +86 -84
- package/src/core/BaseAudioContext.ts +120 -54
- package/src/core/ConvolverNode.ts +35 -0
- package/src/core/DelayNode.ts +13 -0
- package/src/core/IIRFilterNode.ts +25 -0
- package/src/core/OfflineAudioContext.ts +4 -7
- package/src/events/types.ts +7 -3
- package/src/interfaces.ts +55 -34
- package/src/plugin/withAudioAPI.ts +61 -0
- package/src/specs/NativeAudioAPIModule.ts +26 -9
- package/src/system/AudioManager.ts +13 -32
- package/src/system/index.ts +1 -0
- package/src/system/notification/PlaybackNotificationManager.ts +197 -0
- package/src/system/notification/RecordingNotificationManager.ts +247 -0
- package/src/system/notification/SimpleNotificationManager.ts +175 -0
- package/src/system/notification/index.ts +4 -0
- package/src/system/notification/types.ts +111 -0
- package/src/system/types.ts +0 -18
- package/src/types.ts +61 -46
- package/src/utils/filePresets.ts +47 -0
- package/src/utils/index.ts +13 -19
- package/src/web-core/AudioContext.tsx +40 -1
- package/src/web-core/BaseAudioContext.tsx +11 -1
- package/src/web-core/ConvolverNode.tsx +43 -0
- package/src/web-core/ConvolverNodeOptions.tsx +6 -0
- package/src/web-core/DelayNode.tsx +12 -0
- package/src/web-core/IIRFilterNode.tsx +25 -0
- package/src/web-core/OfflineAudioContext.tsx +39 -0
- package/src/web-system/index.ts +1 -0
- package/src/web-system/notification/PlaybackNotificationManager.ts +64 -0
- package/src/web-system/notification/RecordingNotificationManager.ts +64 -0
- package/src/web-system/notification/index.ts +2 -0
- package/android/src/main/cpp/audioapi/android/core/utils/FileUtils.h +0 -34
- package/android/src/main/cpp/audioapi/android/core/utils/FileUtilts.cpp +0 -133
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.cpp +0 -154
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.h +0 -41
- package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.cpp +0 -47
- package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.h +0 -28
- package/android/src/main/java/com/swmansion/audioapi/system/LockScreenManager.kt +0 -325
- package/android/src/main/java/com/swmansion/audioapi/system/MediaNotificationManager.kt +0 -262
- package/android/src/main/java/com/swmansion/audioapi/system/MediaReceiver.kt +0 -57
- package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionCallback.kt +0 -61
- package/common/cpp/audioapi/libs/ffmpeg/INSTRUCTIONS.md +0 -32
- package/common/cpp/audioapi/libs/ffmpeg/create_xcframework.sh +0 -111
- package/common/cpp/audioapi/libs/ffmpeg/ffmpeg_setup.sh +0 -391
- package/ios/audioapi/ios/core/IOSAudioFileOptions.h +0 -35
- package/ios/audioapi/ios/core/IOSAudioFileOptions.mm +0 -135
- package/ios/audioapi/ios/core/IOSAudioFileWriter.h +0 -38
- package/ios/audioapi/ios/core/IOSAudioFileWriter.mm +0 -187
- package/ios/audioapi/ios/system/LockScreenManager.h +0 -24
- package/ios/audioapi/ios/system/LockScreenManager.mm +0 -310
- package/lib/commonjs/utils/bitEnums.js +0 -33
- package/lib/commonjs/utils/bitEnums.js.map +0 -1
- package/lib/module/utils/bitEnums.js +0 -27
- package/lib/module/utils/bitEnums.js.map +0 -1
- package/lib/typescript/utils/bitEnums.d.ts +0 -4
- package/lib/typescript/utils/bitEnums.d.ts.map +0 -1
- package/metro-config/index.d.ts +0 -5
- package/metro-config/index.js +0 -41
- package/metro-config/tsconfig.json +0 -3
- package/src/utils/bitEnums.ts +0 -51
- package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/Info.plist +5 -5
- package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64/libavcodec.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64_x86_64-simulator/libavcodec.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64/libavformat.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64_x86_64-simulator/libavformat.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/Info.plist +5 -5
- package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64/libavutil.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64_x86_64-simulator/libavutil.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/Info.plist +5 -5
- /package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64/libswresample.framework/Info.plist +0 -0
- /package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64_x86_64-simulator/libswresample.framework/Info.plist +0 -0
|
@@ -1,67 +1,45 @@
|
|
|
1
1
|
import { AudioEventEmitter, AudioEventSubscription } from '../events';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
OnAudioReadyEventType,
|
|
4
|
+
OnRecorderErrorEventType,
|
|
5
|
+
} from '../events/types';
|
|
3
6
|
import { IAudioRecorder } from '../interfaces';
|
|
4
7
|
import {
|
|
5
|
-
AndroidFormat,
|
|
6
8
|
AudioRecorderCallbackOptions,
|
|
7
9
|
AudioRecorderFileOptions,
|
|
8
|
-
BitDepth,
|
|
9
10
|
FileDirectory,
|
|
10
|
-
|
|
11
|
-
|
|
11
|
+
FileFormat,
|
|
12
|
+
FileInfo,
|
|
13
|
+
Result,
|
|
12
14
|
} from '../types';
|
|
13
|
-
import
|
|
15
|
+
import FilePreset from '../utils/filePresets';
|
|
14
16
|
import AudioBuffer from './AudioBuffer';
|
|
15
17
|
import RecorderAdapterNode from './RecorderAdapterNode';
|
|
16
18
|
|
|
17
|
-
|
|
19
|
+
// Enforces default options, making sure that all properties are defined
|
|
20
|
+
// for the contract with native code.
|
|
21
|
+
function withDefaultOptions(
|
|
22
|
+
inOptions: AudioRecorderFileOptions
|
|
23
|
+
): Required<AudioRecorderFileOptions> {
|
|
18
24
|
return {
|
|
19
25
|
directory: FileDirectory.Cache,
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
26
|
+
subDirectory: 'AudioAPI',
|
|
27
|
+
fileNamePrefix: 'recording_',
|
|
28
|
+
channelCount: 2,
|
|
29
|
+
format: FileFormat.M4A,
|
|
30
|
+
batchDurationSeconds: 0,
|
|
31
|
+
preset: FilePreset.High,
|
|
32
|
+
androidFlushIntervalMs: 500,
|
|
24
33
|
...inOptions,
|
|
25
|
-
ios: {
|
|
26
|
-
format: IOSFormat.M4A,
|
|
27
|
-
quality: IOSAudioQuality.High,
|
|
28
|
-
...(inOptions.ios ?? {}),
|
|
29
|
-
},
|
|
30
|
-
android: {
|
|
31
|
-
format: AndroidFormat.M4A,
|
|
32
|
-
...(inOptions.android ?? {}),
|
|
33
|
-
},
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
function parseFileOptions(inOptions: AudioRecorderFileOptions) {
|
|
38
|
-
const { sampleRate, channels, bitRate, directory, bitDepth, ios, android } =
|
|
39
|
-
withDefaultOptions(inOptions);
|
|
40
|
-
|
|
41
|
-
const iosFlags = encodeFlags(
|
|
42
|
-
ios.format,
|
|
43
|
-
ios.quality,
|
|
44
|
-
ios.flacCompressionLevel || 0,
|
|
45
|
-
directory,
|
|
46
|
-
bitDepth
|
|
47
|
-
);
|
|
48
|
-
|
|
49
|
-
// TODO: ensure directory and bitDepth are last in the bitmask
|
|
50
|
-
const androidFlags = encodeFlags(android.format, directory, bitDepth);
|
|
51
|
-
|
|
52
|
-
return {
|
|
53
|
-
sampleRate,
|
|
54
|
-
channels,
|
|
55
|
-
bitRate,
|
|
56
|
-
ios: iosFlags,
|
|
57
|
-
android: androidFlags,
|
|
58
34
|
};
|
|
59
35
|
}
|
|
60
36
|
|
|
61
37
|
export default class AudioRecorder {
|
|
62
38
|
protected onAudioReadySubscription: AudioEventSubscription | null = null;
|
|
39
|
+
protected onErrorSubscription: AudioEventSubscription | null = null;
|
|
63
40
|
protected readonly recorder: IAudioRecorder;
|
|
64
41
|
protected options_: AudioRecorderFileOptions | null = null;
|
|
42
|
+
private isFileOutputEnabled: boolean = false;
|
|
65
43
|
|
|
66
44
|
protected readonly audioEventEmitter = new AudioEventEmitter(
|
|
67
45
|
global.AudioEventEmitter
|
|
@@ -71,17 +49,16 @@ export default class AudioRecorder {
|
|
|
71
49
|
this.recorder = global.createAudioRecorder();
|
|
72
50
|
}
|
|
73
51
|
|
|
74
|
-
enableFileOutput(
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
this.
|
|
52
|
+
enableFileOutput(
|
|
53
|
+
// TODO: Re-enable 'batchDurationSeconds' once supported
|
|
54
|
+
options?: Omit<AudioRecorderFileOptions, 'batchDurationSeconds'>
|
|
55
|
+
): Result<{ path: string }> {
|
|
56
|
+
this.options_ = options || {};
|
|
57
|
+
const parsedOptions = withDefaultOptions(this.options_);
|
|
58
|
+
const result = this.recorder.enableFileOutput(parsedOptions);
|
|
59
|
+
this.isFileOutputEnabled = true;
|
|
82
60
|
|
|
83
|
-
|
|
84
|
-
this.recorder.enableFileOutput(parsedOptions);
|
|
61
|
+
return result;
|
|
85
62
|
}
|
|
86
63
|
|
|
87
64
|
public get options(): AudioRecorderFileOptions | null {
|
|
@@ -91,25 +68,31 @@ export default class AudioRecorder {
|
|
|
91
68
|
disableFileOutput(): void {
|
|
92
69
|
this.options_ = null;
|
|
93
70
|
this.recorder.disableFileOutput();
|
|
71
|
+
this.isFileOutputEnabled = false;
|
|
94
72
|
}
|
|
95
73
|
|
|
96
74
|
/** Starts the audio recording process with configured output options */
|
|
97
|
-
|
|
98
|
-
this.
|
|
75
|
+
start(): Result<{ path: string }> {
|
|
76
|
+
if (!this.isFileOutputEnabled) {
|
|
77
|
+
this.recorder.start();
|
|
78
|
+
return { status: 'success', path: '' };
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return this.recorder.start();
|
|
99
82
|
}
|
|
100
83
|
|
|
101
84
|
/** Stops the audio recording process and releases internal resources */
|
|
102
|
-
|
|
85
|
+
stop(): Result<FileInfo> {
|
|
103
86
|
return this.recorder.stop();
|
|
104
87
|
}
|
|
105
88
|
|
|
106
89
|
/** Pauses the audio recording process without tearing down anything */
|
|
107
|
-
|
|
90
|
+
pause(): void {
|
|
108
91
|
this.recorder.pause();
|
|
109
92
|
}
|
|
110
93
|
|
|
111
94
|
/** Resumes the audio recording process after being paused */
|
|
112
|
-
|
|
95
|
+
resume(): void {
|
|
113
96
|
this.recorder.resume();
|
|
114
97
|
}
|
|
115
98
|
|
|
@@ -122,18 +105,13 @@ export default class AudioRecorder {
|
|
|
122
105
|
* @param node - The adapter node to connect to the recorder.
|
|
123
106
|
* @throws If the node has already been connected.
|
|
124
107
|
*/
|
|
125
|
-
|
|
126
|
-
if (this.recorder.isRecording()) {
|
|
127
|
-
throw new Error(
|
|
128
|
-
'Cannot connect adapter node while recording is in progress. Please stop the recorder before connecting new nodes.'
|
|
129
|
-
);
|
|
130
|
-
}
|
|
131
|
-
|
|
108
|
+
connect(node: RecorderAdapterNode): void {
|
|
132
109
|
if (node.wasConnected) {
|
|
133
110
|
throw new Error(
|
|
134
111
|
'RecorderAdapterNode cannot be connected more than once. Refer to the documentation for more details.'
|
|
135
112
|
);
|
|
136
113
|
}
|
|
114
|
+
|
|
137
115
|
node.wasConnected = true;
|
|
138
116
|
this.recorder.connect(node.getNode());
|
|
139
117
|
}
|
|
@@ -144,7 +122,7 @@ export default class AudioRecorder {
|
|
|
144
122
|
* After calling this method, any connected {@link RecorderAdapterNode} will no
|
|
145
123
|
* longer receive audio data until reconnected.
|
|
146
124
|
*/
|
|
147
|
-
|
|
125
|
+
disconnect(): void {
|
|
148
126
|
this.recorder.disconnect();
|
|
149
127
|
}
|
|
150
128
|
|
|
@@ -164,16 +142,10 @@ export default class AudioRecorder {
|
|
|
164
142
|
* available. The callback receives an {@link OnAudioReadyEventType} object
|
|
165
143
|
* containing the audio data and associated metadata.
|
|
166
144
|
*/
|
|
167
|
-
|
|
145
|
+
onAudioReady(
|
|
168
146
|
options: AudioRecorderCallbackOptions,
|
|
169
147
|
callback: (event: OnAudioReadyEventType) => void
|
|
170
|
-
): void {
|
|
171
|
-
if (this.recorder.isRecording()) {
|
|
172
|
-
throw new Error(
|
|
173
|
-
'Cannot set onAudioReady callback while recording is in progress. Please stop the recorder before setting a new callback.'
|
|
174
|
-
);
|
|
175
|
-
}
|
|
176
|
-
|
|
148
|
+
): Result<void> {
|
|
177
149
|
if (this.onAudioReadySubscription) {
|
|
178
150
|
this.recorder.clearOnAudioReady();
|
|
179
151
|
this.onAudioReadySubscription.remove();
|
|
@@ -189,7 +161,7 @@ export default class AudioRecorder {
|
|
|
189
161
|
});
|
|
190
162
|
});
|
|
191
163
|
|
|
192
|
-
this.recorder.setOnAudioReady({
|
|
164
|
+
return this.recorder.setOnAudioReady({
|
|
193
165
|
sampleRate: options.sampleRate,
|
|
194
166
|
bufferLength: options.bufferLength,
|
|
195
167
|
channelCount: options.channelCount,
|
|
@@ -204,13 +176,7 @@ export default class AudioRecorder {
|
|
|
204
176
|
* recording. Calling this method is safe even if no callback is currently
|
|
205
177
|
* registered.
|
|
206
178
|
*/
|
|
207
|
-
|
|
208
|
-
if (this.recorder.isRecording()) {
|
|
209
|
-
throw new Error(
|
|
210
|
-
'Cannot clear onAudioReady callback while recording is in progress. Please stop the recorder before clearing the callback.'
|
|
211
|
-
);
|
|
212
|
-
}
|
|
213
|
-
|
|
179
|
+
clearOnAudioReady(): void {
|
|
214
180
|
if (!this.onAudioReadySubscription) {
|
|
215
181
|
return;
|
|
216
182
|
}
|
|
@@ -221,7 +187,43 @@ export default class AudioRecorder {
|
|
|
221
187
|
this.onAudioReadySubscription = null;
|
|
222
188
|
}
|
|
223
189
|
|
|
224
|
-
|
|
190
|
+
isRecording(): boolean {
|
|
225
191
|
return this.recorder.isRecording();
|
|
226
192
|
}
|
|
193
|
+
|
|
194
|
+
isPaused(): boolean {
|
|
195
|
+
return this.recorder.isPaused();
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
getCurrentDuration(): number {
|
|
199
|
+
return this.recorder.getCurrentDuration();
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
onError(callback: (error: OnRecorderErrorEventType) => void): void {
|
|
203
|
+
if (this.onErrorSubscription) {
|
|
204
|
+
this.recorder.clearOnError();
|
|
205
|
+
this.onErrorSubscription.remove();
|
|
206
|
+
this.onErrorSubscription = null;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
this.onErrorSubscription = this.audioEventEmitter.addAudioEventListener(
|
|
210
|
+
'recorderError',
|
|
211
|
+
callback
|
|
212
|
+
);
|
|
213
|
+
|
|
214
|
+
this.recorder.setOnError({
|
|
215
|
+
callbackId: this.onErrorSubscription.subscriptionId,
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
clearOnError(): void {
|
|
220
|
+
if (!this.onErrorSubscription) {
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
this.recorder.clearOnError();
|
|
225
|
+
|
|
226
|
+
this.onErrorSubscription.remove();
|
|
227
|
+
this.onErrorSubscription = null;
|
|
228
|
+
}
|
|
227
229
|
}
|
|
@@ -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> = (
|