react-native-audio-api 0.11.0-alpha.1 → 0.11.0-nightly-bfab178-20251107
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 +20 -15
- package/android/build.gradle +33 -3
- package/android/src/main/cpp/audioapi/CMakeLists.txt +6 -3
- package/android/src/main/cpp/audioapi/android/AudioAPIModule.cpp +5 -0
- package/android/src/main/cpp/audioapi/android/AudioAPIModule.h +1 -0
- package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.cpp +30 -142
- package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +13 -40
- package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +4 -2
- package/android/src/main/cpp/audioapi/android/core/NativeAudioRecorder.hpp +9 -9
- package/android/src/main/cpp/audioapi/android/core/utils/AudioDecoder.cpp +6 -0
- package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +31 -3
- package/android/src/main/java/com/swmansion/audioapi/system/AudioFocusListener.kt +21 -9
- package/android/src/main/java/com/swmansion/audioapi/system/LockScreenManager.kt +27 -6
- package/android/src/main/java/com/swmansion/audioapi/system/MediaNotificationManager.kt +11 -0
- package/android/src/oldarch/NativeAudioAPIModuleSpec.java +4 -0
- package/common/cpp/audioapi/AudioAPIModuleInstaller.h +30 -2
- package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +18 -0
- package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +1 -0
- package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp +1 -1
- package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.cpp +47 -0
- package/common/cpp/audioapi/HostObjects/effects/ConvolverNodeHostObject.h +20 -0
- package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.cpp +18 -97
- package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +6 -18
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.cpp +1 -1
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.cpp +1 -1
- package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.cpp +1 -1
- package/common/cpp/audioapi/core/AudioNode.h +3 -2
- package/common/cpp/audioapi/core/AudioParam.cpp +2 -2
- package/common/cpp/audioapi/core/BaseAudioContext.cpp +10 -0
- package/common/cpp/audioapi/core/BaseAudioContext.h +2 -0
- package/common/cpp/audioapi/core/effects/BiquadFilterNode.cpp +69 -32
- package/common/cpp/audioapi/core/effects/BiquadFilterNode.h +37 -1
- package/common/cpp/audioapi/core/effects/ConvolverNode.cpp +210 -0
- package/common/cpp/audioapi/core/effects/ConvolverNode.h +55 -0
- package/common/cpp/audioapi/core/inputs/AudioRecorder.cpp +82 -36
- package/common/cpp/audioapi/core/inputs/AudioRecorder.h +31 -52
- package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +14 -17
- package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +0 -1
- package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +8 -14
- package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +0 -1
- package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +14 -18
- package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +2 -2
- package/common/cpp/audioapi/core/sources/StreamerNode.cpp +64 -64
- package/common/cpp/audioapi/core/sources/StreamerNode.h +38 -10
- package/common/cpp/audioapi/core/utils/AudioNodeManager.cpp +5 -0
- package/common/cpp/audioapi/core/utils/Constants.h +2 -1
- package/common/cpp/audioapi/core/utils/worklets/SafeIncludes.h +12 -8
- package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.cpp +3 -3
- package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.h +1 -1
- package/common/cpp/audioapi/dsp/AudioUtils.cpp +1 -1
- package/common/cpp/audioapi/dsp/Convolver.cpp +213 -0
- package/common/cpp/audioapi/dsp/Convolver.h +45 -0
- package/common/cpp/audioapi/dsp/FFT.cpp +0 -26
- package/common/cpp/audioapi/dsp/FFT.h +26 -2
- package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +1 -1
- 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/libs/ffmpeg/FFmpegDecoding.cpp +2 -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/AudioBus.cpp +28 -0
- package/common/cpp/audioapi/utils/AudioBus.h +3 -0
- package/common/cpp/audioapi/utils/ThreadPool.hpp +59 -1
- package/common/cpp/test/CMakeLists.txt +19 -14
- package/common/cpp/test/src/AudioParamTest.cpp +1 -1
- package/common/cpp/test/src/AudioScheduledSourceTest.cpp +134 -0
- package/common/cpp/test/src/ConstantSourceTest.cpp +1 -1
- package/common/cpp/test/src/GainTest.cpp +1 -1
- package/common/cpp/test/src/MockAudioEventHandlerRegistry.h +4 -4
- package/common/cpp/test/src/OscillatorTest.cpp +1 -1
- package/common/cpp/test/src/StereoPannerTest.cpp +1 -1
- package/common/cpp/test/src/biquad/BiquadFilterChromium.cpp +389 -0
- package/common/cpp/test/src/biquad/BiquadFilterChromium.h +64 -0
- package/common/cpp/test/src/biquad/BiquadFilterTest.cpp +284 -0
- package/common/cpp/test/src/biquad/BiquadFilterTest.h +40 -0
- package/ios/audioapi/ios/AudioAPIModule.h +2 -1
- package/ios/audioapi/ios/AudioAPIModule.mm +13 -0
- package/ios/audioapi/ios/core/IOSAudioRecorder.h +10 -28
- package/ios/audioapi/ios/core/IOSAudioRecorder.mm +30 -117
- package/ios/audioapi/ios/core/NativeAudioRecorder.h +9 -4
- package/ios/audioapi/ios/core/NativeAudioRecorder.m +71 -29
- package/ios/audioapi/ios/core/utils/AudioDecoder.mm +0 -1
- package/ios/audioapi/ios/system/AudioEngine.mm +3 -3
- package/ios/audioapi/ios/system/AudioSessionManager.h +2 -0
- package/ios/audioapi/ios/system/AudioSessionManager.mm +24 -0
- package/ios/audioapi/ios/system/LockScreenManager.h +0 -1
- package/ios/audioapi/ios/system/LockScreenManager.mm +6 -19
- package/lib/commonjs/api.js +141 -76
- 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/AudioContext.js +1 -1
- package/lib/commonjs/core/AudioContext.js.map +1 -1
- package/lib/commonjs/core/AudioRecorder.js +13 -171
- package/lib/commonjs/core/AudioRecorder.js.map +1 -1
- package/lib/commonjs/core/BaseAudioContext.js +28 -25
- 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/OfflineAudioContext.js +1 -1
- package/lib/commonjs/core/OfflineAudioContext.js.map +1 -1
- package/lib/commonjs/specs/NativeAudioAPIModule.js.map +1 -1
- package/lib/commonjs/system/AudioManager.js +3 -0
- package/lib/commonjs/system/AudioManager.js.map +1 -1
- package/lib/commonjs/types.js +0 -46
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/utils/index.js +19 -21
- package/lib/commonjs/utils/index.js.map +1 -1
- package/lib/commonjs/web-core/AudioContext.js +12 -0
- 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/OfflineAudioContext.js +12 -0
- package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
- package/lib/module/api.js +16 -15
- 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/AudioContext.js +2 -2
- package/lib/module/core/AudioContext.js.map +1 -1
- package/lib/module/core/AudioRecorder.js +13 -171
- package/lib/module/core/AudioRecorder.js.map +1 -1
- package/lib/module/core/BaseAudioContext.js +29 -26
- 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/OfflineAudioContext.js +2 -2
- package/lib/module/core/OfflineAudioContext.js.map +1 -1
- package/lib/module/specs/NativeAudioAPIModule.js.map +1 -1
- package/lib/module/system/AudioManager.js +3 -0
- package/lib/module/system/AudioManager.js.map +1 -1
- package/lib/module/types.js +1 -45
- package/lib/module/types.js.map +1 -1
- package/lib/module/utils/index.js +15 -2
- package/lib/module/utils/index.js.map +1 -1
- package/lib/module/web-core/AudioContext.js +12 -0
- 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/OfflineAudioContext.js +12 -0
- package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
- package/lib/typescript/api.d.ts +19 -17
- 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/AudioContext.d.ts.map +1 -1
- package/lib/typescript/core/AudioRecorder.d.ts +7 -62
- package/lib/typescript/core/AudioRecorder.d.ts.map +1 -1
- package/lib/typescript/core/BaseAudioContext.d.ts +3 -1
- 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/events/types.d.ts +0 -16
- package/lib/typescript/events/types.d.ts.map +1 -1
- package/lib/typescript/interfaces.d.ts +9 -42
- package/lib/typescript/interfaces.d.ts.map +1 -1
- package/lib/typescript/specs/NativeAudioAPIModule.d.ts +1 -0
- package/lib/typescript/specs/NativeAudioAPIModule.d.ts.map +1 -1
- package/lib/typescript/system/AudioManager.d.ts +1 -0
- package/lib/typescript/system/AudioManager.d.ts.map +1 -1
- package/lib/typescript/types.d.ts +8 -79
- package/lib/typescript/types.d.ts.map +1 -1
- package/lib/typescript/utils/index.d.ts +5 -2
- package/lib/typescript/utils/index.d.ts.map +1 -1
- package/lib/typescript/web-core/AudioContext.d.ts +3 -0
- package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
- package/lib/typescript/web-core/BaseAudioContext.d.ts +2 -0
- 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/OfflineAudioContext.d.ts +3 -0
- package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
- package/package.json +14 -5
- package/scripts/download-prebuilt-binaries.sh +61 -0
- package/scripts/rnaa_utils.rb +8 -0
- package/scripts/validate-worklets-version.js +28 -0
- package/src/api.ts +45 -18
- package/src/api.web.ts +1 -0
- package/src/core/AudioContext.ts +3 -2
- package/src/core/AudioRecorder.ts +24 -211
- package/src/core/BaseAudioContext.ts +67 -60
- package/src/core/ConvolverNode.ts +35 -0
- package/src/core/OfflineAudioContext.ts +2 -2
- package/src/events/types.ts +0 -18
- package/src/interfaces.ts +16 -52
- package/src/specs/NativeAudioAPIModule.ts +1 -0
- package/src/system/AudioManager.ts +4 -0
- package/src/types.ts +9 -90
- package/src/utils/index.ts +22 -2
- package/src/web-core/AudioContext.tsx +25 -0
- package/src/web-core/BaseAudioContext.tsx +2 -0
- package/src/web-core/ConvolverNode.tsx +43 -0
- package/src/web-core/ConvolverNodeOptions.tsx +6 -0
- package/src/web-core/OfflineAudioContext.tsx +25 -0
- package/android/src/main/cpp/audioapi/android/core/utils/AndroidFileWriterBackend.h +0 -37
- package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.cpp +0 -187
- package/android/src/main/cpp/audioapi/android/core/utils/AndroidRecorderCallback.h +0 -57
- 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/MiniaudioImplementation.cpp +0 -3
- 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/ffmpegBackend/FFmpegFileWriter.cpp +0 -429
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.h +0 -113
- 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/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.cpp +0 -269
- package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.h +0 -47
- package/android/src/main/cpp/audioapi/android/system/NativeFileInfo.hpp +0 -31
- package/android/src/main/java/com/swmansion/audioapi/system/NativeFileInfo.kt +0 -18
- 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/common/cpp/audioapi/external/arm64-v8a/libcrypto.a +0 -0
- package/common/cpp/audioapi/external/arm64-v8a/libogg.a +0 -0
- package/common/cpp/audioapi/external/arm64-v8a/libopus.a +0 -0
- package/common/cpp/audioapi/external/arm64-v8a/libopusfile.a +0 -0
- package/common/cpp/audioapi/external/arm64-v8a/libssl.a +0 -0
- package/common/cpp/audioapi/external/arm64-v8a/libvorbis.a +0 -0
- package/common/cpp/audioapi/external/arm64-v8a/libvorbisenc.a +0 -0
- package/common/cpp/audioapi/external/arm64-v8a/libvorbisfile.a +0 -0
- package/common/cpp/audioapi/external/armeabi-v7a/libcrypto.a +0 -0
- package/common/cpp/audioapi/external/armeabi-v7a/libogg.a +0 -0
- package/common/cpp/audioapi/external/armeabi-v7a/libopus.a +0 -0
- package/common/cpp/audioapi/external/armeabi-v7a/libopusfile.a +0 -0
- package/common/cpp/audioapi/external/armeabi-v7a/libssl.a +0 -0
- package/common/cpp/audioapi/external/armeabi-v7a/libvorbis.a +0 -0
- package/common/cpp/audioapi/external/armeabi-v7a/libvorbisenc.a +0 -0
- package/common/cpp/audioapi/external/armeabi-v7a/libvorbisfile.a +0 -0
- package/common/cpp/audioapi/external/iphoneos/libcrypto.a +0 -0
- package/common/cpp/audioapi/external/iphoneos/libogg.a +0 -0
- package/common/cpp/audioapi/external/iphoneos/libopus.a +0 -0
- package/common/cpp/audioapi/external/iphoneos/libopusfile.a +0 -0
- package/common/cpp/audioapi/external/iphoneos/libssl.a +0 -0
- package/common/cpp/audioapi/external/iphoneos/libvorbis.a +0 -0
- package/common/cpp/audioapi/external/iphoneos/libvorbisenc.a +0 -0
- package/common/cpp/audioapi/external/iphoneos/libvorbisfile.a +0 -0
- package/common/cpp/audioapi/external/iphonesimulator/libcrypto.a +0 -0
- package/common/cpp/audioapi/external/iphonesimulator/libogg.a +0 -0
- package/common/cpp/audioapi/external/iphonesimulator/libopus.a +0 -0
- package/common/cpp/audioapi/external/iphonesimulator/libopusfile.a +0 -0
- package/common/cpp/audioapi/external/iphonesimulator/libssl.a +0 -0
- package/common/cpp/audioapi/external/iphonesimulator/libvorbis.a +0 -0
- package/common/cpp/audioapi/external/iphonesimulator/libvorbisenc.a +0 -0
- package/common/cpp/audioapi/external/iphonesimulator/libvorbisfile.a +0 -0
- package/common/cpp/audioapi/external/libavcodec.xcframework/Info.plist +0 -44
- package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64/libavcodec.framework/Info.plist +0 -1
- package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64/libavcodec.framework/libavcodec +0 -0
- package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64_x86_64-simulator/libavcodec.framework/Info.plist +0 -1
- package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64_x86_64-simulator/libavcodec.framework/libavcodec +0 -0
- package/common/cpp/audioapi/external/libavformat.xcframework/Info.plist +0 -44
- package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64/libavformat.framework/Info.plist +0 -1
- package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64/libavformat.framework/libavformat +0 -0
- package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64_x86_64-simulator/libavformat.framework/Info.plist +0 -1
- package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64_x86_64-simulator/libavformat.framework/libavformat +0 -0
- package/common/cpp/audioapi/external/libavutil.xcframework/Info.plist +0 -44
- package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64/libavutil.framework/Info.plist +0 -1
- package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64/libavutil.framework/libavutil +0 -0
- package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64_x86_64-simulator/libavutil.framework/Info.plist +0 -1
- package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64_x86_64-simulator/libavutil.framework/libavutil +0 -0
- package/common/cpp/audioapi/external/libswresample.xcframework/Info.plist +0 -44
- package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64/libswresample.framework/Info.plist +0 -1
- package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64/libswresample.framework/libswresample +0 -0
- package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64_x86_64-simulator/libswresample.framework/Info.plist +0 -1
- package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64_x86_64-simulator/libswresample.framework/libswresample +0 -0
- package/common/cpp/audioapi/external/x86/libcrypto.a +0 -0
- package/common/cpp/audioapi/external/x86/libogg.a +0 -0
- package/common/cpp/audioapi/external/x86/libopus.a +0 -0
- package/common/cpp/audioapi/external/x86/libopusfile.a +0 -0
- package/common/cpp/audioapi/external/x86/libssl.a +0 -0
- package/common/cpp/audioapi/external/x86/libvorbis.a +0 -0
- package/common/cpp/audioapi/external/x86/libvorbisenc.a +0 -0
- package/common/cpp/audioapi/external/x86/libvorbisfile.a +0 -0
- package/common/cpp/audioapi/external/x86_64/libcrypto.a +0 -0
- package/common/cpp/audioapi/external/x86_64/libogg.a +0 -0
- package/common/cpp/audioapi/external/x86_64/libopus.a +0 -0
- package/common/cpp/audioapi/external/x86_64/libopusfile.a +0 -0
- package/common/cpp/audioapi/external/x86_64/libssl.a +0 -0
- package/common/cpp/audioapi/external/x86_64/libvorbis.a +0 -0
- package/common/cpp/audioapi/external/x86_64/libvorbisenc.a +0 -0
- package/common/cpp/audioapi/external/x86_64/libvorbisfile.a +0 -0
- 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.h +0 -51
- package/ios/audioapi/ios/core/IOSAudioFileWriter.mm +0 -223
- package/ios/audioapi/ios/core/IOSRecorderCallback.h +0 -57
- 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/src/utils/bitEnums.ts +0 -51
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
package com.swmansion.audioapi
|
|
2
2
|
|
|
3
3
|
import com.facebook.jni.HybridData
|
|
4
|
+
import com.facebook.react.bridge.LifecycleEventListener
|
|
4
5
|
import com.facebook.react.bridge.Promise
|
|
5
6
|
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
7
|
import com.facebook.react.bridge.ReadableArray
|
|
@@ -9,7 +10,6 @@ import com.facebook.react.common.annotations.FrameworkAPI
|
|
|
9
10
|
import com.facebook.react.module.annotations.ReactModule
|
|
10
11
|
import com.facebook.react.turbomodule.core.CallInvokerHolderImpl
|
|
11
12
|
import com.swmansion.audioapi.system.MediaSessionManager
|
|
12
|
-
import com.swmansion.audioapi.system.NativeFileInfo
|
|
13
13
|
import com.swmansion.audioapi.system.PermissionRequestListener
|
|
14
14
|
import java.lang.ref.WeakReference
|
|
15
15
|
|
|
@@ -17,7 +17,8 @@ import java.lang.ref.WeakReference
|
|
|
17
17
|
@ReactModule(name = AudioAPIModule.NAME)
|
|
18
18
|
class AudioAPIModule(
|
|
19
19
|
reactContext: ReactApplicationContext,
|
|
20
|
-
) : NativeAudioAPIModuleSpec(reactContext)
|
|
20
|
+
) : NativeAudioAPIModuleSpec(reactContext),
|
|
21
|
+
LifecycleEventListener {
|
|
21
22
|
companion object {
|
|
22
23
|
const val NAME = NativeAudioAPIModuleSpec.NAME
|
|
23
24
|
}
|
|
@@ -39,6 +40,8 @@ class AudioAPIModule(
|
|
|
39
40
|
eventBody: Map<String, Any>,
|
|
40
41
|
)
|
|
41
42
|
|
|
43
|
+
private external fun closeAllContexts()
|
|
44
|
+
|
|
42
45
|
init {
|
|
43
46
|
try {
|
|
44
47
|
System.loadLibrary("react-native-audio-api")
|
|
@@ -60,12 +63,33 @@ class AudioAPIModule(
|
|
|
60
63
|
|
|
61
64
|
override fun install(): Boolean {
|
|
62
65
|
MediaSessionManager.initialize(WeakReference(this), reactContext)
|
|
63
|
-
NativeFileInfo.initialize(reactContext)
|
|
64
66
|
injectJSIBindings()
|
|
65
67
|
|
|
66
68
|
return true
|
|
67
69
|
}
|
|
68
70
|
|
|
71
|
+
override fun onHostResume() {
|
|
72
|
+
// do nothing
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
override fun onHostPause() {
|
|
76
|
+
// do nothing
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
override fun onHostDestroy() {
|
|
80
|
+
closeAllContexts()
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
override fun initialize() {
|
|
84
|
+
reactContext.get()?.addLifecycleEventListener(this)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
override fun invalidate() {
|
|
88
|
+
closeAllContexts()
|
|
89
|
+
reactContext.get()?.removeLifecycleEventListener(this)
|
|
90
|
+
// think about cleaning up resources, singletons etc.
|
|
91
|
+
}
|
|
92
|
+
|
|
69
93
|
override fun getDevicePreferredSampleRate(): Double = MediaSessionManager.getDevicePreferredSampleRate()
|
|
70
94
|
|
|
71
95
|
override fun setAudioSessionActivity(
|
|
@@ -84,6 +108,10 @@ class AudioAPIModule(
|
|
|
84
108
|
// noting to do here
|
|
85
109
|
}
|
|
86
110
|
|
|
111
|
+
override fun disableSessionManagement() {
|
|
112
|
+
// nothing to do here
|
|
113
|
+
}
|
|
114
|
+
|
|
87
115
|
override fun setLockScreenInfo(info: ReadableMap?) {
|
|
88
116
|
MediaSessionManager.setLockScreenInfo(info)
|
|
89
117
|
}
|
|
@@ -13,12 +13,14 @@ class AudioFocusListener(
|
|
|
13
13
|
private val audioAPIModule: WeakReference<AudioAPIModule>,
|
|
14
14
|
private val lockScreenManager: WeakReference<LockScreenManager>,
|
|
15
15
|
) : AudioManager.OnAudioFocusChangeListener {
|
|
16
|
+
private var playOnAudioFocus: Boolean = false
|
|
16
17
|
private var focusRequest: AudioFocusRequest? = null
|
|
17
18
|
|
|
18
19
|
override fun onAudioFocusChange(focusChange: Int) {
|
|
19
20
|
Log.d("AudioFocusListener", "onAudioFocusChange: $focusChange")
|
|
20
21
|
when (focusChange) {
|
|
21
22
|
AudioManager.AUDIOFOCUS_LOSS -> {
|
|
23
|
+
playOnAudioFocus = false
|
|
22
24
|
val body =
|
|
23
25
|
HashMap<String, Any>().apply {
|
|
24
26
|
put("type", "began")
|
|
@@ -26,23 +28,33 @@ class AudioFocusListener(
|
|
|
26
28
|
}
|
|
27
29
|
audioAPIModule.get()?.invokeHandlerWithEventNameAndEventBody("interruption", body)
|
|
28
30
|
}
|
|
29
|
-
|
|
30
31
|
AudioManager.AUDIOFOCUS_LOSS_TRANSIENT -> {
|
|
32
|
+
playOnAudioFocus = lockScreenManager.get()?.isPlaying == true
|
|
31
33
|
val body =
|
|
32
34
|
HashMap<String, Any>().apply {
|
|
33
35
|
put("type", "began")
|
|
34
|
-
put("shouldResume",
|
|
36
|
+
put("shouldResume", playOnAudioFocus)
|
|
35
37
|
}
|
|
36
38
|
audioAPIModule.get()?.invokeHandlerWithEventNameAndEventBody("interruption", body)
|
|
37
39
|
}
|
|
38
|
-
|
|
39
40
|
AudioManager.AUDIOFOCUS_GAIN -> {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
41
|
+
if (playOnAudioFocus) {
|
|
42
|
+
val body =
|
|
43
|
+
HashMap<String, Any>().apply {
|
|
44
|
+
put("type", "ended")
|
|
45
|
+
put("shouldResume", true)
|
|
46
|
+
}
|
|
47
|
+
audioAPIModule.get()?.invokeHandlerWithEventNameAndEventBody("interruption", body)
|
|
48
|
+
} else {
|
|
49
|
+
val body =
|
|
50
|
+
HashMap<String, Any>().apply {
|
|
51
|
+
put("type", "ended")
|
|
52
|
+
put("shouldResume", false)
|
|
53
|
+
}
|
|
54
|
+
audioAPIModule.get()?.invokeHandlerWithEventNameAndEventBody("interruption", body)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
playOnAudioFocus = false
|
|
46
58
|
}
|
|
47
59
|
}
|
|
48
60
|
}
|
|
@@ -42,13 +42,11 @@ class LockScreenManager(
|
|
|
42
42
|
private var playbackState: Int = PlaybackStateCompat.STATE_PAUSED
|
|
43
43
|
|
|
44
44
|
init {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
this.nb.setPriority(NotificationCompat.PRIORITY_HIGH)
|
|
45
|
+
pb.setActions(controls)
|
|
46
|
+
nb.setPriority(NotificationCompat.PRIORITY_HIGH)
|
|
47
|
+
nb.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
|
|
49
48
|
|
|
50
49
|
updateNotificationMediaStyle()
|
|
51
|
-
|
|
52
50
|
mediaNotificationManager.get()?.updateActions(controls)
|
|
53
51
|
}
|
|
54
52
|
|
|
@@ -174,8 +172,31 @@ class LockScreenManager(
|
|
|
174
172
|
if (artworkThread != null && artworkThread!!.isAlive) artworkThread!!.interrupt()
|
|
175
173
|
artworkThread = null
|
|
176
174
|
|
|
177
|
-
|
|
175
|
+
title = null
|
|
176
|
+
artist = null
|
|
177
|
+
album = null
|
|
178
|
+
description = null
|
|
179
|
+
duration = 0L
|
|
180
|
+
speed = 1.0F
|
|
181
|
+
elapsedTime = 0L
|
|
182
|
+
artwork = null
|
|
183
|
+
playbackState = PlaybackStateCompat.STATE_PAUSED
|
|
184
|
+
isPlaying = false
|
|
185
|
+
|
|
186
|
+
val emptyMetadata = MediaMetadataCompat.Builder().build()
|
|
187
|
+
mediaSession.get()?.setMetadata(emptyMetadata)
|
|
188
|
+
|
|
189
|
+
pb.setState(PlaybackStateCompat.STATE_NONE, 0, 0f)
|
|
190
|
+
pb.setActions(controls)
|
|
191
|
+
state = pb.build()
|
|
192
|
+
mediaSession.get()?.setPlaybackState(state)
|
|
178
193
|
mediaSession.get()?.setActive(false)
|
|
194
|
+
|
|
195
|
+
nb.setContentTitle("")
|
|
196
|
+
nb.setContentText("")
|
|
197
|
+
nb.setContentInfo("")
|
|
198
|
+
|
|
199
|
+
mediaNotificationManager.get()?.updateNotification(nb, isPlaying)
|
|
179
200
|
}
|
|
180
201
|
|
|
181
202
|
fun enableRemoteCommand(
|
|
@@ -258,5 +258,16 @@ class MediaNotificationManager(
|
|
|
258
258
|
}
|
|
259
259
|
super.onDestroy()
|
|
260
260
|
}
|
|
261
|
+
|
|
262
|
+
override fun onTimeout(startId: Int) {
|
|
263
|
+
stopForegroundService()
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
override fun onTimeout(
|
|
267
|
+
startId: Int,
|
|
268
|
+
fgsType: Int,
|
|
269
|
+
) {
|
|
270
|
+
stopForegroundService()
|
|
271
|
+
}
|
|
261
272
|
}
|
|
262
273
|
}
|
|
@@ -50,6 +50,10 @@
|
|
|
50
50
|
@DoNotStrip
|
|
51
51
|
public abstract void setAudioSessionOptions(String category, String mode, ReadableArray options, boolean allowHaptics);
|
|
52
52
|
|
|
53
|
+
@ReactMethod
|
|
54
|
+
@DoNotStrip
|
|
55
|
+
public abstract void disableSessionManagement();
|
|
56
|
+
|
|
53
57
|
@ReactMethod
|
|
54
58
|
@DoNotStrip
|
|
55
59
|
public abstract void setLockScreenInfo(ReadableMap info);
|
|
@@ -16,13 +16,16 @@
|
|
|
16
16
|
#include <audioapi/core/utils/worklets/SafeIncludes.h>
|
|
17
17
|
|
|
18
18
|
#include <memory>
|
|
19
|
-
#include <
|
|
19
|
+
#include <vector>
|
|
20
20
|
|
|
21
21
|
namespace audioapi {
|
|
22
22
|
|
|
23
23
|
using namespace facebook;
|
|
24
24
|
|
|
25
25
|
class AudioAPIModuleInstaller {
|
|
26
|
+
private:
|
|
27
|
+
inline static std::vector<std::weak_ptr<AudioContext>> contexts_ = {};
|
|
28
|
+
|
|
26
29
|
public:
|
|
27
30
|
static void injectJSIBindings(
|
|
28
31
|
jsi::Runtime *jsiRuntime,
|
|
@@ -62,6 +65,19 @@ class AudioAPIModuleInstaller {
|
|
|
62
65
|
*jsiRuntime, audioEventHandlerRegistryHostObject));
|
|
63
66
|
}
|
|
64
67
|
|
|
68
|
+
static void closeAllContexts() {
|
|
69
|
+
for (auto it = contexts_.begin(); it != contexts_.end(); ++it) {
|
|
70
|
+
auto weakContext = *it;
|
|
71
|
+
|
|
72
|
+
if (auto context = weakContext.lock()) {
|
|
73
|
+
context->close();
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
it = contexts_.erase(it);
|
|
77
|
+
--it;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
65
81
|
private:
|
|
66
82
|
static jsi::Function getCreateAudioContextFunction(
|
|
67
83
|
jsi::Runtime *jsiRuntime,
|
|
@@ -96,6 +112,8 @@ class AudioAPIModuleInstaller {
|
|
|
96
112
|
initSuspended,
|
|
97
113
|
audioEventHandlerRegistry,
|
|
98
114
|
runtimeRegistry);
|
|
115
|
+
AudioAPIModuleInstaller::contexts_.push_back(audioContext);
|
|
116
|
+
|
|
99
117
|
auto audioContextHostObject =
|
|
100
118
|
std::make_shared<AudioContextHostObject>(
|
|
101
119
|
audioContext, &runtime, jsCallInvoker);
|
|
@@ -139,6 +157,7 @@ class AudioAPIModuleInstaller {
|
|
|
139
157
|
sampleRate,
|
|
140
158
|
audioEventHandlerRegistry,
|
|
141
159
|
runtimeRegistry);
|
|
160
|
+
|
|
142
161
|
auto audioContextHostObject =
|
|
143
162
|
std::make_shared<OfflineAudioContextHostObject>(
|
|
144
163
|
offlineAudioContext, &runtime, jsCallInvoker);
|
|
@@ -161,8 +180,17 @@ class AudioAPIModuleInstaller {
|
|
|
161
180
|
const jsi::Value &thisValue,
|
|
162
181
|
const jsi::Value *args,
|
|
163
182
|
size_t count) -> jsi::Value {
|
|
183
|
+
auto options = args[0].getObject(runtime);
|
|
184
|
+
|
|
185
|
+
auto sampleRate = static_cast<float>(
|
|
186
|
+
options.getProperty(runtime, "sampleRate").getNumber());
|
|
187
|
+
auto bufferLength = static_cast<int>(
|
|
188
|
+
options.getProperty(runtime, "bufferLengthInSamples")
|
|
189
|
+
.getNumber());
|
|
190
|
+
|
|
164
191
|
auto audioRecorderHostObject =
|
|
165
|
-
std::make_shared<AudioRecorderHostObject>(
|
|
192
|
+
std::make_shared<AudioRecorderHostObject>(
|
|
193
|
+
audioEventHandlerRegistry, sampleRate, bufferLength);
|
|
166
194
|
|
|
167
195
|
return jsi::Object::createFromHostObject(
|
|
168
196
|
runtime, audioRecorderHostObject);
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
#include <audioapi/HostObjects/analysis/AnalyserNodeHostObject.h>
|
|
6
6
|
#include <audioapi/HostObjects/destinations/AudioDestinationNodeHostObject.h>
|
|
7
7
|
#include <audioapi/HostObjects/effects/BiquadFilterNodeHostObject.h>
|
|
8
|
+
#include <audioapi/HostObjects/effects/ConvolverNodeHostObject.h>
|
|
8
9
|
#include <audioapi/HostObjects/effects/GainNodeHostObject.h>
|
|
9
10
|
#include <audioapi/HostObjects/effects/PeriodicWaveHostObject.h>
|
|
10
11
|
#include <audioapi/HostObjects/effects/StereoPannerNodeHostObject.h>
|
|
@@ -49,6 +50,7 @@ BaseAudioContextHostObject::BaseAudioContextHostObject(
|
|
|
49
50
|
JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createBufferQueueSource),
|
|
50
51
|
JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createBuffer),
|
|
51
52
|
JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createPeriodicWave),
|
|
53
|
+
JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createConvolver),
|
|
52
54
|
JSI_EXPORT_FUNCTION(BaseAudioContextHostObject, createAnalyser));
|
|
53
55
|
}
|
|
54
56
|
|
|
@@ -269,4 +271,20 @@ JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createAnalyser) {
|
|
|
269
271
|
auto analyserHostObject = std::make_shared<AnalyserNodeHostObject>(analyser);
|
|
270
272
|
return jsi::Object::createFromHostObject(runtime, analyserHostObject);
|
|
271
273
|
}
|
|
274
|
+
|
|
275
|
+
JSI_HOST_FUNCTION_IMPL(BaseAudioContextHostObject, createConvolver) {
|
|
276
|
+
auto disableNormalization = args[1].getBool();
|
|
277
|
+
std::shared_ptr<ConvolverNode> convolver;
|
|
278
|
+
if (args[0].isUndefined()) {
|
|
279
|
+
convolver = context_->createConvolver(nullptr, disableNormalization);
|
|
280
|
+
} else {
|
|
281
|
+
auto bufferHostObject =
|
|
282
|
+
args[0].getObject(runtime).asHostObject<AudioBufferHostObject>(runtime);
|
|
283
|
+
convolver = context_->createConvolver(
|
|
284
|
+
bufferHostObject->audioBuffer_, disableNormalization);
|
|
285
|
+
}
|
|
286
|
+
auto convolverHostObject =
|
|
287
|
+
std::make_shared<ConvolverNodeHostObject>(convolver);
|
|
288
|
+
return jsi::Object::createFromHostObject(runtime, convolverHostObject);
|
|
289
|
+
}
|
|
272
290
|
} // namespace audioapi
|
|
@@ -41,6 +41,7 @@ class BaseAudioContextHostObject : public JsiHostObject {
|
|
|
41
41
|
JSI_HOST_FUNCTION_DECL(createBuffer);
|
|
42
42
|
JSI_HOST_FUNCTION_DECL(createPeriodicWave);
|
|
43
43
|
JSI_HOST_FUNCTION_DECL(createAnalyser);
|
|
44
|
+
JSI_HOST_FUNCTION_DECL(createConvolver);
|
|
44
45
|
|
|
45
46
|
std::shared_ptr<BaseAudioContext> context_;
|
|
46
47
|
|
|
@@ -67,7 +67,7 @@ JSI_HOST_FUNCTION_IMPL(BiquadFilterNodeHostObject, getFrequencyResponse) {
|
|
|
67
67
|
.getArrayBuffer(runtime);
|
|
68
68
|
auto frequencyArray =
|
|
69
69
|
reinterpret_cast<float *>(arrayBufferFrequency.data(runtime));
|
|
70
|
-
auto length = static_cast<
|
|
70
|
+
auto length = static_cast<size_t>(arrayBufferFrequency.size(runtime));
|
|
71
71
|
|
|
72
72
|
auto arrayBufferMag = args[1]
|
|
73
73
|
.getObject(runtime)
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#include <audioapi/HostObjects/effects/ConvolverNodeHostObject.h>
|
|
2
|
+
|
|
3
|
+
#include <audioapi/HostObjects/sources/AudioBufferHostObject.h>
|
|
4
|
+
#include <audioapi/core/effects/ConvolverNode.h>
|
|
5
|
+
|
|
6
|
+
namespace audioapi {
|
|
7
|
+
|
|
8
|
+
ConvolverNodeHostObject::ConvolverNodeHostObject(
|
|
9
|
+
const std::shared_ptr<ConvolverNode> &node)
|
|
10
|
+
: AudioNodeHostObject(node) {
|
|
11
|
+
addGetters(
|
|
12
|
+
JSI_EXPORT_PROPERTY_GETTER(ConvolverNodeHostObject, normalize),
|
|
13
|
+
JSI_EXPORT_PROPERTY_GETTER(ConvolverNodeHostObject, buffer));
|
|
14
|
+
addSetters(
|
|
15
|
+
JSI_EXPORT_PROPERTY_SETTER(ConvolverNodeHostObject, normalize),
|
|
16
|
+
JSI_EXPORT_PROPERTY_SETTER(ConvolverNodeHostObject, buffer));
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
JSI_PROPERTY_GETTER_IMPL(ConvolverNodeHostObject, normalize) {
|
|
20
|
+
auto convolverNode = std::static_pointer_cast<ConvolverNode>(node_);
|
|
21
|
+
return {convolverNode->getNormalize_()};
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
JSI_PROPERTY_GETTER_IMPL(ConvolverNodeHostObject, buffer) {
|
|
25
|
+
auto convolverNode = std::static_pointer_cast<ConvolverNode>(node_);
|
|
26
|
+
auto buffer = convolverNode->getBuffer();
|
|
27
|
+
auto bufferHostObject = std::make_shared<AudioBufferHostObject>(buffer);
|
|
28
|
+
return jsi::Object::createFromHostObject(runtime, bufferHostObject);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
JSI_PROPERTY_SETTER_IMPL(ConvolverNodeHostObject, normalize) {
|
|
32
|
+
auto convolverNode = std::static_pointer_cast<ConvolverNode>(node_);
|
|
33
|
+
convolverNode->setNormalize(value.getBool());
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
JSI_PROPERTY_SETTER_IMPL(ConvolverNodeHostObject, buffer) {
|
|
37
|
+
auto convolverNode = std::static_pointer_cast<ConvolverNode>(node_);
|
|
38
|
+
if (value.isNull()) {
|
|
39
|
+
convolverNode->setBuffer(nullptr);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
auto bufferHostObject =
|
|
44
|
+
value.getObject(runtime).asHostObject<AudioBufferHostObject>(runtime);
|
|
45
|
+
convolverNode->setBuffer(bufferHostObject->audioBuffer_);
|
|
46
|
+
}
|
|
47
|
+
} // namespace audioapi
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <audioapi/HostObjects/AudioNodeHostObject.h>
|
|
4
|
+
|
|
5
|
+
#include <memory>
|
|
6
|
+
|
|
7
|
+
namespace audioapi {
|
|
8
|
+
using namespace facebook;
|
|
9
|
+
|
|
10
|
+
class ConvolverNode;
|
|
11
|
+
|
|
12
|
+
class ConvolverNodeHostObject : public AudioNodeHostObject {
|
|
13
|
+
public:
|
|
14
|
+
explicit ConvolverNodeHostObject(const std::shared_ptr<ConvolverNode> &node);
|
|
15
|
+
JSI_PROPERTY_GETTER_DECL(normalize);
|
|
16
|
+
JSI_PROPERTY_GETTER_DECL(buffer);
|
|
17
|
+
JSI_PROPERTY_SETTER_DECL(normalize);
|
|
18
|
+
JSI_PROPERTY_SETTER_DECL(buffer);
|
|
19
|
+
};
|
|
20
|
+
} // namespace audioapi
|
|
@@ -14,97 +14,35 @@
|
|
|
14
14
|
namespace audioapi {
|
|
15
15
|
|
|
16
16
|
AudioRecorderHostObject::AudioRecorderHostObject(
|
|
17
|
-
const std::shared_ptr<AudioEventHandlerRegistry>
|
|
18
|
-
|
|
17
|
+
const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
|
|
18
|
+
float sampleRate,
|
|
19
|
+
int bufferLength) {
|
|
19
20
|
#ifdef ANDROID
|
|
20
|
-
audioRecorder_ =
|
|
21
|
-
|
|
21
|
+
audioRecorder_ = std::make_shared<AndroidAudioRecorder>(
|
|
22
|
+
sampleRate, bufferLength, audioEventHandlerRegistry);
|
|
22
23
|
#else
|
|
23
|
-
audioRecorder_ =
|
|
24
|
-
|
|
24
|
+
audioRecorder_ = std::make_shared<IOSAudioRecorder>(
|
|
25
|
+
sampleRate, bufferLength, audioEventHandlerRegistry);
|
|
25
26
|
#endif
|
|
26
27
|
|
|
28
|
+
addSetters(JSI_EXPORT_PROPERTY_SETTER(AudioRecorderHostObject, onAudioReady));
|
|
29
|
+
|
|
27
30
|
addFunctions(
|
|
28
31
|
JSI_EXPORT_FUNCTION(AudioRecorderHostObject, start),
|
|
29
32
|
JSI_EXPORT_FUNCTION(AudioRecorderHostObject, stop),
|
|
30
|
-
JSI_EXPORT_FUNCTION(AudioRecorderHostObject, isRecording),
|
|
31
|
-
JSI_EXPORT_FUNCTION(AudioRecorderHostObject, enableFileOutput),
|
|
32
|
-
JSI_EXPORT_FUNCTION(AudioRecorderHostObject, disableFileOutput),
|
|
33
|
-
JSI_EXPORT_FUNCTION(AudioRecorderHostObject, pause),
|
|
34
|
-
JSI_EXPORT_FUNCTION(AudioRecorderHostObject, resume),
|
|
35
33
|
JSI_EXPORT_FUNCTION(AudioRecorderHostObject, connect),
|
|
36
|
-
JSI_EXPORT_FUNCTION(AudioRecorderHostObject, disconnect)
|
|
37
|
-
JSI_EXPORT_FUNCTION(AudioRecorderHostObject, setOnAudioReady),
|
|
38
|
-
JSI_EXPORT_FUNCTION(AudioRecorderHostObject, clearOnAudioReady),
|
|
39
|
-
JSI_EXPORT_FUNCTION(AudioRecorderHostObject, getCurrentDuration));
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, start) {
|
|
43
|
-
std::string filePath = audioRecorder_->start();
|
|
44
|
-
|
|
45
|
-
return jsi::Value(runtime, jsi::String::createFromUtf8(runtime, filePath));
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, stop) {
|
|
49
|
-
auto [path, size, duration] = audioRecorder_->stop();
|
|
50
|
-
auto result = jsi::Object(runtime);
|
|
51
|
-
|
|
52
|
-
result.setProperty(
|
|
53
|
-
runtime, "path", jsi::String::createFromUtf8(runtime, path));
|
|
54
|
-
result.setProperty(runtime, "size", size);
|
|
55
|
-
result.setProperty(runtime, "duration", duration);
|
|
56
|
-
|
|
57
|
-
return result;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, isRecording) {
|
|
61
|
-
return jsi::Value(audioRecorder_->isRecording());
|
|
34
|
+
JSI_EXPORT_FUNCTION(AudioRecorderHostObject, disconnect));
|
|
62
35
|
}
|
|
63
36
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, enableFileOutput) {
|
|
69
|
-
auto options = args[0].getObject(runtime);
|
|
70
|
-
|
|
71
|
-
auto sampleRate = static_cast<float>(
|
|
72
|
-
options.getProperty(runtime, "sampleRate").getNumber());
|
|
73
|
-
auto channelCount =
|
|
74
|
-
static_cast<size_t>(options.getProperty(runtime, "channels").getNumber());
|
|
75
|
-
auto bitRate =
|
|
76
|
-
static_cast<size_t>(options.getProperty(runtime, "bitRate").getNumber());
|
|
77
|
-
auto iosFlags =
|
|
78
|
-
static_cast<size_t>(options.getProperty(runtime, "ios").getNumber());
|
|
79
|
-
auto androidFlags =
|
|
80
|
-
static_cast<size_t>(options.getProperty(runtime, "android").getNumber());
|
|
81
|
-
|
|
82
|
-
audioRecorder_->enableFileOutput(
|
|
83
|
-
sampleRate, channelCount, bitRate, iosFlags, androidFlags);
|
|
84
|
-
return jsi::Value::undefined();
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, disableFileOutput) {
|
|
88
|
-
audioRecorder_->disableFileOutput();
|
|
89
|
-
return jsi::Value::undefined();
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, pause) {
|
|
93
|
-
audioRecorder_->pause();
|
|
94
|
-
|
|
95
|
-
return jsi::Value::undefined();
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, resume) {
|
|
99
|
-
audioRecorder_->resume();
|
|
100
|
-
return jsi::Value::undefined();
|
|
37
|
+
JSI_PROPERTY_SETTER_IMPL(AudioRecorderHostObject, onAudioReady) {
|
|
38
|
+
audioRecorder_->setOnAudioReadyCallbackId(
|
|
39
|
+
std::stoull(value.getString(runtime).utf8(runtime)));
|
|
101
40
|
}
|
|
102
41
|
|
|
103
42
|
JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, connect) {
|
|
104
43
|
auto adapterNodeHostObject =
|
|
105
44
|
args[0].getObject(runtime).getHostObject<RecorderAdapterNodeHostObject>(
|
|
106
45
|
runtime);
|
|
107
|
-
|
|
108
46
|
audioRecorder_->connect(
|
|
109
47
|
std::static_pointer_cast<RecorderAdapterNode>(
|
|
110
48
|
adapterNodeHostObject->node_));
|
|
@@ -113,36 +51,19 @@ JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, connect) {
|
|
|
113
51
|
|
|
114
52
|
JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, disconnect) {
|
|
115
53
|
audioRecorder_->disconnect();
|
|
116
|
-
|
|
117
54
|
return jsi::Value::undefined();
|
|
118
55
|
}
|
|
119
56
|
|
|
120
|
-
JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject,
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
auto sampleRate = static_cast<float>(
|
|
124
|
-
options.getProperty(runtime, "sampleRate").getNumber());
|
|
125
|
-
auto bufferLength = static_cast<size_t>(
|
|
126
|
-
options.getProperty(runtime, "bufferLength").getNumber());
|
|
127
|
-
auto channelCount = static_cast<size_t>(
|
|
128
|
-
options.getProperty(runtime, "channelCount").getNumber());
|
|
129
|
-
uint64_t callbackId = std::stoull(options.getProperty(runtime, "callbackId")
|
|
130
|
-
.getString(runtime)
|
|
131
|
-
.utf8(runtime));
|
|
57
|
+
JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, start) {
|
|
58
|
+
audioRecorder_->start();
|
|
132
59
|
|
|
133
|
-
audioRecorder_->setOnAudioReadyCallback(
|
|
134
|
-
sampleRate, bufferLength, channelCount, callbackId);
|
|
135
60
|
return jsi::Value::undefined();
|
|
136
61
|
}
|
|
137
62
|
|
|
138
|
-
JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject,
|
|
139
|
-
audioRecorder_->
|
|
140
|
-
return jsi::Value::undefined();
|
|
141
|
-
}
|
|
63
|
+
JSI_HOST_FUNCTION_IMPL(AudioRecorderHostObject, stop) {
|
|
64
|
+
audioRecorder_->stop();
|
|
142
65
|
|
|
143
|
-
|
|
144
|
-
double duration = audioRecorder_->getCurrentDuration();
|
|
145
|
-
return jsi::Value(duration);
|
|
66
|
+
return jsi::Value::undefined();
|
|
146
67
|
}
|
|
147
68
|
|
|
148
69
|
} // namespace audioapi
|
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
#include <utility>
|
|
7
7
|
#include <vector>
|
|
8
8
|
#include <cstdio>
|
|
9
|
-
#include <string>
|
|
10
9
|
|
|
11
10
|
namespace audioapi {
|
|
12
11
|
using namespace facebook;
|
|
@@ -17,29 +16,18 @@ class AudioEventHandlerRegistry;
|
|
|
17
16
|
class AudioRecorderHostObject : public JsiHostObject {
|
|
18
17
|
public:
|
|
19
18
|
explicit AudioRecorderHostObject(
|
|
20
|
-
const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry
|
|
19
|
+
const std::shared_ptr<AudioEventHandlerRegistry> &audioEventHandlerRegistry,
|
|
20
|
+
float sampleRate,
|
|
21
|
+
int bufferLength);
|
|
21
22
|
|
|
22
|
-
|
|
23
|
-
JSI_HOST_FUNCTION_DECL(stop);
|
|
24
|
-
JSI_HOST_FUNCTION_DECL(isRecording);
|
|
25
|
-
JSI_HOST_FUNCTION_DECL(isPaused);
|
|
26
|
-
|
|
27
|
-
JSI_HOST_FUNCTION_DECL(enableFileOutput);
|
|
28
|
-
JSI_HOST_FUNCTION_DECL(disableFileOutput);
|
|
29
|
-
|
|
30
|
-
JSI_HOST_FUNCTION_DECL(pause);
|
|
31
|
-
JSI_HOST_FUNCTION_DECL(resume);
|
|
23
|
+
JSI_PROPERTY_SETTER_DECL(onAudioReady);
|
|
32
24
|
|
|
33
25
|
JSI_HOST_FUNCTION_DECL(connect);
|
|
34
26
|
JSI_HOST_FUNCTION_DECL(disconnect);
|
|
35
|
-
|
|
36
|
-
JSI_HOST_FUNCTION_DECL(
|
|
37
|
-
JSI_HOST_FUNCTION_DECL(clearOnAudioReady);
|
|
38
|
-
|
|
39
|
-
JSI_HOST_FUNCTION_DECL(getCurrentDuration);
|
|
27
|
+
JSI_HOST_FUNCTION_DECL(start);
|
|
28
|
+
JSI_HOST_FUNCTION_DECL(stop);
|
|
40
29
|
|
|
41
30
|
private:
|
|
42
31
|
std::shared_ptr<AudioRecorder> audioRecorder_;
|
|
43
32
|
};
|
|
44
|
-
|
|
45
33
|
} // namespace audioapi
|
|
@@ -28,7 +28,7 @@ AudioBufferBaseSourceNodeHostObject::~AudioBufferBaseSourceNodeHostObject() {
|
|
|
28
28
|
// When JSI object is garbage collected (together with the eventual callback),
|
|
29
29
|
// underlying source node might still be active and try to call the
|
|
30
30
|
// non-existing callback.
|
|
31
|
-
sourceNode->
|
|
31
|
+
sourceNode->setOnPositionChangedCallbackId(0);
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
JSI_PROPERTY_GETTER_IMPL(AudioBufferBaseSourceNodeHostObject, detune) {
|
|
@@ -37,7 +37,7 @@ AudioBufferSourceNodeHostObject::~AudioBufferSourceNodeHostObject() {
|
|
|
37
37
|
// When JSI object is garbage collected (together with the eventual callback),
|
|
38
38
|
// underlying source node might still be active and try to call the
|
|
39
39
|
// non-existing callback.
|
|
40
|
-
audioBufferSourceNode->
|
|
40
|
+
audioBufferSourceNode->setOnLoopEndedCallbackId(0);
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
JSI_PROPERTY_GETTER_IMPL(AudioBufferSourceNodeHostObject, loop) {
|
|
@@ -22,7 +22,7 @@ AudioScheduledSourceNodeHostObject::~AudioScheduledSourceNodeHostObject() {
|
|
|
22
22
|
// When JSI object is garbage collected (together with the eventual callback),
|
|
23
23
|
// underlying source node might still be active and try to call the
|
|
24
24
|
// non-existing callback.
|
|
25
|
-
audioScheduledSourceNode->
|
|
25
|
+
audioScheduledSourceNode->setOnEndedCallbackId(0);
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
JSI_PROPERTY_SETTER_IMPL(AudioScheduledSourceNodeHostObject, onEnded) {
|
|
@@ -41,6 +41,7 @@ class AudioNode : public std::enable_shared_from_this<AudioNode> {
|
|
|
41
41
|
protected:
|
|
42
42
|
friend class AudioNodeManager;
|
|
43
43
|
friend class AudioDestinationNode;
|
|
44
|
+
friend class ConvolverNode;
|
|
44
45
|
|
|
45
46
|
BaseAudioContext *context_;
|
|
46
47
|
std::shared_ptr<AudioBus> audioBus_;
|
|
@@ -68,10 +69,10 @@ class AudioNode : public std::enable_shared_from_this<AudioNode> {
|
|
|
68
69
|
static std::string toString(ChannelCountMode mode);
|
|
69
70
|
static std::string toString(ChannelInterpretation interpretation);
|
|
70
71
|
|
|
72
|
+
virtual std::shared_ptr<AudioBus> processInputs(const std::shared_ptr<AudioBus>& outputBus, int framesToProcess, bool checkIsAlreadyProcessed);
|
|
71
73
|
virtual std::shared_ptr<AudioBus> processNode(const std::shared_ptr<AudioBus>&, int) = 0;
|
|
72
74
|
|
|
73
75
|
bool isAlreadyProcessed();
|
|
74
|
-
std::shared_ptr<AudioBus> processInputs(const std::shared_ptr<AudioBus>& outputBus, int framesToProcess, bool checkIsAlreadyProcessed);
|
|
75
76
|
std::shared_ptr<AudioBus> applyChannelCountMode(const std::shared_ptr<AudioBus> &processingBus);
|
|
76
77
|
void mixInputsBuses(const std::shared_ptr<AudioBus>& processingBus);
|
|
77
78
|
|
|
@@ -81,7 +82,7 @@ class AudioNode : public std::enable_shared_from_this<AudioNode> {
|
|
|
81
82
|
void disconnectParam(const std::shared_ptr<AudioParam> ¶m);
|
|
82
83
|
|
|
83
84
|
void onInputEnabled();
|
|
84
|
-
void onInputDisabled();
|
|
85
|
+
virtual void onInputDisabled();
|
|
85
86
|
void onInputConnected(AudioNode *node);
|
|
86
87
|
void onInputDisconnected(AudioNode *node);
|
|
87
88
|
|