react-native-audio-api 0.11.0-alpha.1 → 0.11.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -11
- package/RNAudioAPI.podspec +25 -18
- package/android/build.gradle +41 -5
- package/android/src/main/cpp/audioapi/CMakeLists.txt +6 -3
- package/android/src/main/cpp/audioapi/android/AudioAPIModule.cpp +10 -16
- package/android/src/main/cpp/audioapi/android/OnLoad.cpp +1 -2
- package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.cpp +219 -84
- package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +24 -23
- package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +13 -20
- package/android/src/main/cpp/audioapi/android/core/utils/AndroidFileWriterBackend.h +14 -18
- package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.cpp +72 -89
- package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.h +12 -23
- package/android/src/main/cpp/audioapi/android/core/utils/AudioDecoder.cpp +47 -47
- package/android/src/main/cpp/audioapi/android/core/utils/FileOptions.cpp +83 -0
- package/android/src/main/cpp/audioapi/android/core/utils/FileOptions.h +22 -0
- package/android/src/main/cpp/audioapi/android/core/utils/MiniaudioImplementation.cpp +5 -0
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.cpp +379 -298
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.h +48 -91
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/ptrs.hpp +48 -0
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/utils.cpp +110 -0
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/utils.h +34 -0
- package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.cpp +132 -104
- package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.h +8 -16
- package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +28 -1
- package/android/src/main/java/com/swmansion/audioapi/system/LockScreenManager.kt +28 -6
- package/android/src/main/java/com/swmansion/audioapi/system/MediaNotificationManager.kt +11 -0
- package/android/src/main/jniLibs/arm64-v8a/libavcodec.so +0 -0
- package/android/src/main/jniLibs/arm64-v8a/libavformat.so +0 -0
- package/android/src/main/jniLibs/arm64-v8a/libavutil.so +0 -0
- package/android/src/main/jniLibs/arm64-v8a/libswresample.so +0 -0
- package/android/src/main/jniLibs/armeabi-v7a/libavcodec.so +0 -0
- package/android/src/main/jniLibs/armeabi-v7a/libavformat.so +0 -0
- package/android/src/main/jniLibs/armeabi-v7a/libavutil.so +0 -0
- package/android/src/main/jniLibs/armeabi-v7a/libswresample.so +0 -0
- package/android/src/main/jniLibs/x86/libavcodec.so +0 -0
- package/android/src/main/jniLibs/x86/libavformat.so +0 -0
- package/android/src/main/jniLibs/x86/libavutil.so +0 -0
- package/android/src/main/jniLibs/x86/libswresample.so +0 -0
- package/android/src/main/jniLibs/x86_64/libavcodec.so +0 -0
- package/android/src/main/jniLibs/x86_64/libavformat.so +0 -0
- package/android/src/main/jniLibs/x86_64/libavutil.so +0 -0
- package/android/src/main/jniLibs/x86_64/libswresample.so +0 -0
- package/android/src/oldarch/NativeAudioAPIModuleSpec.java +4 -0
- package/common/cpp/audioapi/AudioAPIModuleInstaller.h +45 -70
- package/common/cpp/audioapi/HostObjects/AudioContextHostObject.cpp +20 -22
- package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.cpp +3 -4
- package/common/cpp/audioapi/HostObjects/AudioParamHostObject.cpp +6 -8
- package/common/cpp/audioapi/HostObjects/AudioParamHostObject.h +2 -2
- package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +102 -63
- package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +4 -1
- package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.cpp +25 -31
- package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.h +3 -3
- package/common/cpp/audioapi/HostObjects/WorkletNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/WorkletProcessingNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.cpp +10 -18
- package/common/cpp/audioapi/HostObjects/destinations/AudioDestinationNodeHostObject.h +2 -3
- package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp +18 -30
- package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.cpp +50 -0
- package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.h +20 -0
- package/common/cpp/audioapi/HostObjects/effects/DelayNodeHostObject.cpp +27 -0
- package/common/cpp/audioapi/HostObjects/effects/DelayNodeHostObject.h +21 -0
- package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.cpp +2 -2
- package/common/cpp/audioapi/HostObjects/effects/IIRFilterNodeHostObject.cpp +33 -0
- package/common/cpp/audioapi/HostObjects/effects/IIRFilterNodeHostObject.h +20 -0
- package/common/cpp/audioapi/HostObjects/effects/PeriodicWaveHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.cpp +2 -2
- package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.cpp +6 -12
- package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.h +7 -7
- package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.cpp +98 -50
- package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +5 -2
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.cpp +27 -22
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.h +12 -10
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.cpp +17 -22
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.h +5 -7
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.cpp +25 -11
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.h +8 -8
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.cpp +19 -30
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.h +2 -4
- package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.cpp +7 -11
- package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.cpp +2 -2
- package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.cpp +6 -8
- package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/sources/RecorderAdapterNodeHostObject.h +4 -5
- package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.cpp +6 -2
- package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.h +5 -6
- package/common/cpp/audioapi/HostObjects/sources/WorkletSourceNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/utils/AudioDecoderHostObject.cpp +39 -60
- package/common/cpp/audioapi/HostObjects/utils/AudioStretcherHostObject.cpp +15 -30
- package/common/cpp/audioapi/core/AudioContext.cpp +23 -28
- package/common/cpp/audioapi/core/AudioContext.h +6 -3
- package/common/cpp/audioapi/core/AudioNode.cpp +17 -19
- package/common/cpp/audioapi/core/AudioNode.h +19 -8
- package/common/cpp/audioapi/core/AudioParam.cpp +68 -100
- package/common/cpp/audioapi/core/AudioParam.h +20 -12
- package/common/cpp/audioapi/core/BaseAudioContext.cpp +52 -34
- package/common/cpp/audioapi/core/BaseAudioContext.h +26 -14
- package/common/cpp/audioapi/core/OfflineAudioContext.cpp +12 -17
- package/common/cpp/audioapi/core/OfflineAudioContext.h +10 -5
- package/common/cpp/audioapi/core/analysis/AnalyserNode.cpp +13 -21
- package/common/cpp/audioapi/core/analysis/AnalyserNode.h +8 -6
- package/common/cpp/audioapi/core/destinations/AudioDestinationNode.cpp +1 -0
- package/common/cpp/audioapi/core/destinations/AudioDestinationNode.h +5 -3
- package/common/cpp/audioapi/core/effects/BiquadFilterNode.cpp +84 -66
- package/common/cpp/audioapi/core/effects/BiquadFilterNode.h +39 -10
- package/common/cpp/audioapi/core/effects/ConvolverNode.cpp +201 -0
- package/common/cpp/audioapi/core/effects/ConvolverNode.h +64 -0
- package/common/cpp/audioapi/core/effects/DelayNode.cpp +101 -0
- package/common/cpp/audioapi/core/effects/DelayNode.h +39 -0
- package/common/cpp/audioapi/core/effects/GainNode.cpp +1 -0
- package/common/cpp/audioapi/core/effects/GainNode.h +3 -1
- package/common/cpp/audioapi/core/effects/IIRFilterNode.cpp +166 -0
- package/common/cpp/audioapi/core/effects/IIRFilterNode.h +74 -0
- package/common/cpp/audioapi/core/effects/PeriodicWave.cpp +22 -35
- package/common/cpp/audioapi/core/effects/PeriodicWave.h +4 -9
- package/common/cpp/audioapi/core/effects/StereoPannerNode.cpp +4 -5
- package/common/cpp/audioapi/core/effects/StereoPannerNode.h +4 -2
- package/common/cpp/audioapi/core/effects/WorkletNode.cpp +11 -13
- package/common/cpp/audioapi/core/effects/WorkletNode.h +15 -12
- package/common/cpp/audioapi/core/effects/WorkletProcessingNode.cpp +4 -4
- package/common/cpp/audioapi/core/effects/WorkletProcessingNode.h +15 -14
- package/common/cpp/audioapi/core/inputs/AudioRecorder.cpp +58 -36
- package/common/cpp/audioapi/core/inputs/AudioRecorder.h +41 -44
- package/common/cpp/audioapi/core/sources/AudioBuffer.cpp +4 -6
- package/common/cpp/audioapi/core/sources/AudioBuffer.h +4 -7
- package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +48 -57
- package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +37 -34
- package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +55 -17
- package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +35 -28
- package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +41 -49
- package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +8 -6
- package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +29 -24
- package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +6 -6
- package/common/cpp/audioapi/core/sources/ConstantSourceNode.cpp +3 -4
- package/common/cpp/audioapi/core/sources/ConstantSourceNode.h +3 -1
- package/common/cpp/audioapi/core/sources/OscillatorNode.cpp +12 -23
- package/common/cpp/audioapi/core/sources/OscillatorNode.h +6 -4
- package/common/cpp/audioapi/core/sources/RecorderAdapterNode.cpp +43 -16
- package/common/cpp/audioapi/core/sources/RecorderAdapterNode.h +22 -17
- package/common/cpp/audioapi/core/sources/StreamerNode.cpp +104 -87
- package/common/cpp/audioapi/core/sources/StreamerNode.h +69 -33
- package/common/cpp/audioapi/core/sources/WorkletSourceNode.cpp +5 -7
- package/common/cpp/audioapi/core/sources/WorkletSourceNode.h +15 -13
- package/common/cpp/audioapi/core/types/AudioFormat.h +1 -11
- package/common/cpp/audioapi/core/utils/AudioDecoder.h +15 -6
- package/common/cpp/audioapi/core/utils/AudioFileWriter.cpp +41 -0
- package/common/cpp/audioapi/core/utils/AudioFileWriter.h +43 -0
- package/common/cpp/audioapi/core/utils/AudioNodeDestructor.cpp +5 -6
- package/common/cpp/audioapi/core/utils/AudioNodeDestructor.h +7 -10
- package/common/cpp/audioapi/core/utils/AudioNodeManager.cpp +17 -19
- package/common/cpp/audioapi/core/utils/AudioNodeManager.h +8 -11
- package/common/cpp/audioapi/core/utils/AudioParamEventQueue.cpp +3 -3
- package/common/cpp/audioapi/core/utils/AudioParamEventQueue.h +5 -5
- package/common/cpp/audioapi/core/utils/AudioRecorderCallback.cpp +101 -0
- package/common/cpp/audioapi/core/utils/AudioRecorderCallback.h +51 -0
- package/common/cpp/audioapi/core/utils/AudioStretcher.cpp +6 -6
- package/common/cpp/audioapi/core/utils/Constants.h +7 -3
- package/common/cpp/audioapi/core/utils/ParamChangeEvent.cpp +1 -0
- package/common/cpp/audioapi/core/utils/ParamChangeEvent.h +9 -9
- package/common/cpp/audioapi/core/utils/worklets/SafeIncludes.h +33 -34
- package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.cpp +17 -19
- package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.h +23 -19
- package/common/cpp/audioapi/dsp/AudioUtils.cpp +4 -10
- package/common/cpp/audioapi/dsp/AudioUtils.h +1 -1
- package/common/cpp/audioapi/dsp/Convolver.cpp +201 -0
- package/common/cpp/audioapi/dsp/Convolver.h +47 -0
- package/common/cpp/audioapi/dsp/FFT.cpp +1 -27
- package/common/cpp/audioapi/dsp/FFT.h +19 -3
- package/common/cpp/audioapi/dsp/VectorMath.cpp +24 -58
- package/common/cpp/audioapi/dsp/VectorMath.h +35 -8
- package/common/cpp/audioapi/dsp/Windows.cpp +4 -9
- package/common/cpp/audioapi/dsp/Windows.h +24 -23
- package/common/cpp/audioapi/events/AudioEventHandlerRegistry.cpp +12 -17
- package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +45 -40
- package/common/cpp/audioapi/events/IAudioEventHandlerRegistry.h +15 -7
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/avcodec.h +4 -4
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_desc.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_id.h +3 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_par.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/defs.h +3 -0
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/packet.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/smpte_436m.h +254 -0
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/version.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavformat/avformat.h +6 -6
- package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version_major.h +2 -0
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avassert.h +5 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avutil.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/channel_layout.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/csp.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/dict.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/ffversion.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/film_grain_params.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/frame.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hdr_dynamic_vivid_metadata.h +3 -3
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_opencl.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_qsv.h +0 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_vulkan.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/iamf.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/lfg.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/log.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/mathematics.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/opt.h +4 -4
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rational.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rc4.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/refstruct.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/spherical.h +6 -0
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tdrdi.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tx.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/version.h +3 -3
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/video_hint.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libswresample/swresample.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libswresample/version.h +1 -1
- package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64/libavcodec.framework/libavcodec +0 -0
- package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64_x86_64-simulator/libavcodec.framework/libavcodec +0 -0
- package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64/libavformat.framework/libavformat +0 -0
- package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64_x86_64-simulator/libavformat.framework/libavformat +0 -0
- package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64/libavutil.framework/libavutil +0 -0
- package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64_x86_64-simulator/libavutil.framework/libavutil +0 -0
- package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64/libswresample.framework/libswresample +0 -0
- package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64_x86_64-simulator/libswresample.framework/libswresample +0 -0
- package/common/cpp/audioapi/jsi/AudioArrayBuffer.h +4 -5
- package/common/cpp/audioapi/jsi/JsiHostObject.cpp +11 -13
- package/common/cpp/audioapi/jsi/JsiHostObject.h +26 -33
- package/common/cpp/audioapi/jsi/JsiPromise.cpp +34 -67
- package/common/cpp/audioapi/jsi/JsiPromise.h +65 -26
- package/common/cpp/audioapi/jsi/RuntimeLifecycleMonitor.cpp +7 -10
- package/common/cpp/audioapi/jsi/RuntimeLifecycleMonitor.h +1 -3
- package/common/cpp/audioapi/libs/ffmpeg/FFmpegDecoding.cpp +4 -3
- package/common/cpp/audioapi/libs/ffmpeg/relinking.md +24 -0
- package/common/cpp/audioapi/utils/AlignedAllocator.hpp +50 -0
- package/common/cpp/audioapi/utils/AudioArray.cpp +3 -8
- package/common/cpp/audioapi/utils/AudioArray.h +3 -11
- package/common/cpp/audioapi/utils/AudioBus.cpp +79 -149
- package/common/cpp/audioapi/utils/AudioBus.h +17 -14
- package/common/cpp/audioapi/utils/AudioFileProperties.cpp +92 -0
- package/common/cpp/audioapi/utils/AudioFileProperties.h +76 -0
- package/common/cpp/audioapi/utils/CircularAudioArray.cpp +6 -18
- package/common/cpp/audioapi/utils/CircularOverflowableAudioArray.cpp +6 -10
- package/common/cpp/audioapi/utils/CircularOverflowableAudioArray.h +2 -2
- package/common/cpp/audioapi/utils/Result.hpp +286 -0
- package/common/cpp/audioapi/utils/ThreadPool.hpp +59 -1
- package/common/cpp/audioapi/utils/UnitConversion.h +9 -0
- package/common/cpp/test/CMakeLists.txt +20 -14
- package/common/cpp/test/src/AudioParamTest.cpp +4 -3
- package/common/cpp/test/src/AudioScheduledSourceTest.cpp +113 -0
- package/common/cpp/test/src/ConstantSourceTest.cpp +5 -7
- package/common/cpp/test/src/DelayTest.cpp +108 -0
- package/common/cpp/test/src/GainTest.cpp +4 -5
- package/common/cpp/test/src/IIRFilterTest.cpp +153 -0
- package/common/cpp/test/src/MockAudioEventHandlerRegistry.h +19 -11
- package/common/cpp/test/src/OscillatorTest.cpp +2 -1
- package/common/cpp/test/src/StereoPannerTest.cpp +6 -9
- package/common/cpp/test/src/biquad/BiquadFilterChromium.cpp +372 -0
- package/common/cpp/test/src/biquad/BiquadFilterChromium.h +65 -0
- package/common/cpp/test/src/biquad/BiquadFilterTest.cpp +272 -0
- package/common/cpp/test/src/biquad/BiquadFilterTest.h +47 -0
- package/ios/audioapi/ios/AudioAPIModule.h +2 -1
- package/ios/audioapi/ios/AudioAPIModule.mm +44 -20
- package/ios/audioapi/ios/core/IOSAudioPlayer.h +2 -2
- package/ios/audioapi/ios/core/IOSAudioPlayer.mm +7 -6
- package/ios/audioapi/ios/core/IOSAudioRecorder.h +26 -18
- package/ios/audioapi/ios/core/IOSAudioRecorder.mm +193 -53
- package/ios/audioapi/ios/core/NativeAudioPlayer.m +16 -13
- package/ios/audioapi/ios/core/NativeAudioRecorder.h +4 -0
- package/ios/audioapi/ios/core/NativeAudioRecorder.m +42 -7
- package/ios/audioapi/ios/core/utils/AudioDecoder.mm +21 -4
- package/ios/audioapi/ios/core/utils/FileOptions.h +31 -0
- package/ios/audioapi/ios/core/utils/FileOptions.mm +177 -0
- package/ios/audioapi/ios/core/{IOSAudioFileWriter.h → utils/IOSFileWriter.h} +16 -14
- package/ios/audioapi/ios/core/utils/IOSFileWriter.mm +224 -0
- package/ios/audioapi/ios/core/{IOSRecorderCallback.h → utils/IOSRecorderCallback.h} +7 -17
- package/ios/audioapi/ios/core/utils/IOSRecorderCallback.mm +172 -0
- package/ios/audioapi/ios/system/AudioEngine.h +19 -16
- package/ios/audioapi/ios/system/AudioEngine.mm +101 -134
- package/ios/audioapi/ios/system/AudioSessionManager.h +25 -11
- package/ios/audioapi/ios/system/AudioSessionManager.mm +273 -202
- package/ios/audioapi/ios/system/LockScreenManager.mm +39 -23
- package/ios/audioapi/ios/system/NotificationManager.mm +37 -52
- package/lib/commonjs/AudioAPIModule/AudioAPIModule.js +90 -0
- package/lib/commonjs/AudioAPIModule/AudioAPIModule.js.map +1 -0
- package/lib/commonjs/AudioAPIModule/globals.d.js +6 -0
- package/lib/commonjs/AudioAPIModule/globals.d.js.map +1 -0
- package/lib/commonjs/AudioAPIModule/index.js +14 -0
- package/lib/commonjs/AudioAPIModule/index.js.map +1 -0
- package/lib/commonjs/api.js +18 -12
- package/lib/commonjs/api.js.map +1 -1
- package/lib/commonjs/api.web.js +8 -0
- package/lib/commonjs/api.web.js.map +1 -1
- package/lib/commonjs/core/AudioBufferBaseSourceNode.js +3 -0
- package/lib/commonjs/core/AudioBufferBaseSourceNode.js.map +1 -1
- package/lib/commonjs/core/AudioBufferQueueSourceNode.js +5 -2
- package/lib/commonjs/core/AudioBufferQueueSourceNode.js.map +1 -1
- package/lib/commonjs/core/AudioContext.js +5 -8
- package/lib/commonjs/core/AudioContext.js.map +1 -1
- package/lib/commonjs/core/AudioNode.js +1 -1
- package/lib/commonjs/core/AudioNode.js.map +1 -1
- package/lib/commonjs/core/AudioParam.js +18 -11
- package/lib/commonjs/core/AudioParam.js.map +1 -1
- package/lib/commonjs/core/AudioRecorder.js +43 -55
- package/lib/commonjs/core/AudioRecorder.js.map +1 -1
- package/lib/commonjs/core/BaseAudioContext.js +61 -30
- package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
- package/lib/commonjs/core/ConvolverNode.js +37 -0
- package/lib/commonjs/core/ConvolverNode.js.map +1 -0
- package/lib/commonjs/core/DelayNode.js +17 -0
- package/lib/commonjs/core/DelayNode.js.map +1 -0
- package/lib/commonjs/core/IIRFilterNode.js +19 -0
- package/lib/commonjs/core/IIRFilterNode.js.map +1 -0
- package/lib/commonjs/core/OfflineAudioContext.js +3 -6
- package/lib/commonjs/core/OfflineAudioContext.js.map +1 -1
- package/lib/commonjs/plugin/withAudioAPI.js +46 -0
- package/lib/commonjs/plugin/withAudioAPI.js.map +1 -1
- package/lib/commonjs/specs/NativeAudioAPIModule.js.map +1 -1
- package/lib/commonjs/system/AudioManager.js +4 -7
- package/lib/commonjs/system/AudioManager.js.map +1 -1
- package/lib/commonjs/types.js +16 -23
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/utils/filePresets.js +43 -0
- package/lib/commonjs/utils/filePresets.js.map +1 -0
- package/lib/commonjs/utils/index.js +12 -27
- package/lib/commonjs/utils/index.js.map +1 -1
- package/lib/commonjs/web-core/AudioContext.js +21 -1
- package/lib/commonjs/web-core/AudioContext.js.map +1 -1
- package/lib/commonjs/web-core/ConvolverNode.js +40 -0
- package/lib/commonjs/web-core/ConvolverNode.js.map +1 -0
- package/lib/commonjs/web-core/ConvolverNodeOptions.js +6 -0
- package/lib/commonjs/web-core/ConvolverNodeOptions.js.map +1 -0
- package/lib/commonjs/web-core/DelayNode.js +17 -0
- package/lib/commonjs/web-core/DelayNode.js.map +1 -0
- package/lib/commonjs/web-core/IIRFilterNode.js +19 -0
- package/lib/commonjs/web-core/IIRFilterNode.js.map +1 -0
- package/lib/commonjs/web-core/OfflineAudioContext.js +20 -0
- package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
- package/lib/module/AudioAPIModule/AudioAPIModule.js +87 -0
- package/lib/module/AudioAPIModule/AudioAPIModule.js.map +1 -0
- package/lib/module/AudioAPIModule/globals.d.js +4 -0
- package/lib/module/AudioAPIModule/globals.d.js.map +1 -0
- package/lib/module/AudioAPIModule/index.js +4 -0
- package/lib/module/AudioAPIModule/index.js.map +1 -0
- package/lib/module/api.js +3 -12
- package/lib/module/api.js.map +1 -1
- package/lib/module/api.web.js +1 -0
- package/lib/module/api.web.js.map +1 -1
- package/lib/module/core/AudioBufferBaseSourceNode.js +3 -0
- package/lib/module/core/AudioBufferBaseSourceNode.js.map +1 -1
- package/lib/module/core/AudioBufferQueueSourceNode.js +5 -2
- package/lib/module/core/AudioBufferQueueSourceNode.js.map +1 -1
- package/lib/module/core/AudioContext.js +5 -8
- package/lib/module/core/AudioContext.js.map +1 -1
- package/lib/module/core/AudioNode.js +1 -1
- package/lib/module/core/AudioNode.js.map +1 -1
- package/lib/module/core/AudioParam.js +18 -11
- package/lib/module/core/AudioParam.js.map +1 -1
- package/lib/module/core/AudioRecorder.js +44 -56
- package/lib/module/core/AudioRecorder.js.map +1 -1
- package/lib/module/core/BaseAudioContext.js +63 -32
- package/lib/module/core/BaseAudioContext.js.map +1 -1
- package/lib/module/core/ConvolverNode.js +31 -0
- package/lib/module/core/ConvolverNode.js.map +1 -0
- package/lib/module/core/DelayNode.js +11 -0
- package/lib/module/core/DelayNode.js.map +1 -0
- package/lib/module/core/IIRFilterNode.js +13 -0
- package/lib/module/core/IIRFilterNode.js.map +1 -0
- package/lib/module/core/OfflineAudioContext.js +3 -6
- package/lib/module/core/OfflineAudioContext.js.map +1 -1
- package/lib/module/plugin/withAudioAPI.js +47 -1
- package/lib/module/plugin/withAudioAPI.js.map +1 -1
- package/lib/module/specs/NativeAudioAPIModule.js.map +1 -1
- package/lib/module/system/AudioManager.js +4 -7
- package/lib/module/system/AudioManager.js.map +1 -1
- package/lib/module/types.js +15 -22
- package/lib/module/types.js.map +1 -1
- package/lib/module/utils/filePresets.js +39 -0
- package/lib/module/utils/filePresets.js.map +1 -0
- package/lib/module/utils/index.js +10 -10
- package/lib/module/utils/index.js.map +1 -1
- package/lib/module/web-core/AudioContext.js +21 -1
- package/lib/module/web-core/AudioContext.js.map +1 -1
- package/lib/module/web-core/ConvolverNode.js +34 -0
- package/lib/module/web-core/ConvolverNode.js.map +1 -0
- package/lib/module/web-core/ConvolverNodeOptions.js +4 -0
- package/lib/module/web-core/ConvolverNodeOptions.js.map +1 -0
- package/lib/module/web-core/DelayNode.js +11 -0
- package/lib/module/web-core/DelayNode.js.map +1 -0
- package/lib/module/web-core/IIRFilterNode.js +13 -0
- package/lib/module/web-core/IIRFilterNode.js.map +1 -0
- package/lib/module/web-core/OfflineAudioContext.js +20 -0
- package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
- package/lib/typescript/AudioAPIModule/AudioAPIModule.d.ts +36 -0
- package/lib/typescript/AudioAPIModule/AudioAPIModule.d.ts.map +1 -0
- package/lib/typescript/AudioAPIModule/index.d.ts +2 -0
- package/lib/typescript/AudioAPIModule/index.d.ts.map +1 -0
- package/lib/typescript/api.d.ts +3 -9
- package/lib/typescript/api.d.ts.map +1 -1
- package/lib/typescript/api.web.d.ts +1 -0
- package/lib/typescript/api.web.d.ts.map +1 -1
- package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts +1 -0
- package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts.map +1 -1
- package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts +1 -1
- package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts.map +1 -1
- package/lib/typescript/core/AudioContext.d.ts +1 -1
- package/lib/typescript/core/AudioContext.d.ts.map +1 -1
- package/lib/typescript/core/AudioNode.d.ts +2 -1
- package/lib/typescript/core/AudioNode.d.ts.map +1 -1
- package/lib/typescript/core/AudioParam.d.ts.map +1 -1
- package/lib/typescript/core/AudioRecorder.d.ts +13 -6
- package/lib/typescript/core/AudioRecorder.d.ts.map +1 -1
- package/lib/typescript/core/BaseAudioContext.d.ts +9 -3
- package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
- package/lib/typescript/core/ConvolverNode.d.ts +12 -0
- package/lib/typescript/core/ConvolverNode.d.ts.map +1 -0
- package/lib/typescript/core/DelayNode.d.ts +9 -0
- package/lib/typescript/core/DelayNode.d.ts.map +1 -0
- package/lib/typescript/core/IIRFilterNode.d.ts +5 -0
- package/lib/typescript/core/IIRFilterNode.d.ts.map +1 -0
- package/lib/typescript/core/OfflineAudioContext.d.ts +1 -1
- package/lib/typescript/core/OfflineAudioContext.d.ts.map +1 -1
- package/lib/typescript/events/types.d.ts +4 -0
- package/lib/typescript/events/types.d.ts.map +1 -1
- package/lib/typescript/interfaces.d.ts +34 -34
- package/lib/typescript/interfaces.d.ts.map +1 -1
- package/lib/typescript/plugin/withAudioAPI.d.ts +1 -0
- package/lib/typescript/plugin/withAudioAPI.d.ts.map +1 -1
- package/lib/typescript/specs/NativeAudioAPIModule.d.ts +2 -1
- package/lib/typescript/specs/NativeAudioAPIModule.d.ts.map +1 -1
- package/lib/typescript/system/AudioManager.d.ts +3 -2
- package/lib/typescript/system/AudioManager.d.ts.map +1 -1
- package/lib/typescript/types.d.ts +42 -34
- package/lib/typescript/types.d.ts.map +1 -1
- package/lib/typescript/utils/filePresets.d.ts +9 -0
- package/lib/typescript/utils/filePresets.d.ts.map +1 -0
- package/lib/typescript/utils/index.d.ts +1 -8
- package/lib/typescript/utils/index.d.ts.map +1 -1
- package/lib/typescript/web-core/AudioContext.d.ts +9 -2
- package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
- package/lib/typescript/web-core/BaseAudioContext.d.ts +7 -1
- package/lib/typescript/web-core/BaseAudioContext.d.ts.map +1 -1
- package/lib/typescript/web-core/ConvolverNode.d.ts +11 -0
- package/lib/typescript/web-core/ConvolverNode.d.ts.map +1 -0
- package/lib/typescript/web-core/ConvolverNodeOptions.d.ts +6 -0
- package/lib/typescript/web-core/ConvolverNodeOptions.d.ts.map +1 -0
- package/lib/typescript/web-core/DelayNode.d.ts +8 -0
- package/lib/typescript/web-core/DelayNode.d.ts.map +1 -0
- package/lib/typescript/web-core/IIRFilterNode.d.ts +5 -0
- package/lib/typescript/web-core/IIRFilterNode.d.ts.map +1 -0
- package/lib/typescript/web-core/OfflineAudioContext.d.ts +8 -1
- package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
- package/package.json +11 -4
- package/scripts/download-prebuilt-binaries.sh +61 -0
- package/scripts/rnaa_utils.rb +8 -0
- package/scripts/validate-worklets-version.js +27 -0
- package/src/AudioAPIModule/AudioAPIModule.ts +122 -0
- package/src/AudioAPIModule/globals.d.ts +33 -0
- package/src/AudioAPIModule/index.ts +1 -0
- package/src/api.ts +4 -52
- package/src/api.web.ts +1 -0
- package/src/core/AudioBufferBaseSourceNode.ts +8 -0
- package/src/core/AudioBufferQueueSourceNode.ts +8 -2
- package/src/core/AudioContext.ts +5 -8
- package/src/core/AudioNode.ts +4 -3
- package/src/core/AudioParam.ts +18 -11
- package/src/core/AudioRecorder.ts +63 -78
- package/src/core/BaseAudioContext.ts +120 -54
- package/src/core/ConvolverNode.ts +35 -0
- package/src/core/DelayNode.ts +13 -0
- package/src/core/IIRFilterNode.ts +25 -0
- package/src/core/OfflineAudioContext.ts +4 -7
- package/src/events/types.ts +5 -0
- package/src/interfaces.ts +51 -34
- package/src/plugin/withAudioAPI.ts +61 -0
- package/src/specs/NativeAudioAPIModule.ts +3 -2
- package/src/system/AudioManager.ts +13 -19
- package/src/types.ts +45 -36
- package/src/utils/filePresets.ts +47 -0
- package/src/utils/index.ts +13 -19
- package/src/web-core/AudioContext.tsx +40 -1
- package/src/web-core/BaseAudioContext.tsx +11 -1
- package/src/web-core/ConvolverNode.tsx +43 -0
- package/src/web-core/ConvolverNodeOptions.tsx +6 -0
- package/src/web-core/DelayNode.tsx +12 -0
- package/src/web-core/IIRFilterNode.tsx +25 -0
- package/src/web-core/OfflineAudioContext.tsx +39 -0
- package/android/src/main/cpp/audioapi/android/core/utils/FileUtils.h +0 -34
- package/android/src/main/cpp/audioapi/android/core/utils/FileUtilts.cpp +0 -133
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.cpp +0 -154
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.h +0 -41
- package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.cpp +0 -47
- package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.h +0 -28
- package/common/cpp/audioapi/libs/ffmpeg/INSTRUCTIONS.md +0 -32
- package/common/cpp/audioapi/libs/ffmpeg/create_xcframework.sh +0 -111
- package/common/cpp/audioapi/libs/ffmpeg/ffmpeg_setup.sh +0 -391
- package/ios/audioapi/ios/core/IOSAudioFileOptions.h +0 -36
- package/ios/audioapi/ios/core/IOSAudioFileOptions.mm +0 -140
- package/ios/audioapi/ios/core/IOSAudioFileWriter.mm +0 -223
- package/ios/audioapi/ios/core/IOSRecorderCallback.mm +0 -189
- package/lib/commonjs/utils/bitEnums.js +0 -33
- package/lib/commonjs/utils/bitEnums.js.map +0 -1
- package/lib/module/utils/bitEnums.js +0 -27
- package/lib/module/utils/bitEnums.js.map +0 -1
- package/lib/typescript/utils/bitEnums.d.ts +0 -4
- package/lib/typescript/utils/bitEnums.d.ts.map +0 -1
- package/metro-config/index.d.ts +0 -5
- package/metro-config/index.js +0 -41
- package/metro-config/tsconfig.json +0 -3
- package/src/utils/bitEnums.ts +0 -51
- package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/Info.plist +5 -5
- package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64/libavcodec.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64_x86_64-simulator/libavcodec.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64/libavformat.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64_x86_64-simulator/libavformat.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/Info.plist +5 -5
- package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64/libavutil.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64_x86_64-simulator/libavutil.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/Info.plist +5 -5
- /package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64/libswresample.framework/Info.plist +0 -0
- /package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64_x86_64-simulator/libswresample.framework/Info.plist +0 -0
|
@@ -15,7 +15,10 @@
|
|
|
15
15
|
|
|
16
16
|
__weak typeof(self) weakSelf = self;
|
|
17
17
|
self.renderBlock = ^OSStatus(
|
|
18
|
-
BOOL *isSilence,
|
|
18
|
+
BOOL *isSilence,
|
|
19
|
+
const AudioTimeStamp *timestamp,
|
|
20
|
+
AVAudioFrameCount frameCount,
|
|
21
|
+
AudioBufferList *outputData) {
|
|
19
22
|
if (outputData->mNumberBuffers != weakSelf.channelCount) {
|
|
20
23
|
return kAudioServicesBadPropertySizeError;
|
|
21
24
|
}
|
|
@@ -25,8 +28,10 @@
|
|
|
25
28
|
return kAudioServicesNoError;
|
|
26
29
|
};
|
|
27
30
|
|
|
28
|
-
_format = [[AVAudioFormat alloc] initStandardFormatWithSampleRate:self.sampleRate
|
|
29
|
-
|
|
31
|
+
_format = [[AVAudioFormat alloc] initStandardFormatWithSampleRate:self.sampleRate
|
|
32
|
+
channels:self.channelCount];
|
|
33
|
+
_sourceNode = [[AVAudioSourceNode alloc] initWithFormat:self.format
|
|
34
|
+
renderBlock:self.renderBlock];
|
|
30
35
|
}
|
|
31
36
|
|
|
32
37
|
return self;
|
|
@@ -34,29 +39,27 @@
|
|
|
34
39
|
|
|
35
40
|
- (bool)start
|
|
36
41
|
{
|
|
37
|
-
NSLog(@"[AudioPlayer] start");
|
|
38
|
-
|
|
39
42
|
AudioEngine *audioEngine = [AudioEngine sharedInstance];
|
|
40
43
|
assert(audioEngine != nil);
|
|
41
44
|
|
|
42
|
-
// AudioEngine allows us to attach and connect nodes at runtime but with few
|
|
43
|
-
// in this case if it is the first player and recorder started the
|
|
44
|
-
// It can be optimized by tracking if we haven't
|
|
45
|
+
// AudioEngine allows us to attach and connect nodes at runtime but with few
|
|
46
|
+
// limitations in this case if it is the first player and recorder started the
|
|
47
|
+
// engine we need to restart. It can be optimized by tracking if we haven't
|
|
48
|
+
// break rules of at runtime modifications from docs
|
|
45
49
|
// https://developer.apple.com/documentation/avfaudio/avaudioengine?language=objc
|
|
46
50
|
//
|
|
47
51
|
// Currently we are restarting because we do not see any significant performance issue and case when
|
|
48
52
|
// you will need to start and stop player very frequently
|
|
49
|
-
[audioEngine
|
|
53
|
+
[audioEngine stopIfNecessary];
|
|
50
54
|
self.sourceNodeId = [audioEngine attachSourceNode:self.sourceNode format:self.format];
|
|
51
55
|
return [audioEngine startIfNecessary];
|
|
52
56
|
}
|
|
53
57
|
|
|
54
58
|
- (void)stop
|
|
55
59
|
{
|
|
56
|
-
NSLog(@"[AudioPlayer] stop");
|
|
57
|
-
|
|
58
60
|
AudioEngine *audioEngine = [AudioEngine sharedInstance];
|
|
59
61
|
assert(audioEngine != nil);
|
|
62
|
+
|
|
60
63
|
[audioEngine detachSourceNodeWithId:self.sourceNodeId];
|
|
61
64
|
[audioEngine stopIfNecessary];
|
|
62
65
|
self.sourceNodeId = nil;
|
|
@@ -64,7 +67,6 @@
|
|
|
64
67
|
|
|
65
68
|
- (bool)resume
|
|
66
69
|
{
|
|
67
|
-
NSLog(@"[AudioPlayer] resume");
|
|
68
70
|
AudioEngine *audioEngine = [AudioEngine sharedInstance];
|
|
69
71
|
assert(audioEngine != nil);
|
|
70
72
|
|
|
@@ -75,7 +77,8 @@
|
|
|
75
77
|
{
|
|
76
78
|
AudioEngine *audioEngine = [AudioEngine sharedInstance];
|
|
77
79
|
assert(audioEngine != nil);
|
|
78
|
-
|
|
80
|
+
|
|
81
|
+
[audioEngine pauseIfNecessary];
|
|
79
82
|
}
|
|
80
83
|
|
|
81
84
|
- (void)cleanup
|
|
@@ -44,15 +44,32 @@ static inline uint32_t nextPowerOfTwo(uint32_t x)
|
|
|
44
44
|
|
|
45
45
|
- (AVAudioFormat *)getInputFormat
|
|
46
46
|
{
|
|
47
|
-
|
|
47
|
+
AVAudioFormat *format = [AudioEngine.sharedInstance.audioEngine.inputNode inputFormatForBus:0];
|
|
48
|
+
|
|
49
|
+
if (format.sampleRate == 0 || format.channelCount == 0) {
|
|
50
|
+
AudioSessionManager *sessionManager = [AudioSessionManager sharedInstance];
|
|
51
|
+
|
|
52
|
+
format = [[AVAudioFormat alloc]
|
|
53
|
+
initStandardFormatWithSampleRate:[[sessionManager getDevicePreferredSampleRate] doubleValue]
|
|
54
|
+
channels:[[sessionManager getDevicePreferredInputChannelCount]
|
|
55
|
+
intValue]];
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return format;
|
|
48
59
|
}
|
|
49
60
|
|
|
50
61
|
- (int)getBufferSize
|
|
51
62
|
{
|
|
52
63
|
// NOTE: this method should be called only after the session is activated
|
|
53
64
|
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
|
|
54
|
-
float bufferDuration = audioSession.IOBufferDuration > 0 ? audioSession.IOBufferDuration : 0.02;
|
|
55
65
|
|
|
66
|
+
// TMPfix: it seems that buffer duration in some cases (background/device change) can switch
|
|
67
|
+
// to longer values, exceeding buffer size predicted after session start
|
|
68
|
+
// since it is just a couple of buffers we can set min value of 200ms
|
|
69
|
+
// to enforce we always have enough frames allocated to pass further down the pipeline
|
|
70
|
+
float bufferDuration = MAX(audioSession.IOBufferDuration, 0.2);
|
|
71
|
+
|
|
72
|
+
// IOS returns buffer duration rounded, but expects the buffer size to be power of two in runtime
|
|
56
73
|
return nextPowerOfTwo(ceil(bufferDuration * audioSession.sampleRate));
|
|
57
74
|
}
|
|
58
75
|
|
|
@@ -61,14 +78,15 @@ static inline uint32_t nextPowerOfTwo(uint32_t x)
|
|
|
61
78
|
AudioEngine *audioEngine = [AudioEngine sharedInstance];
|
|
62
79
|
assert(audioEngine != nil);
|
|
63
80
|
|
|
64
|
-
// AudioEngine allows us to attach and connect nodes at runtime but with few
|
|
65
|
-
// in this case if it is the first recorder node and player
|
|
66
|
-
// It can be optimized by tracking if
|
|
81
|
+
// AudioEngine allows us to attach and connect nodes at runtime but with few
|
|
82
|
+
// limitations in this case if it is the first recorder node and player
|
|
83
|
+
// started the engine we need to restart. It can be optimized by tracking if
|
|
84
|
+
// we haven't break rules of at runtime modifications from docs
|
|
67
85
|
// https://developer.apple.com/documentation/avfaudio/avaudioengine?language=objc
|
|
68
86
|
//
|
|
69
87
|
// Currently we are restarting because we do not see any significant performance issue and case when
|
|
70
88
|
// you will need to start and stop recorder very frequently
|
|
71
|
-
[audioEngine
|
|
89
|
+
[audioEngine stopIfNecessary];
|
|
72
90
|
[audioEngine attachInputNode:self.sinkNode];
|
|
73
91
|
[audioEngine startIfNecessary];
|
|
74
92
|
}
|
|
@@ -77,8 +95,25 @@ static inline uint32_t nextPowerOfTwo(uint32_t x)
|
|
|
77
95
|
{
|
|
78
96
|
AudioEngine *audioEngine = [AudioEngine sharedInstance];
|
|
79
97
|
assert(audioEngine != nil);
|
|
80
|
-
[audioEngine detachInputNode];
|
|
81
98
|
[audioEngine stopIfNecessary];
|
|
99
|
+
[audioEngine detachInputNode];
|
|
100
|
+
[audioEngine restartAudioEngine];
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
- (void)pause
|
|
104
|
+
{
|
|
105
|
+
AudioEngine *audioEngine = [AudioEngine sharedInstance];
|
|
106
|
+
assert(audioEngine != nil);
|
|
107
|
+
|
|
108
|
+
[audioEngine pauseIfNecessary];
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
- (void)resume
|
|
112
|
+
{
|
|
113
|
+
AudioEngine *audioEngine = [AudioEngine sharedInstance];
|
|
114
|
+
assert(audioEngine != nil);
|
|
115
|
+
|
|
116
|
+
[audioEngine startIfNecessary];
|
|
82
117
|
}
|
|
83
118
|
|
|
84
119
|
- (void)cleanup
|
|
@@ -9,7 +9,9 @@
|
|
|
9
9
|
#include <audioapi/dsp/VectorMath.h>
|
|
10
10
|
#include <audioapi/libs/audio-stretch/stretch.h>
|
|
11
11
|
#include <audioapi/libs/base64/base64.h>
|
|
12
|
+
#if !RN_AUDIO_API_FFMPEG_DISABLED
|
|
12
13
|
#include <audioapi/libs/ffmpeg/FFmpegDecoding.h>
|
|
14
|
+
#endif // RN_AUDIO_API_FFMPEG_DISABLED
|
|
13
15
|
#include <audioapi/utils/AudioArray.h>
|
|
14
16
|
#include <audioapi/utils/AudioBus.h>
|
|
15
17
|
|
|
@@ -63,19 +65,27 @@ std::shared_ptr<AudioBuffer> AudioDecoder::makeAudioBufferFromFloatBuffer(
|
|
|
63
65
|
return std::make_shared<AudioBuffer>(audioBus);
|
|
64
66
|
}
|
|
65
67
|
|
|
66
|
-
std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithFilePath(
|
|
68
|
+
std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithFilePath(
|
|
69
|
+
const std::string &path,
|
|
70
|
+
float sampleRate)
|
|
67
71
|
{
|
|
68
72
|
if (AudioDecoder::pathHasExtension(path, {".mp4", ".m4a", ".aac"})) {
|
|
73
|
+
#if !RN_AUDIO_API_FFMPEG_DISABLED
|
|
69
74
|
auto buffer = ffmpegdecoder::decodeWithFilePath(path, static_cast<int>(sampleRate));
|
|
70
75
|
if (buffer == nullptr) {
|
|
71
76
|
NSLog(@"Failed to decode with FFmpeg: %s", path.c_str());
|
|
72
77
|
return nullptr;
|
|
73
78
|
}
|
|
74
79
|
return buffer;
|
|
80
|
+
#else
|
|
81
|
+
NSLog(@"FFmpeg is disabled, cannot decode file: %s", path.c_str());
|
|
82
|
+
return nullptr;
|
|
83
|
+
#endif // RN_AUDIO_API_FFMPEG_DISABLED
|
|
75
84
|
}
|
|
76
85
|
ma_decoder decoder;
|
|
77
86
|
ma_decoder_config config = ma_decoder_config_init(ma_format_f32, 0, static_cast<int>(sampleRate));
|
|
78
|
-
ma_decoding_backend_vtable *customBackends[] = {
|
|
87
|
+
ma_decoding_backend_vtable *customBackends[] = {
|
|
88
|
+
ma_decoding_backend_libvorbis, ma_decoding_backend_libopus};
|
|
79
89
|
|
|
80
90
|
config.ppCustomBackendVTables = customBackends;
|
|
81
91
|
config.customBackendCount = sizeof(customBackends) / sizeof(customBackends[0]);
|
|
@@ -94,21 +104,28 @@ std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithFilePath(const std::string
|
|
|
94
104
|
return makeAudioBufferFromFloatBuffer(buffer, outputSampleRate, outputChannels);
|
|
95
105
|
}
|
|
96
106
|
|
|
97
|
-
std::shared_ptr<AudioBuffer>
|
|
107
|
+
std::shared_ptr<AudioBuffer>
|
|
108
|
+
AudioDecoder::decodeWithMemoryBlock(const void *data, size_t size, float sampleRate)
|
|
98
109
|
{
|
|
99
110
|
const AudioFormat format = AudioDecoder::detectAudioFormat(data, size);
|
|
100
111
|
if (format == AudioFormat::MP4 || format == AudioFormat::M4A || format == AudioFormat::AAC) {
|
|
112
|
+
#if !RN_AUDIO_API_FFMPEG_DISABLED
|
|
101
113
|
auto buffer = ffmpegdecoder::decodeWithMemoryBlock(data, size, static_cast<int>(sampleRate));
|
|
102
114
|
if (buffer == nullptr) {
|
|
103
115
|
NSLog(@"Failed to decode with FFmpeg");
|
|
104
116
|
return nullptr;
|
|
105
117
|
}
|
|
106
118
|
return buffer;
|
|
119
|
+
#else
|
|
120
|
+
NSLog(@"FFmpeg is disabled, cannot decode memory block");
|
|
121
|
+
return nullptr;
|
|
122
|
+
#endif // RN_AUDIO_API_FFMPEG_DISABLED
|
|
107
123
|
}
|
|
108
124
|
ma_decoder decoder;
|
|
109
125
|
ma_decoder_config config = ma_decoder_config_init(ma_format_f32, 0, static_cast<int>(sampleRate));
|
|
110
126
|
|
|
111
|
-
ma_decoding_backend_vtable *customBackends[] = {
|
|
127
|
+
ma_decoding_backend_vtable *customBackends[] = {
|
|
128
|
+
ma_decoding_backend_libvorbis, ma_decoding_backend_libopus};
|
|
112
129
|
|
|
113
130
|
config.ppCustomBackendVTables = customBackends;
|
|
114
131
|
config.customBackendCount = sizeof(customBackends) / sizeof(customBackends[0]);
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#ifndef __OBJC__ // when compiled as C++
|
|
4
|
+
typedef struct objc_object AVAudioFile;
|
|
5
|
+
typedef struct objc_object NSURL;
|
|
6
|
+
typedef struct objc_object AudioBufferList;
|
|
7
|
+
#endif // __OBJC__
|
|
8
|
+
|
|
9
|
+
namespace audioapi {
|
|
10
|
+
|
|
11
|
+
class AudioFileProperties;
|
|
12
|
+
|
|
13
|
+
namespace ios::fileoptions {
|
|
14
|
+
|
|
15
|
+
AudioFormatID getFormat(const std::shared_ptr<AudioFileProperties> &properties);
|
|
16
|
+
NSInteger getQuality(const std::shared_ptr<AudioFileProperties> &properties);
|
|
17
|
+
NSInteger getFlacCompressionLevel(const std::shared_ptr<AudioFileProperties> &properties);
|
|
18
|
+
NSString *getFileExtension(const std::shared_ptr<AudioFileProperties> &properties);
|
|
19
|
+
NSInteger getBitDepth(const std::shared_ptr<AudioFileProperties> &properties);
|
|
20
|
+
float getSampleRate(const std::shared_ptr<AudioFileProperties> &properties);
|
|
21
|
+
|
|
22
|
+
NSDictionary *getFileSettings(const std::shared_ptr<AudioFileProperties> &properties);
|
|
23
|
+
NSURL *getFileURL(const std::shared_ptr<AudioFileProperties> &properties);
|
|
24
|
+
NSSearchPathDirectory getDirectory(const std::shared_ptr<AudioFileProperties> &properties);
|
|
25
|
+
|
|
26
|
+
NSString *getDateString();
|
|
27
|
+
NSString *getTimestampString();
|
|
28
|
+
|
|
29
|
+
} // namespace ios::fileoptions
|
|
30
|
+
|
|
31
|
+
} // namespace audioapi
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
#import <AVFoundation/AVFoundation.h>
|
|
2
|
+
#import <Foundation/Foundation.h>
|
|
3
|
+
|
|
4
|
+
#include <audioapi/ios/core/utils/FileOptions.h>
|
|
5
|
+
#include <audioapi/utils/AudioFileProperties.h>
|
|
6
|
+
|
|
7
|
+
namespace audioapi::ios::fileoptions {
|
|
8
|
+
|
|
9
|
+
AudioFormatID getFormat(const std::shared_ptr<AudioFileProperties> &properties)
|
|
10
|
+
{
|
|
11
|
+
switch (properties->format) {
|
|
12
|
+
case AudioFileProperties::Format::WAV:
|
|
13
|
+
return kAudioFormatLinearPCM;
|
|
14
|
+
|
|
15
|
+
case AudioFileProperties::Format::CAF:
|
|
16
|
+
return kAudioFormatLinearPCM;
|
|
17
|
+
|
|
18
|
+
case AudioFileProperties::Format::M4A:
|
|
19
|
+
return kAudioFormatMPEG4AAC;
|
|
20
|
+
|
|
21
|
+
case AudioFileProperties::Format::FLAC:
|
|
22
|
+
return kAudioFormatFLAC;
|
|
23
|
+
|
|
24
|
+
default:
|
|
25
|
+
return kAudioFormatLinearPCM;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
NSInteger getQuality(const std::shared_ptr<AudioFileProperties> &properties)
|
|
30
|
+
{
|
|
31
|
+
switch (properties->iosAudioQuality) {
|
|
32
|
+
case AudioFileProperties::IOSAudioQuality::Min:
|
|
33
|
+
return AVAudioQualityMin;
|
|
34
|
+
|
|
35
|
+
case AudioFileProperties::IOSAudioQuality::Low:
|
|
36
|
+
return AVAudioQualityLow;
|
|
37
|
+
|
|
38
|
+
case AudioFileProperties::IOSAudioQuality::Medium:
|
|
39
|
+
return AVAudioQualityMedium;
|
|
40
|
+
|
|
41
|
+
case AudioFileProperties::IOSAudioQuality::High:
|
|
42
|
+
return AVAudioQualityHigh;
|
|
43
|
+
|
|
44
|
+
case AudioFileProperties::IOSAudioQuality::Max:
|
|
45
|
+
return AVAudioQualityMax;
|
|
46
|
+
|
|
47
|
+
default:
|
|
48
|
+
return AVAudioQualityMedium;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
NSInteger getFlacCompressionLevel(const std::shared_ptr<AudioFileProperties> &properties)
|
|
53
|
+
{
|
|
54
|
+
return properties->flacCompressionLevel;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
NSString *getFileExtension(const std::shared_ptr<AudioFileProperties> &properties)
|
|
58
|
+
{
|
|
59
|
+
switch (properties->format) {
|
|
60
|
+
case AudioFileProperties::Format::WAV:
|
|
61
|
+
return @"wav";
|
|
62
|
+
|
|
63
|
+
case AudioFileProperties::Format::CAF:
|
|
64
|
+
return @"caf";
|
|
65
|
+
|
|
66
|
+
case AudioFileProperties::Format::M4A:
|
|
67
|
+
return @"m4a";
|
|
68
|
+
|
|
69
|
+
case AudioFileProperties::Format::FLAC:
|
|
70
|
+
return @"flac";
|
|
71
|
+
|
|
72
|
+
default:
|
|
73
|
+
return @"wav";
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
NSInteger getBitDepth(const std::shared_ptr<AudioFileProperties> &properties)
|
|
78
|
+
{
|
|
79
|
+
switch (properties->bitDepth) {
|
|
80
|
+
case AudioFileProperties::BitDepth::Bit16:
|
|
81
|
+
return 16;
|
|
82
|
+
|
|
83
|
+
case AudioFileProperties::BitDepth::Bit24:
|
|
84
|
+
return 24;
|
|
85
|
+
|
|
86
|
+
case AudioFileProperties::BitDepth::Bit32:
|
|
87
|
+
return 32;
|
|
88
|
+
|
|
89
|
+
default:
|
|
90
|
+
return 32;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
NSDictionary *getFileSettings(const std::shared_ptr<AudioFileProperties> &properties)
|
|
95
|
+
{
|
|
96
|
+
AudioFormatID format = getFormat(properties);
|
|
97
|
+
NSMutableDictionary *settings = [NSMutableDictionary dictionary];
|
|
98
|
+
|
|
99
|
+
settings[AVFormatIDKey] = @(format);
|
|
100
|
+
settings[AVSampleRateKey] = @(properties->sampleRate);
|
|
101
|
+
settings[AVNumberOfChannelsKey] = @(properties->channelCount);
|
|
102
|
+
settings[AVEncoderAudioQualityKey] = @(getQuality(properties));
|
|
103
|
+
|
|
104
|
+
if (format == kAudioFormatMPEG4AAC) {
|
|
105
|
+
settings[AVEncoderBitRateKey] = @(properties->bitRate);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
if (format == kAudioFormatLinearPCM) {
|
|
109
|
+
NSInteger bitDepth = getBitDepth(properties);
|
|
110
|
+
|
|
111
|
+
settings[AVLinearPCMBitDepthKey] = @(bitDepth);
|
|
112
|
+
settings[AVLinearPCMIsFloatKey] = @(bitDepth == 32);
|
|
113
|
+
settings[AVLinearPCMIsBigEndianKey] = @(NO);
|
|
114
|
+
settings[AVLinearPCMIsNonInterleaved] = @(NO);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
if (format == kAudioFormatFLAC) {
|
|
118
|
+
settings[@"FLACCompressionLevel"] = @(getFlacCompressionLevel(properties));
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
return settings;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
NSURL *getFileURL(const std::shared_ptr<AudioFileProperties> &properties)
|
|
125
|
+
{
|
|
126
|
+
NSError *error = nil;
|
|
127
|
+
|
|
128
|
+
NSSearchPathDirectory directory = getDirectory(properties);
|
|
129
|
+
NSString *subDirectory = [NSString stringWithUTF8String:properties->subDirectory.c_str()];
|
|
130
|
+
|
|
131
|
+
NSURL *baseURL = [[[NSFileManager defaultManager] URLsForDirectory:directory
|
|
132
|
+
inDomains:NSUserDomainMask] firstObject];
|
|
133
|
+
NSURL *directoryURL = [baseURL URLByAppendingPathComponent:subDirectory isDirectory:YES];
|
|
134
|
+
|
|
135
|
+
[[NSFileManager defaultManager] createDirectoryAtURL:directoryURL
|
|
136
|
+
withIntermediateDirectories:YES
|
|
137
|
+
attributes:nil
|
|
138
|
+
error:&error];
|
|
139
|
+
|
|
140
|
+
if (error != nil) {
|
|
141
|
+
NSLog(@"Error creating directory for audio recordings: %@", [error debugDescription]);
|
|
142
|
+
directoryURL = baseURL;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
NSString *fileNamePrefix = [NSString stringWithUTF8String:properties->fileNamePrefix.c_str()];
|
|
146
|
+
NSString *timestamp = getTimestampString();
|
|
147
|
+
NSString *fileExtension = getFileExtension(properties);
|
|
148
|
+
|
|
149
|
+
NSString *fileName =
|
|
150
|
+
[NSString stringWithFormat:@"%@_%@.%@", fileNamePrefix, timestamp, fileExtension];
|
|
151
|
+
return [directoryURL URLByAppendingPathComponent:fileName];
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
NSSearchPathDirectory getDirectory(const std::shared_ptr<AudioFileProperties> &properties)
|
|
155
|
+
{
|
|
156
|
+
switch (properties->directory) {
|
|
157
|
+
case AudioFileProperties::FileDirectory::Document:
|
|
158
|
+
return NSDocumentDirectory;
|
|
159
|
+
|
|
160
|
+
case AudioFileProperties::FileDirectory::Cache:
|
|
161
|
+
return NSCachesDirectory;
|
|
162
|
+
|
|
163
|
+
default:
|
|
164
|
+
return NSCachesDirectory;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
NSString *getTimestampString()
|
|
169
|
+
{
|
|
170
|
+
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
|
|
171
|
+
fmt.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
|
|
172
|
+
fmt.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"]; // or local if you prefer
|
|
173
|
+
fmt.dateFormat = @"yyyyMMdd_HHmmss_SSS";
|
|
174
|
+
return [fmt stringFromDate:[NSDate date]];
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
} // namespace audioapi::ios::fileoptions
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
|
+
#include <audioapi/core/utils/AudioFileWriter.h>
|
|
4
|
+
#include <audioapi/utils/Result.hpp>
|
|
3
5
|
#include <memory>
|
|
4
6
|
#include <string>
|
|
5
7
|
#include <tuple>
|
|
@@ -15,30 +17,30 @@ typedef struct objc_object AVAudioConverter;
|
|
|
15
17
|
|
|
16
18
|
namespace audioapi {
|
|
17
19
|
|
|
18
|
-
class
|
|
20
|
+
class AudioFileProperties;
|
|
21
|
+
class AudioEventHandlerRegistry;
|
|
19
22
|
|
|
20
|
-
class
|
|
23
|
+
class IOSFileWriter : public AudioFileWriter {
|
|
21
24
|
public:
|
|
22
|
-
|
|
23
|
-
|
|
25
|
+
IOSFileWriter(
|
|
26
|
+
const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
|
|
27
|
+
const std::shared_ptr<AudioFileProperties> &fileProperties);
|
|
28
|
+
~IOSFileWriter();
|
|
24
29
|
|
|
25
|
-
std::string openFile(
|
|
26
|
-
|
|
30
|
+
Result<std::string, std::string> openFile(
|
|
31
|
+
AVAudioFormat *bufferFormat,
|
|
32
|
+
size_t maxInputBufferLength);
|
|
33
|
+
Result<std::tuple<double, double>, std::string> closeFile() override;
|
|
27
34
|
|
|
28
35
|
bool writeAudioData(const AudioBufferList *audioBufferList, int numFrames);
|
|
36
|
+
double getCurrentDuration() const override;
|
|
29
37
|
|
|
30
|
-
|
|
38
|
+
std::string getFilePath() const override;
|
|
31
39
|
|
|
32
|
-
|
|
40
|
+
protected:
|
|
33
41
|
size_t converterInputBufferSize_;
|
|
34
42
|
size_t converterOutputBufferSize_;
|
|
35
|
-
std::atomic<size_t> framesWritten_{0};
|
|
36
43
|
|
|
37
|
-
NSString *getISODateStringForDirectory();
|
|
38
|
-
NSString *getTimestampForFilename();
|
|
39
|
-
NSURL *getFileURL();
|
|
40
|
-
|
|
41
|
-
std::shared_ptr<IOSAudioFileOptions> fileOptions_;
|
|
42
44
|
AVAudioFile *audioFile_;
|
|
43
45
|
AVAudioFormat *bufferFormat_;
|
|
44
46
|
AVAudioConverter *converter_;
|