react-native-audio-api 0.11.0-alpha.1 → 0.11.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -11
- package/RNAudioAPI.podspec +25 -18
- package/android/build.gradle +41 -5
- package/android/src/main/cpp/audioapi/CMakeLists.txt +6 -3
- package/android/src/main/cpp/audioapi/android/AudioAPIModule.cpp +10 -16
- package/android/src/main/cpp/audioapi/android/OnLoad.cpp +1 -2
- package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.cpp +219 -84
- package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +23 -23
- package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +13 -20
- package/android/src/main/cpp/audioapi/android/core/utils/AndroidFileWriterBackend.h +14 -18
- package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.cpp +72 -89
- package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.h +12 -23
- package/android/src/main/cpp/audioapi/android/core/utils/AudioDecoder.cpp +47 -47
- package/android/src/main/cpp/audioapi/android/core/utils/FileOptions.cpp +83 -0
- package/android/src/main/cpp/audioapi/android/core/utils/FileOptions.h +22 -0
- package/android/src/main/cpp/audioapi/android/core/utils/MiniaudioImplementation.cpp +5 -0
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.cpp +379 -298
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.h +48 -91
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/ptrs.hpp +48 -0
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/utils.cpp +110 -0
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/utils.h +34 -0
- package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.cpp +132 -104
- package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.h +8 -16
- package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +28 -1
- package/android/src/main/java/com/swmansion/audioapi/system/LockScreenManager.kt +28 -6
- package/android/src/main/java/com/swmansion/audioapi/system/MediaNotificationManager.kt +11 -0
- package/android/src/main/jniLibs/arm64-v8a/libavcodec.so +0 -0
- package/android/src/main/jniLibs/arm64-v8a/libavformat.so +0 -0
- package/android/src/main/jniLibs/arm64-v8a/libavutil.so +0 -0
- package/android/src/main/jniLibs/arm64-v8a/libswresample.so +0 -0
- package/android/src/main/jniLibs/armeabi-v7a/libavcodec.so +0 -0
- package/android/src/main/jniLibs/armeabi-v7a/libavformat.so +0 -0
- package/android/src/main/jniLibs/armeabi-v7a/libavutil.so +0 -0
- package/android/src/main/jniLibs/armeabi-v7a/libswresample.so +0 -0
- package/android/src/main/jniLibs/x86/libavcodec.so +0 -0
- package/android/src/main/jniLibs/x86/libavformat.so +0 -0
- package/android/src/main/jniLibs/x86/libavutil.so +0 -0
- package/android/src/main/jniLibs/x86/libswresample.so +0 -0
- package/android/src/main/jniLibs/x86_64/libavcodec.so +0 -0
- package/android/src/main/jniLibs/x86_64/libavformat.so +0 -0
- package/android/src/main/jniLibs/x86_64/libavutil.so +0 -0
- package/android/src/main/jniLibs/x86_64/libswresample.so +0 -0
- package/android/src/oldarch/NativeAudioAPIModuleSpec.java +4 -0
- package/common/cpp/audioapi/AudioAPIModuleInstaller.h +45 -70
- package/common/cpp/audioapi/HostObjects/AudioContextHostObject.cpp +20 -22
- package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.cpp +3 -4
- package/common/cpp/audioapi/HostObjects/AudioParamHostObject.cpp +6 -8
- package/common/cpp/audioapi/HostObjects/AudioParamHostObject.h +2 -2
- package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +102 -63
- package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +4 -1
- package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.cpp +25 -31
- package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.h +3 -3
- package/common/cpp/audioapi/HostObjects/WorkletNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/WorkletProcessingNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.cpp +10 -18
- package/common/cpp/audioapi/HostObjects/destinations/AudioDestinationNodeHostObject.h +2 -3
- package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp +18 -30
- package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.cpp +50 -0
- package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.h +20 -0
- package/common/cpp/audioapi/HostObjects/effects/DelayNodeHostObject.cpp +27 -0
- package/common/cpp/audioapi/HostObjects/effects/DelayNodeHostObject.h +21 -0
- package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.cpp +2 -2
- package/common/cpp/audioapi/HostObjects/effects/IIRFilterNodeHostObject.cpp +33 -0
- package/common/cpp/audioapi/HostObjects/effects/IIRFilterNodeHostObject.h +20 -0
- package/common/cpp/audioapi/HostObjects/effects/PeriodicWaveHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.cpp +2 -2
- package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.cpp +6 -12
- package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.h +7 -7
- package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.cpp +98 -50
- package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +5 -2
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.cpp +27 -22
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.h +12 -10
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.cpp +17 -22
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.h +5 -7
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.cpp +25 -11
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.h +8 -8
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.cpp +19 -30
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.h +2 -4
- package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.cpp +7 -11
- package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.cpp +2 -2
- package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.cpp +6 -8
- package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/sources/RecorderAdapterNodeHostObject.h +4 -5
- package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.cpp +6 -2
- package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.h +5 -6
- package/common/cpp/audioapi/HostObjects/sources/WorkletSourceNodeHostObject.h +1 -2
- package/common/cpp/audioapi/HostObjects/utils/AudioDecoderHostObject.cpp +39 -60
- package/common/cpp/audioapi/HostObjects/utils/AudioStretcherHostObject.cpp +15 -30
- package/common/cpp/audioapi/core/AudioContext.cpp +23 -28
- package/common/cpp/audioapi/core/AudioContext.h +6 -3
- package/common/cpp/audioapi/core/AudioNode.cpp +17 -19
- package/common/cpp/audioapi/core/AudioNode.h +19 -8
- package/common/cpp/audioapi/core/AudioParam.cpp +68 -100
- package/common/cpp/audioapi/core/AudioParam.h +20 -12
- package/common/cpp/audioapi/core/BaseAudioContext.cpp +52 -34
- package/common/cpp/audioapi/core/BaseAudioContext.h +26 -14
- package/common/cpp/audioapi/core/OfflineAudioContext.cpp +12 -17
- package/common/cpp/audioapi/core/OfflineAudioContext.h +10 -5
- package/common/cpp/audioapi/core/analysis/AnalyserNode.cpp +13 -21
- package/common/cpp/audioapi/core/analysis/AnalyserNode.h +8 -6
- package/common/cpp/audioapi/core/destinations/AudioDestinationNode.cpp +1 -0
- package/common/cpp/audioapi/core/destinations/AudioDestinationNode.h +5 -3
- package/common/cpp/audioapi/core/effects/BiquadFilterNode.cpp +84 -66
- package/common/cpp/audioapi/core/effects/BiquadFilterNode.h +39 -10
- package/common/cpp/audioapi/core/effects/ConvolverNode.cpp +201 -0
- package/common/cpp/audioapi/core/effects/ConvolverNode.h +64 -0
- package/common/cpp/audioapi/core/effects/DelayNode.cpp +101 -0
- package/common/cpp/audioapi/core/effects/DelayNode.h +39 -0
- package/common/cpp/audioapi/core/effects/GainNode.cpp +1 -0
- package/common/cpp/audioapi/core/effects/GainNode.h +3 -1
- package/common/cpp/audioapi/core/effects/IIRFilterNode.cpp +166 -0
- package/common/cpp/audioapi/core/effects/IIRFilterNode.h +74 -0
- package/common/cpp/audioapi/core/effects/PeriodicWave.cpp +22 -35
- package/common/cpp/audioapi/core/effects/PeriodicWave.h +4 -9
- package/common/cpp/audioapi/core/effects/StereoPannerNode.cpp +4 -5
- package/common/cpp/audioapi/core/effects/StereoPannerNode.h +4 -2
- package/common/cpp/audioapi/core/effects/WorkletNode.cpp +11 -13
- package/common/cpp/audioapi/core/effects/WorkletNode.h +15 -12
- package/common/cpp/audioapi/core/effects/WorkletProcessingNode.cpp +4 -4
- package/common/cpp/audioapi/core/effects/WorkletProcessingNode.h +15 -14
- package/common/cpp/audioapi/core/inputs/AudioRecorder.cpp +58 -36
- package/common/cpp/audioapi/core/inputs/AudioRecorder.h +42 -44
- package/common/cpp/audioapi/core/sources/AudioBuffer.cpp +4 -6
- package/common/cpp/audioapi/core/sources/AudioBuffer.h +4 -7
- package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +48 -57
- package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +37 -34
- package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +55 -17
- package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +35 -28
- package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +41 -49
- package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +8 -6
- package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +29 -24
- package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +6 -6
- package/common/cpp/audioapi/core/sources/ConstantSourceNode.cpp +3 -4
- package/common/cpp/audioapi/core/sources/ConstantSourceNode.h +3 -1
- package/common/cpp/audioapi/core/sources/OscillatorNode.cpp +12 -23
- package/common/cpp/audioapi/core/sources/OscillatorNode.h +6 -4
- package/common/cpp/audioapi/core/sources/RecorderAdapterNode.cpp +43 -16
- package/common/cpp/audioapi/core/sources/RecorderAdapterNode.h +22 -17
- package/common/cpp/audioapi/core/sources/StreamerNode.cpp +104 -87
- package/common/cpp/audioapi/core/sources/StreamerNode.h +69 -33
- package/common/cpp/audioapi/core/sources/WorkletSourceNode.cpp +5 -7
- package/common/cpp/audioapi/core/sources/WorkletSourceNode.h +15 -13
- package/common/cpp/audioapi/core/types/AudioFormat.h +1 -11
- package/common/cpp/audioapi/core/utils/AudioDecoder.h +15 -6
- package/common/cpp/audioapi/core/utils/AudioFileWriter.cpp +41 -0
- package/common/cpp/audioapi/core/utils/AudioFileWriter.h +43 -0
- package/common/cpp/audioapi/core/utils/AudioNodeDestructor.cpp +5 -6
- package/common/cpp/audioapi/core/utils/AudioNodeDestructor.h +7 -10
- package/common/cpp/audioapi/core/utils/AudioNodeManager.cpp +17 -19
- package/common/cpp/audioapi/core/utils/AudioNodeManager.h +8 -11
- package/common/cpp/audioapi/core/utils/AudioParamEventQueue.cpp +3 -3
- package/common/cpp/audioapi/core/utils/AudioParamEventQueue.h +5 -5
- package/common/cpp/audioapi/core/utils/AudioRecorderCallback.cpp +101 -0
- package/common/cpp/audioapi/core/utils/AudioRecorderCallback.h +51 -0
- package/common/cpp/audioapi/core/utils/AudioStretcher.cpp +6 -6
- package/common/cpp/audioapi/core/utils/Constants.h +7 -3
- package/common/cpp/audioapi/core/utils/ParamChangeEvent.cpp +1 -0
- package/common/cpp/audioapi/core/utils/ParamChangeEvent.h +9 -9
- package/common/cpp/audioapi/core/utils/worklets/SafeIncludes.h +33 -34
- package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.cpp +17 -19
- package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.h +23 -19
- package/common/cpp/audioapi/dsp/AudioUtils.cpp +4 -10
- package/common/cpp/audioapi/dsp/AudioUtils.h +1 -1
- package/common/cpp/audioapi/dsp/Convolver.cpp +201 -0
- package/common/cpp/audioapi/dsp/Convolver.h +47 -0
- package/common/cpp/audioapi/dsp/FFT.cpp +1 -27
- package/common/cpp/audioapi/dsp/FFT.h +19 -3
- package/common/cpp/audioapi/dsp/VectorMath.cpp +24 -58
- package/common/cpp/audioapi/dsp/VectorMath.h +35 -8
- package/common/cpp/audioapi/dsp/Windows.cpp +4 -9
- package/common/cpp/audioapi/dsp/Windows.h +24 -23
- package/common/cpp/audioapi/events/AudioEventHandlerRegistry.cpp +12 -17
- package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +45 -40
- package/common/cpp/audioapi/events/IAudioEventHandlerRegistry.h +15 -7
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/avcodec.h +4 -4
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_desc.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_id.h +3 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_par.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/defs.h +3 -0
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/packet.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/smpte_436m.h +254 -0
- package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/version.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavformat/avformat.h +6 -6
- package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version_major.h +2 -0
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avassert.h +5 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avutil.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/channel_layout.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/csp.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/dict.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/ffversion.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/film_grain_params.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/frame.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hdr_dynamic_vivid_metadata.h +3 -3
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_opencl.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_qsv.h +0 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_vulkan.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/iamf.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/lfg.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/log.h +2 -2
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/mathematics.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/opt.h +4 -4
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rational.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rc4.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/refstruct.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/spherical.h +6 -0
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tdrdi.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tx.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/version.h +3 -3
- package/common/cpp/audioapi/external/ffmpeg_include/libavutil/video_hint.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libswresample/swresample.h +1 -1
- package/common/cpp/audioapi/external/ffmpeg_include/libswresample/version.h +1 -1
- package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64/libavcodec.framework/libavcodec +0 -0
- package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64_x86_64-simulator/libavcodec.framework/libavcodec +0 -0
- package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64/libavformat.framework/libavformat +0 -0
- package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64_x86_64-simulator/libavformat.framework/libavformat +0 -0
- package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64/libavutil.framework/libavutil +0 -0
- package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64_x86_64-simulator/libavutil.framework/libavutil +0 -0
- package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64/libswresample.framework/libswresample +0 -0
- package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64_x86_64-simulator/libswresample.framework/libswresample +0 -0
- package/common/cpp/audioapi/jsi/AudioArrayBuffer.h +4 -5
- package/common/cpp/audioapi/jsi/JsiHostObject.cpp +11 -13
- package/common/cpp/audioapi/jsi/JsiHostObject.h +26 -33
- package/common/cpp/audioapi/jsi/JsiPromise.cpp +34 -67
- package/common/cpp/audioapi/jsi/JsiPromise.h +65 -26
- package/common/cpp/audioapi/jsi/RuntimeLifecycleMonitor.cpp +7 -10
- package/common/cpp/audioapi/jsi/RuntimeLifecycleMonitor.h +1 -3
- package/common/cpp/audioapi/libs/ffmpeg/FFmpegDecoding.cpp +4 -3
- package/common/cpp/audioapi/libs/ffmpeg/relinking.md +24 -0
- package/common/cpp/audioapi/utils/AlignedAllocator.hpp +50 -0
- package/common/cpp/audioapi/utils/AudioArray.cpp +3 -8
- package/common/cpp/audioapi/utils/AudioArray.h +3 -11
- package/common/cpp/audioapi/utils/AudioBus.cpp +79 -149
- package/common/cpp/audioapi/utils/AudioBus.h +17 -14
- package/common/cpp/audioapi/utils/AudioFileProperties.cpp +92 -0
- package/common/cpp/audioapi/utils/AudioFileProperties.h +76 -0
- package/common/cpp/audioapi/utils/CircularAudioArray.cpp +6 -18
- package/common/cpp/audioapi/utils/CircularOverflowableAudioArray.cpp +6 -10
- package/common/cpp/audioapi/utils/CircularOverflowableAudioArray.h +2 -2
- package/common/cpp/audioapi/utils/Result.hpp +286 -0
- package/common/cpp/audioapi/utils/ThreadPool.hpp +59 -1
- package/common/cpp/audioapi/utils/UnitConversion.h +9 -0
- package/common/cpp/test/CMakeLists.txt +20 -14
- package/common/cpp/test/src/AudioParamTest.cpp +4 -3
- package/common/cpp/test/src/AudioScheduledSourceTest.cpp +113 -0
- package/common/cpp/test/src/ConstantSourceTest.cpp +5 -7
- package/common/cpp/test/src/DelayTest.cpp +108 -0
- package/common/cpp/test/src/GainTest.cpp +4 -5
- package/common/cpp/test/src/IIRFilterTest.cpp +153 -0
- package/common/cpp/test/src/MockAudioEventHandlerRegistry.h +19 -11
- package/common/cpp/test/src/OscillatorTest.cpp +2 -1
- package/common/cpp/test/src/StereoPannerTest.cpp +6 -9
- package/common/cpp/test/src/biquad/BiquadFilterChromium.cpp +372 -0
- package/common/cpp/test/src/biquad/BiquadFilterChromium.h +65 -0
- package/common/cpp/test/src/biquad/BiquadFilterTest.cpp +272 -0
- package/common/cpp/test/src/biquad/BiquadFilterTest.h +47 -0
- package/ios/audioapi/ios/AudioAPIModule.h +2 -1
- package/ios/audioapi/ios/AudioAPIModule.mm +44 -20
- package/ios/audioapi/ios/core/IOSAudioPlayer.h +2 -2
- package/ios/audioapi/ios/core/IOSAudioPlayer.mm +7 -6
- package/ios/audioapi/ios/core/IOSAudioRecorder.h +26 -18
- package/ios/audioapi/ios/core/IOSAudioRecorder.mm +193 -53
- package/ios/audioapi/ios/core/NativeAudioPlayer.m +16 -13
- package/ios/audioapi/ios/core/NativeAudioRecorder.h +4 -0
- package/ios/audioapi/ios/core/NativeAudioRecorder.m +42 -7
- package/ios/audioapi/ios/core/utils/AudioDecoder.mm +21 -4
- package/ios/audioapi/ios/core/utils/FileOptions.h +31 -0
- package/ios/audioapi/ios/core/utils/FileOptions.mm +177 -0
- package/ios/audioapi/ios/core/{IOSAudioFileWriter.h → utils/IOSFileWriter.h} +16 -14
- package/ios/audioapi/ios/core/utils/IOSFileWriter.mm +224 -0
- package/ios/audioapi/ios/core/{IOSRecorderCallback.h → utils/IOSRecorderCallback.h} +7 -17
- package/ios/audioapi/ios/core/utils/IOSRecorderCallback.mm +172 -0
- package/ios/audioapi/ios/system/AudioEngine.h +19 -16
- package/ios/audioapi/ios/system/AudioEngine.mm +101 -134
- package/ios/audioapi/ios/system/AudioSessionManager.h +25 -11
- package/ios/audioapi/ios/system/AudioSessionManager.mm +273 -202
- package/ios/audioapi/ios/system/LockScreenManager.mm +39 -23
- package/ios/audioapi/ios/system/NotificationManager.mm +37 -52
- package/lib/commonjs/AudioAPIModule/AudioAPIModule.js +90 -0
- package/lib/commonjs/AudioAPIModule/AudioAPIModule.js.map +1 -0
- package/lib/commonjs/AudioAPIModule/globals.d.js +6 -0
- package/lib/commonjs/AudioAPIModule/globals.d.js.map +1 -0
- package/lib/commonjs/AudioAPIModule/index.js +14 -0
- package/lib/commonjs/AudioAPIModule/index.js.map +1 -0
- package/lib/commonjs/api.js +18 -12
- package/lib/commonjs/api.js.map +1 -1
- package/lib/commonjs/api.web.js +8 -0
- package/lib/commonjs/api.web.js.map +1 -1
- package/lib/commonjs/core/AudioBufferBaseSourceNode.js +3 -0
- package/lib/commonjs/core/AudioBufferBaseSourceNode.js.map +1 -1
- package/lib/commonjs/core/AudioBufferQueueSourceNode.js +5 -2
- package/lib/commonjs/core/AudioBufferQueueSourceNode.js.map +1 -1
- package/lib/commonjs/core/AudioContext.js +5 -8
- package/lib/commonjs/core/AudioContext.js.map +1 -1
- package/lib/commonjs/core/AudioNode.js +1 -1
- package/lib/commonjs/core/AudioNode.js.map +1 -1
- package/lib/commonjs/core/AudioParam.js +18 -11
- package/lib/commonjs/core/AudioParam.js.map +1 -1
- package/lib/commonjs/core/AudioRecorder.js +43 -55
- package/lib/commonjs/core/AudioRecorder.js.map +1 -1
- package/lib/commonjs/core/BaseAudioContext.js +61 -30
- package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
- package/lib/commonjs/core/ConvolverNode.js +37 -0
- package/lib/commonjs/core/ConvolverNode.js.map +1 -0
- package/lib/commonjs/core/DelayNode.js +17 -0
- package/lib/commonjs/core/DelayNode.js.map +1 -0
- package/lib/commonjs/core/IIRFilterNode.js +19 -0
- package/lib/commonjs/core/IIRFilterNode.js.map +1 -0
- package/lib/commonjs/core/OfflineAudioContext.js +3 -6
- package/lib/commonjs/core/OfflineAudioContext.js.map +1 -1
- package/lib/commonjs/plugin/withAudioAPI.js +46 -0
- package/lib/commonjs/plugin/withAudioAPI.js.map +1 -1
- package/lib/commonjs/specs/NativeAudioAPIModule.js.map +1 -1
- package/lib/commonjs/system/AudioManager.js +4 -7
- package/lib/commonjs/system/AudioManager.js.map +1 -1
- package/lib/commonjs/types.js +16 -23
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/utils/filePresets.js +43 -0
- package/lib/commonjs/utils/filePresets.js.map +1 -0
- package/lib/commonjs/utils/index.js +12 -27
- package/lib/commonjs/utils/index.js.map +1 -1
- package/lib/commonjs/web-core/AudioContext.js +21 -1
- package/lib/commonjs/web-core/AudioContext.js.map +1 -1
- package/lib/commonjs/web-core/ConvolverNode.js +40 -0
- package/lib/commonjs/web-core/ConvolverNode.js.map +1 -0
- package/lib/commonjs/web-core/ConvolverNodeOptions.js +6 -0
- package/lib/commonjs/web-core/ConvolverNodeOptions.js.map +1 -0
- package/lib/commonjs/web-core/DelayNode.js +17 -0
- package/lib/commonjs/web-core/DelayNode.js.map +1 -0
- package/lib/commonjs/web-core/IIRFilterNode.js +19 -0
- package/lib/commonjs/web-core/IIRFilterNode.js.map +1 -0
- package/lib/commonjs/web-core/OfflineAudioContext.js +20 -0
- package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
- package/lib/module/AudioAPIModule/AudioAPIModule.js +87 -0
- package/lib/module/AudioAPIModule/AudioAPIModule.js.map +1 -0
- package/lib/module/AudioAPIModule/globals.d.js +4 -0
- package/lib/module/AudioAPIModule/globals.d.js.map +1 -0
- package/lib/module/AudioAPIModule/index.js +4 -0
- package/lib/module/AudioAPIModule/index.js.map +1 -0
- package/lib/module/api.js +3 -12
- package/lib/module/api.js.map +1 -1
- package/lib/module/api.web.js +1 -0
- package/lib/module/api.web.js.map +1 -1
- package/lib/module/core/AudioBufferBaseSourceNode.js +3 -0
- package/lib/module/core/AudioBufferBaseSourceNode.js.map +1 -1
- package/lib/module/core/AudioBufferQueueSourceNode.js +5 -2
- package/lib/module/core/AudioBufferQueueSourceNode.js.map +1 -1
- package/lib/module/core/AudioContext.js +5 -8
- package/lib/module/core/AudioContext.js.map +1 -1
- package/lib/module/core/AudioNode.js +1 -1
- package/lib/module/core/AudioNode.js.map +1 -1
- package/lib/module/core/AudioParam.js +18 -11
- package/lib/module/core/AudioParam.js.map +1 -1
- package/lib/module/core/AudioRecorder.js +44 -56
- package/lib/module/core/AudioRecorder.js.map +1 -1
- package/lib/module/core/BaseAudioContext.js +63 -32
- package/lib/module/core/BaseAudioContext.js.map +1 -1
- package/lib/module/core/ConvolverNode.js +31 -0
- package/lib/module/core/ConvolverNode.js.map +1 -0
- package/lib/module/core/DelayNode.js +11 -0
- package/lib/module/core/DelayNode.js.map +1 -0
- package/lib/module/core/IIRFilterNode.js +13 -0
- package/lib/module/core/IIRFilterNode.js.map +1 -0
- package/lib/module/core/OfflineAudioContext.js +3 -6
- package/lib/module/core/OfflineAudioContext.js.map +1 -1
- package/lib/module/plugin/withAudioAPI.js +47 -1
- package/lib/module/plugin/withAudioAPI.js.map +1 -1
- package/lib/module/specs/NativeAudioAPIModule.js.map +1 -1
- package/lib/module/system/AudioManager.js +4 -7
- package/lib/module/system/AudioManager.js.map +1 -1
- package/lib/module/types.js +15 -22
- package/lib/module/types.js.map +1 -1
- package/lib/module/utils/filePresets.js +39 -0
- package/lib/module/utils/filePresets.js.map +1 -0
- package/lib/module/utils/index.js +10 -10
- package/lib/module/utils/index.js.map +1 -1
- package/lib/module/web-core/AudioContext.js +21 -1
- package/lib/module/web-core/AudioContext.js.map +1 -1
- package/lib/module/web-core/ConvolverNode.js +34 -0
- package/lib/module/web-core/ConvolverNode.js.map +1 -0
- package/lib/module/web-core/ConvolverNodeOptions.js +4 -0
- package/lib/module/web-core/ConvolverNodeOptions.js.map +1 -0
- package/lib/module/web-core/DelayNode.js +11 -0
- package/lib/module/web-core/DelayNode.js.map +1 -0
- package/lib/module/web-core/IIRFilterNode.js +13 -0
- package/lib/module/web-core/IIRFilterNode.js.map +1 -0
- package/lib/module/web-core/OfflineAudioContext.js +20 -0
- package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
- package/lib/typescript/AudioAPIModule/AudioAPIModule.d.ts +36 -0
- package/lib/typescript/AudioAPIModule/AudioAPIModule.d.ts.map +1 -0
- package/lib/typescript/AudioAPIModule/index.d.ts +2 -0
- package/lib/typescript/AudioAPIModule/index.d.ts.map +1 -0
- package/lib/typescript/api.d.ts +3 -9
- package/lib/typescript/api.d.ts.map +1 -1
- package/lib/typescript/api.web.d.ts +1 -0
- package/lib/typescript/api.web.d.ts.map +1 -1
- package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts +1 -0
- package/lib/typescript/core/AudioBufferBaseSourceNode.d.ts.map +1 -1
- package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts +1 -1
- package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts.map +1 -1
- package/lib/typescript/core/AudioContext.d.ts +1 -1
- package/lib/typescript/core/AudioContext.d.ts.map +1 -1
- package/lib/typescript/core/AudioNode.d.ts +2 -1
- package/lib/typescript/core/AudioNode.d.ts.map +1 -1
- package/lib/typescript/core/AudioParam.d.ts.map +1 -1
- package/lib/typescript/core/AudioRecorder.d.ts +13 -6
- package/lib/typescript/core/AudioRecorder.d.ts.map +1 -1
- package/lib/typescript/core/BaseAudioContext.d.ts +9 -3
- package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
- package/lib/typescript/core/ConvolverNode.d.ts +12 -0
- package/lib/typescript/core/ConvolverNode.d.ts.map +1 -0
- package/lib/typescript/core/DelayNode.d.ts +9 -0
- package/lib/typescript/core/DelayNode.d.ts.map +1 -0
- package/lib/typescript/core/IIRFilterNode.d.ts +5 -0
- package/lib/typescript/core/IIRFilterNode.d.ts.map +1 -0
- package/lib/typescript/core/OfflineAudioContext.d.ts +1 -1
- package/lib/typescript/core/OfflineAudioContext.d.ts.map +1 -1
- package/lib/typescript/events/types.d.ts +4 -0
- package/lib/typescript/events/types.d.ts.map +1 -1
- package/lib/typescript/interfaces.d.ts +34 -34
- package/lib/typescript/interfaces.d.ts.map +1 -1
- package/lib/typescript/plugin/withAudioAPI.d.ts +1 -0
- package/lib/typescript/plugin/withAudioAPI.d.ts.map +1 -1
- package/lib/typescript/specs/NativeAudioAPIModule.d.ts +2 -1
- package/lib/typescript/specs/NativeAudioAPIModule.d.ts.map +1 -1
- package/lib/typescript/system/AudioManager.d.ts +3 -2
- package/lib/typescript/system/AudioManager.d.ts.map +1 -1
- package/lib/typescript/types.d.ts +42 -34
- package/lib/typescript/types.d.ts.map +1 -1
- package/lib/typescript/utils/filePresets.d.ts +9 -0
- package/lib/typescript/utils/filePresets.d.ts.map +1 -0
- package/lib/typescript/utils/index.d.ts +1 -8
- package/lib/typescript/utils/index.d.ts.map +1 -1
- package/lib/typescript/web-core/AudioContext.d.ts +9 -2
- package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
- package/lib/typescript/web-core/BaseAudioContext.d.ts +7 -1
- package/lib/typescript/web-core/BaseAudioContext.d.ts.map +1 -1
- package/lib/typescript/web-core/ConvolverNode.d.ts +11 -0
- package/lib/typescript/web-core/ConvolverNode.d.ts.map +1 -0
- package/lib/typescript/web-core/ConvolverNodeOptions.d.ts +6 -0
- package/lib/typescript/web-core/ConvolverNodeOptions.d.ts.map +1 -0
- package/lib/typescript/web-core/DelayNode.d.ts +8 -0
- package/lib/typescript/web-core/DelayNode.d.ts.map +1 -0
- package/lib/typescript/web-core/IIRFilterNode.d.ts +5 -0
- package/lib/typescript/web-core/IIRFilterNode.d.ts.map +1 -0
- package/lib/typescript/web-core/OfflineAudioContext.d.ts +8 -1
- package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
- package/package.json +11 -4
- package/scripts/download-prebuilt-binaries.sh +61 -0
- package/scripts/rnaa_utils.rb +8 -0
- package/scripts/validate-worklets-version.js +27 -0
- package/src/AudioAPIModule/AudioAPIModule.ts +122 -0
- package/src/AudioAPIModule/globals.d.ts +33 -0
- package/src/AudioAPIModule/index.ts +1 -0
- package/src/api.ts +4 -52
- package/src/api.web.ts +1 -0
- package/src/core/AudioBufferBaseSourceNode.ts +8 -0
- package/src/core/AudioBufferQueueSourceNode.ts +8 -2
- package/src/core/AudioContext.ts +5 -8
- package/src/core/AudioNode.ts +4 -3
- package/src/core/AudioParam.ts +18 -11
- package/src/core/AudioRecorder.ts +63 -78
- package/src/core/BaseAudioContext.ts +120 -54
- package/src/core/ConvolverNode.ts +35 -0
- package/src/core/DelayNode.ts +13 -0
- package/src/core/IIRFilterNode.ts +25 -0
- package/src/core/OfflineAudioContext.ts +4 -7
- package/src/events/types.ts +5 -0
- package/src/interfaces.ts +51 -34
- package/src/plugin/withAudioAPI.ts +61 -0
- package/src/specs/NativeAudioAPIModule.ts +3 -2
- package/src/system/AudioManager.ts +13 -19
- package/src/types.ts +45 -36
- package/src/utils/filePresets.ts +47 -0
- package/src/utils/index.ts +13 -19
- package/src/web-core/AudioContext.tsx +40 -1
- package/src/web-core/BaseAudioContext.tsx +11 -1
- package/src/web-core/ConvolverNode.tsx +43 -0
- package/src/web-core/ConvolverNodeOptions.tsx +6 -0
- package/src/web-core/DelayNode.tsx +12 -0
- package/src/web-core/IIRFilterNode.tsx +25 -0
- package/src/web-core/OfflineAudioContext.tsx +39 -0
- package/android/src/main/cpp/audioapi/android/core/utils/FileUtils.h +0 -34
- package/android/src/main/cpp/audioapi/android/core/utils/FileUtilts.cpp +0 -133
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.cpp +0 -154
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegAudioFileOptions.h +0 -41
- package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.cpp +0 -47
- package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileOptions.h +0 -28
- package/common/cpp/audioapi/libs/ffmpeg/INSTRUCTIONS.md +0 -32
- package/common/cpp/audioapi/libs/ffmpeg/create_xcframework.sh +0 -111
- package/common/cpp/audioapi/libs/ffmpeg/ffmpeg_setup.sh +0 -391
- package/ios/audioapi/ios/core/IOSAudioFileOptions.h +0 -36
- package/ios/audioapi/ios/core/IOSAudioFileOptions.mm +0 -140
- package/ios/audioapi/ios/core/IOSAudioFileWriter.mm +0 -223
- package/ios/audioapi/ios/core/IOSRecorderCallback.mm +0 -189
- package/lib/commonjs/utils/bitEnums.js +0 -33
- package/lib/commonjs/utils/bitEnums.js.map +0 -1
- package/lib/module/utils/bitEnums.js +0 -27
- package/lib/module/utils/bitEnums.js.map +0 -1
- package/lib/typescript/utils/bitEnums.d.ts +0 -4
- package/lib/typescript/utils/bitEnums.d.ts.map +0 -1
- package/metro-config/index.d.ts +0 -5
- package/metro-config/index.js +0 -41
- package/metro-config/tsconfig.json +0 -3
- package/src/utils/bitEnums.ts +0 -51
- package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/Info.plist +5 -5
- package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64/libavcodec.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavcodec.xcframework → ffmpeg_ios/libavcodec.xcframework}/ios-arm64_x86_64-simulator/libavcodec.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64/libavformat.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavformat.xcframework → ffmpeg_ios/libavformat.xcframework}/ios-arm64_x86_64-simulator/libavformat.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/Info.plist +5 -5
- package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64/libavutil.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libavutil.xcframework → ffmpeg_ios/libavutil.xcframework}/ios-arm64_x86_64-simulator/libavutil.framework/Info.plist +0 -0
- package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/Info.plist +5 -5
- /package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64/libswresample.framework/Info.plist +0 -0
- /package/common/cpp/audioapi/external/{libswresample.xcframework → ffmpeg_ios/libswresample.xcframework}/ios-arm64_x86_64-simulator/libswresample.framework/Info.plist +0 -0
|
@@ -1,151 +1,133 @@
|
|
|
1
|
+
#import <AVFAudio/AVFAudio.h>
|
|
1
2
|
#import <audioapi/ios/system/AudioSessionManager.h>
|
|
2
3
|
|
|
3
4
|
@implementation AudioSessionManager
|
|
4
5
|
|
|
6
|
+
static AudioSessionManager *_sharedInstance = nil;
|
|
7
|
+
|
|
5
8
|
- (instancetype)init
|
|
6
9
|
{
|
|
7
10
|
if (self = [super init]) {
|
|
8
11
|
self.audioSession = [AVAudioSession sharedInstance];
|
|
9
12
|
|
|
10
|
-
self.sessionCategory = AVAudioSessionCategoryPlayback;
|
|
11
|
-
self.sessionMode = AVAudioSessionModeDefault;
|
|
12
|
-
self.sessionOptions = 0;
|
|
13
|
-
self.allowHapticsAndSystemSoundsDuringRecording = false;
|
|
14
|
-
self.hasDirtySettings = true;
|
|
15
13
|
self.isActive = false;
|
|
14
|
+
self.shouldManageSession = true;
|
|
15
|
+
|
|
16
|
+
self.desiredCategory = AVAudioSessionCategoryPlayback;
|
|
17
|
+
self.desiredMode = AVAudioSessionModeDefault;
|
|
18
|
+
self.desiredOptions = 0;
|
|
19
|
+
self.allowHapticsAndSounds = false;
|
|
16
20
|
}
|
|
17
21
|
|
|
22
|
+
_sharedInstance = self;
|
|
18
23
|
return self;
|
|
19
24
|
}
|
|
20
25
|
|
|
21
|
-
|
|
26
|
+
+ (instancetype)sharedInstance
|
|
22
27
|
{
|
|
23
|
-
|
|
28
|
+
return _sharedInstance;
|
|
29
|
+
}
|
|
24
30
|
|
|
31
|
+
- (void)cleanup
|
|
32
|
+
{
|
|
25
33
|
self.audioSession = nil;
|
|
26
34
|
}
|
|
27
35
|
|
|
28
|
-
- (
|
|
36
|
+
- (bool)areDesiredOptionsSet
|
|
29
37
|
{
|
|
30
|
-
return
|
|
38
|
+
return (
|
|
39
|
+
self.audioSession.category == self.desiredCategory &&
|
|
40
|
+
self.audioSession.mode == self.desiredMode &&
|
|
41
|
+
self.audioSession.categoryOptions == self.desiredOptions &&
|
|
42
|
+
self.audioSession.allowHapticsAndSystemSoundsDuringRecording == self.allowHapticsAndSounds);
|
|
31
43
|
}
|
|
32
44
|
|
|
33
|
-
- (
|
|
34
|
-
mode:(NSString *)mode
|
|
35
|
-
options:(NSArray *)options
|
|
36
|
-
allowHaptics:(BOOL)allowHaptics
|
|
45
|
+
- (bool)configureAudioSession
|
|
37
46
|
{
|
|
38
|
-
|
|
39
|
-
AVAudioSessionMode sessionMode = self.sessionMode;
|
|
40
|
-
AVAudioSessionCategoryOptions sessionOptions = 0;
|
|
41
|
-
bool allowHapticsAndSystemSoundsDuringRecording = allowHaptics;
|
|
42
|
-
|
|
43
|
-
if ([category isEqualToString:@"record"]) {
|
|
44
|
-
sessionCategory = AVAudioSessionCategoryRecord;
|
|
45
|
-
} else if ([category isEqualToString:@"ambient"]) {
|
|
46
|
-
sessionCategory = AVAudioSessionCategoryAmbient;
|
|
47
|
-
} else if ([category isEqualToString:@"playback"]) {
|
|
48
|
-
sessionCategory = AVAudioSessionCategoryPlayback;
|
|
49
|
-
} else if ([category isEqualToString:@"multiRoute"]) {
|
|
50
|
-
sessionCategory = AVAudioSessionCategoryMultiRoute;
|
|
51
|
-
} else if ([category isEqualToString:@"soloAmbient"]) {
|
|
52
|
-
sessionCategory = AVAudioSessionCategorySoloAmbient;
|
|
53
|
-
} else if ([category isEqualToString:@"playAndRecord"]) {
|
|
54
|
-
sessionCategory = AVAudioSessionCategoryPlayAndRecord;
|
|
55
|
-
}
|
|
47
|
+
NSError *error = nil;
|
|
56
48
|
|
|
57
|
-
if ([
|
|
58
|
-
|
|
59
|
-
} else if ([mode isEqualToString:@"gameChat"]) {
|
|
60
|
-
sessionMode = AVAudioSessionModeGameChat;
|
|
61
|
-
} else if ([mode isEqualToString:@"videoChat"]) {
|
|
62
|
-
sessionMode = AVAudioSessionModeVideoChat;
|
|
63
|
-
} else if ([mode isEqualToString:@"voiceChat"]) {
|
|
64
|
-
sessionMode = AVAudioSessionModeVoiceChat;
|
|
65
|
-
} else if ([mode isEqualToString:@"measurement"]) {
|
|
66
|
-
sessionMode = AVAudioSessionModeMeasurement;
|
|
67
|
-
} else if ([mode isEqualToString:@"voicePrompt"]) {
|
|
68
|
-
sessionMode = AVAudioSessionModeVoicePrompt;
|
|
69
|
-
} else if ([mode isEqualToString:@"spokenAudio"]) {
|
|
70
|
-
sessionMode = AVAudioSessionModeSpokenAudio;
|
|
71
|
-
} else if ([mode isEqualToString:@"moviePlayback"]) {
|
|
72
|
-
sessionMode = AVAudioSessionModeMoviePlayback;
|
|
73
|
-
} else if ([mode isEqualToString:@"videoRecording"]) {
|
|
74
|
-
sessionMode = AVAudioSessionModeVideoRecording;
|
|
49
|
+
if (!self.shouldManageSession || [self areDesiredOptionsSet]) {
|
|
50
|
+
return true;
|
|
75
51
|
}
|
|
76
52
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
if ([option isEqualToString:@"allowAirPlay"]) {
|
|
83
|
-
sessionOptions |= AVAudioSessionCategoryOptionAllowAirPlay;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
if ([option isEqualToString:@"mixWithOthers"]) {
|
|
87
|
-
sessionOptions |= AVAudioSessionCategoryOptionMixWithOthers;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
if ([option isEqualToString:@"allowBluetooth"]) {
|
|
91
|
-
sessionOptions |= AVAudioSessionCategoryOptionAllowBluetooth;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
if ([option isEqualToString:@"defaultToSpeaker"]) {
|
|
95
|
-
sessionOptions |= AVAudioSessionCategoryOptionDefaultToSpeaker;
|
|
96
|
-
}
|
|
53
|
+
[self.audioSession setCategory:self.desiredCategory
|
|
54
|
+
mode:self.desiredMode
|
|
55
|
+
options:self.desiredOptions
|
|
56
|
+
error:&error];
|
|
97
57
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
58
|
+
if (error != nil) {
|
|
59
|
+
NSLog(@"Error while configuring audio session: %@", [error debugDescription]);
|
|
60
|
+
return false;
|
|
61
|
+
} else {
|
|
62
|
+
NSLog(
|
|
63
|
+
@"[AudioSessionManager] Configured audio session: category=%@, mode=%@, options=%lu",
|
|
64
|
+
self.audioSession.category,
|
|
65
|
+
self.audioSession.mode,
|
|
66
|
+
(unsigned long)self.audioSession.categoryOptions);
|
|
67
|
+
}
|
|
101
68
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
69
|
+
if (self.audioSession.allowHapticsAndSystemSoundsDuringRecording != self.allowHapticsAndSounds) {
|
|
70
|
+
[self.audioSession setAllowHapticsAndSystemSoundsDuringRecording:self.allowHapticsAndSounds
|
|
71
|
+
error:&error];
|
|
105
72
|
|
|
106
|
-
if (
|
|
107
|
-
|
|
73
|
+
if (error != nil) {
|
|
74
|
+
NSLog(
|
|
75
|
+
@"Error while setting allowHapticsAndSystemSoundsDuringRecording: %@",
|
|
76
|
+
[error debugDescription]);
|
|
77
|
+
return false;
|
|
108
78
|
}
|
|
109
79
|
}
|
|
110
80
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
self.sessionCategory = sessionCategory;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
if (self.sessionMode != sessionMode) {
|
|
117
|
-
self.hasDirtySettings = true;
|
|
118
|
-
self.sessionMode = sessionMode;
|
|
119
|
-
}
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
120
83
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
84
|
+
- (void)setAudioSessionOptions:(NSString *)categoryStr
|
|
85
|
+
mode:(NSString *)modeStr
|
|
86
|
+
options:(NSArray *)optionsArray
|
|
87
|
+
allowHaptics:(BOOL)allowHaptics
|
|
88
|
+
{
|
|
89
|
+
AVAudioSessionCategory category = [self categoryFromString:categoryStr];
|
|
90
|
+
AVAudioSessionMode mode = [self modeFromString:modeStr];
|
|
91
|
+
AVAudioSessionCategoryOptions options = [self optionsFromArray:optionsArray];
|
|
92
|
+
bool configChanged = false;
|
|
93
|
+
|
|
94
|
+
if (category != self.desiredCategory || mode != self.desiredMode ||
|
|
95
|
+
options != self.desiredOptions || allowHaptics != self.allowHapticsAndSounds) {
|
|
96
|
+
configChanged = true;
|
|
124
97
|
}
|
|
125
98
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
99
|
+
self.desiredCategory = category;
|
|
100
|
+
self.desiredMode = mode;
|
|
101
|
+
self.desiredOptions = options;
|
|
102
|
+
self.allowHapticsAndSounds = allowHaptics;
|
|
130
103
|
|
|
131
|
-
if (self.isActive) {
|
|
104
|
+
if (configChanged && self.isActive) {
|
|
132
105
|
[self configureAudioSession];
|
|
133
106
|
}
|
|
134
107
|
}
|
|
135
108
|
|
|
136
109
|
- (bool)setActive:(bool)active
|
|
137
110
|
{
|
|
138
|
-
if (
|
|
111
|
+
if (!self.shouldManageSession) {
|
|
139
112
|
return true;
|
|
140
113
|
}
|
|
141
114
|
|
|
142
|
-
|
|
143
|
-
|
|
115
|
+
NSError *error = nil;
|
|
116
|
+
bool success = false;
|
|
117
|
+
|
|
118
|
+
if (self.isActive == active) {
|
|
119
|
+
return true;
|
|
144
120
|
}
|
|
145
121
|
|
|
146
|
-
|
|
122
|
+
if (active) {
|
|
123
|
+
success = [self configureAudioSession];
|
|
124
|
+
|
|
125
|
+
if (!success) {
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
147
129
|
|
|
148
|
-
|
|
130
|
+
success = [self.audioSession setActive:active error:&error];
|
|
149
131
|
|
|
150
132
|
if (success) {
|
|
151
133
|
self.isActive = active;
|
|
@@ -160,119 +142,108 @@
|
|
|
160
142
|
return success;
|
|
161
143
|
}
|
|
162
144
|
|
|
163
|
-
- (
|
|
145
|
+
- (void)markInactive
|
|
164
146
|
{
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
@"[AudioSessionManager] configureAudioSession, category: %@, mode: %@, options: %lu, allowHaptics: %@",
|
|
171
|
-
self.sessionCategory,
|
|
172
|
-
self.sessionMode,
|
|
173
|
-
(unsigned long)self.sessionOptions,
|
|
174
|
-
self.allowHapticsAndSystemSoundsDuringRecording ? @"YES" : @"NO");
|
|
175
|
-
|
|
176
|
-
NSError *error = nil;
|
|
177
|
-
|
|
178
|
-
[self.audioSession setCategory:self.sessionCategory mode:self.sessionMode options:self.sessionOptions error:&error];
|
|
179
|
-
|
|
180
|
-
if (error != nil) {
|
|
181
|
-
NSLog(@"Error while configuring audio session: %@", [error debugDescription]);
|
|
182
|
-
return false;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
if (@available(iOS 13.0, *)) {
|
|
186
|
-
[self.audioSession setAllowHapticsAndSystemSoundsDuringRecording:self.allowHapticsAndSystemSoundsDuringRecording
|
|
187
|
-
error:&error];
|
|
147
|
+
// Mark as inactive no matter the state reported by AVAudioSession,
|
|
148
|
+
// this is used during interruptions to "force" going through configure&activate flow
|
|
149
|
+
// which is necessary after some of the interruptions (f.e. when the other app re-configures the hardware)
|
|
150
|
+
self.isActive = false;
|
|
151
|
+
}
|
|
188
152
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
153
|
+
- (void)disableSessionManagement
|
|
154
|
+
{
|
|
155
|
+
self.shouldManageSession = false;
|
|
156
|
+
}
|
|
193
157
|
|
|
194
|
-
|
|
195
|
-
|
|
158
|
+
- (NSNumber *)getDevicePreferredSampleRate
|
|
159
|
+
{
|
|
160
|
+
return [NSNumber numberWithFloat:[self.audioSession sampleRate]];
|
|
196
161
|
}
|
|
197
162
|
|
|
198
|
-
- (
|
|
163
|
+
- (NSNumber *)getDevicePreferredInputChannelCount
|
|
199
164
|
{
|
|
200
|
-
self.
|
|
201
|
-
if (self.isActive) {
|
|
202
|
-
self.isActive = false;
|
|
203
|
-
return [self setActive:true];
|
|
204
|
-
}
|
|
205
|
-
return true;
|
|
165
|
+
return [NSNumber numberWithInteger:[self.audioSession inputNumberOfChannels]];
|
|
206
166
|
}
|
|
207
167
|
|
|
208
|
-
- (void)
|
|
168
|
+
- (void)requestRecordingPermissions:(RCTPromiseResolveBlock)resolve
|
|
169
|
+
reject:(RCTPromiseRejectBlock)reject
|
|
209
170
|
{
|
|
210
|
-
|
|
211
|
-
|
|
171
|
+
id value = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSMicrophoneUsageDescription"];
|
|
172
|
+
// if there is no entry NSMicrophoneUsageDescription calling
|
|
173
|
+
// requestRecordPermission will quit an app
|
|
174
|
+
if (value == nil) {
|
|
175
|
+
reject(
|
|
176
|
+
nil,
|
|
177
|
+
@"There is no NSMicrophoneUsageDescription entry in info.plist file. App cannot access microphone without it.",
|
|
178
|
+
nil);
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
resolve([self requestRecordingPermissions]);
|
|
212
183
|
}
|
|
213
184
|
|
|
214
|
-
- (
|
|
185
|
+
- (NSString *)requestRecordingPermissions
|
|
215
186
|
{
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
187
|
+
id value = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSMicrophoneUsageDescription"];
|
|
188
|
+
|
|
189
|
+
if (value == nil) {
|
|
190
|
+
return @"Denied";
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
__block NSString *result = @"Denied";
|
|
194
|
+
dispatch_semaphore_t sem = dispatch_semaphore_create(0);
|
|
195
|
+
|
|
196
|
+
#if TARGET_OS_SIMULATOR
|
|
197
|
+
[self.audioSession requestRecordPermission:^(BOOL granted) {
|
|
198
|
+
result = granted ? @"Granted" : @"Denied";
|
|
199
|
+
dispatch_semaphore_signal(sem);
|
|
200
|
+
}];
|
|
201
|
+
|
|
202
|
+
dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
|
|
203
|
+
return result;
|
|
204
|
+
#else
|
|
205
|
+
if (@available(iOS 17.0, *)) {
|
|
206
|
+
[AVAudioApplication requestRecordPermissionWithCompletionHandler:^(BOOL granted) {
|
|
207
|
+
result = granted ? @"Granted" : @"Denied";
|
|
208
|
+
dispatch_semaphore_signal(sem);
|
|
223
209
|
}];
|
|
224
210
|
} else {
|
|
225
211
|
[self.audioSession requestRecordPermission:^(BOOL granted) {
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
} else {
|
|
229
|
-
resolve(@"Denied");
|
|
230
|
-
}
|
|
212
|
+
result = granted ? @"Granted" : @"Denied";
|
|
213
|
+
dispatch_semaphore_signal(sem);
|
|
231
214
|
}];
|
|
232
215
|
}
|
|
216
|
+
|
|
217
|
+
dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
|
|
218
|
+
return result;
|
|
219
|
+
#endif
|
|
233
220
|
}
|
|
234
221
|
|
|
235
|
-
- (void)checkRecordingPermissions:(RCTPromiseResolveBlock)resolve
|
|
222
|
+
- (void)checkRecordingPermissions:(RCTPromiseResolveBlock)resolve
|
|
223
|
+
reject:(RCTPromiseRejectBlock)reject
|
|
236
224
|
{
|
|
237
|
-
|
|
238
|
-
NSInteger res = [[AVAudioApplication sharedInstance] recordPermission];
|
|
239
|
-
switch (res) {
|
|
240
|
-
case AVAudioApplicationRecordPermissionUndetermined:
|
|
241
|
-
resolve(@"Undetermined");
|
|
242
|
-
break;
|
|
243
|
-
case AVAudioApplicationRecordPermissionGranted:
|
|
244
|
-
resolve(@"Granted");
|
|
245
|
-
break;
|
|
246
|
-
case AVAudioApplicationRecordPermissionDenied:
|
|
247
|
-
resolve(@"Denied");
|
|
248
|
-
break;
|
|
249
|
-
default:
|
|
250
|
-
resolve(@"Undetermined");
|
|
251
|
-
break;
|
|
252
|
-
}
|
|
253
|
-
} else {
|
|
254
|
-
NSInteger res = [self.audioSession recordPermission];
|
|
255
|
-
switch (res) {
|
|
256
|
-
case AVAudioSessionRecordPermissionUndetermined:
|
|
257
|
-
resolve(@"Undetermined");
|
|
258
|
-
break;
|
|
259
|
-
case AVAudioSessionRecordPermissionGranted:
|
|
260
|
-
resolve(@"Granted");
|
|
261
|
-
break;
|
|
262
|
-
case AVAudioSessionRecordPermissionDenied:
|
|
263
|
-
resolve(@"Denied");
|
|
264
|
-
break;
|
|
265
|
-
default:
|
|
266
|
-
resolve(@"Undetermined");
|
|
267
|
-
break;
|
|
268
|
-
}
|
|
269
|
-
}
|
|
225
|
+
resolve([self checkRecordingPermissions]);
|
|
270
226
|
}
|
|
271
227
|
|
|
272
228
|
- (NSString *)checkRecordingPermissions
|
|
273
229
|
{
|
|
230
|
+
#if TARGET_OS_SIMULATOR
|
|
231
|
+
NSInteger res = [self.audioSession recordPermission];
|
|
232
|
+
|
|
233
|
+
switch (res) {
|
|
234
|
+
case AVAudioSessionRecordPermissionUndetermined:
|
|
235
|
+
return @"Undetermined";
|
|
236
|
+
case AVAudioSessionRecordPermissionGranted:
|
|
237
|
+
return @"Granted";
|
|
238
|
+
case AVAudioSessionRecordPermissionDenied:
|
|
239
|
+
return @"Denied";
|
|
240
|
+
default:
|
|
241
|
+
return @"Undetermined";
|
|
242
|
+
}
|
|
243
|
+
#else
|
|
274
244
|
if (@available(iOS 17, *)) {
|
|
275
245
|
NSInteger res = [[AVAudioApplication sharedInstance] recordPermission];
|
|
246
|
+
|
|
276
247
|
switch (res) {
|
|
277
248
|
case AVAudioApplicationRecordPermissionUndetermined:
|
|
278
249
|
return @"Undetermined";
|
|
@@ -283,29 +254,35 @@
|
|
|
283
254
|
default:
|
|
284
255
|
return @"Undetermined";
|
|
285
256
|
}
|
|
286
|
-
} else {
|
|
287
|
-
NSInteger res = [self.audioSession recordPermission];
|
|
288
|
-
switch (res) {
|
|
289
|
-
case AVAudioSessionRecordPermissionUndetermined:
|
|
290
|
-
return @"Undetermined";
|
|
291
|
-
case AVAudioSessionRecordPermissionGranted:
|
|
292
|
-
return @"Granted";
|
|
293
|
-
case AVAudioSessionRecordPermissionDenied:
|
|
294
|
-
return @"Denied";
|
|
295
|
-
default:
|
|
296
|
-
return @"Undetermined";
|
|
297
|
-
}
|
|
298
257
|
}
|
|
258
|
+
|
|
259
|
+
NSInteger res = [self.audioSession recordPermission];
|
|
260
|
+
|
|
261
|
+
switch (res) {
|
|
262
|
+
case AVAudioSessionRecordPermissionUndetermined:
|
|
263
|
+
return @"Undetermined";
|
|
264
|
+
case AVAudioSessionRecordPermissionGranted:
|
|
265
|
+
return @"Granted";
|
|
266
|
+
case AVAudioSessionRecordPermissionDenied:
|
|
267
|
+
return @"Denied";
|
|
268
|
+
default:
|
|
269
|
+
return @"Undetermined";
|
|
270
|
+
}
|
|
271
|
+
#endif
|
|
299
272
|
}
|
|
300
273
|
|
|
301
274
|
- (void)getDevicesInfo:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject
|
|
302
275
|
{
|
|
303
276
|
NSMutableDictionary *devicesInfo = [[NSMutableDictionary alloc] init];
|
|
304
277
|
|
|
305
|
-
[devicesInfo setValue:[self parseDeviceList:[self.audioSession availableInputs]]
|
|
306
|
-
|
|
307
|
-
[devicesInfo setValue:[self parseDeviceList:[[self.audioSession currentRoute]
|
|
308
|
-
|
|
278
|
+
[devicesInfo setValue:[self parseDeviceList:[self.audioSession availableInputs]]
|
|
279
|
+
forKey:@"availableInputs"];
|
|
280
|
+
[devicesInfo setValue:[self parseDeviceList:[[self.audioSession currentRoute] inputs]]
|
|
281
|
+
forKey:@"currentInputs"];
|
|
282
|
+
[devicesInfo setValue:[self parseDeviceList:[[self.audioSession currentRoute] outputs]]
|
|
283
|
+
forKey:@"availableOutputs"];
|
|
284
|
+
[devicesInfo setValue:[self parseDeviceList:[[self.audioSession currentRoute] outputs]]
|
|
285
|
+
forKey:@"currentOutputs"];
|
|
309
286
|
|
|
310
287
|
resolve(devicesInfo);
|
|
311
288
|
}
|
|
@@ -324,4 +301,98 @@
|
|
|
324
301
|
return deviceList;
|
|
325
302
|
}
|
|
326
303
|
|
|
304
|
+
- (AVAudioSessionCategory)categoryFromString:(NSString *)categorySTR
|
|
305
|
+
{
|
|
306
|
+
AVAudioSessionCategory category = 0;
|
|
307
|
+
|
|
308
|
+
if ([categorySTR isEqualToString:@"record"]) {
|
|
309
|
+
category = AVAudioSessionCategoryRecord;
|
|
310
|
+
} else if ([categorySTR isEqualToString:@"ambient"]) {
|
|
311
|
+
category = AVAudioSessionCategoryAmbient;
|
|
312
|
+
} else if ([categorySTR isEqualToString:@"playback"]) {
|
|
313
|
+
category = AVAudioSessionCategoryPlayback;
|
|
314
|
+
} else if ([categorySTR isEqualToString:@"multiRoute"]) {
|
|
315
|
+
category = AVAudioSessionCategoryMultiRoute;
|
|
316
|
+
} else if ([categorySTR isEqualToString:@"soloAmbient"]) {
|
|
317
|
+
category = AVAudioSessionCategorySoloAmbient;
|
|
318
|
+
} else if ([categorySTR isEqualToString:@"playAndRecord"]) {
|
|
319
|
+
category = AVAudioSessionCategoryPlayAndRecord;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
return category;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
- (AVAudioSessionMode)modeFromString:(NSString *)modeSTR
|
|
326
|
+
{
|
|
327
|
+
AVAudioSessionMode mode = 0;
|
|
328
|
+
|
|
329
|
+
if ([modeSTR isEqualToString:@"default"]) {
|
|
330
|
+
mode = AVAudioSessionModeDefault;
|
|
331
|
+
} else if ([modeSTR isEqualToString:@"gameChat"]) {
|
|
332
|
+
mode = AVAudioSessionModeGameChat;
|
|
333
|
+
} else if ([modeSTR isEqualToString:@"videoChat"]) {
|
|
334
|
+
mode = AVAudioSessionModeVideoChat;
|
|
335
|
+
} else if ([modeSTR isEqualToString:@"voiceChat"]) {
|
|
336
|
+
mode = AVAudioSessionModeVoiceChat;
|
|
337
|
+
} else if ([modeSTR isEqualToString:@"measurement"]) {
|
|
338
|
+
mode = AVAudioSessionModeMeasurement;
|
|
339
|
+
} else if ([modeSTR isEqualToString:@"voicePrompt"]) {
|
|
340
|
+
mode = AVAudioSessionModeVoicePrompt;
|
|
341
|
+
} else if ([modeSTR isEqualToString:@"spokenAudio"]) {
|
|
342
|
+
mode = AVAudioSessionModeSpokenAudio;
|
|
343
|
+
} else if ([modeSTR isEqualToString:@"moviePlayback"]) {
|
|
344
|
+
mode = AVAudioSessionModeMoviePlayback;
|
|
345
|
+
} else if ([modeSTR isEqualToString:@"videoRecording"]) {
|
|
346
|
+
mode = AVAudioSessionModeVideoRecording;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
return mode;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
- (AVAudioSessionCategoryOptions)optionsFromArray:(NSArray *)optionsArray
|
|
353
|
+
{
|
|
354
|
+
AVAudioSessionCategoryOptions options = 0;
|
|
355
|
+
|
|
356
|
+
for (NSString *option in optionsArray) {
|
|
357
|
+
if ([option isEqualToString:@"duckOthers"]) {
|
|
358
|
+
options |= AVAudioSessionCategoryOptionDuckOthers;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
if ([option isEqualToString:@"allowAirPlay"]) {
|
|
362
|
+
options |= AVAudioSessionCategoryOptionAllowAirPlay;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
if ([option isEqualToString:@"mixWithOthers"]) {
|
|
366
|
+
options |= AVAudioSessionCategoryOptionMixWithOthers;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
if ([option isEqualToString:@"allowBluetooth"]) {
|
|
370
|
+
options |= AVAudioSessionCategoryOptionAllowBluetooth;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
if ([option isEqualToString:@"defaultToSpeaker"]) {
|
|
374
|
+
options |= AVAudioSessionCategoryOptionDefaultToSpeaker;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
if ([option isEqualToString:@"allowBluetoothA2DP"]) {
|
|
378
|
+
options |= AVAudioSessionCategoryOptionAllowBluetoothA2DP;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
if ([option isEqualToString:@"overrideMutedMicrophoneInterruption"]) {
|
|
382
|
+
options |= AVAudioSessionCategoryOptionOverrideMutedMicrophoneInterruption;
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
if ([option isEqualToString:@"interruptSpokenAudioAndMixWithOthers"]) {
|
|
386
|
+
options |= AVAudioSessionCategoryOptionInterruptSpokenAudioAndMixWithOthers;
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
return options;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
- (bool)isSessionActive
|
|
394
|
+
{
|
|
395
|
+
return self.isActive;
|
|
396
|
+
}
|
|
397
|
+
|
|
327
398
|
@end
|