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
package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.cpp
CHANGED
|
@@ -1,28 +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>
|
|
8
|
+
|
|
9
|
+
#include <cstdio>
|
|
10
|
+
#include <memory>
|
|
11
|
+
#include <string>
|
|
6
12
|
|
|
7
13
|
namespace audioapi {
|
|
8
14
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
+
}
|
|
21
39
|
}
|
|
22
40
|
|
|
41
|
+
MiniAudioFileWriter::MiniAudioFileWriter(
|
|
42
|
+
const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
|
|
43
|
+
const std::shared_ptr<AudioFileProperties> &fileProperties)
|
|
44
|
+
: AndroidFileWriterBackend(audioEventHandlerRegistry, fileProperties) {}
|
|
45
|
+
|
|
23
46
|
MiniAudioFileWriter::~MiniAudioFileWriter() {
|
|
24
|
-
isFileOpen_.store(false);
|
|
25
|
-
|
|
47
|
+
isFileOpen_.store(false, std::memory_order_release);
|
|
48
|
+
fileProperties_.reset();
|
|
26
49
|
|
|
27
50
|
if (encoder_ != nullptr) {
|
|
28
51
|
ma_encoder_uninit(encoder_.get());
|
|
@@ -41,41 +64,59 @@ MiniAudioFileWriter::~MiniAudioFileWriter() {
|
|
|
41
64
|
}
|
|
42
65
|
}
|
|
43
66
|
|
|
44
|
-
|
|
45
|
-
|
|
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,
|
|
46
77
|
int32_t streamChannelCount,
|
|
47
78
|
int32_t streamMaxBufferSize) {
|
|
48
79
|
streamSampleRate_ = streamSampleRate;
|
|
49
80
|
streamChannelCount_ = streamChannelCount;
|
|
50
81
|
streamMaxBufferSize_ = streamMaxBufferSize;
|
|
51
|
-
|
|
82
|
+
ma_result result;
|
|
83
|
+
framesWritten_.store(0, std::memory_order_release);
|
|
52
84
|
|
|
53
85
|
isConverterRequired_.store(
|
|
54
|
-
(streamSampleRate_ !=
|
|
55
|
-
|
|
56
|
-
|
|
86
|
+
(streamSampleRate_ != fileProperties_->sampleRate) ||
|
|
87
|
+
(streamChannelCount_ != fileProperties_->channelCount) ||
|
|
88
|
+
(getDataFormat(fileProperties_) != ma_format_f32),
|
|
89
|
+
std::memory_order_release);
|
|
57
90
|
|
|
58
|
-
|
|
91
|
+
result = initializeConverterIfNeeded();
|
|
59
92
|
|
|
60
|
-
if (
|
|
61
|
-
return
|
|
93
|
+
if (result != MA_SUCCESS) {
|
|
94
|
+
return OpenFileResult ::Err(
|
|
95
|
+
"Failed to initialize converter" + std::string(ma_result_description(result)));
|
|
62
96
|
}
|
|
63
97
|
|
|
64
|
-
|
|
98
|
+
result = initializeEncoder();
|
|
65
99
|
|
|
66
|
-
if (
|
|
67
|
-
return
|
|
100
|
+
if (result != MA_SUCCESS) {
|
|
101
|
+
return OpenFileResult ::Err(
|
|
102
|
+
"Failed to initialize encoder" + std::string(ma_result_description(result)));
|
|
68
103
|
}
|
|
69
104
|
|
|
70
|
-
isFileOpen_.store(true);
|
|
105
|
+
isFileOpen_.store(true, std::memory_order_release);
|
|
106
|
+
return OpenFileResult ::Ok(filePath_);
|
|
71
107
|
}
|
|
72
108
|
|
|
73
|
-
|
|
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() {
|
|
74
115
|
if (!isFileOpen()) {
|
|
75
|
-
return "";
|
|
116
|
+
return CloseFileResult ::Err("File is not open");
|
|
76
117
|
}
|
|
77
118
|
|
|
78
|
-
isFileOpen_.store(false);
|
|
119
|
+
isFileOpen_.store(false, std::memory_order_release);
|
|
79
120
|
|
|
80
121
|
if (encoder_ != nullptr) {
|
|
81
122
|
ma_encoder_uninit(encoder_.get());
|
|
@@ -93,12 +134,42 @@ std::string MiniAudioFileWriter::closeFile() {
|
|
|
93
134
|
processingBufferLength_ = 0;
|
|
94
135
|
}
|
|
95
136
|
|
|
96
|
-
|
|
97
|
-
|
|
137
|
+
// Retrieve duration and file size
|
|
138
|
+
double durationInSeconds = 0.0;
|
|
139
|
+
double fileSizeInMB = 0.0;
|
|
140
|
+
|
|
141
|
+
ma_decoder decoder;
|
|
98
142
|
|
|
99
|
-
|
|
143
|
+
if (ma_decoder_init_file(filePath_.c_str(), NULL, &decoder) == MA_SUCCESS) {
|
|
144
|
+
ma_uint64 frameCount = 0;
|
|
145
|
+
|
|
146
|
+
if (ma_decoder_get_length_in_pcm_frames(&decoder, &frameCount) == MA_SUCCESS) {
|
|
147
|
+
durationInSeconds = static_cast<double>(frameCount) / decoder.outputSampleRate;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
ma_decoder_uninit(&decoder);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
FILE *file = fopen(filePath_.c_str(), "rb");
|
|
154
|
+
|
|
155
|
+
if (file != nullptr) {
|
|
156
|
+
fseek(file, 0, SEEK_END);
|
|
157
|
+
uint64_t fileSizeInBytes = ftell(file);
|
|
158
|
+
fclose(file);
|
|
159
|
+
fileSizeInMB = static_cast<double>(fileSizeInBytes) / MB_IN_BYTES;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
filePath_ = "";
|
|
163
|
+
return CloseFileResult ::Ok({fileSizeInMB, durationInSeconds});
|
|
100
164
|
}
|
|
101
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.
|
|
102
173
|
bool MiniAudioFileWriter::writeAudioData(void *data, int numFrames) {
|
|
103
174
|
ma_uint64 framesWritten = 0;
|
|
104
175
|
ma_result result;
|
|
@@ -108,24 +179,16 @@ bool MiniAudioFileWriter::writeAudioData(void *data, int numFrames) {
|
|
|
108
179
|
}
|
|
109
180
|
|
|
110
181
|
if (!isConverterRequired()) {
|
|
111
|
-
result = ma_encoder_write_pcm_frames(
|
|
112
|
-
encoder_.get(), data, numFrames, &framesWritten);
|
|
113
|
-
|
|
114
|
-
__android_log_print(
|
|
115
|
-
ANDROID_LOG_DEBUG,
|
|
116
|
-
"MiniAudioFileWriter",
|
|
117
|
-
"Writing %llu frames without conversion to file: %s",
|
|
118
|
-
framesWritten,
|
|
119
|
-
filePath_.c_str());
|
|
182
|
+
result = ma_encoder_write_pcm_frames(encoder_.get(), data, numFrames, &framesWritten);
|
|
120
183
|
|
|
121
184
|
if (result != MA_SUCCESS) {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
filePath_.c_str());
|
|
185
|
+
invokeOnErrorCallback(
|
|
186
|
+
"Failed to write audio data to file: " + filePath_ +
|
|
187
|
+
std::string(ma_result_description(result)));
|
|
188
|
+
return false;
|
|
127
189
|
}
|
|
128
190
|
|
|
191
|
+
framesWritten_.fetch_add(numFrames, std::memory_order_acq_rel);
|
|
129
192
|
return result == MA_SUCCESS;
|
|
130
193
|
}
|
|
131
194
|
|
|
@@ -135,16 +198,20 @@ bool MiniAudioFileWriter::writeAudioData(void *data, int numFrames) {
|
|
|
135
198
|
encoder_.get(), processingBuffer_, convertedFrameCount, &framesWritten);
|
|
136
199
|
|
|
137
200
|
if (result != MA_SUCCESS) {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
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;
|
|
143
205
|
}
|
|
144
206
|
|
|
207
|
+
framesWritten_.fetch_add(numFrames, std::memory_order_acq_rel);
|
|
145
208
|
return result == MA_SUCCESS;
|
|
146
209
|
}
|
|
147
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.
|
|
148
215
|
ma_uint64 MiniAudioFileWriter::convertBuffer(void *data, int numFrames) {
|
|
149
216
|
ma_uint64 inputFrameCount = numFrames;
|
|
150
217
|
ma_uint64 outputFrameCount = 0;
|
|
@@ -153,85 +220,77 @@ ma_uint64 MiniAudioFileWriter::convertBuffer(void *data, int numFrames) {
|
|
|
153
220
|
converter_.get(), inputFrameCount, &outputFrameCount);
|
|
154
221
|
|
|
155
222
|
ma_data_converter_process_pcm_frames(
|
|
156
|
-
converter_.get(),
|
|
157
|
-
data,
|
|
158
|
-
&inputFrameCount,
|
|
159
|
-
processingBuffer_,
|
|
160
|
-
&outputFrameCount);
|
|
223
|
+
converter_.get(), data, &inputFrameCount, processingBuffer_, &outputFrameCount);
|
|
161
224
|
|
|
162
225
|
return outputFrameCount;
|
|
163
226
|
}
|
|
164
227
|
|
|
165
|
-
|
|
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() {
|
|
166
233
|
if (!isConverterRequired_) {
|
|
167
|
-
return
|
|
234
|
+
return MA_SUCCESS;
|
|
168
235
|
}
|
|
169
236
|
|
|
170
237
|
ma_result result;
|
|
238
|
+
ma_format dataFormat = getDataFormat(fileProperties_);
|
|
171
239
|
|
|
172
240
|
ma_data_converter_config converterConfig = ma_data_converter_config_init(
|
|
173
241
|
ma_format_f32,
|
|
174
|
-
|
|
242
|
+
dataFormat,
|
|
175
243
|
streamChannelCount_,
|
|
176
|
-
|
|
177
|
-
streamSampleRate_,
|
|
178
|
-
|
|
244
|
+
fileProperties_->channelCount,
|
|
245
|
+
static_cast<int32_t>(streamSampleRate_),
|
|
246
|
+
fileProperties_->sampleRate);
|
|
179
247
|
|
|
180
248
|
converter_ = std::make_unique<ma_data_converter>();
|
|
181
249
|
result = ma_data_converter_init(&converterConfig, NULL, converter_.get());
|
|
182
250
|
|
|
183
251
|
if (result != MA_SUCCESS) {
|
|
184
|
-
|
|
185
|
-
ANDROID_LOG_ERROR,
|
|
186
|
-
"MiniAudioFileWriter",
|
|
187
|
-
"Failed to initialize miniaudio data converter for file: %s",
|
|
188
|
-
filePath_.c_str());
|
|
189
|
-
return false;
|
|
252
|
+
return result;
|
|
190
253
|
}
|
|
191
254
|
|
|
192
255
|
ma_data_converter_get_expected_output_frame_count(
|
|
193
256
|
converter_.get(), streamMaxBufferSize_, &processingBufferLength_);
|
|
194
257
|
|
|
195
258
|
processingBuffer_ = ma_malloc(
|
|
196
|
-
processingBufferLength_ *
|
|
197
|
-
ma_get_bytes_per_sample(fileOptions_->getDataFormat()),
|
|
259
|
+
processingBufferLength_ * fileProperties_->channelCount * ma_get_bytes_per_sample(dataFormat),
|
|
198
260
|
NULL);
|
|
199
261
|
|
|
200
|
-
return
|
|
262
|
+
return MA_SUCCESS;
|
|
201
263
|
}
|
|
202
264
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
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() {
|
|
206
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();
|
|
207
279
|
|
|
208
280
|
ma_encoder_config config = ma_encoder_config_init(
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
281
|
+
getFormat(fileProperties_),
|
|
282
|
+
getDataFormat(fileProperties_),
|
|
283
|
+
fileProperties_->channelCount,
|
|
284
|
+
fileProperties_->sampleRate);
|
|
213
285
|
|
|
214
286
|
encoder_ = std::make_unique<ma_encoder>();
|
|
215
287
|
result = ma_encoder_init_file(filePath_.c_str(), &config, encoder_.get());
|
|
216
288
|
|
|
217
|
-
|
|
218
|
-
__android_log_print(
|
|
219
|
-
ANDROID_LOG_ERROR,
|
|
220
|
-
"MiniAudioFileWriter",
|
|
221
|
-
"Failed to initialize miniaudio encoder for file: %s",
|
|
222
|
-
filePath_.c_str());
|
|
223
|
-
return false;
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
return true;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
bool MiniAudioFileWriter::isFileOpen() {
|
|
230
|
-
return isFileOpen_.load();
|
|
289
|
+
return result;
|
|
231
290
|
}
|
|
232
291
|
|
|
233
292
|
bool MiniAudioFileWriter::isConverterRequired() {
|
|
234
|
-
return isConverterRequired_.load();
|
|
293
|
+
return isConverterRequired_.load(std::memory_order_acquire);
|
|
235
294
|
}
|
|
236
295
|
|
|
237
296
|
} // namespace audioapi
|
package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.h
CHANGED
|
@@ -3,31 +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>
|
|
9
|
+
#include <tuple>
|
|
8
10
|
|
|
9
11
|
namespace audioapi {
|
|
10
12
|
|
|
11
|
-
class MiniAudioFileOptions;
|
|
12
|
-
|
|
13
13
|
class MiniAudioFileWriter : public AndroidFileWriterBackend {
|
|
14
14
|
public:
|
|
15
|
-
MiniAudioFileWriter(
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
size_t androidFlags);
|
|
20
|
-
~MiniAudioFileWriter() override;
|
|
15
|
+
explicit MiniAudioFileWriter(
|
|
16
|
+
const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
|
|
17
|
+
const std::shared_ptr<AudioFileProperties> &fileProperties);
|
|
18
|
+
~MiniAudioFileWriter();
|
|
21
19
|
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
OpenFileResult openFile(float streamSampleRate, int32_t streamChannelCount, int32_t streamMaxBufferSize) override;
|
|
21
|
+
CloseFileResult closeFile() override;
|
|
24
22
|
|
|
25
23
|
bool writeAudioData(void *data, int numFrames) override;
|
|
26
24
|
|
|
27
25
|
private:
|
|
28
|
-
std::shared_ptr<MiniAudioFileOptions> fileOptions_;
|
|
29
|
-
|
|
30
|
-
std::atomic<bool> isFileOpen_{false};
|
|
31
26
|
std::atomic<bool> isConverterRequired_{false};
|
|
32
27
|
|
|
33
28
|
std::unique_ptr<ma_encoder> encoder_{nullptr};
|
|
@@ -35,11 +30,10 @@ class MiniAudioFileWriter : public AndroidFileWriterBackend {
|
|
|
35
30
|
void *processingBuffer_{nullptr};
|
|
36
31
|
ma_uint64 processingBufferLength_{0};
|
|
37
32
|
|
|
38
|
-
|
|
39
|
-
|
|
33
|
+
ma_result initializeConverterIfNeeded();
|
|
34
|
+
ma_result initializeEncoder();
|
|
40
35
|
ma_uint64 convertBuffer(void *data, int numFrames);
|
|
41
36
|
|
|
42
|
-
bool isFileOpen();
|
|
43
37
|
bool isConverterRequired();
|
|
44
38
|
};
|
|
45
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
|
}
|