react-native-audio-api 0.11.0-alpha.1 → 0.11.0-alpha.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -11
- package/RNAudioAPI.podspec +25 -18
- package/android/build.gradle +41 -5
- package/android/src/main/cpp/audioapi/CMakeLists.txt +6 -3
- package/android/src/main/cpp/audioapi/android/AudioAPIModule.cpp +10 -16
- package/android/src/main/cpp/audioapi/android/OnLoad.cpp +1 -2
- package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.cpp +315 -84
- package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +23 -23
- package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +13 -20
- package/android/src/main/cpp/audioapi/android/core/utils/AndroidFileWriterBackend.h +14 -18
- package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.cpp +72 -89
- package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.h +12 -23
- package/android/src/main/cpp/audioapi/android/core/utils/AudioDecoder.cpp +46 -58
- package/android/src/main/cpp/audioapi/android/core/utils/FileOptions.cpp +83 -0
- package/android/src/main/cpp/audioapi/android/core/utils/FileOptions.h +22 -0
- package/android/src/main/cpp/audioapi/android/core/utils/MiniaudioImplementation.cpp +5 -0
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.cpp +363 -299
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.h +48 -91
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/ptrs.hpp +56 -0
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/utils.cpp +114 -0
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/utils.h +34 -0
- package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.cpp +132 -105
- package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.h +9 -16
- package/android/src/main/cpp/audioapi/android/system/NativeFileInfo.hpp +2 -1
- package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +189 -14
- package/android/src/main/java/com/swmansion/audioapi/core/NativeAudioPlayer.kt +10 -8
- package/android/src/main/java/com/swmansion/audioapi/core/NativeAudioRecorder.kt +10 -8
- package/android/src/main/java/com/swmansion/audioapi/system/AudioFocusListener.kt +5 -2
- package/android/src/main/java/com/swmansion/audioapi/system/CentralizedForegroundService.kt +128 -0
- package/android/src/main/java/com/swmansion/audioapi/system/ForegroundServiceManager.kt +116 -0
- package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionManager.kt +115 -107
- package/android/src/main/java/com/swmansion/audioapi/system/PermissionRequestListener.kt +2 -1
- package/android/src/main/java/com/swmansion/audioapi/system/notification/BaseNotification.kt +47 -0
- package/android/src/main/java/com/swmansion/audioapi/system/notification/NotificationRegistry.kt +191 -0
- package/android/src/main/java/com/swmansion/audioapi/system/notification/PlaybackNotification.kt +669 -0
- package/android/src/main/java/com/swmansion/audioapi/system/notification/PlaybackNotificationReceiver.kt +33 -0
- package/android/src/main/java/com/swmansion/audioapi/system/notification/RecordingNotification.kt +303 -0
- package/android/src/main/java/com/swmansion/audioapi/system/notification/RecordingNotificationReceiver.kt +45 -0
- package/android/src/main/java/com/swmansion/audioapi/system/notification/SimpleNotification.kt +119 -0
- package/android/src/main/jniLibs/arm64-v8a/libavcodec.so +0 -0
- package/android/src/main/jniLibs/arm64-v8a/libavformat.so +0 -0
- package/android/src/main/jniLibs/arm64-v8a/libavutil.so +0 -0
- package/android/src/main/jniLibs/arm64-v8a/libswresample.so +0 -0
- package/android/src/main/jniLibs/armeabi-v7a/libavcodec.so +0 -0
- package/android/src/main/jniLibs/armeabi-v7a/libavformat.so +0 -0
- package/android/src/main/jniLibs/armeabi-v7a/libavutil.so +0 -0
- package/android/src/main/jniLibs/armeabi-v7a/libswresample.so +0 -0
- package/android/src/main/jniLibs/x86/libavcodec.so +0 -0
- package/android/src/main/jniLibs/x86/libavformat.so +0 -0
- package/android/src/main/jniLibs/x86/libavutil.so +0 -0
- package/android/src/main/jniLibs/x86/libswresample.so +0 -0
- package/android/src/main/jniLibs/x86_64/libavcodec.so +0 -0
- package/android/src/main/jniLibs/x86_64/libavformat.so +0 -0
- package/android/src/main/jniLibs/x86_64/libavutil.so +0 -0
- package/android/src/main/jniLibs/x86_64/libswresample.so +0 -0
- package/android/src/oldarch/NativeAudioAPIModuleSpec.java +100 -76
- package/common/cpp/audioapi/AudioAPIModuleInstaller.h +45 -70
- package/common/cpp/audioapi/HostObjects/AudioContextHostObject.cpp +20 -22
- package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.cpp +3 -4
- package/common/cpp/audioapi/HostObjects/AudioParamHostObject.cpp +6 -8
- package/common/cpp/audioapi/HostObjects/AudioParamHostObject.h +2 -2
- package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +102 -63
- package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +4 -1
- package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.cpp +25 -31
- package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.h +3 -3
- package/common/cpp/audioapi/HostObjects/WorkletNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/WorkletProcessingNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.cpp +10 -18
- package/common/cpp/audioapi/HostObjects/destinations/AudioDestinationNodeHostObject.h +2 -3
- package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp +18 -30
- package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.cpp +50 -0
- package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.h +20 -0
- package/common/cpp/audioapi/HostObjects/effects/DelayNodeHostObject.cpp +27 -0
- package/common/cpp/audioapi/HostObjects/effects/DelayNodeHostObject.h +21 -0
- package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.cpp +2 -2
- package/common/cpp/audioapi/HostObjects/effects/IIRFilterNodeHostObject.cpp +33 -0
- package/common/cpp/audioapi/HostObjects/effects/IIRFilterNodeHostObject.h +20 -0
- package/common/cpp/audioapi/HostObjects/effects/PeriodicWaveHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.cpp +2 -2
- package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.cpp +6 -12
- package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.h +7 -7
- package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.cpp +98 -50
- package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +5 -2
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.cpp +27 -22
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.h +12 -10
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.cpp +17 -22
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.h +5 -7
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.cpp +25 -11
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.h +8 -8
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.cpp +19 -30
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.h +2 -4
- package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.cpp +7 -11
- package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.cpp +2 -2
- package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.cpp +6 -8
- package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/sources/RecorderAdapterNodeHostObject.h +4 -5
- package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.cpp +6 -2
- package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.h +5 -6
- package/common/cpp/audioapi/HostObjects/sources/WorkletSourceNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/utils/AudioDecoderHostObject.cpp +39 -60
- package/common/cpp/audioapi/HostObjects/utils/AudioStretcherHostObject.cpp +15 -30
- package/common/cpp/audioapi/core/AudioContext.cpp +23 -28
- package/common/cpp/audioapi/core/AudioContext.h +6 -3
- package/common/cpp/audioapi/core/AudioNode.cpp +17 -19
- package/common/cpp/audioapi/core/AudioNode.h +19 -8
- package/common/cpp/audioapi/core/AudioParam.cpp +68 -100
- package/common/cpp/audioapi/core/AudioParam.h +20 -12
- package/common/cpp/audioapi/core/BaseAudioContext.cpp +52 -34
- package/common/cpp/audioapi/core/BaseAudioContext.h +26 -14
- package/common/cpp/audioapi/core/OfflineAudioContext.cpp +12 -17
- package/common/cpp/audioapi/core/OfflineAudioContext.h +10 -5
- package/common/cpp/audioapi/core/analysis/AnalyserNode.cpp +13 -21
- package/common/cpp/audioapi/core/analysis/AnalyserNode.h +8 -6
- package/common/cpp/audioapi/core/destinations/AudioDestinationNode.cpp +1 -0
- package/common/cpp/audioapi/core/destinations/AudioDestinationNode.h +5 -3
- package/common/cpp/audioapi/core/effects/BiquadFilterNode.cpp +96 -74
- package/common/cpp/audioapi/core/effects/BiquadFilterNode.h +44 -15
- package/common/cpp/audioapi/core/effects/ConvolverNode.cpp +201 -0
- package/common/cpp/audioapi/core/effects/ConvolverNode.h +64 -0
- package/common/cpp/audioapi/core/effects/DelayNode.cpp +101 -0
- package/common/cpp/audioapi/core/effects/DelayNode.h +39 -0
- package/common/cpp/audioapi/core/effects/GainNode.cpp +1 -0
- package/common/cpp/audioapi/core/effects/GainNode.h +3 -1
- package/common/cpp/audioapi/core/effects/IIRFilterNode.cpp +166 -0
- package/common/cpp/audioapi/core/effects/IIRFilterNode.h +74 -0
- package/common/cpp/audioapi/core/effects/PeriodicWave.cpp +22 -35
- package/common/cpp/audioapi/core/effects/PeriodicWave.h +4 -9
- package/common/cpp/audioapi/core/effects/StereoPannerNode.cpp +4 -5
- package/common/cpp/audioapi/core/effects/StereoPannerNode.h +4 -2
- package/common/cpp/audioapi/core/effects/WorkletNode.cpp +11 -13
- package/common/cpp/audioapi/core/effects/WorkletNode.h +15 -12
- package/common/cpp/audioapi/core/effects/WorkletProcessingNode.cpp +4 -4
- package/common/cpp/audioapi/core/effects/WorkletProcessingNode.h +15 -14
- package/common/cpp/audioapi/core/inputs/AudioRecorder.cpp +66 -36
- package/common/cpp/audioapi/core/inputs/AudioRecorder.h +42 -44
- package/common/cpp/audioapi/core/sources/AudioBuffer.cpp +4 -6
- package/common/cpp/audioapi/core/sources/AudioBuffer.h +4 -7
- package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +48 -57
- package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +37 -34
- package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +55 -17
- package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +35 -28
- package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +41 -49
- package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +8 -6
- package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +29 -24
- package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +6 -6
- package/common/cpp/audioapi/core/sources/ConstantSourceNode.cpp +3 -4
- package/common/cpp/audioapi/core/sources/ConstantSourceNode.h +3 -1
- package/common/cpp/audioapi/core/sources/OscillatorNode.cpp +12 -23
- package/common/cpp/audioapi/core/sources/OscillatorNode.h +6 -4
- package/common/cpp/audioapi/core/sources/RecorderAdapterNode.cpp +43 -16
- package/common/cpp/audioapi/core/sources/RecorderAdapterNode.h +22 -17
- package/common/cpp/audioapi/core/sources/StreamerNode.cpp +105 -87
- package/common/cpp/audioapi/core/sources/StreamerNode.h +67 -33
- package/common/cpp/audioapi/core/sources/WorkletSourceNode.cpp +5 -7
- package/common/cpp/audioapi/core/sources/WorkletSourceNode.h +15 -13
- package/common/cpp/audioapi/core/types/AudioFormat.h +1 -11
- package/common/cpp/audioapi/core/utils/AudioDecoder.h +15 -6
- package/common/cpp/audioapi/core/utils/AudioFileWriter.cpp +41 -0
- package/common/cpp/audioapi/core/utils/AudioFileWriter.h +44 -0
- package/common/cpp/audioapi/core/utils/AudioNodeDestructor.cpp +5 -6
- package/common/cpp/audioapi/core/utils/AudioNodeDestructor.h +7 -10
- package/common/cpp/audioapi/core/utils/AudioNodeManager.cpp +17 -19
- package/common/cpp/audioapi/core/utils/AudioNodeManager.h +8 -11
- package/common/cpp/audioapi/core/utils/AudioParamEventQueue.cpp +3 -3
- package/common/cpp/audioapi/core/utils/AudioParamEventQueue.h +5 -5
- package/common/cpp/audioapi/core/utils/AudioRecorderCallback.cpp +101 -0
- package/common/cpp/audioapi/core/utils/AudioRecorderCallback.h +52 -0
- package/common/cpp/audioapi/core/utils/AudioStretcher.cpp +6 -6
- package/common/cpp/audioapi/core/utils/Constants.h +7 -3
- package/common/cpp/audioapi/core/utils/ParamChangeEvent.cpp +1 -0
- package/common/cpp/audioapi/core/utils/ParamChangeEvent.h +9 -9
- package/common/cpp/audioapi/core/utils/worklets/SafeIncludes.h +33 -34
- package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.cpp +17 -19
- package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.h +23 -19
- package/common/cpp/audioapi/dsp/AudioUtils.cpp +4 -10
- package/common/cpp/audioapi/dsp/AudioUtils.h +1 -1
- package/common/cpp/audioapi/dsp/Convolver.cpp +201 -0
- package/common/cpp/audioapi/dsp/Convolver.h +47 -0
- package/common/cpp/audioapi/dsp/FFT.cpp +1 -27
- package/common/cpp/audioapi/dsp/FFT.h +19 -3
- package/common/cpp/audioapi/dsp/VectorMath.cpp +24 -58
- package/common/cpp/audioapi/dsp/VectorMath.h +35 -8
- package/common/cpp/audioapi/dsp/Windows.cpp +4 -9
- package/common/cpp/audioapi/dsp/Windows.h +24 -23
- package/common/cpp/audioapi/events/AudioEventHandlerRegistry.cpp +12 -17
- package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +45 -40
- package/common/cpp/audioapi/events/IAudioEventHandlerRegistry.h +15 -7
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/avcodec.h +4 -4
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_desc.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_id.h +3 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_par.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/defs.h +3 -0
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/packet.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/smpte_436m.h +254 -0
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/version.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavformat/avformat.h +6 -6
- package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version_major.h +2 -0
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avassert.h +5 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avutil.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/channel_layout.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/csp.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/dict.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/ffversion.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/film_grain_params.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/frame.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hdr_dynamic_vivid_metadata.h +3 -3
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_opencl.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_qsv.h +0 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_vulkan.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/iamf.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/lfg.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/log.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/mathematics.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/opt.h +4 -4
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rational.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rc4.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/refstruct.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/spherical.h +6 -0
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tdrdi.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tx.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/version.h +3 -3
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/video_hint.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libswresample/swresample.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libswresample/version.h +1 -1
- package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64/libavcodec.framework/libavcodec +0 -0
- package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64_x86_64-simulator/libavcodec.framework/libavcodec +0 -0
- package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64/libavformat.framework/libavformat +0 -0
- package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64_x86_64-simulator/libavformat.framework/libavformat +0 -0
- package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64/libavutil.framework/libavutil +0 -0
- package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64_x86_64-simulator/libavutil.framework/libavutil +0 -0
- package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64/libswresample.framework/libswresample +0 -0
- package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64_x86_64-simulator/libswresample.framework/libswresample +0 -0
- package/common/cpp/audioapi/jsi/AudioArrayBuffer.h +4 -5
- package/common/cpp/audioapi/jsi/JsiHostObject.cpp +11 -13
- package/common/cpp/audioapi/jsi/JsiHostObject.h +26 -33
- package/common/cpp/audioapi/jsi/JsiPromise.cpp +34 -67
- package/common/cpp/audioapi/jsi/JsiPromise.h +65 -26
- package/common/cpp/audioapi/jsi/RuntimeLifecycleMonitor.cpp +7 -10
- package/common/cpp/audioapi/jsi/RuntimeLifecycleMonitor.h +1 -3
- package/common/cpp/audioapi/libs/ffmpeg/FFmpegDecoding.cpp +4 -3
- package/common/cpp/audioapi/libs/ffmpeg/relinking.md +24 -0
- package/common/cpp/audioapi/utils/AlignedAllocator.hpp +53 -0
- package/common/cpp/audioapi/utils/AudioArray.cpp +3 -8
- package/common/cpp/audioapi/utils/AudioArray.h +3 -11
- package/common/cpp/audioapi/utils/AudioBus.cpp +79 -149
- package/common/cpp/audioapi/utils/AudioBus.h +17 -14
- package/common/cpp/audioapi/utils/AudioFileProperties.cpp +92 -0
- package/common/cpp/audioapi/utils/AudioFileProperties.h +76 -0
- package/common/cpp/audioapi/utils/Benchmark.hpp +50 -47
- package/common/cpp/audioapi/utils/CircularAudioArray.cpp +6 -18
- package/common/cpp/audioapi/utils/CircularOverflowableAudioArray.cpp +6 -10
- package/common/cpp/audioapi/utils/CircularOverflowableAudioArray.h +2 -2
- package/common/cpp/audioapi/utils/CrossThreadEventScheduler.hpp +12 -9
- package/common/cpp/audioapi/utils/MoveOnlyFunction.hpp +17 -15
- package/common/cpp/audioapi/utils/Result.hpp +323 -0
- package/common/cpp/audioapi/utils/RingBiDirectionalBuffer.hpp +22 -28
- package/common/cpp/audioapi/utils/SpscChannel.hpp +329 -305
- package/common/cpp/audioapi/utils/ThreadPool.hpp +104 -20
- package/common/cpp/audioapi/utils/UnitConversion.h +9 -0
- package/common/cpp/test/CMakeLists.txt +15 -15
- package/common/cpp/test/src/AudioParamTest.cpp +4 -3
- package/common/cpp/test/src/AudioScheduledSourceTest.cpp +113 -0
- package/common/cpp/test/src/ConstantSourceTest.cpp +5 -7
- package/common/cpp/test/src/DelayTest.cpp +108 -0
- package/common/cpp/test/src/GainTest.cpp +4 -5
- package/common/cpp/test/src/IIRFilterTest.cpp +153 -0
- package/common/cpp/test/src/MockAudioEventHandlerRegistry.h +19 -11
- package/common/cpp/test/src/OscillatorTest.cpp +2 -1
- package/common/cpp/test/src/StereoPannerTest.cpp +6 -9
- package/common/cpp/test/src/biquad/BiquadFilterChromium.cpp +372 -0
- package/common/cpp/test/src/biquad/BiquadFilterChromium.h +65 -0
- package/common/cpp/test/src/biquad/BiquadFilterTest.cpp +272 -0
- package/common/cpp/test/src/biquad/BiquadFilterTest.h +47 -0
- package/ios/audioapi/ios/AudioAPIModule.h +4 -3
- package/ios/audioapi/ios/AudioAPIModule.mm +148 -34
- package/ios/audioapi/ios/core/IOSAudioPlayer.h +2 -2
- package/ios/audioapi/ios/core/IOSAudioPlayer.mm +7 -6
- package/ios/audioapi/ios/core/IOSAudioRecorder.h +26 -18
- package/ios/audioapi/ios/core/IOSAudioRecorder.mm +244 -54
- package/ios/audioapi/ios/core/NativeAudioPlayer.m +17 -14
- package/ios/audioapi/ios/core/NativeAudioRecorder.h +4 -0
- package/ios/audioapi/ios/core/NativeAudioRecorder.m +49 -7
- package/ios/audioapi/ios/core/utils/AudioDecoder.mm +21 -4
- package/ios/audioapi/ios/core/utils/FileOptions.h +33 -0
- package/ios/audioapi/ios/core/utils/FileOptions.mm +195 -0
- package/ios/audioapi/ios/core/{IOSAudioFileWriter.h → utils/IOSFileWriter.h} +16 -14
- package/ios/audioapi/ios/core/utils/IOSFileWriter.mm +239 -0
- package/ios/audioapi/ios/core/{IOSRecorderCallback.h → utils/IOSRecorderCallback.h} +7 -17
- package/ios/audioapi/ios/core/utils/IOSRecorderCallback.mm +185 -0
- package/ios/audioapi/ios/system/AudioEngine.h +21 -16
- package/ios/audioapi/ios/system/AudioEngine.mm +153 -132
- package/ios/audioapi/ios/system/AudioSessionManager.h +25 -11
- package/ios/audioapi/ios/system/AudioSessionManager.mm +277 -203
- package/ios/audioapi/ios/system/NotificationManager.mm +47 -53
- package/ios/audioapi/ios/system/notification/BaseNotification.h +58 -0
- package/ios/audioapi/ios/system/notification/NotificationRegistry.h +70 -0
- package/ios/audioapi/ios/system/notification/NotificationRegistry.mm +172 -0
- package/ios/audioapi/ios/system/notification/PlaybackNotification.h +27 -0
- package/ios/audioapi/ios/system/notification/PlaybackNotification.mm +427 -0
- package/lib/commonjs/AudioAPIModule/AudioAPIModule.js +90 -0
- package/lib/commonjs/AudioAPIModule/AudioAPIModule.js.map +1 -0
- package/lib/commonjs/AudioAPIModule/globals.d.js +6 -0
- package/lib/commonjs/AudioAPIModule/globals.d.js.map +1 -0
- package/lib/commonjs/AudioAPIModule/index.js +14 -0
- package/lib/commonjs/AudioAPIModule/index.js.map +1 -0
- package/lib/commonjs/api.js +89 -12
- package/lib/commonjs/api.js.map +1 -1
- package/lib/commonjs/api.web.js +35 -14
- package/lib/commonjs/api.web.js.map +1 -1
- package/lib/commonjs/core/AudioBufferBaseSourceNode.js +3 -0
- package/lib/commonjs/core/AudioBufferBaseSourceNode.js.map +1 -1
- package/lib/commonjs/core/AudioBufferQueueSourceNode.js +5 -2
- package/lib/commonjs/core/AudioBufferQueueSourceNode.js.map +1 -1
- package/lib/commonjs/core/AudioContext.js +5 -8
- package/lib/commonjs/core/AudioContext.js.map +1 -1
- package/lib/commonjs/core/AudioNode.js +1 -1
- package/lib/commonjs/core/AudioNode.js.map +1 -1
- package/lib/commonjs/core/AudioParam.js +18 -11
- package/lib/commonjs/core/AudioParam.js.map +1 -1
- package/lib/commonjs/core/AudioRecorder.js +43 -55
- package/lib/commonjs/core/AudioRecorder.js.map +1 -1
- package/lib/commonjs/core/BaseAudioContext.js +61 -30
- package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
- package/lib/commonjs/core/ConvolverNode.js +37 -0
- package/lib/commonjs/core/ConvolverNode.js.map +1 -0
- package/lib/commonjs/core/DelayNode.js +17 -0
- package/lib/commonjs/core/DelayNode.js.map +1 -0
- package/lib/commonjs/core/IIRFilterNode.js +19 -0
- package/lib/commonjs/core/IIRFilterNode.js.map +1 -0
- package/lib/commonjs/core/OfflineAudioContext.js +3 -6
- package/lib/commonjs/core/OfflineAudioContext.js.map +1 -1
- package/lib/commonjs/plugin/withAudioAPI.js +46 -0
- package/lib/commonjs/plugin/withAudioAPI.js.map +1 -1
- package/lib/commonjs/specs/NativeAudioAPIModule.js.map +1 -1
- package/lib/commonjs/system/AudioManager.js +9 -15
- package/lib/commonjs/system/AudioManager.js.map +1 -1
- package/lib/commonjs/system/index.js +13 -0
- package/lib/commonjs/system/index.js.map +1 -1
- package/lib/commonjs/system/notification/PlaybackNotificationManager.js +138 -0
- package/lib/commonjs/system/notification/PlaybackNotificationManager.js.map +1 -0
- package/lib/commonjs/system/notification/RecordingNotificationManager.js +185 -0
- package/lib/commonjs/system/notification/RecordingNotificationManager.js.map +1 -0
- package/lib/commonjs/system/notification/SimpleNotificationManager.js +125 -0
- package/lib/commonjs/system/notification/SimpleNotificationManager.js.map +1 -0
- package/lib/commonjs/system/notification/index.js +45 -0
- package/lib/commonjs/system/notification/index.js.map +1 -0
- package/lib/commonjs/system/notification/types.js +6 -0
- package/lib/commonjs/system/notification/types.js.map +1 -0
- package/lib/commonjs/types.js +28 -35
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/utils/filePresets.js +43 -0
- package/lib/commonjs/utils/filePresets.js.map +1 -0
- package/lib/commonjs/utils/index.js +12 -27
- package/lib/commonjs/utils/index.js.map +1 -1
- package/lib/commonjs/web-core/AudioContext.js +21 -1
- package/lib/commonjs/web-core/AudioContext.js.map +1 -1
- package/lib/commonjs/web-core/ConvolverNode.js +40 -0
- package/lib/commonjs/web-core/ConvolverNode.js.map +1 -0
- package/lib/commonjs/web-core/ConvolverNodeOptions.js +6 -0
- package/lib/commonjs/web-core/ConvolverNodeOptions.js.map +1 -0
- package/lib/commonjs/web-core/DelayNode.js +17 -0
- package/lib/commonjs/web-core/DelayNode.js.map +1 -0
- package/lib/commonjs/web-core/IIRFilterNode.js +19 -0
- package/lib/commonjs/web-core/IIRFilterNode.js.map +1 -0
- package/lib/commonjs/web-core/OfflineAudioContext.js +20 -0
- package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
- package/lib/commonjs/web-system/index.js +17 -0
- package/lib/commonjs/web-system/index.js.map +1 -0
- package/lib/commonjs/web-system/notification/PlaybackNotificationManager.js +37 -0
- package/lib/commonjs/web-system/notification/PlaybackNotificationManager.js.map +1 -0
- package/lib/commonjs/web-system/notification/RecordingNotificationManager.js +37 -0
- package/lib/commonjs/web-system/notification/RecordingNotificationManager.js.map +1 -0
- package/lib/commonjs/web-system/notification/index.js +21 -0
- package/lib/commonjs/web-system/notification/index.js.map +1 -0
- package/lib/module/AudioAPIModule/AudioAPIModule.js +87 -0
- package/lib/module/AudioAPIModule/AudioAPIModule.js.map +1 -0
- package/lib/module/AudioAPIModule/globals.d.js +4 -0
- package/lib/module/AudioAPIModule/globals.d.js.map +1 -0
- package/lib/module/AudioAPIModule/index.js +4 -0
- package/lib/module/AudioAPIModule/index.js.map +1 -0
- package/lib/module/api.js +7 -12
- package/lib/module/api.js.map +1 -1
- package/lib/module/api.web.js +4 -1
- package/lib/module/api.web.js.map +1 -1
- package/lib/module/core/AudioBufferBaseSourceNode.js +3 -0
- package/lib/module/core/AudioBufferBaseSourceNode.js.map +1 -1
- package/lib/module/core/AudioBufferQueueSourceNode.js +5 -2
- package/lib/module/core/AudioBufferQueueSourceNode.js.map +1 -1
- package/lib/module/core/AudioContext.js +5 -8
- package/lib/module/core/AudioContext.js.map +1 -1
- package/lib/module/core/AudioNode.js +1 -1
- package/lib/module/core/AudioNode.js.map +1 -1
- package/lib/module/core/AudioParam.js +18 -11
- package/lib/module/core/AudioParam.js.map +1 -1
- package/lib/module/core/AudioRecorder.js +44 -56
- package/lib/module/core/AudioRecorder.js.map +1 -1
- package/lib/module/core/BaseAudioContext.js +63 -32
- package/lib/module/core/BaseAudioContext.js.map +1 -1
- package/lib/module/core/ConvolverNode.js +31 -0
- package/lib/module/core/ConvolverNode.js.map +1 -0
- package/lib/module/core/DelayNode.js +11 -0
- package/lib/module/core/DelayNode.js.map +1 -0
- package/lib/module/core/IIRFilterNode.js +13 -0
- package/lib/module/core/IIRFilterNode.js.map +1 -0
- package/lib/module/core/OfflineAudioContext.js +3 -6
- package/lib/module/core/OfflineAudioContext.js.map +1 -1
- package/lib/module/plugin/withAudioAPI.js +47 -1
- package/lib/module/plugin/withAudioAPI.js.map +1 -1
- package/lib/module/specs/NativeAudioAPIModule.js.map +1 -1
- package/lib/module/system/AudioManager.js +9 -15
- package/lib/module/system/AudioManager.js.map +1 -1
- package/lib/module/system/index.js +1 -0
- package/lib/module/system/index.js.map +1 -1
- package/lib/module/system/notification/PlaybackNotificationManager.js +134 -0
- package/lib/module/system/notification/PlaybackNotificationManager.js.map +1 -0
- package/lib/module/system/notification/RecordingNotificationManager.js +181 -0
- package/lib/module/system/notification/RecordingNotificationManager.js.map +1 -0
- package/lib/module/system/notification/SimpleNotificationManager.js +121 -0
- package/lib/module/system/notification/SimpleNotificationManager.js.map +1 -0
- package/lib/module/system/notification/index.js +7 -0
- package/lib/module/system/notification/index.js.map +1 -0
- package/lib/module/system/notification/types.js +4 -0
- package/lib/module/system/notification/types.js.map +1 -0
- package/lib/module/types.js +27 -34
- package/lib/module/types.js.map +1 -1
- package/lib/module/utils/filePresets.js +39 -0
- package/lib/module/utils/filePresets.js.map +1 -0
- package/lib/module/utils/index.js +10 -10
- package/lib/module/utils/index.js.map +1 -1
- package/lib/module/web-core/AudioContext.js +21 -1
- package/lib/module/web-core/AudioContext.js.map +1 -1
- package/lib/module/web-core/ConvolverNode.js +34 -0
- package/lib/module/web-core/ConvolverNode.js.map +1 -0
- package/lib/module/web-core/ConvolverNodeOptions.js +4 -0
- package/lib/module/web-core/ConvolverNodeOptions.js.map +1 -0
- package/lib/module/web-core/DelayNode.js +11 -0
- package/lib/module/web-core/DelayNode.js.map +1 -0
- package/lib/module/web-core/IIRFilterNode.js +13 -0
- package/lib/module/web-core/IIRFilterNode.js.map +1 -0
- package/lib/module/web-core/OfflineAudioContext.js +20 -0
- package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
- package/lib/module/web-system/index.js +4 -0
- package/lib/module/web-system/index.js.map +1 -0
- package/lib/module/web-system/notification/PlaybackNotificationManager.js +33 -0
- package/lib/module/web-system/notification/PlaybackNotificationManager.js.map +1 -0
- package/lib/module/web-system/notification/RecordingNotificationManager.js +33 -0
- package/lib/module/web-system/notification/RecordingNotificationManager.js.map +1 -0
- package/lib/module/web-system/notification/index.js +5 -0
- package/lib/module/web-system/notification/index.js.map +1 -0
- package/lib/typescript/AudioAPIModule/AudioAPIModule.d.ts +36 -0
- package/lib/typescript/AudioAPIModule/AudioAPIModule.d.ts.map +1 -0
- package/lib/typescript/AudioAPIModule/index.d.ts +2 -0
- package/lib/typescript/AudioAPIModule/index.d.ts.map +1 -0
- package/lib/typescript/api.d.ts +5 -9
- package/lib/typescript/api.d.ts.map +1 -1
- package/lib/typescript/api.web.d.ts +4 -1
- package/lib/typescript/api.web.d.ts.map +1 -1
- package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts +1 -0
- package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts.map +1 -1
- package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts +1 -1
- package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts.map +1 -1
- package/lib/typescript/core/AudioContext.d.ts +1 -1
- package/lib/typescript/core/AudioContext.d.ts.map +1 -1
- package/lib/typescript/core/AudioNode.d.ts +2 -1
- package/lib/typescript/core/AudioNode.d.ts.map +1 -1
- package/lib/typescript/core/AudioParam.d.ts.map +1 -1
- package/lib/typescript/core/AudioRecorder.d.ts +13 -6
- package/lib/typescript/core/AudioRecorder.d.ts.map +1 -1
- package/lib/typescript/core/BaseAudioContext.d.ts +9 -3
- package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
- package/lib/typescript/core/ConvolverNode.d.ts +12 -0
- package/lib/typescript/core/ConvolverNode.d.ts.map +1 -0
- package/lib/typescript/core/DelayNode.d.ts +9 -0
- package/lib/typescript/core/DelayNode.d.ts.map +1 -0
- package/lib/typescript/core/IIRFilterNode.d.ts +5 -0
- package/lib/typescript/core/IIRFilterNode.d.ts.map +1 -0
- package/lib/typescript/core/OfflineAudioContext.d.ts +1 -1
- package/lib/typescript/core/OfflineAudioContext.d.ts.map +1 -1
- package/lib/typescript/events/types.d.ts +6 -2
- package/lib/typescript/events/types.d.ts.map +1 -1
- package/lib/typescript/interfaces.d.ts +34 -34
- package/lib/typescript/interfaces.d.ts.map +1 -1
- package/lib/typescript/plugin/withAudioAPI.d.ts +1 -0
- package/lib/typescript/plugin/withAudioAPI.d.ts.map +1 -1
- package/lib/typescript/specs/NativeAudioAPIModule.d.ts +18 -6
- package/lib/typescript/specs/NativeAudioAPIModule.d.ts.map +1 -1
- package/lib/typescript/system/AudioManager.d.ts +5 -5
- package/lib/typescript/system/AudioManager.d.ts.map +1 -1
- package/lib/typescript/system/index.d.ts +1 -0
- package/lib/typescript/system/index.d.ts.map +1 -1
- package/lib/typescript/system/notification/PlaybackNotificationManager.d.ts +23 -0
- package/lib/typescript/system/notification/PlaybackNotificationManager.d.ts.map +1 -0
- package/lib/typescript/system/notification/RecordingNotificationManager.d.ts +24 -0
- package/lib/typescript/system/notification/RecordingNotificationManager.d.ts.map +1 -0
- package/lib/typescript/system/notification/SimpleNotificationManager.d.ts +21 -0
- package/lib/typescript/system/notification/SimpleNotificationManager.d.ts.map +1 -0
- package/lib/typescript/system/notification/index.d.ts +5 -0
- package/lib/typescript/system/notification/index.d.ts.map +1 -0
- package/lib/typescript/system/notification/types.d.ts +65 -0
- package/lib/typescript/system/notification/types.d.ts.map +1 -0
- package/lib/typescript/system/types.d.ts +0 -16
- package/lib/typescript/system/types.d.ts.map +1 -1
- package/lib/typescript/types.d.ts +57 -49
- package/lib/typescript/types.d.ts.map +1 -1
- package/lib/typescript/utils/filePresets.d.ts +9 -0
- package/lib/typescript/utils/filePresets.d.ts.map +1 -0
- package/lib/typescript/utils/index.d.ts +1 -8
- package/lib/typescript/utils/index.d.ts.map +1 -1
- package/lib/typescript/web-core/AudioContext.d.ts +9 -2
- package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
- package/lib/typescript/web-core/BaseAudioContext.d.ts +7 -1
- package/lib/typescript/web-core/BaseAudioContext.d.ts.map +1 -1
- package/lib/typescript/web-core/ConvolverNode.d.ts +11 -0
- package/lib/typescript/web-core/ConvolverNode.d.ts.map +1 -0
- package/lib/typescript/web-core/ConvolverNodeOptions.d.ts +6 -0
- package/lib/typescript/web-core/ConvolverNodeOptions.d.ts.map +1 -0
- package/lib/typescript/web-core/DelayNode.d.ts +8 -0
- package/lib/typescript/web-core/DelayNode.d.ts.map +1 -0
- package/lib/typescript/web-core/IIRFilterNode.d.ts +5 -0
- package/lib/typescript/web-core/IIRFilterNode.d.ts.map +1 -0
- package/lib/typescript/web-core/OfflineAudioContext.d.ts +8 -1
- package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
- package/lib/typescript/web-system/index.d.ts +2 -0
- package/lib/typescript/web-system/index.d.ts.map +1 -0
- package/lib/typescript/web-system/notification/PlaybackNotificationManager.d.ts +20 -0
- package/lib/typescript/web-system/notification/PlaybackNotificationManager.d.ts.map +1 -0
- package/lib/typescript/web-system/notification/RecordingNotificationManager.d.ts +20 -0
- package/lib/typescript/web-system/notification/RecordingNotificationManager.d.ts.map +1 -0
- package/lib/typescript/web-system/notification/index.d.ts +3 -0
- package/lib/typescript/web-system/notification/index.d.ts.map +1 -0
- package/package.json +11 -5
- package/scripts/download-prebuilt-binaries.sh +61 -0
- package/scripts/rnaa_utils.rb +8 -0
- package/scripts/validate-worklets-version.js +27 -0
- package/src/AudioAPIModule/AudioAPIModule.ts +122 -0
- package/src/AudioAPIModule/globals.d.ts +33 -0
- package/src/AudioAPIModule/index.ts +1 -0
- package/src/api.ts +21 -52
- package/src/api.web.ts +8 -2
- package/src/core/AudioBufferBaseSourceNode.ts +8 -0
- package/src/core/AudioBufferQueueSourceNode.ts +8 -2
- package/src/core/AudioContext.ts +5 -8
- package/src/core/AudioNode.ts +4 -3
- package/src/core/AudioParam.ts +18 -11
- package/src/core/AudioRecorder.ts +63 -78
- package/src/core/BaseAudioContext.ts +120 -54
- package/src/core/ConvolverNode.ts +35 -0
- package/src/core/DelayNode.ts +13 -0
- package/src/core/IIRFilterNode.ts +25 -0
- package/src/core/OfflineAudioContext.ts +4 -7
- package/src/events/types.ts +7 -3
- package/src/interfaces.ts +51 -34
- package/src/plugin/withAudioAPI.ts +61 -0
- package/src/specs/NativeAudioAPIModule.ts +26 -9
- package/src/system/AudioManager.ts +13 -32
- package/src/system/index.ts +1 -0
- package/src/system/notification/PlaybackNotificationManager.ts +197 -0
- package/src/system/notification/RecordingNotificationManager.ts +247 -0
- package/src/system/notification/SimpleNotificationManager.ts +175 -0
- package/src/system/notification/index.ts +4 -0
- package/src/system/notification/types.ts +111 -0
- package/src/system/types.ts +0 -18
- package/src/types.ts +59 -50
- package/src/utils/filePresets.ts +47 -0
- package/src/utils/index.ts +13 -19
- package/src/web-core/AudioContext.tsx +40 -1
- package/src/web-core/BaseAudioContext.tsx +11 -1
- package/src/web-core/ConvolverNode.tsx +43 -0
- package/src/web-core/ConvolverNodeOptions.tsx +6 -0
- package/src/web-core/DelayNode.tsx +12 -0
- package/src/web-core/IIRFilterNode.tsx +25 -0
- package/src/web-core/OfflineAudioContext.tsx +39 -0
- package/src/web-system/index.ts +1 -0
- package/src/web-system/notification/PlaybackNotificationManager.ts +64 -0
- package/src/web-system/notification/RecordingNotificationManager.ts +64 -0
- package/src/web-system/notification/index.ts +2 -0
- package/android/src/main/cpp/audioapi/android/core/utils/FileUtils.h +0 -34
- package/android/src/main/cpp/audioapi/android/core/utils/FileUtilts.cpp +0 -133
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.cpp +0 -154
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.h +0 -41
- package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.cpp +0 -47
- package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.h +0 -28
- package/android/src/main/java/com/swmansion/audioapi/system/LockScreenManager.kt +0 -325
- package/android/src/main/java/com/swmansion/audioapi/system/MediaNotificationManager.kt +0 -262
- package/android/src/main/java/com/swmansion/audioapi/system/MediaReceiver.kt +0 -57
- package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionCallback.kt +0 -61
- package/common/cpp/audioapi/libs/ffmpeg/INSTRUCTIONS.md +0 -32
- package/common/cpp/audioapi/libs/ffmpeg/create_xcframework.sh +0 -111
- package/common/cpp/audioapi/libs/ffmpeg/ffmpeg_setup.sh +0 -391
- package/ios/audioapi/ios/core/IOSAudioFileOptions.h +0 -36
- package/ios/audioapi/ios/core/IOSAudioFileOptions.mm +0 -140
- package/ios/audioapi/ios/core/IOSAudioFileWriter.mm +0 -223
- package/ios/audioapi/ios/core/IOSRecorderCallback.mm +0 -189
- package/ios/audioapi/ios/system/LockScreenManager.h +0 -24
- package/ios/audioapi/ios/system/LockScreenManager.mm +0 -310
- package/lib/commonjs/utils/bitEnums.js +0 -33
- package/lib/commonjs/utils/bitEnums.js.map +0 -1
- package/lib/module/utils/bitEnums.js +0 -27
- package/lib/module/utils/bitEnums.js.map +0 -1
- package/lib/typescript/utils/bitEnums.d.ts +0 -4
- package/lib/typescript/utils/bitEnums.d.ts.map +0 -1
- package/metro-config/index.d.ts +0 -5
- package/metro-config/index.js +0 -41
- package/metro-config/tsconfig.json +0 -3
- package/src/utils/bitEnums.ts +0 -51
- package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/Info.plist +5 -5
- package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64/libavcodec.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64_x86_64-simulator/libavcodec.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64/libavformat.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64_x86_64-simulator/libavformat.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/Info.plist +5 -5
- package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64/libavutil.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64_x86_64-simulator/libavutil.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/Info.plist +5 -5
- /package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64/libswresample.framework/Info.plist +0 -0
- /package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64_x86_64-simulator/libswresample.framework/Info.plist +0 -0
package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.cpp
CHANGED
|
@@ -1,30 +1,51 @@
|
|
|
1
1
|
#include <android/log.h>
|
|
2
2
|
#include <audioapi/android/core/utils/AndroidFileWriterBackend.h>
|
|
3
|
-
#include <audioapi/android/core/utils/
|
|
3
|
+
#include <audioapi/android/core/utils/FileOptions.h>
|
|
4
4
|
#include <audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.h>
|
|
5
5
|
#include <audioapi/libs/miniaudio/miniaudio.h>
|
|
6
|
+
#include <audioapi/utils/AudioFileProperties.h>
|
|
7
|
+
#include <audioapi/utils/UnitConversion.h>
|
|
6
8
|
|
|
7
|
-
|
|
9
|
+
#include <cstdio>
|
|
10
|
+
#include <memory>
|
|
11
|
+
#include <string>
|
|
8
12
|
|
|
9
13
|
namespace audioapi {
|
|
10
14
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
15
|
+
/// @brief Get the encoding format based on the audio file properties (only WAV supported).
|
|
16
|
+
// Currently, miniaudio supports only WAV encoding, but out of convenience
|
|
17
|
+
// or potential future shenanigans, we keep this as a separate function.
|
|
18
|
+
inline ma_encoding_format getFormat(const std::shared_ptr<AudioFileProperties> &properties) {
|
|
19
|
+
return ma_encoding_format_wav;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/// @brief Get the data format based on the bit depth.
|
|
23
|
+
/// @param properties The audio file properties.
|
|
24
|
+
/// @return The corresponding ma_format.
|
|
25
|
+
inline ma_format getDataFormat(const std::shared_ptr<AudioFileProperties> &properties) {
|
|
26
|
+
switch (properties->bitDepth) {
|
|
27
|
+
case AudioFileProperties::BitDepth::Bit16:
|
|
28
|
+
return ma_format_s16;
|
|
29
|
+
|
|
30
|
+
case AudioFileProperties::BitDepth::Bit24:
|
|
31
|
+
return ma_format_s24;
|
|
32
|
+
|
|
33
|
+
case AudioFileProperties::BitDepth::Bit32:
|
|
34
|
+
return ma_format_f32;
|
|
35
|
+
|
|
36
|
+
default:
|
|
37
|
+
return ma_format_f32;
|
|
38
|
+
}
|
|
23
39
|
}
|
|
24
40
|
|
|
41
|
+
MiniAudioFileWriter::MiniAudioFileWriter(
|
|
42
|
+
const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
|
|
43
|
+
const std::shared_ptr<AudioFileProperties> &fileProperties)
|
|
44
|
+
: AndroidFileWriterBackend(audioEventHandlerRegistry, fileProperties) {}
|
|
45
|
+
|
|
25
46
|
MiniAudioFileWriter::~MiniAudioFileWriter() {
|
|
26
|
-
isFileOpen_.store(false);
|
|
27
|
-
|
|
47
|
+
isFileOpen_.store(false, std::memory_order_release);
|
|
48
|
+
fileProperties_.reset();
|
|
28
49
|
|
|
29
50
|
if (encoder_ != nullptr) {
|
|
30
51
|
ma_encoder_uninit(encoder_.get());
|
|
@@ -43,43 +64,59 @@ MiniAudioFileWriter::~MiniAudioFileWriter() {
|
|
|
43
64
|
}
|
|
44
65
|
}
|
|
45
66
|
|
|
46
|
-
|
|
47
|
-
|
|
67
|
+
/// @brief Opens the audio file for writing.
|
|
68
|
+
/// This method initializes the audio converter and encoder together with any
|
|
69
|
+
/// necessary buffers required during the writing process.
|
|
70
|
+
/// this method should be called only on the JS thread.
|
|
71
|
+
/// @param streamSampleRate The sample rate of the incoming audio stream.
|
|
72
|
+
/// @param streamChannelCount The channel count of the incoming audio stream.
|
|
73
|
+
/// @param streamMaxBufferSize The maximum buffer size of the incoming audio stream.
|
|
74
|
+
/// @return The status of the file opening operation.
|
|
75
|
+
OpenFileResult MiniAudioFileWriter::openFile(
|
|
76
|
+
float streamSampleRate,
|
|
48
77
|
int32_t streamChannelCount,
|
|
49
78
|
int32_t streamMaxBufferSize) {
|
|
50
79
|
streamSampleRate_ = streamSampleRate;
|
|
51
80
|
streamChannelCount_ = streamChannelCount;
|
|
52
81
|
streamMaxBufferSize_ = streamMaxBufferSize;
|
|
53
|
-
|
|
82
|
+
ma_result result;
|
|
83
|
+
framesWritten_.store(0, std::memory_order_release);
|
|
54
84
|
|
|
55
85
|
isConverterRequired_.store(
|
|
56
|
-
(streamSampleRate_ !=
|
|
57
|
-
|
|
58
|
-
|
|
86
|
+
(streamSampleRate_ != fileProperties_->sampleRate) ||
|
|
87
|
+
(streamChannelCount_ != fileProperties_->channelCount) ||
|
|
88
|
+
(getDataFormat(fileProperties_) != ma_format_f32),
|
|
89
|
+
std::memory_order_release);
|
|
59
90
|
|
|
60
|
-
|
|
91
|
+
result = initializeConverterIfNeeded();
|
|
61
92
|
|
|
62
|
-
if (
|
|
63
|
-
return
|
|
93
|
+
if (result != MA_SUCCESS) {
|
|
94
|
+
return OpenFileResult ::Err(
|
|
95
|
+
"Failed to initialize converter" + std::string(ma_result_description(result)));
|
|
64
96
|
}
|
|
65
97
|
|
|
66
|
-
|
|
98
|
+
result = initializeEncoder();
|
|
67
99
|
|
|
68
|
-
if (
|
|
69
|
-
return
|
|
100
|
+
if (result != MA_SUCCESS) {
|
|
101
|
+
return OpenFileResult ::Err(
|
|
102
|
+
"Failed to initialize encoder" + std::string(ma_result_description(result)));
|
|
70
103
|
}
|
|
71
104
|
|
|
72
|
-
isFileOpen_.store(true);
|
|
73
|
-
|
|
74
|
-
return filePath_;
|
|
105
|
+
isFileOpen_.store(true, std::memory_order_release);
|
|
106
|
+
return OpenFileResult ::Ok(filePath_);
|
|
75
107
|
}
|
|
76
108
|
|
|
77
|
-
|
|
109
|
+
/// @brief Closes the audio file.
|
|
110
|
+
/// This method finalizes the writing process, releases resources,
|
|
111
|
+
/// and retrieves the duration and size of the written audio file.
|
|
112
|
+
/// It should be called only on the JS thread.
|
|
113
|
+
/// @return The status of the file closing operation.
|
|
114
|
+
CloseFileResult MiniAudioFileWriter::closeFile() {
|
|
78
115
|
if (!isFileOpen()) {
|
|
79
|
-
return
|
|
116
|
+
return CloseFileResult ::Err("File is not open");
|
|
80
117
|
}
|
|
81
118
|
|
|
82
|
-
isFileOpen_.store(false);
|
|
119
|
+
isFileOpen_.store(false, std::memory_order_release);
|
|
83
120
|
|
|
84
121
|
if (encoder_ != nullptr) {
|
|
85
122
|
ma_encoder_uninit(encoder_.get());
|
|
@@ -98,7 +135,6 @@ std::tuple<double, double> MiniAudioFileWriter::closeFile() {
|
|
|
98
135
|
}
|
|
99
136
|
|
|
100
137
|
// Retrieve duration and file size
|
|
101
|
-
std::string filePath = filePath_;
|
|
102
138
|
double durationInSeconds = 0.0;
|
|
103
139
|
double fileSizeInMB = 0.0;
|
|
104
140
|
|
|
@@ -107,10 +143,8 @@ std::tuple<double, double> MiniAudioFileWriter::closeFile() {
|
|
|
107
143
|
if (ma_decoder_init_file(filePath_.c_str(), NULL, &decoder) == MA_SUCCESS) {
|
|
108
144
|
ma_uint64 frameCount = 0;
|
|
109
145
|
|
|
110
|
-
if (ma_decoder_get_length_in_pcm_frames(&decoder, &frameCount) ==
|
|
111
|
-
|
|
112
|
-
durationInSeconds =
|
|
113
|
-
static_cast<double>(frameCount) / decoder.outputSampleRate;
|
|
146
|
+
if (ma_decoder_get_length_in_pcm_frames(&decoder, &frameCount) == MA_SUCCESS) {
|
|
147
|
+
durationInSeconds = static_cast<double>(frameCount) / decoder.outputSampleRate;
|
|
114
148
|
}
|
|
115
149
|
|
|
116
150
|
ma_decoder_uninit(&decoder);
|
|
@@ -120,15 +154,22 @@ std::tuple<double, double> MiniAudioFileWriter::closeFile() {
|
|
|
120
154
|
|
|
121
155
|
if (file != nullptr) {
|
|
122
156
|
fseek(file, 0, SEEK_END);
|
|
123
|
-
|
|
157
|
+
uint64_t fileSizeInBytes = ftell(file);
|
|
124
158
|
fclose(file);
|
|
125
|
-
fileSizeInMB = static_cast<double>(fileSizeInBytes) /
|
|
159
|
+
fileSizeInMB = static_cast<double>(fileSizeInBytes) / MB_IN_BYTES;
|
|
126
160
|
}
|
|
127
161
|
|
|
128
162
|
filePath_ = "";
|
|
129
|
-
return {fileSizeInMB, durationInSeconds};
|
|
163
|
+
return CloseFileResult ::Ok({fileSizeInMB, durationInSeconds});
|
|
130
164
|
}
|
|
131
165
|
|
|
166
|
+
/// @brief Writes audio data to the file.
|
|
167
|
+
/// If possible (sample format, channel count, and interleaving matches),
|
|
168
|
+
/// the data is written directly, otherwise in-memory conversion is performed first
|
|
169
|
+
/// It should be called only on the audio thread.
|
|
170
|
+
/// @param data Pointer to the audio data buffer. (Interleaved float32 format - as oboe likes it)
|
|
171
|
+
/// @param numFrames Number of audio frames to write.
|
|
172
|
+
/// @return True if the write operation was successful, false otherwise.
|
|
132
173
|
bool MiniAudioFileWriter::writeAudioData(void *data, int numFrames) {
|
|
133
174
|
ma_uint64 framesWritten = 0;
|
|
134
175
|
ma_result result;
|
|
@@ -138,25 +179,16 @@ bool MiniAudioFileWriter::writeAudioData(void *data, int numFrames) {
|
|
|
138
179
|
}
|
|
139
180
|
|
|
140
181
|
if (!isConverterRequired()) {
|
|
141
|
-
result = ma_encoder_write_pcm_frames(
|
|
142
|
-
encoder_.get(), data, numFrames, &framesWritten);
|
|
143
|
-
|
|
144
|
-
__android_log_print(
|
|
145
|
-
ANDROID_LOG_DEBUG,
|
|
146
|
-
"MiniAudioFileWriter",
|
|
147
|
-
"Writing %llu frames without conversion to file: %s",
|
|
148
|
-
framesWritten,
|
|
149
|
-
filePath_.c_str());
|
|
182
|
+
result = ma_encoder_write_pcm_frames(encoder_.get(), data, numFrames, &framesWritten);
|
|
150
183
|
|
|
151
184
|
if (result != MA_SUCCESS) {
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
filePath_.c_str());
|
|
185
|
+
invokeOnErrorCallback(
|
|
186
|
+
"Failed to write audio data to file: " + filePath_ +
|
|
187
|
+
std::string(ma_result_description(result)));
|
|
188
|
+
return false;
|
|
157
189
|
}
|
|
158
190
|
|
|
159
|
-
framesWritten_.fetch_add(numFrames);
|
|
191
|
+
framesWritten_.fetch_add(numFrames, std::memory_order_acq_rel);
|
|
160
192
|
return result == MA_SUCCESS;
|
|
161
193
|
}
|
|
162
194
|
|
|
@@ -166,17 +198,20 @@ bool MiniAudioFileWriter::writeAudioData(void *data, int numFrames) {
|
|
|
166
198
|
encoder_.get(), processingBuffer_, convertedFrameCount, &framesWritten);
|
|
167
199
|
|
|
168
200
|
if (result != MA_SUCCESS) {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
filePath_.c_str());
|
|
201
|
+
invokeOnErrorCallback(
|
|
202
|
+
"Failed to write converted audio data to file: " + filePath_ +
|
|
203
|
+
std::string(ma_result_description(result)));
|
|
204
|
+
return false;
|
|
174
205
|
}
|
|
175
206
|
|
|
176
|
-
framesWritten_.fetch_add(numFrames);
|
|
207
|
+
framesWritten_.fetch_add(numFrames, std::memory_order_acq_rel);
|
|
177
208
|
return result == MA_SUCCESS;
|
|
178
209
|
}
|
|
179
210
|
|
|
211
|
+
/// @brief Converts the audio data buffer if necessary.
|
|
212
|
+
/// @param data Pointer to the audio data buffer.
|
|
213
|
+
/// @param numFrames Number of audio frames to convert.
|
|
214
|
+
/// @return The number of frames after conversion.
|
|
180
215
|
ma_uint64 MiniAudioFileWriter::convertBuffer(void *data, int numFrames) {
|
|
181
216
|
ma_uint64 inputFrameCount = numFrames;
|
|
182
217
|
ma_uint64 outputFrameCount = 0;
|
|
@@ -185,85 +220,77 @@ ma_uint64 MiniAudioFileWriter::convertBuffer(void *data, int numFrames) {
|
|
|
185
220
|
converter_.get(), inputFrameCount, &outputFrameCount);
|
|
186
221
|
|
|
187
222
|
ma_data_converter_process_pcm_frames(
|
|
188
|
-
converter_.get(),
|
|
189
|
-
data,
|
|
190
|
-
&inputFrameCount,
|
|
191
|
-
processingBuffer_,
|
|
192
|
-
&outputFrameCount);
|
|
223
|
+
converter_.get(), data, &inputFrameCount, processingBuffer_, &outputFrameCount);
|
|
193
224
|
|
|
194
225
|
return outputFrameCount;
|
|
195
226
|
}
|
|
196
227
|
|
|
197
|
-
|
|
228
|
+
/// @brief Initializes the data converter if needed.
|
|
229
|
+
/// This method sets up the data converter and allocates, so it should be called
|
|
230
|
+
/// only on the JS thread. (during file opening)
|
|
231
|
+
/// @return MA_SUCCESS if initialization was successful, otherwise an error code.
|
|
232
|
+
ma_result MiniAudioFileWriter::initializeConverterIfNeeded() {
|
|
198
233
|
if (!isConverterRequired_) {
|
|
199
|
-
return
|
|
234
|
+
return MA_SUCCESS;
|
|
200
235
|
}
|
|
201
236
|
|
|
202
237
|
ma_result result;
|
|
238
|
+
ma_format dataFormat = getDataFormat(fileProperties_);
|
|
203
239
|
|
|
204
240
|
ma_data_converter_config converterConfig = ma_data_converter_config_init(
|
|
205
241
|
ma_format_f32,
|
|
206
|
-
|
|
242
|
+
dataFormat,
|
|
207
243
|
streamChannelCount_,
|
|
208
|
-
|
|
209
|
-
streamSampleRate_,
|
|
210
|
-
|
|
244
|
+
fileProperties_->channelCount,
|
|
245
|
+
static_cast<int32_t>(streamSampleRate_),
|
|
246
|
+
fileProperties_->sampleRate);
|
|
211
247
|
|
|
212
248
|
converter_ = std::make_unique<ma_data_converter>();
|
|
213
249
|
result = ma_data_converter_init(&converterConfig, NULL, converter_.get());
|
|
214
250
|
|
|
215
251
|
if (result != MA_SUCCESS) {
|
|
216
|
-
|
|
217
|
-
ANDROID_LOG_ERROR,
|
|
218
|
-
"MiniAudioFileWriter",
|
|
219
|
-
"Failed to initialize miniaudio data converter for file: %s",
|
|
220
|
-
filePath_.c_str());
|
|
221
|
-
return false;
|
|
252
|
+
return result;
|
|
222
253
|
}
|
|
223
254
|
|
|
224
255
|
ma_data_converter_get_expected_output_frame_count(
|
|
225
256
|
converter_.get(), streamMaxBufferSize_, &processingBufferLength_);
|
|
226
257
|
|
|
227
258
|
processingBuffer_ = ma_malloc(
|
|
228
|
-
processingBufferLength_ *
|
|
229
|
-
ma_get_bytes_per_sample(fileOptions_->getDataFormat()),
|
|
259
|
+
processingBufferLength_ * fileProperties_->channelCount * ma_get_bytes_per_sample(dataFormat),
|
|
230
260
|
NULL);
|
|
231
261
|
|
|
232
|
-
return
|
|
262
|
+
return MA_SUCCESS;
|
|
233
263
|
}
|
|
234
264
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
265
|
+
/// @brief Initializes the audio encoder.
|
|
266
|
+
/// This method sets up the audio encoder for writing to the file,
|
|
267
|
+
/// it should be called only on the JS thread. (during file opening)
|
|
268
|
+
/// @return MA_SUCCESS if initialization was successful, otherwise an error code.
|
|
269
|
+
ma_result MiniAudioFileWriter::initializeEncoder() {
|
|
238
270
|
ma_result result;
|
|
271
|
+
Result<std::string, std::string> filePathResult =
|
|
272
|
+
android::fileoptions::getFilePath(fileProperties_);
|
|
273
|
+
|
|
274
|
+
if (!filePathResult.is_ok()) {
|
|
275
|
+
return MA_ERROR;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
filePath_ = filePathResult.unwrap();
|
|
239
279
|
|
|
240
280
|
ma_encoder_config config = ma_encoder_config_init(
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
281
|
+
getFormat(fileProperties_),
|
|
282
|
+
getDataFormat(fileProperties_),
|
|
283
|
+
fileProperties_->channelCount,
|
|
284
|
+
fileProperties_->sampleRate);
|
|
245
285
|
|
|
246
286
|
encoder_ = std::make_unique<ma_encoder>();
|
|
247
287
|
result = ma_encoder_init_file(filePath_.c_str(), &config, encoder_.get());
|
|
248
288
|
|
|
249
|
-
|
|
250
|
-
__android_log_print(
|
|
251
|
-
ANDROID_LOG_ERROR,
|
|
252
|
-
"MiniAudioFileWriter",
|
|
253
|
-
"Failed to initialize miniaudio encoder for file: %s",
|
|
254
|
-
filePath_.c_str());
|
|
255
|
-
return false;
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
return true;
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
bool MiniAudioFileWriter::isFileOpen() {
|
|
262
|
-
return isFileOpen_.load();
|
|
289
|
+
return result;
|
|
263
290
|
}
|
|
264
291
|
|
|
265
292
|
bool MiniAudioFileWriter::isConverterRequired() {
|
|
266
|
-
return isConverterRequired_.load();
|
|
293
|
+
return isConverterRequired_.load(std::memory_order_acquire);
|
|
267
294
|
}
|
|
268
295
|
|
|
269
296
|
} // namespace audioapi
|
package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.h
CHANGED
|
@@ -3,32 +3,26 @@
|
|
|
3
3
|
#include <audioapi/android/core/utils/AndroidFileWriterBackend.h>
|
|
4
4
|
#include <audioapi/libs/miniaudio/miniaudio.h>
|
|
5
5
|
|
|
6
|
+
#include <atomic>
|
|
6
7
|
#include <string>
|
|
7
8
|
#include <memory>
|
|
8
9
|
#include <tuple>
|
|
9
10
|
|
|
10
11
|
namespace audioapi {
|
|
11
12
|
|
|
12
|
-
class MiniAudioFileOptions;
|
|
13
|
-
|
|
14
13
|
class MiniAudioFileWriter : public AndroidFileWriterBackend {
|
|
15
14
|
public:
|
|
16
|
-
MiniAudioFileWriter(
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
size_t androidFlags);
|
|
21
|
-
~MiniAudioFileWriter() override;
|
|
15
|
+
explicit MiniAudioFileWriter(
|
|
16
|
+
const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
|
|
17
|
+
const std::shared_ptr<AudioFileProperties> &fileProperties);
|
|
18
|
+
~MiniAudioFileWriter();
|
|
22
19
|
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
OpenFileResult openFile(float streamSampleRate, int32_t streamChannelCount, int32_t streamMaxBufferSize) override;
|
|
21
|
+
CloseFileResult closeFile() override;
|
|
25
22
|
|
|
26
23
|
bool writeAudioData(void *data, int numFrames) override;
|
|
27
24
|
|
|
28
25
|
private:
|
|
29
|
-
std::shared_ptr<MiniAudioFileOptions> fileOptions_;
|
|
30
|
-
|
|
31
|
-
std::atomic<bool> isFileOpen_{false};
|
|
32
26
|
std::atomic<bool> isConverterRequired_{false};
|
|
33
27
|
|
|
34
28
|
std::unique_ptr<ma_encoder> encoder_{nullptr};
|
|
@@ -36,11 +30,10 @@ class MiniAudioFileWriter : public AndroidFileWriterBackend {
|
|
|
36
30
|
void *processingBuffer_{nullptr};
|
|
37
31
|
ma_uint64 processingBufferLength_{0};
|
|
38
32
|
|
|
39
|
-
|
|
40
|
-
|
|
33
|
+
ma_result initializeConverterIfNeeded();
|
|
34
|
+
ma_result initializeEncoder();
|
|
41
35
|
ma_uint64 convertBuffer(void *data, int numFrames);
|
|
42
36
|
|
|
43
|
-
bool isFileOpen();
|
|
44
37
|
bool isConverterRequired();
|
|
45
38
|
};
|
|
46
39
|
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
#include <react/jni/JMessageQueueThread.h>
|
|
6
6
|
#include <memory>
|
|
7
7
|
#include <utility>
|
|
8
|
+
#include <string>
|
|
8
9
|
#include <unordered_map>
|
|
9
10
|
|
|
10
11
|
namespace audioapi {
|
|
@@ -28,4 +29,4 @@ class NativeFileInfo : public jni::JavaClass<NativeFileInfo> {
|
|
|
28
29
|
}
|
|
29
30
|
};
|
|
30
31
|
|
|
31
|
-
}
|
|
32
|
+
} // namespace audioapi
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
package com.swmansion.audioapi
|
|
2
2
|
|
|
3
3
|
import com.facebook.jni.HybridData
|
|
4
|
+
import com.facebook.react.bridge.Arguments
|
|
5
|
+
import com.facebook.react.bridge.LifecycleEventListener
|
|
4
6
|
import com.facebook.react.bridge.Promise
|
|
5
7
|
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
8
|
import com.facebook.react.bridge.ReadableArray
|
|
@@ -8,6 +10,7 @@ import com.facebook.react.bridge.ReadableMap
|
|
|
8
10
|
import com.facebook.react.common.annotations.FrameworkAPI
|
|
9
11
|
import com.facebook.react.module.annotations.ReactModule
|
|
10
12
|
import com.facebook.react.turbomodule.core.CallInvokerHolderImpl
|
|
13
|
+
import com.swmansion.audioapi.system.ForegroundServiceManager
|
|
11
14
|
import com.swmansion.audioapi.system.MediaSessionManager
|
|
12
15
|
import com.swmansion.audioapi.system.NativeFileInfo
|
|
13
16
|
import com.swmansion.audioapi.system.PermissionRequestListener
|
|
@@ -17,7 +20,8 @@ import java.lang.ref.WeakReference
|
|
|
17
20
|
@ReactModule(name = AudioAPIModule.NAME)
|
|
18
21
|
class AudioAPIModule(
|
|
19
22
|
reactContext: ReactApplicationContext,
|
|
20
|
-
) : NativeAudioAPIModuleSpec(reactContext)
|
|
23
|
+
) : NativeAudioAPIModuleSpec(reactContext),
|
|
24
|
+
LifecycleEventListener {
|
|
21
25
|
companion object {
|
|
22
26
|
const val NAME = NativeAudioAPIModuleSpec.NAME
|
|
23
27
|
}
|
|
@@ -66,6 +70,28 @@ class AudioAPIModule(
|
|
|
66
70
|
return true
|
|
67
71
|
}
|
|
68
72
|
|
|
73
|
+
override fun onHostResume() {
|
|
74
|
+
// do nothing
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
override fun onHostPause() {
|
|
78
|
+
// do nothing
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
override fun onHostDestroy() {
|
|
82
|
+
// do nothing
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
override fun initialize() {
|
|
86
|
+
reactContext.get()?.addLifecycleEventListener(this)
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
override fun invalidate() {
|
|
90
|
+
reactContext.get()?.removeLifecycleEventListener(this)
|
|
91
|
+
// Cleanup foreground service manager
|
|
92
|
+
ForegroundServiceManager.cleanup()
|
|
93
|
+
}
|
|
94
|
+
|
|
69
95
|
override fun getDevicePreferredSampleRate(): Double = MediaSessionManager.getDevicePreferredSampleRate()
|
|
70
96
|
|
|
71
97
|
override fun setAudioSessionActivity(
|
|
@@ -84,19 +110,8 @@ class AudioAPIModule(
|
|
|
84
110
|
// noting to do here
|
|
85
111
|
}
|
|
86
112
|
|
|
87
|
-
override fun
|
|
88
|
-
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
override fun resetLockScreenInfo() {
|
|
92
|
-
MediaSessionManager.resetLockScreenInfo()
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
override fun enableRemoteCommand(
|
|
96
|
-
name: String?,
|
|
97
|
-
enabled: Boolean,
|
|
98
|
-
) {
|
|
99
|
-
MediaSessionManager.enableRemoteCommand(name!!, enabled)
|
|
113
|
+
override fun disableSessionManagement() {
|
|
114
|
+
// nothing to do here
|
|
100
115
|
}
|
|
101
116
|
|
|
102
117
|
override fun observeAudioInterruptions(enabled: Boolean) {
|
|
@@ -120,7 +135,167 @@ class AudioAPIModule(
|
|
|
120
135
|
promise.resolve(MediaSessionManager.checkRecordingPermissions())
|
|
121
136
|
}
|
|
122
137
|
|
|
138
|
+
override fun requestNotificationPermissions(promise: Promise) {
|
|
139
|
+
val permissionRequestListener = PermissionRequestListener(promise)
|
|
140
|
+
MediaSessionManager.requestNotificationPermissions(permissionRequestListener)
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
override fun checkNotificationPermissions(promise: Promise) {
|
|
144
|
+
promise.resolve(MediaSessionManager.checkNotificationPermissions())
|
|
145
|
+
}
|
|
146
|
+
|
|
123
147
|
override fun getDevicesInfo(promise: Promise) {
|
|
124
148
|
promise.resolve(MediaSessionManager.getDevicesInfo())
|
|
125
149
|
}
|
|
150
|
+
|
|
151
|
+
// New notification system methods
|
|
152
|
+
override fun registerNotification(
|
|
153
|
+
type: String?,
|
|
154
|
+
key: String?,
|
|
155
|
+
promise: Promise?,
|
|
156
|
+
) {
|
|
157
|
+
try {
|
|
158
|
+
if (type == null || key == null) {
|
|
159
|
+
val result = Arguments.createMap()
|
|
160
|
+
result.putBoolean("success", false)
|
|
161
|
+
result.putString("error", "Type and key are required")
|
|
162
|
+
promise?.resolve(result)
|
|
163
|
+
return
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
MediaSessionManager.registerNotification(type, key)
|
|
167
|
+
|
|
168
|
+
val result = Arguments.createMap()
|
|
169
|
+
result.putBoolean("success", true)
|
|
170
|
+
promise?.resolve(result)
|
|
171
|
+
} catch (e: Exception) {
|
|
172
|
+
val result = Arguments.createMap()
|
|
173
|
+
result.putBoolean("success", false)
|
|
174
|
+
result.putString("error", e.message ?: "Unknown error")
|
|
175
|
+
promise?.resolve(result)
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
override fun showNotification(
|
|
180
|
+
key: String?,
|
|
181
|
+
options: ReadableMap?,
|
|
182
|
+
promise: Promise?,
|
|
183
|
+
) {
|
|
184
|
+
try {
|
|
185
|
+
if (key == null) {
|
|
186
|
+
val result = Arguments.createMap()
|
|
187
|
+
result.putBoolean("success", false)
|
|
188
|
+
result.putString("error", "Key is required")
|
|
189
|
+
promise?.resolve(result)
|
|
190
|
+
return
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
MediaSessionManager.showNotification(key, options)
|
|
194
|
+
|
|
195
|
+
val result = Arguments.createMap()
|
|
196
|
+
result.putBoolean("success", true)
|
|
197
|
+
promise?.resolve(result)
|
|
198
|
+
} catch (e: Exception) {
|
|
199
|
+
val result = Arguments.createMap()
|
|
200
|
+
result.putBoolean("success", false)
|
|
201
|
+
result.putString("error", e.message ?: "Unknown error")
|
|
202
|
+
promise?.resolve(result)
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
override fun updateNotification(
|
|
207
|
+
key: String?,
|
|
208
|
+
options: ReadableMap?,
|
|
209
|
+
promise: Promise?,
|
|
210
|
+
) {
|
|
211
|
+
try {
|
|
212
|
+
if (key == null) {
|
|
213
|
+
val result = Arguments.createMap()
|
|
214
|
+
result.putBoolean("success", false)
|
|
215
|
+
result.putString("error", "Key is required")
|
|
216
|
+
promise?.resolve(result)
|
|
217
|
+
return
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
MediaSessionManager.updateNotification(key, options)
|
|
221
|
+
|
|
222
|
+
val result = Arguments.createMap()
|
|
223
|
+
result.putBoolean("success", true)
|
|
224
|
+
promise?.resolve(result)
|
|
225
|
+
} catch (e: Exception) {
|
|
226
|
+
val result = Arguments.createMap()
|
|
227
|
+
result.putBoolean("success", false)
|
|
228
|
+
result.putString("error", e.message ?: "Unknown error")
|
|
229
|
+
promise?.resolve(result)
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
override fun hideNotification(
|
|
234
|
+
key: String?,
|
|
235
|
+
promise: Promise?,
|
|
236
|
+
) {
|
|
237
|
+
try {
|
|
238
|
+
if (key == null) {
|
|
239
|
+
val result = Arguments.createMap()
|
|
240
|
+
result.putBoolean("success", false)
|
|
241
|
+
result.putString("error", "Key is required")
|
|
242
|
+
promise?.resolve(result)
|
|
243
|
+
return
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
MediaSessionManager.hideNotification(key)
|
|
247
|
+
|
|
248
|
+
val result = Arguments.createMap()
|
|
249
|
+
result.putBoolean("success", true)
|
|
250
|
+
promise?.resolve(result)
|
|
251
|
+
} catch (e: Exception) {
|
|
252
|
+
val result = Arguments.createMap()
|
|
253
|
+
result.putBoolean("success", false)
|
|
254
|
+
result.putString("error", e.message ?: "Unknown error")
|
|
255
|
+
promise?.resolve(result)
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
override fun unregisterNotification(
|
|
260
|
+
key: String?,
|
|
261
|
+
promise: Promise?,
|
|
262
|
+
) {
|
|
263
|
+
try {
|
|
264
|
+
if (key == null) {
|
|
265
|
+
val result = Arguments.createMap()
|
|
266
|
+
result.putBoolean("success", false)
|
|
267
|
+
result.putString("error", "Key is required")
|
|
268
|
+
promise?.resolve(result)
|
|
269
|
+
return
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
MediaSessionManager.unregisterNotification(key)
|
|
273
|
+
|
|
274
|
+
val result = Arguments.createMap()
|
|
275
|
+
result.putBoolean("success", true)
|
|
276
|
+
promise?.resolve(result)
|
|
277
|
+
} catch (e: Exception) {
|
|
278
|
+
val result = Arguments.createMap()
|
|
279
|
+
result.putBoolean("success", false)
|
|
280
|
+
result.putString("error", e.message ?: "Unknown error")
|
|
281
|
+
promise?.resolve(result)
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
override fun isNotificationActive(
|
|
286
|
+
key: String?,
|
|
287
|
+
promise: Promise?,
|
|
288
|
+
) {
|
|
289
|
+
try {
|
|
290
|
+
if (key == null) {
|
|
291
|
+
promise?.resolve(false)
|
|
292
|
+
return
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
val isActive = MediaSessionManager.isNotificationActive(key)
|
|
296
|
+
promise?.resolve(isActive)
|
|
297
|
+
} catch (e: Exception) {
|
|
298
|
+
promise?.resolve(false)
|
|
299
|
+
}
|
|
300
|
+
}
|
|
126
301
|
}
|