react-native-audio-api 0.11.0-alpha.0 → 0.11.0-alpha.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -11
- package/RNAudioAPI.podspec +25 -18
- package/android/build.gradle +41 -5
- package/android/src/main/cpp/audioapi/CMakeLists.txt +6 -3
- package/android/src/main/cpp/audioapi/android/AudioAPIModule.cpp +10 -16
- package/android/src/main/cpp/audioapi/android/OnLoad.cpp +1 -2
- package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.cpp +353 -74
- package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +32 -19
- package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +13 -20
- package/android/src/main/cpp/audioapi/android/core/utils/AndroidFileWriterBackend.h +15 -15
- package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.cpp +170 -0
- package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.h +46 -0
- package/android/src/main/cpp/audioapi/android/core/utils/AudioDecoder.cpp +46 -58
- package/android/src/main/cpp/audioapi/android/core/utils/FileOptions.cpp +83 -0
- package/android/src/main/cpp/audioapi/android/core/utils/FileOptions.h +22 -0
- package/android/src/main/cpp/audioapi/android/core/utils/MiniaudioImplementation.cpp +5 -0
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.cpp +366 -304
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.h +49 -91
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/ptrs.hpp +56 -0
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/utils.cpp +114 -0
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/utils.h +34 -0
- package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.cpp +154 -95
- package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.h +10 -16
- package/android/src/main/cpp/audioapi/android/system/NativeFileInfo.hpp +2 -1
- package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +189 -14
- package/android/src/main/java/com/swmansion/audioapi/core/NativeAudioPlayer.kt +10 -8
- package/android/src/main/java/com/swmansion/audioapi/core/NativeAudioRecorder.kt +10 -8
- package/android/src/main/java/com/swmansion/audioapi/system/AudioFocusListener.kt +5 -2
- package/android/src/main/java/com/swmansion/audioapi/system/CentralizedForegroundService.kt +128 -0
- package/android/src/main/java/com/swmansion/audioapi/system/ForegroundServiceManager.kt +116 -0
- package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionManager.kt +115 -107
- package/android/src/main/java/com/swmansion/audioapi/system/PermissionRequestListener.kt +2 -1
- package/android/src/main/java/com/swmansion/audioapi/system/notification/BaseNotification.kt +47 -0
- package/android/src/main/java/com/swmansion/audioapi/system/notification/NotificationRegistry.kt +191 -0
- package/android/src/main/java/com/swmansion/audioapi/system/notification/PlaybackNotification.kt +669 -0
- package/android/src/main/java/com/swmansion/audioapi/system/notification/PlaybackNotificationReceiver.kt +33 -0
- package/android/src/main/java/com/swmansion/audioapi/system/notification/RecordingNotification.kt +303 -0
- package/android/src/main/java/com/swmansion/audioapi/system/notification/RecordingNotificationReceiver.kt +45 -0
- package/android/src/main/java/com/swmansion/audioapi/system/notification/SimpleNotification.kt +119 -0
- package/android/src/main/jniLibs/arm64-v8a/libavcodec.so +0 -0
- package/android/src/main/jniLibs/arm64-v8a/libavformat.so +0 -0
- package/android/src/main/jniLibs/arm64-v8a/libavutil.so +0 -0
- package/android/src/main/jniLibs/arm64-v8a/libswresample.so +0 -0
- package/android/src/main/jniLibs/armeabi-v7a/libavcodec.so +0 -0
- package/android/src/main/jniLibs/armeabi-v7a/libavformat.so +0 -0
- package/android/src/main/jniLibs/armeabi-v7a/libavutil.so +0 -0
- package/android/src/main/jniLibs/armeabi-v7a/libswresample.so +0 -0
- package/android/src/main/jniLibs/x86/libavcodec.so +0 -0
- package/android/src/main/jniLibs/x86/libavformat.so +0 -0
- package/android/src/main/jniLibs/x86/libavutil.so +0 -0
- package/android/src/main/jniLibs/x86/libswresample.so +0 -0
- package/android/src/main/jniLibs/x86_64/libavcodec.so +0 -0
- package/android/src/main/jniLibs/x86_64/libavformat.so +0 -0
- package/android/src/main/jniLibs/x86_64/libavutil.so +0 -0
- package/android/src/main/jniLibs/x86_64/libswresample.so +0 -0
- package/android/src/oldarch/NativeAudioAPIModuleSpec.java +100 -76
- package/common/cpp/audioapi/AudioAPIModuleInstaller.h +45 -70
- package/common/cpp/audioapi/HostObjects/AudioContextHostObject.cpp +20 -22
- package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.cpp +3 -4
- package/common/cpp/audioapi/HostObjects/AudioParamHostObject.cpp +6 -8
- package/common/cpp/audioapi/HostObjects/AudioParamHostObject.h +2 -2
- package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +102 -63
- package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +4 -1
- package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.cpp +25 -31
- package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.h +3 -3
- package/common/cpp/audioapi/HostObjects/WorkletNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/WorkletProcessingNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.cpp +10 -18
- package/common/cpp/audioapi/HostObjects/destinations/AudioDestinationNodeHostObject.h +2 -3
- package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp +18 -30
- package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.cpp +50 -0
- package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.h +20 -0
- package/common/cpp/audioapi/HostObjects/effects/DelayNodeHostObject.cpp +27 -0
- package/common/cpp/audioapi/HostObjects/effects/DelayNodeHostObject.h +21 -0
- package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.cpp +2 -2
- package/common/cpp/audioapi/HostObjects/effects/IIRFilterNodeHostObject.cpp +33 -0
- package/common/cpp/audioapi/HostObjects/effects/IIRFilterNodeHostObject.h +20 -0
- package/common/cpp/audioapi/HostObjects/effects/PeriodicWaveHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.cpp +2 -2
- package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.cpp +6 -12
- package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.h +7 -7
- package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.cpp +109 -44
- package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +8 -2
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.cpp +27 -22
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.h +12 -10
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.cpp +17 -22
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.h +5 -7
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.cpp +25 -11
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.h +8 -8
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.cpp +19 -30
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.h +2 -4
- package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.cpp +7 -11
- package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.cpp +2 -2
- package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.cpp +6 -8
- package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/sources/RecorderAdapterNodeHostObject.h +4 -5
- package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.cpp +6 -2
- package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.h +5 -6
- package/common/cpp/audioapi/HostObjects/sources/WorkletSourceNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/utils/AudioDecoderHostObject.cpp +39 -60
- package/common/cpp/audioapi/HostObjects/utils/AudioStretcherHostObject.cpp +15 -30
- package/common/cpp/audioapi/core/AudioContext.cpp +23 -28
- package/common/cpp/audioapi/core/AudioContext.h +6 -3
- package/common/cpp/audioapi/core/AudioNode.cpp +17 -19
- package/common/cpp/audioapi/core/AudioNode.h +19 -8
- package/common/cpp/audioapi/core/AudioParam.cpp +68 -100
- package/common/cpp/audioapi/core/AudioParam.h +20 -12
- package/common/cpp/audioapi/core/BaseAudioContext.cpp +52 -34
- package/common/cpp/audioapi/core/BaseAudioContext.h +26 -14
- package/common/cpp/audioapi/core/OfflineAudioContext.cpp +12 -17
- package/common/cpp/audioapi/core/OfflineAudioContext.h +10 -5
- package/common/cpp/audioapi/core/analysis/AnalyserNode.cpp +13 -21
- package/common/cpp/audioapi/core/analysis/AnalyserNode.h +8 -6
- package/common/cpp/audioapi/core/destinations/AudioDestinationNode.cpp +1 -0
- package/common/cpp/audioapi/core/destinations/AudioDestinationNode.h +5 -3
- package/common/cpp/audioapi/core/effects/BiquadFilterNode.cpp +96 -74
- package/common/cpp/audioapi/core/effects/BiquadFilterNode.h +44 -15
- package/common/cpp/audioapi/core/effects/ConvolverNode.cpp +201 -0
- package/common/cpp/audioapi/core/effects/ConvolverNode.h +64 -0
- package/common/cpp/audioapi/core/effects/DelayNode.cpp +101 -0
- package/common/cpp/audioapi/core/effects/DelayNode.h +39 -0
- package/common/cpp/audioapi/core/effects/GainNode.cpp +1 -0
- package/common/cpp/audioapi/core/effects/GainNode.h +3 -1
- package/common/cpp/audioapi/core/effects/IIRFilterNode.cpp +166 -0
- package/common/cpp/audioapi/core/effects/IIRFilterNode.h +74 -0
- package/common/cpp/audioapi/core/effects/PeriodicWave.cpp +22 -35
- package/common/cpp/audioapi/core/effects/PeriodicWave.h +4 -9
- package/common/cpp/audioapi/core/effects/StereoPannerNode.cpp +4 -5
- package/common/cpp/audioapi/core/effects/StereoPannerNode.h +4 -2
- package/common/cpp/audioapi/core/effects/WorkletNode.cpp +11 -13
- package/common/cpp/audioapi/core/effects/WorkletNode.h +15 -12
- package/common/cpp/audioapi/core/effects/WorkletProcessingNode.cpp +4 -4
- package/common/cpp/audioapi/core/effects/WorkletProcessingNode.h +15 -14
- package/common/cpp/audioapi/core/inputs/AudioRecorder.cpp +39 -108
- package/common/cpp/audioapi/core/inputs/AudioRecorder.h +47 -46
- package/common/cpp/audioapi/core/sources/AudioBuffer.cpp +4 -6
- package/common/cpp/audioapi/core/sources/AudioBuffer.h +4 -7
- package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +48 -57
- package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +37 -34
- package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +55 -17
- package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +35 -28
- package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +41 -49
- package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +8 -6
- package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +29 -24
- package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +6 -6
- package/common/cpp/audioapi/core/sources/ConstantSourceNode.cpp +3 -4
- package/common/cpp/audioapi/core/sources/ConstantSourceNode.h +3 -1
- package/common/cpp/audioapi/core/sources/OscillatorNode.cpp +12 -23
- package/common/cpp/audioapi/core/sources/OscillatorNode.h +6 -4
- package/common/cpp/audioapi/core/sources/RecorderAdapterNode.cpp +43 -16
- package/common/cpp/audioapi/core/sources/RecorderAdapterNode.h +22 -17
- package/common/cpp/audioapi/core/sources/StreamerNode.cpp +105 -87
- package/common/cpp/audioapi/core/sources/StreamerNode.h +67 -33
- package/common/cpp/audioapi/core/sources/WorkletSourceNode.cpp +5 -7
- package/common/cpp/audioapi/core/sources/WorkletSourceNode.h +15 -13
- package/common/cpp/audioapi/core/types/AudioFormat.h +1 -11
- package/common/cpp/audioapi/core/utils/AudioDecoder.h +15 -6
- package/common/cpp/audioapi/core/utils/AudioFileWriter.cpp +41 -0
- package/common/cpp/audioapi/core/utils/AudioFileWriter.h +44 -0
- package/common/cpp/audioapi/core/utils/AudioNodeDestructor.cpp +5 -6
- package/common/cpp/audioapi/core/utils/AudioNodeDestructor.h +7 -10
- package/common/cpp/audioapi/core/utils/AudioNodeManager.cpp +17 -19
- package/common/cpp/audioapi/core/utils/AudioNodeManager.h +8 -11
- package/common/cpp/audioapi/core/utils/AudioParamEventQueue.cpp +3 -3
- package/common/cpp/audioapi/core/utils/AudioParamEventQueue.h +5 -5
- package/common/cpp/audioapi/core/utils/AudioRecorderCallback.cpp +101 -0
- package/common/cpp/audioapi/core/utils/AudioRecorderCallback.h +52 -0
- package/common/cpp/audioapi/core/utils/AudioStretcher.cpp +6 -6
- package/common/cpp/audioapi/core/utils/Constants.h +7 -3
- package/common/cpp/audioapi/core/utils/ParamChangeEvent.cpp +1 -0
- package/common/cpp/audioapi/core/utils/ParamChangeEvent.h +9 -9
- package/common/cpp/audioapi/core/utils/worklets/SafeIncludes.h +33 -34
- package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.cpp +17 -19
- package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.h +23 -19
- package/common/cpp/audioapi/dsp/AudioUtils.cpp +4 -10
- package/common/cpp/audioapi/dsp/AudioUtils.h +1 -1
- package/common/cpp/audioapi/dsp/Convolver.cpp +201 -0
- package/common/cpp/audioapi/dsp/Convolver.h +47 -0
- package/common/cpp/audioapi/dsp/FFT.cpp +1 -27
- package/common/cpp/audioapi/dsp/FFT.h +19 -3
- package/common/cpp/audioapi/dsp/VectorMath.cpp +24 -58
- package/common/cpp/audioapi/dsp/VectorMath.h +35 -8
- package/common/cpp/audioapi/dsp/Windows.cpp +4 -9
- package/common/cpp/audioapi/dsp/Windows.h +24 -23
- package/common/cpp/audioapi/events/AudioEventHandlerRegistry.cpp +12 -17
- package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +45 -40
- package/common/cpp/audioapi/events/IAudioEventHandlerRegistry.h +15 -7
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/avcodec.h +4 -4
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_desc.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_id.h +3 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_par.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/defs.h +3 -0
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/packet.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/smpte_436m.h +254 -0
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/version.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavformat/avformat.h +6 -6
- package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version_major.h +2 -0
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avassert.h +5 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avutil.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/channel_layout.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/csp.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/dict.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/ffversion.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/film_grain_params.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/frame.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hdr_dynamic_vivid_metadata.h +3 -3
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_opencl.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_qsv.h +0 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_vulkan.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/iamf.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/lfg.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/log.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/mathematics.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/opt.h +4 -4
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rational.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rc4.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/refstruct.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/spherical.h +6 -0
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tdrdi.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tx.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/version.h +3 -3
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/video_hint.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libswresample/swresample.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libswresample/version.h +1 -1
- package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64/libavcodec.framework/libavcodec +0 -0
- package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64_x86_64-simulator/libavcodec.framework/libavcodec +0 -0
- package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64/libavformat.framework/libavformat +0 -0
- package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64_x86_64-simulator/libavformat.framework/libavformat +0 -0
- package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64/libavutil.framework/libavutil +0 -0
- package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64_x86_64-simulator/libavutil.framework/libavutil +0 -0
- package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64/libswresample.framework/libswresample +0 -0
- package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64_x86_64-simulator/libswresample.framework/libswresample +0 -0
- package/common/cpp/audioapi/jsi/AudioArrayBuffer.h +4 -5
- package/common/cpp/audioapi/jsi/JsiHostObject.cpp +11 -13
- package/common/cpp/audioapi/jsi/JsiHostObject.h +26 -33
- package/common/cpp/audioapi/jsi/JsiPromise.cpp +34 -67
- package/common/cpp/audioapi/jsi/JsiPromise.h +65 -26
- package/common/cpp/audioapi/jsi/RuntimeLifecycleMonitor.cpp +7 -10
- package/common/cpp/audioapi/jsi/RuntimeLifecycleMonitor.h +1 -3
- package/common/cpp/audioapi/libs/ffmpeg/FFmpegDecoding.cpp +4 -3
- package/common/cpp/audioapi/libs/ffmpeg/relinking.md +24 -0
- package/common/cpp/audioapi/utils/AlignedAllocator.hpp +53 -0
- package/common/cpp/audioapi/utils/AudioArray.cpp +3 -8
- package/common/cpp/audioapi/utils/AudioArray.h +3 -11
- package/common/cpp/audioapi/utils/AudioBus.cpp +79 -149
- package/common/cpp/audioapi/utils/AudioBus.h +17 -14
- package/common/cpp/audioapi/utils/AudioFileProperties.cpp +92 -0
- package/common/cpp/audioapi/utils/AudioFileProperties.h +76 -0
- package/common/cpp/audioapi/utils/Benchmark.hpp +50 -47
- package/common/cpp/audioapi/utils/CircularAudioArray.cpp +6 -18
- package/common/cpp/audioapi/utils/CircularOverflowableAudioArray.cpp +6 -10
- package/common/cpp/audioapi/utils/CircularOverflowableAudioArray.h +2 -2
- package/common/cpp/audioapi/utils/CrossThreadEventScheduler.hpp +12 -9
- package/common/cpp/audioapi/utils/MoveOnlyFunction.hpp +17 -15
- package/common/cpp/audioapi/utils/Result.hpp +323 -0
- package/common/cpp/audioapi/utils/RingBiDirectionalBuffer.hpp +22 -28
- package/common/cpp/audioapi/utils/SpscChannel.hpp +329 -305
- package/common/cpp/audioapi/utils/ThreadPool.hpp +104 -20
- package/common/cpp/audioapi/utils/UnitConversion.h +9 -0
- package/common/cpp/test/CMakeLists.txt +15 -15
- package/common/cpp/test/src/AudioParamTest.cpp +4 -3
- package/common/cpp/test/src/AudioScheduledSourceTest.cpp +113 -0
- package/common/cpp/test/src/ConstantSourceTest.cpp +5 -7
- package/common/cpp/test/src/DelayTest.cpp +108 -0
- package/common/cpp/test/src/GainTest.cpp +4 -5
- package/common/cpp/test/src/IIRFilterTest.cpp +153 -0
- package/common/cpp/test/src/MockAudioEventHandlerRegistry.h +19 -11
- package/common/cpp/test/src/OscillatorTest.cpp +2 -1
- package/common/cpp/test/src/StereoPannerTest.cpp +6 -9
- package/common/cpp/test/src/biquad/BiquadFilterChromium.cpp +372 -0
- package/common/cpp/test/src/biquad/BiquadFilterChromium.h +65 -0
- package/common/cpp/test/src/biquad/BiquadFilterTest.cpp +272 -0
- package/common/cpp/test/src/biquad/BiquadFilterTest.h +47 -0
- package/ios/audioapi/ios/AudioAPIModule.h +4 -3
- package/ios/audioapi/ios/AudioAPIModule.mm +148 -34
- package/ios/audioapi/ios/core/IOSAudioPlayer.h +2 -2
- package/ios/audioapi/ios/core/IOSAudioPlayer.mm +7 -6
- package/ios/audioapi/ios/core/IOSAudioRecorder.h +28 -11
- package/ios/audioapi/ios/core/IOSAudioRecorder.mm +280 -45
- package/ios/audioapi/ios/core/NativeAudioPlayer.m +17 -14
- package/ios/audioapi/ios/core/NativeAudioRecorder.h +6 -3
- package/ios/audioapi/ios/core/NativeAudioRecorder.m +74 -6
- package/ios/audioapi/ios/core/utils/AudioDecoder.mm +22 -4
- package/ios/audioapi/ios/core/utils/FileOptions.h +33 -0
- package/ios/audioapi/ios/core/utils/FileOptions.mm +195 -0
- package/ios/audioapi/ios/core/utils/IOSFileWriter.h +53 -0
- package/ios/audioapi/ios/core/utils/IOSFileWriter.mm +239 -0
- package/ios/audioapi/ios/core/utils/IOSRecorderCallback.h +47 -0
- package/ios/audioapi/ios/core/utils/IOSRecorderCallback.mm +185 -0
- package/ios/audioapi/ios/system/AudioEngine.h +21 -16
- package/ios/audioapi/ios/system/AudioEngine.mm +153 -132
- package/ios/audioapi/ios/system/AudioSessionManager.h +25 -11
- package/ios/audioapi/ios/system/AudioSessionManager.mm +277 -203
- package/ios/audioapi/ios/system/NotificationManager.mm +47 -53
- package/ios/audioapi/ios/system/notification/BaseNotification.h +58 -0
- package/ios/audioapi/ios/system/notification/NotificationRegistry.h +70 -0
- package/ios/audioapi/ios/system/notification/NotificationRegistry.mm +172 -0
- package/ios/audioapi/ios/system/notification/PlaybackNotification.h +27 -0
- package/ios/audioapi/ios/system/notification/PlaybackNotification.mm +427 -0
- package/lib/commonjs/AudioAPIModule/AudioAPIModule.js +90 -0
- package/lib/commonjs/AudioAPIModule/AudioAPIModule.js.map +1 -0
- package/lib/commonjs/AudioAPIModule/globals.d.js +6 -0
- package/lib/commonjs/AudioAPIModule/globals.d.js.map +1 -0
- package/lib/commonjs/AudioAPIModule/index.js +14 -0
- package/lib/commonjs/AudioAPIModule/index.js.map +1 -0
- package/lib/commonjs/api.js +89 -12
- package/lib/commonjs/api.js.map +1 -1
- package/lib/commonjs/api.web.js +35 -14
- package/lib/commonjs/api.web.js.map +1 -1
- package/lib/commonjs/core/AudioBufferBaseSourceNode.js +3 -0
- package/lib/commonjs/core/AudioBufferBaseSourceNode.js.map +1 -1
- package/lib/commonjs/core/AudioBufferQueueSourceNode.js +5 -2
- package/lib/commonjs/core/AudioBufferQueueSourceNode.js.map +1 -1
- package/lib/commonjs/core/AudioContext.js +5 -8
- package/lib/commonjs/core/AudioContext.js.map +1 -1
- package/lib/commonjs/core/AudioNode.js +1 -1
- package/lib/commonjs/core/AudioNode.js.map +1 -1
- package/lib/commonjs/core/AudioParam.js +18 -11
- package/lib/commonjs/core/AudioParam.js.map +1 -1
- package/lib/commonjs/core/AudioRecorder.js +56 -55
- package/lib/commonjs/core/AudioRecorder.js.map +1 -1
- package/lib/commonjs/core/BaseAudioContext.js +61 -30
- package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
- package/lib/commonjs/core/ConvolverNode.js +37 -0
- package/lib/commonjs/core/ConvolverNode.js.map +1 -0
- package/lib/commonjs/core/DelayNode.js +17 -0
- package/lib/commonjs/core/DelayNode.js.map +1 -0
- package/lib/commonjs/core/IIRFilterNode.js +19 -0
- package/lib/commonjs/core/IIRFilterNode.js.map +1 -0
- package/lib/commonjs/core/OfflineAudioContext.js +3 -6
- package/lib/commonjs/core/OfflineAudioContext.js.map +1 -1
- package/lib/commonjs/plugin/withAudioAPI.js +46 -0
- package/lib/commonjs/plugin/withAudioAPI.js.map +1 -1
- package/lib/commonjs/specs/NativeAudioAPIModule.js.map +1 -1
- package/lib/commonjs/system/AudioManager.js +9 -15
- package/lib/commonjs/system/AudioManager.js.map +1 -1
- package/lib/commonjs/system/index.js +13 -0
- package/lib/commonjs/system/index.js.map +1 -1
- package/lib/commonjs/system/notification/PlaybackNotificationManager.js +138 -0
- package/lib/commonjs/system/notification/PlaybackNotificationManager.js.map +1 -0
- package/lib/commonjs/system/notification/RecordingNotificationManager.js +185 -0
- package/lib/commonjs/system/notification/RecordingNotificationManager.js.map +1 -0
- package/lib/commonjs/system/notification/SimpleNotificationManager.js +125 -0
- package/lib/commonjs/system/notification/SimpleNotificationManager.js.map +1 -0
- package/lib/commonjs/system/notification/index.js +45 -0
- package/lib/commonjs/system/notification/index.js.map +1 -0
- package/lib/commonjs/system/notification/types.js +6 -0
- package/lib/commonjs/system/notification/types.js.map +1 -0
- package/lib/commonjs/types.js +28 -35
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/utils/filePresets.js +43 -0
- package/lib/commonjs/utils/filePresets.js.map +1 -0
- package/lib/commonjs/utils/index.js +12 -27
- package/lib/commonjs/utils/index.js.map +1 -1
- package/lib/commonjs/web-core/AudioContext.js +21 -1
- package/lib/commonjs/web-core/AudioContext.js.map +1 -1
- package/lib/commonjs/web-core/ConvolverNode.js +40 -0
- package/lib/commonjs/web-core/ConvolverNode.js.map +1 -0
- package/lib/commonjs/web-core/ConvolverNodeOptions.js +6 -0
- package/lib/commonjs/web-core/ConvolverNodeOptions.js.map +1 -0
- package/lib/commonjs/web-core/DelayNode.js +17 -0
- package/lib/commonjs/web-core/DelayNode.js.map +1 -0
- package/lib/commonjs/web-core/IIRFilterNode.js +19 -0
- package/lib/commonjs/web-core/IIRFilterNode.js.map +1 -0
- package/lib/commonjs/web-core/OfflineAudioContext.js +20 -0
- package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
- package/lib/commonjs/web-system/index.js +17 -0
- package/lib/commonjs/web-system/index.js.map +1 -0
- package/lib/commonjs/web-system/notification/PlaybackNotificationManager.js +37 -0
- package/lib/commonjs/web-system/notification/PlaybackNotificationManager.js.map +1 -0
- package/lib/commonjs/web-system/notification/RecordingNotificationManager.js +37 -0
- package/lib/commonjs/web-system/notification/RecordingNotificationManager.js.map +1 -0
- package/lib/commonjs/web-system/notification/index.js +21 -0
- package/lib/commonjs/web-system/notification/index.js.map +1 -0
- package/lib/module/AudioAPIModule/AudioAPIModule.js +87 -0
- package/lib/module/AudioAPIModule/AudioAPIModule.js.map +1 -0
- package/lib/module/AudioAPIModule/globals.d.js +4 -0
- package/lib/module/AudioAPIModule/globals.d.js.map +1 -0
- package/lib/module/AudioAPIModule/index.js +4 -0
- package/lib/module/AudioAPIModule/index.js.map +1 -0
- package/lib/module/api.js +7 -12
- package/lib/module/api.js.map +1 -1
- package/lib/module/api.web.js +4 -1
- package/lib/module/api.web.js.map +1 -1
- package/lib/module/core/AudioBufferBaseSourceNode.js +3 -0
- package/lib/module/core/AudioBufferBaseSourceNode.js.map +1 -1
- package/lib/module/core/AudioBufferQueueSourceNode.js +5 -2
- package/lib/module/core/AudioBufferQueueSourceNode.js.map +1 -1
- package/lib/module/core/AudioContext.js +5 -8
- package/lib/module/core/AudioContext.js.map +1 -1
- package/lib/module/core/AudioNode.js +1 -1
- package/lib/module/core/AudioNode.js.map +1 -1
- package/lib/module/core/AudioParam.js +18 -11
- package/lib/module/core/AudioParam.js.map +1 -1
- package/lib/module/core/AudioRecorder.js +57 -56
- package/lib/module/core/AudioRecorder.js.map +1 -1
- package/lib/module/core/BaseAudioContext.js +63 -32
- package/lib/module/core/BaseAudioContext.js.map +1 -1
- package/lib/module/core/ConvolverNode.js +31 -0
- package/lib/module/core/ConvolverNode.js.map +1 -0
- package/lib/module/core/DelayNode.js +11 -0
- package/lib/module/core/DelayNode.js.map +1 -0
- package/lib/module/core/IIRFilterNode.js +13 -0
- package/lib/module/core/IIRFilterNode.js.map +1 -0
- package/lib/module/core/OfflineAudioContext.js +3 -6
- package/lib/module/core/OfflineAudioContext.js.map +1 -1
- package/lib/module/plugin/withAudioAPI.js +47 -1
- package/lib/module/plugin/withAudioAPI.js.map +1 -1
- package/lib/module/specs/NativeAudioAPIModule.js.map +1 -1
- package/lib/module/system/AudioManager.js +9 -15
- package/lib/module/system/AudioManager.js.map +1 -1
- package/lib/module/system/index.js +1 -0
- package/lib/module/system/index.js.map +1 -1
- package/lib/module/system/notification/PlaybackNotificationManager.js +134 -0
- package/lib/module/system/notification/PlaybackNotificationManager.js.map +1 -0
- package/lib/module/system/notification/RecordingNotificationManager.js +181 -0
- package/lib/module/system/notification/RecordingNotificationManager.js.map +1 -0
- package/lib/module/system/notification/SimpleNotificationManager.js +121 -0
- package/lib/module/system/notification/SimpleNotificationManager.js.map +1 -0
- package/lib/module/system/notification/index.js +7 -0
- package/lib/module/system/notification/index.js.map +1 -0
- package/lib/module/system/notification/types.js +4 -0
- package/lib/module/system/notification/types.js.map +1 -0
- package/lib/module/types.js +27 -34
- package/lib/module/types.js.map +1 -1
- package/lib/module/utils/filePresets.js +39 -0
- package/lib/module/utils/filePresets.js.map +1 -0
- package/lib/module/utils/index.js +10 -10
- package/lib/module/utils/index.js.map +1 -1
- package/lib/module/web-core/AudioContext.js +21 -1
- package/lib/module/web-core/AudioContext.js.map +1 -1
- package/lib/module/web-core/ConvolverNode.js +34 -0
- package/lib/module/web-core/ConvolverNode.js.map +1 -0
- package/lib/module/web-core/ConvolverNodeOptions.js +4 -0
- package/lib/module/web-core/ConvolverNodeOptions.js.map +1 -0
- package/lib/module/web-core/DelayNode.js +11 -0
- package/lib/module/web-core/DelayNode.js.map +1 -0
- package/lib/module/web-core/IIRFilterNode.js +13 -0
- package/lib/module/web-core/IIRFilterNode.js.map +1 -0
- package/lib/module/web-core/OfflineAudioContext.js +20 -0
- package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
- package/lib/module/web-system/index.js +4 -0
- package/lib/module/web-system/index.js.map +1 -0
- package/lib/module/web-system/notification/PlaybackNotificationManager.js +33 -0
- package/lib/module/web-system/notification/PlaybackNotificationManager.js.map +1 -0
- package/lib/module/web-system/notification/RecordingNotificationManager.js +33 -0
- package/lib/module/web-system/notification/RecordingNotificationManager.js.map +1 -0
- package/lib/module/web-system/notification/index.js +5 -0
- package/lib/module/web-system/notification/index.js.map +1 -0
- package/lib/typescript/AudioAPIModule/AudioAPIModule.d.ts +36 -0
- package/lib/typescript/AudioAPIModule/AudioAPIModule.d.ts.map +1 -0
- package/lib/typescript/AudioAPIModule/index.d.ts +2 -0
- package/lib/typescript/AudioAPIModule/index.d.ts.map +1 -0
- package/lib/typescript/api.d.ts +5 -9
- package/lib/typescript/api.d.ts.map +1 -1
- package/lib/typescript/api.web.d.ts +4 -1
- package/lib/typescript/api.web.d.ts.map +1 -1
- package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts +1 -0
- package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts.map +1 -1
- package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts +1 -1
- package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts.map +1 -1
- package/lib/typescript/core/AudioContext.d.ts +1 -1
- package/lib/typescript/core/AudioContext.d.ts.map +1 -1
- package/lib/typescript/core/AudioNode.d.ts +2 -1
- package/lib/typescript/core/AudioNode.d.ts.map +1 -1
- package/lib/typescript/core/AudioParam.d.ts.map +1 -1
- package/lib/typescript/core/AudioRecorder.d.ts +16 -6
- package/lib/typescript/core/AudioRecorder.d.ts.map +1 -1
- package/lib/typescript/core/BaseAudioContext.d.ts +9 -3
- package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
- package/lib/typescript/core/ConvolverNode.d.ts +12 -0
- package/lib/typescript/core/ConvolverNode.d.ts.map +1 -0
- package/lib/typescript/core/DelayNode.d.ts +9 -0
- package/lib/typescript/core/DelayNode.d.ts.map +1 -0
- package/lib/typescript/core/IIRFilterNode.d.ts +5 -0
- package/lib/typescript/core/IIRFilterNode.d.ts.map +1 -0
- package/lib/typescript/core/OfflineAudioContext.d.ts +1 -1
- package/lib/typescript/core/OfflineAudioContext.d.ts.map +1 -1
- package/lib/typescript/events/types.d.ts +6 -2
- package/lib/typescript/events/types.d.ts.map +1 -1
- package/lib/typescript/interfaces.d.ts +36 -34
- package/lib/typescript/interfaces.d.ts.map +1 -1
- package/lib/typescript/plugin/withAudioAPI.d.ts +1 -0
- package/lib/typescript/plugin/withAudioAPI.d.ts.map +1 -1
- package/lib/typescript/specs/NativeAudioAPIModule.d.ts +18 -6
- package/lib/typescript/specs/NativeAudioAPIModule.d.ts.map +1 -1
- package/lib/typescript/system/AudioManager.d.ts +5 -5
- package/lib/typescript/system/AudioManager.d.ts.map +1 -1
- package/lib/typescript/system/index.d.ts +1 -0
- package/lib/typescript/system/index.d.ts.map +1 -1
- package/lib/typescript/system/notification/PlaybackNotificationManager.d.ts +23 -0
- package/lib/typescript/system/notification/PlaybackNotificationManager.d.ts.map +1 -0
- package/lib/typescript/system/notification/RecordingNotificationManager.d.ts +24 -0
- package/lib/typescript/system/notification/RecordingNotificationManager.d.ts.map +1 -0
- package/lib/typescript/system/notification/SimpleNotificationManager.d.ts +21 -0
- package/lib/typescript/system/notification/SimpleNotificationManager.d.ts.map +1 -0
- package/lib/typescript/system/notification/index.d.ts +5 -0
- package/lib/typescript/system/notification/index.d.ts.map +1 -0
- package/lib/typescript/system/notification/types.d.ts +65 -0
- package/lib/typescript/system/notification/types.d.ts.map +1 -0
- package/lib/typescript/system/types.d.ts +0 -16
- package/lib/typescript/system/types.d.ts.map +1 -1
- package/lib/typescript/types.d.ts +58 -45
- package/lib/typescript/types.d.ts.map +1 -1
- package/lib/typescript/utils/filePresets.d.ts +9 -0
- package/lib/typescript/utils/filePresets.d.ts.map +1 -0
- package/lib/typescript/utils/index.d.ts +1 -8
- package/lib/typescript/utils/index.d.ts.map +1 -1
- package/lib/typescript/web-core/AudioContext.d.ts +9 -2
- package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
- package/lib/typescript/web-core/BaseAudioContext.d.ts +7 -1
- package/lib/typescript/web-core/BaseAudioContext.d.ts.map +1 -1
- package/lib/typescript/web-core/ConvolverNode.d.ts +11 -0
- package/lib/typescript/web-core/ConvolverNode.d.ts.map +1 -0
- package/lib/typescript/web-core/ConvolverNodeOptions.d.ts +6 -0
- package/lib/typescript/web-core/ConvolverNodeOptions.d.ts.map +1 -0
- package/lib/typescript/web-core/DelayNode.d.ts +8 -0
- package/lib/typescript/web-core/DelayNode.d.ts.map +1 -0
- package/lib/typescript/web-core/IIRFilterNode.d.ts +5 -0
- package/lib/typescript/web-core/IIRFilterNode.d.ts.map +1 -0
- package/lib/typescript/web-core/OfflineAudioContext.d.ts +8 -1
- package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
- package/lib/typescript/web-system/index.d.ts +2 -0
- package/lib/typescript/web-system/index.d.ts.map +1 -0
- package/lib/typescript/web-system/notification/PlaybackNotificationManager.d.ts +20 -0
- package/lib/typescript/web-system/notification/PlaybackNotificationManager.d.ts.map +1 -0
- package/lib/typescript/web-system/notification/RecordingNotificationManager.d.ts +20 -0
- package/lib/typescript/web-system/notification/RecordingNotificationManager.d.ts.map +1 -0
- package/lib/typescript/web-system/notification/index.d.ts +3 -0
- package/lib/typescript/web-system/notification/index.d.ts.map +1 -0
- package/package.json +11 -5
- package/scripts/download-prebuilt-binaries.sh +61 -0
- package/scripts/rnaa_utils.rb +8 -0
- package/scripts/validate-worklets-version.js +27 -0
- package/src/AudioAPIModule/AudioAPIModule.ts +122 -0
- package/src/AudioAPIModule/globals.d.ts +33 -0
- package/src/AudioAPIModule/index.ts +1 -0
- package/src/api.ts +21 -52
- package/src/api.web.ts +8 -2
- package/src/core/AudioBufferBaseSourceNode.ts +8 -0
- package/src/core/AudioBufferQueueSourceNode.ts +8 -2
- package/src/core/AudioContext.ts +5 -8
- package/src/core/AudioNode.ts +4 -3
- package/src/core/AudioParam.ts +18 -11
- package/src/core/AudioRecorder.ts +86 -84
- package/src/core/BaseAudioContext.ts +120 -54
- package/src/core/ConvolverNode.ts +35 -0
- package/src/core/DelayNode.ts +13 -0
- package/src/core/IIRFilterNode.ts +25 -0
- package/src/core/OfflineAudioContext.ts +4 -7
- package/src/events/types.ts +7 -3
- package/src/interfaces.ts +55 -34
- package/src/plugin/withAudioAPI.ts +61 -0
- package/src/specs/NativeAudioAPIModule.ts +26 -9
- package/src/system/AudioManager.ts +13 -32
- package/src/system/index.ts +1 -0
- package/src/system/notification/PlaybackNotificationManager.ts +197 -0
- package/src/system/notification/RecordingNotificationManager.ts +247 -0
- package/src/system/notification/SimpleNotificationManager.ts +175 -0
- package/src/system/notification/index.ts +4 -0
- package/src/system/notification/types.ts +111 -0
- package/src/system/types.ts +0 -18
- package/src/types.ts +61 -46
- package/src/utils/filePresets.ts +47 -0
- package/src/utils/index.ts +13 -19
- package/src/web-core/AudioContext.tsx +40 -1
- package/src/web-core/BaseAudioContext.tsx +11 -1
- package/src/web-core/ConvolverNode.tsx +43 -0
- package/src/web-core/ConvolverNodeOptions.tsx +6 -0
- package/src/web-core/DelayNode.tsx +12 -0
- package/src/web-core/IIRFilterNode.tsx +25 -0
- package/src/web-core/OfflineAudioContext.tsx +39 -0
- package/src/web-system/index.ts +1 -0
- package/src/web-system/notification/PlaybackNotificationManager.ts +64 -0
- package/src/web-system/notification/RecordingNotificationManager.ts +64 -0
- package/src/web-system/notification/index.ts +2 -0
- package/android/src/main/cpp/audioapi/android/core/utils/FileUtils.h +0 -34
- package/android/src/main/cpp/audioapi/android/core/utils/FileUtilts.cpp +0 -133
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.cpp +0 -154
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.h +0 -41
- package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.cpp +0 -47
- package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.h +0 -28
- package/android/src/main/java/com/swmansion/audioapi/system/LockScreenManager.kt +0 -325
- package/android/src/main/java/com/swmansion/audioapi/system/MediaNotificationManager.kt +0 -262
- package/android/src/main/java/com/swmansion/audioapi/system/MediaReceiver.kt +0 -57
- package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionCallback.kt +0 -61
- package/common/cpp/audioapi/libs/ffmpeg/INSTRUCTIONS.md +0 -32
- package/common/cpp/audioapi/libs/ffmpeg/create_xcframework.sh +0 -111
- package/common/cpp/audioapi/libs/ffmpeg/ffmpeg_setup.sh +0 -391
- package/ios/audioapi/ios/core/IOSAudioFileOptions.h +0 -35
- package/ios/audioapi/ios/core/IOSAudioFileOptions.mm +0 -135
- package/ios/audioapi/ios/core/IOSAudioFileWriter.h +0 -38
- package/ios/audioapi/ios/core/IOSAudioFileWriter.mm +0 -187
- package/ios/audioapi/ios/system/LockScreenManager.h +0 -24
- package/ios/audioapi/ios/system/LockScreenManager.mm +0 -310
- package/lib/commonjs/utils/bitEnums.js +0 -33
- package/lib/commonjs/utils/bitEnums.js.map +0 -1
- package/lib/module/utils/bitEnums.js +0 -27
- package/lib/module/utils/bitEnums.js.map +0 -1
- package/lib/typescript/utils/bitEnums.d.ts +0 -4
- package/lib/typescript/utils/bitEnums.d.ts.map +0 -1
- package/metro-config/index.d.ts +0 -5
- package/metro-config/index.js +0 -41
- package/metro-config/tsconfig.json +0 -3
- package/src/utils/bitEnums.ts +0 -51
- package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/Info.plist +5 -5
- package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64/libavcodec.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64_x86_64-simulator/libavcodec.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64/libavformat.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64_x86_64-simulator/libavformat.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/Info.plist +5 -5
- package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64/libavutil.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64_x86_64-simulator/libavutil.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/Info.plist +5 -5
- /package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64/libswresample.framework/Info.plist +0 -0
- /package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64_x86_64-simulator/libswresample.framework/Info.plist +0 -0
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
#import <AVFoundation/AVFoundation.h>
|
|
2
|
-
#import <Foundation/Foundation.h>
|
|
3
|
-
|
|
4
|
-
#include <audioapi/ios/core/IOSAudioFileOptions.h>
|
|
5
|
-
|
|
6
|
-
namespace audioapi {
|
|
7
|
-
|
|
8
|
-
IOSAudioFileOptions::IOSAudioFileOptions(float sampleRate, size_t channelCount, size_t bitRate, size_t flags)
|
|
9
|
-
{
|
|
10
|
-
sampleRate_ = sampleRate;
|
|
11
|
-
channelCount_ = channelCount;
|
|
12
|
-
bitRate_ = bitRate;
|
|
13
|
-
|
|
14
|
-
format_ = static_cast<uint8_t>(((flags >> 0) & 0xF));
|
|
15
|
-
quality_ = static_cast<uint8_t>(((flags >> 4) & 0xF));
|
|
16
|
-
flacCompressionLevel_ = static_cast<uint8_t>(((flags >> 8) & 0xF));
|
|
17
|
-
directory_ = static_cast<uint8_t>(((flags >> 12) & 0xF));
|
|
18
|
-
bitDepth_ = static_cast<uint8_t>(((flags >> 16) & 0xF));
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
AudioFormatID IOSAudioFileOptions::getFormat() const
|
|
22
|
-
{
|
|
23
|
-
switch (format_) {
|
|
24
|
-
case 1:
|
|
25
|
-
return kAudioFormatLinearPCM; // WAV <-> Linear PCM container
|
|
26
|
-
case 2:
|
|
27
|
-
return kAudioFormatLinearPCM; // CAF <-> Linear PCM container
|
|
28
|
-
case 3:
|
|
29
|
-
return kAudioFormatMPEG4AAC; // M4A <-> AAC
|
|
30
|
-
case 4:
|
|
31
|
-
return kAudioFormatFLAC; // FLAC <-> FLAC
|
|
32
|
-
default:
|
|
33
|
-
return kAudioFormatLinearPCM; // Default to Linear PCM
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
NSInteger IOSAudioFileOptions::getQuality() const
|
|
38
|
-
{
|
|
39
|
-
switch (quality_) {
|
|
40
|
-
case 1:
|
|
41
|
-
return AVAudioQualityMin;
|
|
42
|
-
case 2:
|
|
43
|
-
return AVAudioQualityLow;
|
|
44
|
-
case 3:
|
|
45
|
-
return AVAudioQualityMedium;
|
|
46
|
-
case 4:
|
|
47
|
-
return AVAudioQualityHigh;
|
|
48
|
-
case 5:
|
|
49
|
-
return AVAudioQualityMax;
|
|
50
|
-
default:
|
|
51
|
-
return AVAudioQualityMedium; // Default to Medium
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
NSInteger IOSAudioFileOptions::getFlacCompressionLevel() const
|
|
56
|
-
{
|
|
57
|
-
// Shift the quality from 1-9 to 0-8 for real values
|
|
58
|
-
// Default to 5 if out of range
|
|
59
|
-
return (flacCompressionLevel_ >= 1 && flacCompressionLevel_ <= 9) ? flacCompressionLevel_ - 1 : 5;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
NSSearchPathDirectory IOSAudioFileOptions::getDirectory() const
|
|
63
|
-
{
|
|
64
|
-
switch (directory_) {
|
|
65
|
-
case 1:
|
|
66
|
-
return NSDocumentDirectory;
|
|
67
|
-
case 2:
|
|
68
|
-
return NSCachesDirectory;
|
|
69
|
-
default:
|
|
70
|
-
return NSCachesDirectory; // Default to Caches
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
NSString *IOSAudioFileOptions::getFileExtension() const
|
|
75
|
-
{
|
|
76
|
-
switch (format_) {
|
|
77
|
-
case 1:
|
|
78
|
-
return @"wav"; // WAV <-> Linear PCM container
|
|
79
|
-
case 2:
|
|
80
|
-
return @"caf"; // CAF <-> Linear PCM container
|
|
81
|
-
case 3:
|
|
82
|
-
return @"m4a"; // M4A <-> AAC
|
|
83
|
-
case 4:
|
|
84
|
-
return @"flac"; // FLAC <-> FLAC
|
|
85
|
-
default:
|
|
86
|
-
return @"wav"; // Default to WAV
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
NSInteger IOSAudioFileOptions::getBitDepth() const
|
|
91
|
-
{
|
|
92
|
-
switch (bitDepth_) {
|
|
93
|
-
case 1:
|
|
94
|
-
return 16;
|
|
95
|
-
case 2:
|
|
96
|
-
return 24;
|
|
97
|
-
case 3:
|
|
98
|
-
return 32;
|
|
99
|
-
default:
|
|
100
|
-
return 24; // Default to 24-bit
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
NSDictionary *IOSAudioFileOptions::getFileSettings()
|
|
105
|
-
{
|
|
106
|
-
AudioFormatID format = getFormat();
|
|
107
|
-
NSMutableDictionary *settings = [NSMutableDictionary dictionary];
|
|
108
|
-
|
|
109
|
-
settings[AVFormatIDKey] = @(format);
|
|
110
|
-
settings[AVSampleRateKey] = @(sampleRate_);
|
|
111
|
-
settings[AVNumberOfChannelsKey] = @(channelCount_);
|
|
112
|
-
|
|
113
|
-
settings[AVEncoderAudioQualityKey] = @(getQuality());
|
|
114
|
-
|
|
115
|
-
if (format == kAudioFormatMPEG4AAC) {
|
|
116
|
-
settings[AVEncoderBitRateKey] = @(bitRate_);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
if (format == kAudioFormatLinearPCM) {
|
|
120
|
-
NSInteger bitDepth = getBitDepth();
|
|
121
|
-
|
|
122
|
-
settings[AVLinearPCMBitDepthKey] = @(bitDepth);
|
|
123
|
-
settings[AVLinearPCMIsFloatKey] = @(bitDepth == 32);
|
|
124
|
-
settings[AVLinearPCMIsBigEndianKey] = @(NO);
|
|
125
|
-
settings[AVLinearPCMIsNonInterleaved] = @(NO);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
if (format == kAudioFormatFLAC) {
|
|
129
|
-
settings[@"FLACCompressionLevel"] = @(getFlacCompressionLevel());
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
return settings;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
} // namespace audioapi
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#include <memory>
|
|
4
|
-
#include <string>
|
|
5
|
-
|
|
6
|
-
#ifndef __OBJC__ // when compiled as C++
|
|
7
|
-
typedef struct objc_object AVAudioFile;
|
|
8
|
-
typedef struct objc_object NSURL;
|
|
9
|
-
typedef struct objc_object AudioBufferList;
|
|
10
|
-
#endif // __OBJC__
|
|
11
|
-
|
|
12
|
-
namespace audioapi {
|
|
13
|
-
|
|
14
|
-
class IOSAudioFileOptions;
|
|
15
|
-
|
|
16
|
-
class IOSAudioFileWriter {
|
|
17
|
-
public:
|
|
18
|
-
IOSAudioFileWriter(float sampleRate, size_t channelCount, size_t bitRate, size_t iosFlags);
|
|
19
|
-
~IOSAudioFileWriter();
|
|
20
|
-
|
|
21
|
-
void openFile(AVAudioFormat *bufferFormat);
|
|
22
|
-
std::string closeFile();
|
|
23
|
-
|
|
24
|
-
bool writeAudioData(const AudioBufferList *audioBufferList, int numFrames);
|
|
25
|
-
|
|
26
|
-
private:
|
|
27
|
-
NSString *getISODateStringForDirectory();
|
|
28
|
-
NSString *getTimestampForFilename();
|
|
29
|
-
NSURL *getFileURL();
|
|
30
|
-
|
|
31
|
-
std::shared_ptr<IOSAudioFileOptions> fileOptions_;
|
|
32
|
-
AVAudioFile *audioFile_;
|
|
33
|
-
AVAudioFormat *bufferFormat_;
|
|
34
|
-
AVAudioConverter *converter_;
|
|
35
|
-
NSURL *fileURL_;
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
} // namespace audioapi
|
|
@@ -1,187 +0,0 @@
|
|
|
1
|
-
#import <AVFoundation/AVFoundation.h>
|
|
2
|
-
#import <Foundation/Foundation.h>
|
|
3
|
-
|
|
4
|
-
#include <audioapi/ios/core/IOSAudioFileOptions.h>
|
|
5
|
-
#include <audioapi/ios/core/IOSAudioFileWriter.h>
|
|
6
|
-
|
|
7
|
-
namespace audioapi {
|
|
8
|
-
IOSAudioFileWriter::IOSAudioFileWriter(float sampleRate, size_t channelCount, size_t bitRate, size_t iosFlags)
|
|
9
|
-
{
|
|
10
|
-
fileOptions_ = std::make_shared<IOSAudioFileOptions>(sampleRate, channelCount, bitRate, iosFlags);
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
IOSAudioFileWriter::~IOSAudioFileWriter()
|
|
14
|
-
{
|
|
15
|
-
fileURL_ = nil;
|
|
16
|
-
audioFile_ = nil;
|
|
17
|
-
converter_ = nil;
|
|
18
|
-
bufferFormat_ = nil;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
void IOSAudioFileWriter::openFile(AVAudioFormat *bufferFormat)
|
|
22
|
-
{
|
|
23
|
-
@autoreleasepool {
|
|
24
|
-
if (audioFile_ != nil) {
|
|
25
|
-
NSLog(@"⚠️ createFileForWriting: currentAudioFile_ already exists");
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
bufferFormat_ = bufferFormat;
|
|
30
|
-
|
|
31
|
-
NSError *error = nil;
|
|
32
|
-
NSDictionary *settings = fileOptions_->getFileSettings();
|
|
33
|
-
fileURL_ = getFileURL();
|
|
34
|
-
|
|
35
|
-
NSLog(@"ℹ️ Creating audio file at URL: %@", [fileURL_ absoluteString]);
|
|
36
|
-
|
|
37
|
-
audioFile_ = [[AVAudioFile alloc] initForWriting:fileURL_
|
|
38
|
-
settings:settings
|
|
39
|
-
commonFormat:AVAudioPCMFormatFloat32
|
|
40
|
-
interleaved:bufferFormat.interleaved
|
|
41
|
-
error:&error];
|
|
42
|
-
converter_ = [[AVAudioConverter alloc] initFromFormat:bufferFormat toFormat:[audioFile_ processingFormat]];
|
|
43
|
-
converter_.sampleRateConverterAlgorithm = AVSampleRateConverterAlgorithm_Normal;
|
|
44
|
-
converter_.sampleRateConverterQuality = AVAudioQualityMax;
|
|
45
|
-
converter_.primeMethod = AVAudioConverterPrimeMethod_None;
|
|
46
|
-
|
|
47
|
-
NSLog(@"buferFormat: %@ fileFormat: %@", bufferFormat, [audioFile_ processingFormat]);
|
|
48
|
-
|
|
49
|
-
if (error != nil || audioFile_ == nil) {
|
|
50
|
-
NSLog(@"Error creating audio file for writing: %@", [error debugDescription]);
|
|
51
|
-
audioFile_ = nil;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
std::string IOSAudioFileWriter::closeFile()
|
|
57
|
-
{
|
|
58
|
-
@autoreleasepool {
|
|
59
|
-
std::string filePath = [[fileURL_ path] UTF8String];
|
|
60
|
-
|
|
61
|
-
if (audioFile_ == nil) {
|
|
62
|
-
return "";
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// AVAudioFile automatically finalizes the file when deallocated
|
|
66
|
-
audioFile_ = nil;
|
|
67
|
-
fileURL_ = nil;
|
|
68
|
-
return filePath;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
bool IOSAudioFileWriter::writeAudioData(const AudioBufferList *audioBufferList, int numFrames)
|
|
73
|
-
{
|
|
74
|
-
if (audioFile_ == nil) {
|
|
75
|
-
NSLog(@"⚠️ writeAudioData: audioFile is nil, cannot write data");
|
|
76
|
-
return false;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
// TODO: not sure if this is necessary
|
|
80
|
-
@autoreleasepool {
|
|
81
|
-
NSError *error = nil;
|
|
82
|
-
AVAudioFormat *filePCMFormat = [audioFile_ processingFormat];
|
|
83
|
-
|
|
84
|
-
if (audioBufferList->mNumberBuffers != filePCMFormat.channelCount ||
|
|
85
|
-
bufferFormat_.sampleRate != filePCMFormat.sampleRate ||
|
|
86
|
-
bufferFormat_.interleaved != filePCMFormat.interleaved) {
|
|
87
|
-
int outputFrameCount = ceil(numFrames * filePCMFormat.sampleRate / bufferFormat_.sampleRate);
|
|
88
|
-
|
|
89
|
-
AVAudioPCMBuffer *inputBuffer = [[AVAudioPCMBuffer alloc] initWithPCMFormat:bufferFormat_
|
|
90
|
-
frameCapacity:(AVAudioFrameCount)numFrames];
|
|
91
|
-
|
|
92
|
-
for (int i = 0; i < bufferFormat_.channelCount; i++) {
|
|
93
|
-
memcpy(
|
|
94
|
-
inputBuffer.mutableAudioBufferList->mBuffers[i].mData,
|
|
95
|
-
audioBufferList->mBuffers[i].mData,
|
|
96
|
-
audioBufferList->mBuffers[i].mDataByteSize);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
inputBuffer.frameLength = numFrames;
|
|
100
|
-
AVAudioPCMBuffer *outputBuffer = [[AVAudioPCMBuffer alloc] initWithPCMFormat:filePCMFormat
|
|
101
|
-
frameCapacity:outputFrameCount];
|
|
102
|
-
outputBuffer.frameLength = outputFrameCount;
|
|
103
|
-
|
|
104
|
-
AVAudioConverterInputBlock inputBlock =
|
|
105
|
-
^AVAudioBuffer *_Nullable(AVAudioPacketCount inNumberOfPackets, AVAudioConverterInputStatus *outStatus)
|
|
106
|
-
{
|
|
107
|
-
// this line is probably an delusion, but for my sanity lets keep it
|
|
108
|
-
inNumberOfPackets = numFrames;
|
|
109
|
-
*outStatus = AVAudioConverterInputStatus_HaveData;
|
|
110
|
-
return inputBuffer;
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
[converter_ convertToBuffer:outputBuffer error:&error withInputFromBlock:inputBlock];
|
|
114
|
-
|
|
115
|
-
if (error != nil) {
|
|
116
|
-
NSLog(@"Error during audio conversion: %@", [error debugDescription]);
|
|
117
|
-
return false;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
[audioFile_ writeFromBuffer:outputBuffer error:&error];
|
|
121
|
-
|
|
122
|
-
if (error != nil) {
|
|
123
|
-
NSLog(@"Error writing audio data to file: %@", [error debugDescription]);
|
|
124
|
-
return false;
|
|
125
|
-
}
|
|
126
|
-
} else {
|
|
127
|
-
AVAudioPCMBuffer *processingBuffer = [[AVAudioPCMBuffer alloc] initWithPCMFormat:filePCMFormat
|
|
128
|
-
bufferListNoCopy:audioBufferList
|
|
129
|
-
deallocator:NULL];
|
|
130
|
-
|
|
131
|
-
[audioFile_ writeFromBuffer:processingBuffer error:&error];
|
|
132
|
-
|
|
133
|
-
if (error != nil) {
|
|
134
|
-
NSLog(@"Error writing audio data to file: %@", [error debugDescription]);
|
|
135
|
-
return false;
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
return true;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
NSString *IOSAudioFileWriter::getISODateStringForDirectory()
|
|
144
|
-
{
|
|
145
|
-
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
|
|
146
|
-
fmt.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
|
|
147
|
-
fmt.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"]; // or local if you prefer
|
|
148
|
-
fmt.dateFormat = @"yyyy-MM-dd";
|
|
149
|
-
return [fmt stringFromDate:[NSDate date]];
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
NSString *IOSAudioFileWriter::getTimestampForFilename()
|
|
153
|
-
{
|
|
154
|
-
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
|
|
155
|
-
fmt.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
|
|
156
|
-
fmt.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"]; // or local if you prefer
|
|
157
|
-
fmt.dateFormat = @"yyyyMMdd_HHmmss_SSS";
|
|
158
|
-
return [fmt stringFromDate:[NSDate date]];
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
NSURL *IOSAudioFileWriter::getFileURL()
|
|
162
|
-
{
|
|
163
|
-
NSError *error = nil;
|
|
164
|
-
|
|
165
|
-
NSSearchPathDirectory searchDirectory = fileOptions_->getDirectory();
|
|
166
|
-
NSString *directory = [NSString stringWithFormat:@"AudioAPI/%@", getISODateStringForDirectory()];
|
|
167
|
-
|
|
168
|
-
NSURL *baseURL = [[[NSFileManager defaultManager] URLsForDirectory:searchDirectory
|
|
169
|
-
inDomains:NSUserDomainMask] firstObject];
|
|
170
|
-
NSURL *dirURL = [baseURL URLByAppendingPathComponent:directory isDirectory:YES];
|
|
171
|
-
|
|
172
|
-
[[NSFileManager defaultManager] createDirectoryAtURL:dirURL
|
|
173
|
-
withIntermediateDirectories:YES
|
|
174
|
-
attributes:nil
|
|
175
|
-
error:&error];
|
|
176
|
-
|
|
177
|
-
if (error != nil) {
|
|
178
|
-
NSLog(@"Error creating directory for audio recordings: %@", [error debugDescription]);
|
|
179
|
-
dirURL = baseURL;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
NSString *fileName =
|
|
183
|
-
[NSString stringWithFormat:@"audio_%@.%@", getTimestampForFilename(), fileOptions_->getFileExtension()];
|
|
184
|
-
return [dirURL URLByAppendingPathComponent:fileName];
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
} // namespace audioapi
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#import <AVFoundation/AVFoundation.h>
|
|
4
|
-
#import <Foundation/Foundation.h>
|
|
5
|
-
#import <MediaPlayer/MediaPlayer.h>
|
|
6
|
-
|
|
7
|
-
@class AudioAPIModule;
|
|
8
|
-
|
|
9
|
-
@interface LockScreenManager : NSObject
|
|
10
|
-
|
|
11
|
-
@property (nonatomic, weak) AudioAPIModule *audioAPIModule;
|
|
12
|
-
|
|
13
|
-
@property (nonatomic, weak) MPNowPlayingInfoCenter *playingInfoCenter;
|
|
14
|
-
@property (nonatomic, copy) NSString *artworkUrl;
|
|
15
|
-
@property (nonatomic, assign) bool isReceivingRemoteCommands;
|
|
16
|
-
|
|
17
|
-
- (instancetype)initWithAudioAPIModule:(AudioAPIModule *)audioAPIModule;
|
|
18
|
-
- (void)cleanup;
|
|
19
|
-
|
|
20
|
-
- (void)setLockScreenInfo:(NSDictionary *)info;
|
|
21
|
-
- (void)resetLockScreenInfo;
|
|
22
|
-
- (void)enableRemoteCommand:(NSString *)name enabled:(BOOL)enabled;
|
|
23
|
-
|
|
24
|
-
@end
|
|
@@ -1,310 +0,0 @@
|
|
|
1
|
-
#import <MediaPlayer/MediaPlayer.h>
|
|
2
|
-
#import <audioapi/ios/AudioAPIModule.h>
|
|
3
|
-
#import <audioapi/ios/system/LockScreenManager.h>
|
|
4
|
-
|
|
5
|
-
#define LOCK_SCREEN_INFO \
|
|
6
|
-
@{ \
|
|
7
|
-
@"album" : MPMediaItemPropertyAlbumTitle, \
|
|
8
|
-
@"artist" : MPMediaItemPropertyArtist, \
|
|
9
|
-
@"duration" : MPMediaItemPropertyPlaybackDuration, \
|
|
10
|
-
@"title" : MPMediaItemPropertyTitle, \
|
|
11
|
-
@"speed" : MPNowPlayingInfoPropertyPlaybackRate, \
|
|
12
|
-
@"elapsedTime" : MPNowPlayingInfoPropertyElapsedPlaybackTime, \
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
@implementation LockScreenManager
|
|
16
|
-
|
|
17
|
-
- (instancetype)initWithAudioAPIModule:(AudioAPIModule *)audioAPIModule
|
|
18
|
-
{
|
|
19
|
-
if (self = [super init]) {
|
|
20
|
-
self.audioAPIModule = audioAPIModule;
|
|
21
|
-
self.playingInfoCenter = [MPNowPlayingInfoCenter defaultCenter];
|
|
22
|
-
self.isReceivingRemoteCommands = false;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
return self;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
- (void)toggleRemoteCommands:(bool)enable
|
|
29
|
-
{
|
|
30
|
-
if (enable && !self.isReceivingRemoteCommands) {
|
|
31
|
-
self.isReceivingRemoteCommands = true;
|
|
32
|
-
dispatch_async(dispatch_get_main_queue(), ^{
|
|
33
|
-
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
|
|
34
|
-
});
|
|
35
|
-
return;
|
|
36
|
-
} else if (!enable && self.isReceivingRemoteCommands) {
|
|
37
|
-
self.isReceivingRemoteCommands = false;
|
|
38
|
-
dispatch_async(dispatch_get_main_queue(), ^{
|
|
39
|
-
[[UIApplication sharedApplication] endReceivingRemoteControlEvents];
|
|
40
|
-
});
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
- (void)cleanup
|
|
46
|
-
{
|
|
47
|
-
NSLog(@"[LockScreenManager] cleanup");
|
|
48
|
-
[self toggleRemoteCommands:false];
|
|
49
|
-
[self resetLockScreenInfo];
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
- (void)setLockScreenInfo:(NSDictionary *)info
|
|
53
|
-
{
|
|
54
|
-
self.playingInfoCenter = [MPNowPlayingInfoCenter defaultCenter];
|
|
55
|
-
[self toggleRemoteCommands:true];
|
|
56
|
-
|
|
57
|
-
// now playing info(lock screen info)
|
|
58
|
-
NSMutableDictionary *lockScreenInfoDict;
|
|
59
|
-
|
|
60
|
-
if (self.playingInfoCenter.nowPlayingInfo == nil) {
|
|
61
|
-
lockScreenInfoDict = [NSMutableDictionary dictionary];
|
|
62
|
-
} else {
|
|
63
|
-
lockScreenInfoDict = [[NSMutableDictionary alloc] initWithDictionary:self.playingInfoCenter.nowPlayingInfo];
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
for (NSString *key in LOCK_SCREEN_INFO) {
|
|
67
|
-
if ([info objectForKey:key] != nil) {
|
|
68
|
-
[lockScreenInfoDict setValue:[info objectForKey:key] forKey:[LOCK_SCREEN_INFO objectForKey:key]];
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
self.playingInfoCenter.nowPlayingInfo = lockScreenInfoDict;
|
|
73
|
-
|
|
74
|
-
// playback state
|
|
75
|
-
NSString *state = [info objectForKey:@"state"];
|
|
76
|
-
|
|
77
|
-
if (state != nil) {
|
|
78
|
-
if ([state isEqualToString:@"state_playing"]) {
|
|
79
|
-
self.playingInfoCenter.playbackState = MPNowPlayingPlaybackStatePlaying;
|
|
80
|
-
} else if ([state isEqualToString:@"state_paused"]) {
|
|
81
|
-
self.playingInfoCenter.playbackState = MPNowPlayingPlaybackStatePaused;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
self.playingInfoCenter.playbackState = MPNowPlayingPlaybackStatePaused;
|
|
86
|
-
|
|
87
|
-
// artwork
|
|
88
|
-
NSString *artworkUrl = [self getArtworkUrl:[info objectForKey:@"artwork"]];
|
|
89
|
-
[self updateArtworkIfNeeded:artworkUrl];
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
- (void)resetLockScreenInfo
|
|
93
|
-
{
|
|
94
|
-
[self toggleRemoteCommands:false];
|
|
95
|
-
self.playingInfoCenter = [MPNowPlayingInfoCenter defaultCenter];
|
|
96
|
-
self.playingInfoCenter.nowPlayingInfo = nil;
|
|
97
|
-
self.artworkUrl = nil;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
- (NSString *)getArtworkUrl:(NSString *)artwork
|
|
101
|
-
{
|
|
102
|
-
NSString *artworkUrl = nil;
|
|
103
|
-
|
|
104
|
-
if (artwork) {
|
|
105
|
-
if ([artwork isKindOfClass:[NSString class]]) {
|
|
106
|
-
artworkUrl = artwork;
|
|
107
|
-
} else if ([[artwork valueForKey:@"uri"] isKindOfClass:[NSString class]]) {
|
|
108
|
-
artworkUrl = [artwork valueForKey:@"uri"];
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
return artworkUrl;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
- (void)updateArtworkIfNeeded:(id)artworkUrl
|
|
116
|
-
{
|
|
117
|
-
if (artworkUrl == nil) {
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
MPNowPlayingInfoCenter *center = [MPNowPlayingInfoCenter defaultCenter];
|
|
122
|
-
if ([artworkUrl isEqualToString:self.artworkUrl] &&
|
|
123
|
-
[center.nowPlayingInfo objectForKey:MPMediaItemPropertyArtwork] != nil) {
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
self.artworkUrl = artworkUrl;
|
|
128
|
-
|
|
129
|
-
// Custom handling of artwork in another thread, will be loaded async
|
|
130
|
-
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
|
|
131
|
-
UIImage *image = nil;
|
|
132
|
-
|
|
133
|
-
// check whether artwork path is present
|
|
134
|
-
if ([artworkUrl isEqual:@""]) {
|
|
135
|
-
return;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
// artwork is url download from the interwebs
|
|
139
|
-
if ([artworkUrl hasPrefix:@"http://"] || [artworkUrl hasPrefix:@"https://"]) {
|
|
140
|
-
NSURL *imageURL = [NSURL URLWithString:artworkUrl];
|
|
141
|
-
NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
|
|
142
|
-
image = [UIImage imageWithData:imageData];
|
|
143
|
-
} else {
|
|
144
|
-
NSString *localArtworkUrl = [artworkUrl stringByReplacingOccurrencesOfString:@"file://" withString:@""];
|
|
145
|
-
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:localArtworkUrl];
|
|
146
|
-
if (fileExists) {
|
|
147
|
-
image = [UIImage imageNamed:localArtworkUrl];
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
// Check if image was available otherwise don't do anything
|
|
152
|
-
if (image == nil) {
|
|
153
|
-
return;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
// check whether image is loaded
|
|
157
|
-
CGImageRef cgref = [image CGImage];
|
|
158
|
-
CIImage *cim = [image CIImage];
|
|
159
|
-
|
|
160
|
-
if (cim == nil && cgref == NULL) {
|
|
161
|
-
return;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
dispatch_async(dispatch_get_main_queue(), ^{
|
|
165
|
-
// Check if URL wasn't changed in the meantime
|
|
166
|
-
if (![artworkUrl isEqual:self.artworkUrl]) {
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
MPNowPlayingInfoCenter *center = [MPNowPlayingInfoCenter defaultCenter];
|
|
171
|
-
MPMediaItemArtwork *artwork = [[MPMediaItemArtwork alloc] initWithBoundsSize:image.size
|
|
172
|
-
requestHandler:^UIImage *_Nonnull(CGSize size) {
|
|
173
|
-
return image;
|
|
174
|
-
}];
|
|
175
|
-
NSMutableDictionary *mediaDict = (center.nowPlayingInfo != nil)
|
|
176
|
-
? [[NSMutableDictionary alloc] initWithDictionary:center.nowPlayingInfo]
|
|
177
|
-
: [NSMutableDictionary dictionary];
|
|
178
|
-
[mediaDict setValue:artwork forKey:MPMediaItemPropertyArtwork];
|
|
179
|
-
center.nowPlayingInfo = mediaDict;
|
|
180
|
-
});
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
- (void)enableRemoteCommand:(NSString *)name enabled:(BOOL)enabled
|
|
185
|
-
{
|
|
186
|
-
MPRemoteCommandCenter *remoteCenter = [MPRemoteCommandCenter sharedCommandCenter];
|
|
187
|
-
|
|
188
|
-
if ([name isEqual:@"remotePlay"]) {
|
|
189
|
-
[self enableCommand:remoteCenter.playCommand withSelector:@selector(onPlay:) enabled:enabled];
|
|
190
|
-
} else if ([name isEqual:@"remotePause"]) {
|
|
191
|
-
[self enableCommand:remoteCenter.pauseCommand withSelector:@selector(onPause:) enabled:enabled];
|
|
192
|
-
} else if ([name isEqual:@"remoteStop"]) {
|
|
193
|
-
[self enableCommand:remoteCenter.stopCommand withSelector:@selector(onStop:) enabled:enabled];
|
|
194
|
-
} else if ([name isEqual:@"remoteTogglePlayPause"]) {
|
|
195
|
-
[self enableCommand:remoteCenter.togglePlayPauseCommand withSelector:@selector(onTogglePlayPause:) enabled:enabled];
|
|
196
|
-
} else if ([name isEqual:@"remoteChangePlaybackRate"]) {
|
|
197
|
-
[self enableCommand:remoteCenter.changePlaybackRateCommand
|
|
198
|
-
withSelector:@selector(onChangePlaybackRate:)
|
|
199
|
-
enabled:enabled];
|
|
200
|
-
} else if ([name isEqual:@"remoteNextTrack"]) {
|
|
201
|
-
[self enableCommand:remoteCenter.nextTrackCommand withSelector:@selector(onNextTrack:) enabled:enabled];
|
|
202
|
-
} else if ([name isEqual:@"remotePreviousTrack"]) {
|
|
203
|
-
[self enableCommand:remoteCenter.previousTrackCommand withSelector:@selector(onPreviousTrack:) enabled:enabled];
|
|
204
|
-
} else if ([name isEqual:@"remoteSkipForward"]) {
|
|
205
|
-
remoteCenter.skipForwardCommand.preferredIntervals = @[ @15 ];
|
|
206
|
-
[self enableCommand:remoteCenter.skipForwardCommand withSelector:@selector(onSkipForward:) enabled:enabled];
|
|
207
|
-
} else if ([name isEqual:@"remoteSkipBackward"]) {
|
|
208
|
-
remoteCenter.skipBackwardCommand.preferredIntervals = @[ @15 ];
|
|
209
|
-
[self enableCommand:remoteCenter.skipBackwardCommand withSelector:@selector(onSkipBackward:) enabled:enabled];
|
|
210
|
-
} else if ([name isEqual:@"remoteSeekForward"]) {
|
|
211
|
-
[self enableCommand:remoteCenter.seekForwardCommand withSelector:@selector(onSeekForward:) enabled:enabled];
|
|
212
|
-
} else if ([name isEqual:@"remoteSeekBackward"]) {
|
|
213
|
-
[self enableCommand:remoteCenter.seekBackwardCommand withSelector:@selector(onSeekBackward:) enabled:enabled];
|
|
214
|
-
} else if ([name isEqual:@"remoteChangePlaybackPosition"]) {
|
|
215
|
-
[self enableCommand:remoteCenter.changePlaybackPositionCommand
|
|
216
|
-
withSelector:@selector(onChangePlaybackPosition:)
|
|
217
|
-
enabled:enabled];
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
- (void)enableCommand:(MPRemoteCommand *)command withSelector:(SEL)selector enabled:(BOOL)enabled
|
|
222
|
-
{
|
|
223
|
-
[command removeTarget:self action:selector];
|
|
224
|
-
if (enabled) {
|
|
225
|
-
[command addTarget:self action:selector];
|
|
226
|
-
}
|
|
227
|
-
command.enabled = enabled;
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
- (MPRemoteCommandHandlerStatus)onPlay:(MPRemoteCommandEvent *)event
|
|
231
|
-
{
|
|
232
|
-
[self.audioAPIModule invokeHandlerWithEventName:@"remotePlay" eventBody:nil];
|
|
233
|
-
return MPRemoteCommandHandlerStatusSuccess;
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
- (MPRemoteCommandHandlerStatus)onPause:(MPRemoteCommandEvent *)event
|
|
237
|
-
{
|
|
238
|
-
[self.audioAPIModule invokeHandlerWithEventName:@"remotePause" eventBody:nil];
|
|
239
|
-
return MPRemoteCommandHandlerStatusSuccess;
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
- (MPRemoteCommandHandlerStatus)onStop:(MPRemoteCommandEvent *)event
|
|
243
|
-
{
|
|
244
|
-
[self.audioAPIModule invokeHandlerWithEventName:@"remoteStop" eventBody:nil];
|
|
245
|
-
return MPRemoteCommandHandlerStatusSuccess;
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
- (MPRemoteCommandHandlerStatus)onTogglePlayPause:(MPRemoteCommandEvent *)event
|
|
249
|
-
{
|
|
250
|
-
[self.audioAPIModule invokeHandlerWithEventName:@"remoteTogglePlayPause" eventBody:nil];
|
|
251
|
-
return MPRemoteCommandHandlerStatusSuccess;
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
- (MPRemoteCommandHandlerStatus)onChangePlaybackRate:(MPChangePlaybackRateCommandEvent *)event
|
|
255
|
-
{
|
|
256
|
-
NSDictionary *body = @{@"value" : [NSNumber numberWithDouble:event.playbackRate]};
|
|
257
|
-
|
|
258
|
-
[self.audioAPIModule invokeHandlerWithEventName:@"remoteChangePlaybackRate" eventBody:body];
|
|
259
|
-
return MPRemoteCommandHandlerStatusSuccess;
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
- (MPRemoteCommandHandlerStatus)onNextTrack:(MPRemoteCommandEvent *)event
|
|
263
|
-
{
|
|
264
|
-
[self.audioAPIModule invokeHandlerWithEventName:@"remoteNextTrack" eventBody:nil];
|
|
265
|
-
return MPRemoteCommandHandlerStatusSuccess;
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
- (MPRemoteCommandHandlerStatus)onPreviousTrack:(MPRemoteCommandEvent *)event
|
|
269
|
-
{
|
|
270
|
-
[self.audioAPIModule invokeHandlerWithEventName:@"remotePreviousTrack" eventBody:nil];
|
|
271
|
-
return MPRemoteCommandHandlerStatusSuccess;
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
- (MPRemoteCommandHandlerStatus)onSeekForward:(MPRemoteCommandEvent *)event
|
|
275
|
-
{
|
|
276
|
-
[self.audioAPIModule invokeHandlerWithEventName:@"remoteSeekForward" eventBody:nil];
|
|
277
|
-
return MPRemoteCommandHandlerStatusSuccess;
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
- (MPRemoteCommandHandlerStatus)onSeekBackward:(MPRemoteCommandEvent *)event
|
|
281
|
-
{
|
|
282
|
-
[self.audioAPIModule invokeHandlerWithEventName:@"remoteSeekBackward" eventBody:nil];
|
|
283
|
-
return MPRemoteCommandHandlerStatusSuccess;
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
- (MPRemoteCommandHandlerStatus)onSkipForward:(MPSkipIntervalCommandEvent *)event
|
|
287
|
-
{
|
|
288
|
-
NSDictionary *body = @{@"value" : [NSNumber numberWithDouble:event.interval]};
|
|
289
|
-
|
|
290
|
-
[self.audioAPIModule invokeHandlerWithEventName:@"remoteSkipForward" eventBody:body];
|
|
291
|
-
return MPRemoteCommandHandlerStatusSuccess;
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
- (MPRemoteCommandHandlerStatus)onSkipBackward:(MPSkipIntervalCommandEvent *)event
|
|
295
|
-
{
|
|
296
|
-
NSDictionary *body = @{@"value" : [NSNumber numberWithDouble:event.interval]};
|
|
297
|
-
|
|
298
|
-
[self.audioAPIModule invokeHandlerWithEventName:@"remoteSkipBackward" eventBody:body];
|
|
299
|
-
return MPRemoteCommandHandlerStatusSuccess;
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
- (MPRemoteCommandHandlerStatus)onChangePlaybackPosition:(MPChangePlaybackPositionCommandEvent *)event
|
|
303
|
-
{
|
|
304
|
-
NSDictionary *body = @{@"value" : [NSNumber numberWithDouble:event.positionTime]};
|
|
305
|
-
|
|
306
|
-
[self.audioAPIModule invokeHandlerWithEventName:@"remoteChangePlaybackPosition" eventBody:body];
|
|
307
|
-
return MPRemoteCommandHandlerStatusSuccess;
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
@end
|