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
|
@@ -4,6 +4,23 @@
|
|
|
4
4
|
|
|
5
5
|
@implementation NativeAudioRecorder
|
|
6
6
|
|
|
7
|
+
static inline uint32_t nextPowerOfTwo(uint32_t x)
|
|
8
|
+
{
|
|
9
|
+
if (x == 0) {
|
|
10
|
+
return 1;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
x--;
|
|
14
|
+
x |= x >> 1;
|
|
15
|
+
x |= x >> 2;
|
|
16
|
+
x |= x >> 4;
|
|
17
|
+
x |= x >> 8;
|
|
18
|
+
x |= x >> 16;
|
|
19
|
+
x++;
|
|
20
|
+
|
|
21
|
+
return x;
|
|
22
|
+
}
|
|
23
|
+
|
|
7
24
|
- (instancetype)initWithReceiverBlock:(AudioReceiverBlock)receiverBlock
|
|
8
25
|
{
|
|
9
26
|
if (self = [super init]) {
|
|
@@ -25,9 +42,36 @@
|
|
|
25
42
|
return self;
|
|
26
43
|
}
|
|
27
44
|
|
|
45
|
+
// Note: this method should be called only after the session is activated
|
|
28
46
|
- (AVAudioFormat *)getInputFormat
|
|
29
47
|
{
|
|
30
|
-
|
|
48
|
+
AVAudioFormat *format = [AudioEngine.sharedInstance.audioEngine.inputNode inputFormatForBus:0];
|
|
49
|
+
|
|
50
|
+
if (format.sampleRate == 0 || format.channelCount == 0) {
|
|
51
|
+
AudioSessionManager *sessionManager = [AudioSessionManager sharedInstance];
|
|
52
|
+
|
|
53
|
+
format = [[AVAudioFormat alloc]
|
|
54
|
+
initStandardFormatWithSampleRate:[[sessionManager getDevicePreferredSampleRate] doubleValue]
|
|
55
|
+
channels:[[sessionManager getDevicePreferredInputChannelCount]
|
|
56
|
+
intValue]];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return format;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
- (int)getBufferSize
|
|
63
|
+
{
|
|
64
|
+
// NOTE: this method should be called only after the session is activated
|
|
65
|
+
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
|
|
66
|
+
|
|
67
|
+
// TMPfix: it seems that buffer duration in some cases (background/device change) can switch
|
|
68
|
+
// to longer values, exceeding buffer size predicted after session start
|
|
69
|
+
// since it is just a couple of buffers we can set min value of 200ms
|
|
70
|
+
// to enforce we always have enough frames allocated to pass further down the pipeline
|
|
71
|
+
float bufferDuration = MAX(audioSession.IOBufferDuration, 0.2);
|
|
72
|
+
|
|
73
|
+
// IOS returns buffer duration rounded, but expects the buffer size to be power of two in runtime
|
|
74
|
+
return nextPowerOfTwo(ceil(bufferDuration * audioSession.sampleRate));
|
|
31
75
|
}
|
|
32
76
|
|
|
33
77
|
- (void)start
|
|
@@ -35,14 +79,15 @@
|
|
|
35
79
|
AudioEngine *audioEngine = [AudioEngine sharedInstance];
|
|
36
80
|
assert(audioEngine != nil);
|
|
37
81
|
|
|
38
|
-
// AudioEngine allows us to attach and connect nodes at runtime but with few
|
|
39
|
-
// in this case if it is the first recorder node and player
|
|
40
|
-
// It can be optimized by tracking if
|
|
82
|
+
// AudioEngine allows us to attach and connect nodes at runtime but with few
|
|
83
|
+
// limitations in this case if it is the first recorder node and player
|
|
84
|
+
// started the engine we need to restart. It can be optimized by tracking if
|
|
85
|
+
// we haven't break rules of at runtime modifications from docs
|
|
41
86
|
// https://developer.apple.com/documentation/avfaudio/avaudioengine?language=objc
|
|
42
87
|
//
|
|
43
88
|
// Currently we are restarting because we do not see any significant performance issue and case when
|
|
44
89
|
// you will need to start and stop recorder very frequently
|
|
45
|
-
[audioEngine
|
|
90
|
+
[audioEngine stopIfNecessary];
|
|
46
91
|
[audioEngine attachInputNode:self.sinkNode];
|
|
47
92
|
[audioEngine startIfNecessary];
|
|
48
93
|
}
|
|
@@ -52,7 +97,30 @@
|
|
|
52
97
|
AudioEngine *audioEngine = [AudioEngine sharedInstance];
|
|
53
98
|
assert(audioEngine != nil);
|
|
54
99
|
[audioEngine detachInputNode];
|
|
55
|
-
[audioEngine
|
|
100
|
+
[audioEngine stopIfPossible];
|
|
101
|
+
|
|
102
|
+
// This makes sure that the engine releases the input properly when we no longer need it
|
|
103
|
+
// (i.e. no more misleading dot)
|
|
104
|
+
// Restart only if is not running to avoid interruptions of playback
|
|
105
|
+
if ([audioEngine getState] != AudioEngineStateRunning) {
|
|
106
|
+
[audioEngine restartAudioEngine];
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
- (void)pause
|
|
111
|
+
{
|
|
112
|
+
AudioEngine *audioEngine = [AudioEngine sharedInstance];
|
|
113
|
+
assert(audioEngine != nil);
|
|
114
|
+
|
|
115
|
+
[audioEngine pauseIfNecessary];
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
- (void)resume
|
|
119
|
+
{
|
|
120
|
+
AudioEngine *audioEngine = [AudioEngine sharedInstance];
|
|
121
|
+
assert(audioEngine != nil);
|
|
122
|
+
|
|
123
|
+
[audioEngine startIfNecessary];
|
|
56
124
|
}
|
|
57
125
|
|
|
58
126
|
- (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
|
|
|
@@ -59,22 +61,31 @@ std::shared_ptr<AudioBuffer> AudioDecoder::makeAudioBufferFromFloatBuffer(
|
|
|
59
61
|
channelData[i] = buffer[i * outputChannels + ch];
|
|
60
62
|
}
|
|
61
63
|
}
|
|
64
|
+
|
|
62
65
|
return std::make_shared<AudioBuffer>(audioBus);
|
|
63
66
|
}
|
|
64
67
|
|
|
65
|
-
std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithFilePath(
|
|
68
|
+
std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithFilePath(
|
|
69
|
+
const std::string &path,
|
|
70
|
+
float sampleRate)
|
|
66
71
|
{
|
|
67
72
|
if (AudioDecoder::pathHasExtension(path, {".mp4", ".m4a", ".aac"})) {
|
|
73
|
+
#if !RN_AUDIO_API_FFMPEG_DISABLED
|
|
68
74
|
auto buffer = ffmpegdecoder::decodeWithFilePath(path, static_cast<int>(sampleRate));
|
|
69
75
|
if (buffer == nullptr) {
|
|
70
76
|
NSLog(@"Failed to decode with FFmpeg: %s", path.c_str());
|
|
71
77
|
return nullptr;
|
|
72
78
|
}
|
|
73
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
|
|
74
84
|
}
|
|
75
85
|
ma_decoder decoder;
|
|
76
86
|
ma_decoder_config config = ma_decoder_config_init(ma_format_f32, 0, static_cast<int>(sampleRate));
|
|
77
|
-
ma_decoding_backend_vtable *customBackends[] = {
|
|
87
|
+
ma_decoding_backend_vtable *customBackends[] = {
|
|
88
|
+
ma_decoding_backend_libvorbis, ma_decoding_backend_libopus};
|
|
78
89
|
|
|
79
90
|
config.ppCustomBackendVTables = customBackends;
|
|
80
91
|
config.customBackendCount = sizeof(customBackends) / sizeof(customBackends[0]);
|
|
@@ -93,21 +104,28 @@ std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithFilePath(const std::string
|
|
|
93
104
|
return makeAudioBufferFromFloatBuffer(buffer, outputSampleRate, outputChannels);
|
|
94
105
|
}
|
|
95
106
|
|
|
96
|
-
std::shared_ptr<AudioBuffer>
|
|
107
|
+
std::shared_ptr<AudioBuffer>
|
|
108
|
+
AudioDecoder::decodeWithMemoryBlock(const void *data, size_t size, float sampleRate)
|
|
97
109
|
{
|
|
98
110
|
const AudioFormat format = AudioDecoder::detectAudioFormat(data, size);
|
|
99
111
|
if (format == AudioFormat::MP4 || format == AudioFormat::M4A || format == AudioFormat::AAC) {
|
|
112
|
+
#if !RN_AUDIO_API_FFMPEG_DISABLED
|
|
100
113
|
auto buffer = ffmpegdecoder::decodeWithMemoryBlock(data, size, static_cast<int>(sampleRate));
|
|
101
114
|
if (buffer == nullptr) {
|
|
102
115
|
NSLog(@"Failed to decode with FFmpeg");
|
|
103
116
|
return nullptr;
|
|
104
117
|
}
|
|
105
118
|
return buffer;
|
|
119
|
+
#else
|
|
120
|
+
NSLog(@"FFmpeg is disabled, cannot decode memory block");
|
|
121
|
+
return nullptr;
|
|
122
|
+
#endif // RN_AUDIO_API_FFMPEG_DISABLED
|
|
106
123
|
}
|
|
107
124
|
ma_decoder decoder;
|
|
108
125
|
ma_decoder_config config = ma_decoder_config_init(ma_format_f32, 0, static_cast<int>(sampleRate));
|
|
109
126
|
|
|
110
|
-
ma_decoding_backend_vtable *customBackends[] = {
|
|
127
|
+
ma_decoding_backend_vtable *customBackends[] = {
|
|
128
|
+
ma_decoding_backend_libvorbis, ma_decoding_backend_libopus};
|
|
111
129
|
|
|
112
130
|
config.ppCustomBackendVTables = customBackends;
|
|
113
131
|
config.customBackendCount = sizeof(customBackends) / sizeof(customBackends[0]);
|
|
@@ -0,0 +1,33 @@
|
|
|
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
|
+
#include <memory>
|
|
10
|
+
|
|
11
|
+
namespace audioapi {
|
|
12
|
+
|
|
13
|
+
class AudioFileProperties;
|
|
14
|
+
|
|
15
|
+
namespace ios::fileoptions {
|
|
16
|
+
|
|
17
|
+
AudioFormatID getFormat(const std::shared_ptr<AudioFileProperties> &properties);
|
|
18
|
+
NSInteger getQuality(const std::shared_ptr<AudioFileProperties> &properties);
|
|
19
|
+
NSInteger getFlacCompressionLevel(const std::shared_ptr<AudioFileProperties> &properties);
|
|
20
|
+
NSString *getFileExtension(const std::shared_ptr<AudioFileProperties> &properties);
|
|
21
|
+
NSInteger getBitDepth(const std::shared_ptr<AudioFileProperties> &properties);
|
|
22
|
+
float getSampleRate(const std::shared_ptr<AudioFileProperties> &properties);
|
|
23
|
+
|
|
24
|
+
NSDictionary *getFileSettings(const std::shared_ptr<AudioFileProperties> &properties);
|
|
25
|
+
NSURL *getFileURL(const std::shared_ptr<AudioFileProperties> &properties);
|
|
26
|
+
NSSearchPathDirectory getDirectory(const std::shared_ptr<AudioFileProperties> &properties);
|
|
27
|
+
|
|
28
|
+
NSString *getDateString();
|
|
29
|
+
NSString *getTimestampString();
|
|
30
|
+
|
|
31
|
+
} // namespace ios::fileoptions
|
|
32
|
+
|
|
33
|
+
} // namespace audioapi
|
|
@@ -0,0 +1,195 @@
|
|
|
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
|
+
/// @brief Maps AudioFileProperties to iOS AVFoundation AudioFormatID.
|
|
10
|
+
/// @param properties Shared pointer to AudioFileProperties.
|
|
11
|
+
/// @returns Corresponding AudioFormatID for AVFoundation.
|
|
12
|
+
AudioFormatID getFormat(const std::shared_ptr<AudioFileProperties> &properties)
|
|
13
|
+
{
|
|
14
|
+
switch (properties->format) {
|
|
15
|
+
case AudioFileProperties::Format::WAV:
|
|
16
|
+
return kAudioFormatLinearPCM;
|
|
17
|
+
|
|
18
|
+
case AudioFileProperties::Format::CAF:
|
|
19
|
+
return kAudioFormatLinearPCM;
|
|
20
|
+
|
|
21
|
+
case AudioFileProperties::Format::M4A:
|
|
22
|
+
return kAudioFormatMPEG4AAC;
|
|
23
|
+
|
|
24
|
+
case AudioFileProperties::Format::FLAC:
|
|
25
|
+
return kAudioFormatFLAC;
|
|
26
|
+
|
|
27
|
+
default:
|
|
28
|
+
return kAudioFormatLinearPCM;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/// @brief Maps AudioFileProperties to iOS AVFoundation audio quality settings.
|
|
33
|
+
/// @param properties Shared pointer to AudioFileProperties.
|
|
34
|
+
/// @returns Corresponding NSInteger value for AVAudioQuality.
|
|
35
|
+
NSInteger getQuality(const std::shared_ptr<AudioFileProperties> &properties)
|
|
36
|
+
{
|
|
37
|
+
switch (properties->iosAudioQuality) {
|
|
38
|
+
case AudioFileProperties::IOSAudioQuality::Min:
|
|
39
|
+
return AVAudioQualityMin;
|
|
40
|
+
|
|
41
|
+
case AudioFileProperties::IOSAudioQuality::Low:
|
|
42
|
+
return AVAudioQualityLow;
|
|
43
|
+
|
|
44
|
+
case AudioFileProperties::IOSAudioQuality::Medium:
|
|
45
|
+
return AVAudioQualityMedium;
|
|
46
|
+
|
|
47
|
+
case AudioFileProperties::IOSAudioQuality::High:
|
|
48
|
+
return AVAudioQualityHigh;
|
|
49
|
+
|
|
50
|
+
case AudioFileProperties::IOSAudioQuality::Max:
|
|
51
|
+
return AVAudioQualityMax;
|
|
52
|
+
|
|
53
|
+
default:
|
|
54
|
+
return AVAudioQualityMedium;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/// @brief Retrieves the FLAC compression level from AudioFileProperties.
|
|
59
|
+
/// @param properties Shared pointer to AudioFileProperties.
|
|
60
|
+
/// @returns NSInteger representing the FLAC compression level.
|
|
61
|
+
NSInteger getFlacCompressionLevel(const std::shared_ptr<AudioFileProperties> &properties)
|
|
62
|
+
{
|
|
63
|
+
return properties->flacCompressionLevel;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/// @brief Retrieves the file extension based on AudioFileProperties format.
|
|
67
|
+
/// @param properties Shared pointer to AudioFileProperties.
|
|
68
|
+
/// @returns NSString representing the file extension.
|
|
69
|
+
NSString *getFileExtension(const std::shared_ptr<AudioFileProperties> &properties)
|
|
70
|
+
{
|
|
71
|
+
switch (properties->format) {
|
|
72
|
+
case AudioFileProperties::Format::WAV:
|
|
73
|
+
return @"wav";
|
|
74
|
+
|
|
75
|
+
case AudioFileProperties::Format::CAF:
|
|
76
|
+
return @"caf";
|
|
77
|
+
|
|
78
|
+
case AudioFileProperties::Format::M4A:
|
|
79
|
+
return @"m4a";
|
|
80
|
+
|
|
81
|
+
case AudioFileProperties::Format::FLAC:
|
|
82
|
+
return @"flac";
|
|
83
|
+
|
|
84
|
+
default:
|
|
85
|
+
return @"wav";
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/// @brief Retrieves the bit depth from AudioFileProperties.
|
|
90
|
+
/// @param properties Shared pointer to AudioFileProperties.
|
|
91
|
+
/// @returns NSInteger representing the bit depth.
|
|
92
|
+
NSInteger getBitDepth(const std::shared_ptr<AudioFileProperties> &properties)
|
|
93
|
+
{
|
|
94
|
+
switch (properties->bitDepth) {
|
|
95
|
+
case AudioFileProperties::BitDepth::Bit16:
|
|
96
|
+
return 16;
|
|
97
|
+
|
|
98
|
+
case AudioFileProperties::BitDepth::Bit24:
|
|
99
|
+
return 24;
|
|
100
|
+
|
|
101
|
+
case AudioFileProperties::BitDepth::Bit32:
|
|
102
|
+
return 32;
|
|
103
|
+
|
|
104
|
+
default:
|
|
105
|
+
return 32;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/// @brief Constructs AVFoundation file settings dictionary from AudioFileProperties.
|
|
110
|
+
/// @param properties Shared pointer to AudioFileProperties.
|
|
111
|
+
/// @returns NSDictionary containing AVFoundation audio file settings.
|
|
112
|
+
NSDictionary *getFileSettings(const std::shared_ptr<AudioFileProperties> &properties)
|
|
113
|
+
{
|
|
114
|
+
AudioFormatID format = getFormat(properties);
|
|
115
|
+
NSMutableDictionary *settings = [NSMutableDictionary dictionary];
|
|
116
|
+
|
|
117
|
+
settings[AVFormatIDKey] = @(format);
|
|
118
|
+
settings[AVSampleRateKey] = @(properties->sampleRate);
|
|
119
|
+
settings[AVNumberOfChannelsKey] = @(properties->channelCount);
|
|
120
|
+
settings[AVEncoderAudioQualityKey] = @(getQuality(properties));
|
|
121
|
+
|
|
122
|
+
if (format == kAudioFormatMPEG4AAC) {
|
|
123
|
+
settings[AVEncoderBitRateKey] = @(properties->bitRate);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
if (format == kAudioFormatLinearPCM) {
|
|
127
|
+
NSInteger bitDepth = getBitDepth(properties);
|
|
128
|
+
|
|
129
|
+
settings[AVLinearPCMBitDepthKey] = @(bitDepth);
|
|
130
|
+
settings[AVLinearPCMIsFloatKey] = @(bitDepth == 32);
|
|
131
|
+
settings[AVLinearPCMIsBigEndianKey] = @(NO);
|
|
132
|
+
settings[AVLinearPCMIsNonInterleaved] = @(NO);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
if (format == kAudioFormatFLAC) {
|
|
136
|
+
settings[@"FLACCompressionLevel"] = @(getFlacCompressionLevel(properties));
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
return settings;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
NSURL *getFileURL(const std::shared_ptr<AudioFileProperties> &properties)
|
|
143
|
+
{
|
|
144
|
+
NSError *error = nil;
|
|
145
|
+
|
|
146
|
+
NSSearchPathDirectory directory = getDirectory(properties);
|
|
147
|
+
NSString *subDirectory = [NSString stringWithUTF8String:properties->subDirectory.c_str()];
|
|
148
|
+
|
|
149
|
+
NSURL *baseURL = [[[NSFileManager defaultManager] URLsForDirectory:directory
|
|
150
|
+
inDomains:NSUserDomainMask] firstObject];
|
|
151
|
+
NSURL *directoryURL = [baseURL URLByAppendingPathComponent:subDirectory isDirectory:YES];
|
|
152
|
+
|
|
153
|
+
[[NSFileManager defaultManager] createDirectoryAtURL:directoryURL
|
|
154
|
+
withIntermediateDirectories:YES
|
|
155
|
+
attributes:nil
|
|
156
|
+
error:&error];
|
|
157
|
+
|
|
158
|
+
if (error != nil) {
|
|
159
|
+
NSLog(@"Error creating directory for audio recordings: %@", [error debugDescription]);
|
|
160
|
+
directoryURL = baseURL;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
NSString *fileNamePrefix = [NSString stringWithUTF8String:properties->fileNamePrefix.c_str()];
|
|
164
|
+
NSString *timestamp = getTimestampString();
|
|
165
|
+
NSString *fileExtension = getFileExtension(properties);
|
|
166
|
+
|
|
167
|
+
NSString *fileName =
|
|
168
|
+
[NSString stringWithFormat:@"%@_%@.%@", fileNamePrefix, timestamp, fileExtension];
|
|
169
|
+
return [directoryURL URLByAppendingPathComponent:fileName];
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
NSSearchPathDirectory getDirectory(const std::shared_ptr<AudioFileProperties> &properties)
|
|
173
|
+
{
|
|
174
|
+
switch (properties->directory) {
|
|
175
|
+
case AudioFileProperties::FileDirectory::Document:
|
|
176
|
+
return NSDocumentDirectory;
|
|
177
|
+
|
|
178
|
+
case AudioFileProperties::FileDirectory::Cache:
|
|
179
|
+
return NSCachesDirectory;
|
|
180
|
+
|
|
181
|
+
default:
|
|
182
|
+
return NSCachesDirectory;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
NSString *getTimestampString()
|
|
187
|
+
{
|
|
188
|
+
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
|
|
189
|
+
fmt.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
|
|
190
|
+
fmt.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"]; // or local if you prefer
|
|
191
|
+
fmt.dateFormat = @"yyyyMMdd_HHmmss_SSS";
|
|
192
|
+
return [fmt stringFromDate:[NSDate date]];
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
} // namespace audioapi::ios::fileoptions
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <audioapi/core/utils/AudioFileWriter.h>
|
|
4
|
+
#include <audioapi/utils/Result.hpp>
|
|
5
|
+
#include <memory>
|
|
6
|
+
#include <string>
|
|
7
|
+
#include <tuple>
|
|
8
|
+
|
|
9
|
+
#ifndef __OBJC__ // when compiled as C++
|
|
10
|
+
typedef struct objc_object NSURL;
|
|
11
|
+
typedef struct objc_object NSString;
|
|
12
|
+
typedef struct objc_object AVAudioFile;
|
|
13
|
+
typedef struct objc_object AVAudioFormat;
|
|
14
|
+
typedef struct objc_object AudioBufferList;
|
|
15
|
+
typedef struct objc_object AVAudioConverter;
|
|
16
|
+
#endif // __OBJC__
|
|
17
|
+
|
|
18
|
+
namespace audioapi {
|
|
19
|
+
|
|
20
|
+
class AudioFileProperties;
|
|
21
|
+
class AudioEventHandlerRegistry;
|
|
22
|
+
|
|
23
|
+
class IOSFileWriter : public AudioFileWriter {
|
|
24
|
+
public:
|
|
25
|
+
IOSFileWriter(
|
|
26
|
+
const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
|
|
27
|
+
const std::shared_ptr<AudioFileProperties> &fileProperties);
|
|
28
|
+
~IOSFileWriter();
|
|
29
|
+
|
|
30
|
+
Result<std::string, std::string> openFile(
|
|
31
|
+
AVAudioFormat *bufferFormat,
|
|
32
|
+
size_t maxInputBufferLength);
|
|
33
|
+
Result<std::tuple<double, double>, std::string> closeFile() override;
|
|
34
|
+
|
|
35
|
+
bool writeAudioData(const AudioBufferList *audioBufferList, int numFrames);
|
|
36
|
+
double getCurrentDuration() const override;
|
|
37
|
+
|
|
38
|
+
std::string getFilePath() const override;
|
|
39
|
+
|
|
40
|
+
protected:
|
|
41
|
+
size_t converterInputBufferSize_;
|
|
42
|
+
size_t converterOutputBufferSize_;
|
|
43
|
+
|
|
44
|
+
AVAudioFile *audioFile_;
|
|
45
|
+
AVAudioFormat *bufferFormat_;
|
|
46
|
+
AVAudioConverter *converter_;
|
|
47
|
+
NSURL *fileURL_;
|
|
48
|
+
|
|
49
|
+
AVAudioPCMBuffer *converterInputBuffer_;
|
|
50
|
+
AVAudioPCMBuffer *converterOutputBuffer_;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
} // namespace audioapi
|