react-native-audio-api 0.8.3 → 0.9.0-nightly-7ecb495-20251008
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 +40 -39
- package/RNAudioAPI.podspec +17 -12
- package/android/build.gradle +44 -4
- package/android/src/main/cpp/audioapi/CMakeLists.txt +65 -0
- package/android/src/main/cpp/audioapi/android/AudioAPIModule.cpp +29 -1
- package/android/src/main/cpp/audioapi/android/AudioAPIModule.h +14 -0
- package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.cpp +7 -1
- package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +6 -1
- package/android/src/main/cpp/audioapi/android/core/AudioPlayer.cpp +1 -1
- package/android/src/main/cpp/audioapi/android/core/NativeAudioRecorder.hpp +36 -0
- package/android/src/main/cpp/audioapi/android/core/{AudioDecoder.cpp → utils/AudioDecoder.cpp} +79 -75
- package/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +11 -1
- package/android/src/main/java/com/swmansion/audioapi/core/NativeAudioRecorder.kt +24 -0
- package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionManager.kt +15 -2
- package/common/cpp/audioapi/AudioAPIModuleInstaller.h +154 -38
- package/common/cpp/audioapi/HostObjects/AudioContextHostObject.cpp +57 -0
- package/common/cpp/audioapi/HostObjects/AudioContextHostObject.h +6 -46
- package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.cpp +70 -6
- package/common/cpp/audioapi/HostObjects/AudioNodeHostObject.h +10 -66
- package/common/cpp/audioapi/HostObjects/AudioParamHostObject.cpp +105 -0
- package/common/cpp/audioapi/HostObjects/AudioParamHostObject.h +17 -91
- package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +262 -6
- package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +26 -241
- package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.cpp +70 -0
- package/common/cpp/audioapi/HostObjects/OfflineAudioContextHostObject.h +6 -50
- package/common/cpp/audioapi/HostObjects/WorkletNodeHostObject.h +18 -0
- package/common/cpp/audioapi/HostObjects/WorkletProcessingNodeHostObject.h +18 -0
- package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.cpp +148 -0
- package/common/cpp/audioapi/HostObjects/analysis/AnalyserNodeHostObject.h +37 -0
- package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.cpp +92 -0
- package/common/cpp/audioapi/HostObjects/effects/BiquadFilterNodeHostObject.h +29 -0
- package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.cpp +20 -0
- package/common/cpp/audioapi/HostObjects/effects/GainNodeHostObject.h +19 -0
- package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.cpp +21 -0
- package/common/cpp/audioapi/HostObjects/effects/StereoPannerNodeHostObject.h +21 -0
- package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.cpp +41 -0
- package/common/cpp/audioapi/HostObjects/events/AudioEventHandlerRegistryHostObject.h +28 -0
- package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.cpp +69 -0
- package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.h +33 -0
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.cpp +73 -0
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferBaseSourceNodeHostObject.h +29 -0
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.cpp +94 -0
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferHostObject.h +46 -0
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.cpp +60 -0
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.h +25 -0
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.cpp +152 -0
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferSourceNodeHostObject.h +37 -0
- package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.cpp +52 -0
- package/common/cpp/audioapi/HostObjects/sources/AudioScheduledSourceNodeHostObject.h +25 -0
- package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.cpp +19 -0
- package/common/cpp/audioapi/HostObjects/sources/ConstantSourceNodeHostObject.h +21 -0
- package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.cpp +55 -0
- package/common/cpp/audioapi/HostObjects/sources/OscillatorNodeHostObject.h +27 -0
- package/common/cpp/audioapi/HostObjects/{RecorderAdapterNodeHostObject.h → sources/RecorderAdapterNodeHostObject.h} +1 -2
- package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.cpp +22 -0
- package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.h +28 -0
- package/common/cpp/audioapi/HostObjects/sources/WorkletSourceNodeHostObject.h +18 -0
- package/common/cpp/audioapi/HostObjects/utils/AudioDecoderHostObject.cpp +133 -0
- package/common/cpp/audioapi/HostObjects/utils/AudioDecoderHostObject.h +28 -0
- package/common/cpp/audioapi/HostObjects/utils/AudioStretcherHostObject.cpp +58 -0
- package/common/cpp/audioapi/HostObjects/utils/AudioStretcherHostObject.h +26 -0
- package/common/cpp/audioapi/core/AudioContext.cpp +3 -4
- package/common/cpp/audioapi/core/AudioContext.h +2 -1
- package/common/cpp/audioapi/core/AudioNode.cpp +3 -3
- package/common/cpp/audioapi/core/AudioNode.h +2 -2
- package/common/cpp/audioapi/core/AudioParam.cpp +2 -2
- package/common/cpp/audioapi/core/AudioParam.h +1 -1
- package/common/cpp/audioapi/core/BaseAudioContext.cpp +47 -38
- package/common/cpp/audioapi/core/BaseAudioContext.h +17 -16
- package/common/cpp/audioapi/core/OfflineAudioContext.cpp +4 -5
- package/common/cpp/audioapi/core/OfflineAudioContext.h +2 -1
- package/common/cpp/audioapi/core/analysis/AnalyserNode.cpp +3 -1
- package/common/cpp/audioapi/core/analysis/AnalyserNode.h +1 -1
- package/common/cpp/audioapi/core/destinations/AudioDestinationNode.h +1 -1
- package/common/cpp/audioapi/core/effects/BiquadFilterNode.cpp +3 -1
- package/common/cpp/audioapi/core/effects/BiquadFilterNode.h +1 -1
- package/common/cpp/audioapi/core/effects/GainNode.cpp +3 -1
- package/common/cpp/audioapi/core/effects/GainNode.h +1 -1
- package/common/cpp/audioapi/core/effects/PeriodicWave.cpp +1 -1
- package/common/cpp/audioapi/core/effects/StereoPannerNode.cpp +18 -13
- package/common/cpp/audioapi/core/effects/StereoPannerNode.h +1 -1
- package/common/cpp/audioapi/core/effects/WorkletNode.cpp +89 -0
- package/common/cpp/audioapi/core/effects/WorkletNode.h +65 -0
- package/common/cpp/audioapi/core/effects/WorkletProcessingNode.cpp +91 -0
- package/common/cpp/audioapi/core/effects/WorkletProcessingNode.h +52 -0
- package/common/cpp/audioapi/core/inputs/AudioRecorder.cpp +1 -1
- package/common/cpp/audioapi/core/inputs/AudioRecorder.h +2 -2
- package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +47 -10
- package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +18 -3
- package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +98 -14
- package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +9 -3
- package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +37 -44
- package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +7 -9
- package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.cpp +1 -6
- package/common/cpp/audioapi/core/sources/AudioScheduledSourceNode.h +1 -1
- package/common/cpp/audioapi/core/sources/ConstantSourceNode.cpp +53 -0
- package/common/cpp/audioapi/core/sources/ConstantSourceNode.h +26 -0
- package/common/cpp/audioapi/core/sources/OscillatorNode.cpp +7 -2
- package/common/cpp/audioapi/core/sources/OscillatorNode.h +1 -1
- package/common/cpp/audioapi/core/sources/RecorderAdapterNode.cpp +3 -1
- package/common/cpp/audioapi/core/sources/RecorderAdapterNode.h +1 -1
- package/common/cpp/audioapi/core/sources/StreamerNode.cpp +9 -1
- package/common/cpp/audioapi/core/sources/StreamerNode.h +1 -9
- package/common/cpp/audioapi/core/sources/WorkletSourceNode.cpp +84 -0
- package/common/cpp/audioapi/core/sources/WorkletSourceNode.h +47 -0
- package/common/cpp/audioapi/core/types/AudioFormat.h +16 -0
- package/common/cpp/audioapi/core/utils/AudioDecoder.h +36 -91
- package/common/cpp/audioapi/core/{AudioParamEventQueue.cpp → utils/AudioParamEventQueue.cpp} +13 -7
- package/common/cpp/audioapi/core/utils/AudioStretcher.cpp +75 -0
- package/common/cpp/audioapi/core/utils/AudioStretcher.h +30 -0
- package/common/cpp/audioapi/core/{Constants.h → utils/Constants.h} +9 -0
- package/common/cpp/audioapi/core/utils/worklets/SafeIncludes.h +52 -0
- package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.cpp +9 -0
- package/common/cpp/audioapi/core/utils/worklets/WorkletsRunner.h +73 -0
- package/common/cpp/audioapi/dsp/Windows.cpp +1 -1
- package/common/cpp/audioapi/events/AudioEventHandlerRegistry.cpp +1 -1
- package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +2 -1
- package/common/cpp/audioapi/jsi/AudioArrayBuffer.h +14 -1
- package/common/cpp/audioapi/jsi/JsiHostObject.h +6 -12
- package/common/cpp/audioapi/jsi/JsiPromise.cpp +49 -0
- package/common/cpp/audioapi/jsi/JsiPromise.h +29 -1
- package/common/cpp/audioapi/libs/ffmpeg/FFmpegDecoding.cpp +241 -282
- package/common/cpp/audioapi/libs/ffmpeg/FFmpegDecoding.h +57 -19
- package/common/cpp/audioapi/utils/AudioBus.cpp +1 -1
- package/common/cpp/audioapi/utils/ThreadPool.hpp +104 -0
- package/common/cpp/test/AudioParamTest.cpp +204 -0
- package/common/cpp/test/CMakeLists.txt +13 -4
- package/common/cpp/test/GainTest.cpp +11 -10
- package/common/cpp/test/OscillatorTest.cpp +2 -1
- package/common/cpp/test/StereoPannerTest.cpp +129 -0
- package/ios/audioapi/ios/AudioAPIModule.mm +32 -5
- package/ios/audioapi/ios/core/IOSAudioPlayer.mm +1 -1
- package/ios/audioapi/ios/core/IOSAudioRecorder.mm +1 -1
- package/ios/audioapi/ios/core/utils/AudioDecoder.mm +160 -0
- package/lib/commonjs/api.js +57 -3
- 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 +7 -7
- package/lib/commonjs/core/AudioBufferBaseSourceNode.js.map +1 -1
- package/lib/commonjs/core/AudioBufferQueueSourceNode.js +1 -6
- package/lib/commonjs/core/AudioBufferQueueSourceNode.js.map +1 -1
- package/lib/commonjs/core/AudioBufferSourceNode.js +15 -0
- package/lib/commonjs/core/AudioBufferSourceNode.js.map +1 -1
- package/lib/commonjs/core/AudioContext.js +10 -1
- package/lib/commonjs/core/AudioContext.js.map +1 -1
- package/lib/commonjs/core/AudioDecoder.js +48 -0
- package/lib/commonjs/core/AudioDecoder.js.map +1 -0
- package/lib/commonjs/core/AudioScheduledSourceNode.js +4 -4
- package/lib/commonjs/core/AudioScheduledSourceNode.js.map +1 -1
- package/lib/commonjs/core/AudioStretcher.js +31 -0
- package/lib/commonjs/core/AudioStretcher.js.map +1 -0
- package/lib/commonjs/core/BaseAudioContext.js +76 -28
- package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
- package/lib/commonjs/core/ConstantSourceNode.js +17 -0
- package/lib/commonjs/core/ConstantSourceNode.js.map +1 -0
- package/lib/commonjs/core/OfflineAudioContext.js +11 -2
- package/lib/commonjs/core/OfflineAudioContext.js.map +1 -1
- package/lib/commonjs/core/OscillatorNode.js +6 -0
- package/lib/commonjs/core/OscillatorNode.js.map +1 -1
- package/lib/commonjs/core/WorkletNode.js +11 -0
- package/lib/commonjs/core/WorkletNode.js.map +1 -0
- package/lib/commonjs/core/WorkletProcessingNode.js +11 -0
- package/lib/commonjs/core/WorkletProcessingNode.js.map +1 -0
- package/lib/commonjs/core/WorkletSourceNode.js +11 -0
- package/lib/commonjs/core/WorkletSourceNode.js.map +1 -0
- package/lib/commonjs/hooks/{useSytemVolume.js → useSystemVolume.js} +1 -1
- package/lib/commonjs/hooks/useSystemVolume.js.map +1 -0
- package/lib/commonjs/utils/index.js +9 -0
- package/lib/commonjs/utils/index.js.map +1 -1
- package/lib/commonjs/web-core/AudioContext.js +4 -0
- package/lib/commonjs/web-core/AudioContext.js.map +1 -1
- package/lib/commonjs/web-core/AudioScheduledSourceNode.js +1 -1
- package/lib/commonjs/web-core/AudioScheduledSourceNode.js.map +1 -1
- package/lib/commonjs/web-core/ConstantSourceNode.js +17 -0
- package/lib/commonjs/web-core/ConstantSourceNode.js.map +1 -0
- package/lib/commonjs/web-core/OfflineAudioContext.js +4 -0
- package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
- package/lib/module/api.js +9 -3
- 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 +7 -7
- package/lib/module/core/AudioBufferBaseSourceNode.js.map +1 -1
- package/lib/module/core/AudioBufferQueueSourceNode.js +1 -6
- package/lib/module/core/AudioBufferQueueSourceNode.js.map +1 -1
- package/lib/module/core/AudioBufferSourceNode.js +15 -0
- package/lib/module/core/AudioBufferSourceNode.js.map +1 -1
- package/lib/module/core/AudioContext.js +10 -1
- package/lib/module/core/AudioContext.js.map +1 -1
- package/lib/module/core/AudioDecoder.js +42 -0
- package/lib/module/core/AudioDecoder.js.map +1 -0
- package/lib/module/core/AudioScheduledSourceNode.js +4 -4
- package/lib/module/core/AudioScheduledSourceNode.js.map +1 -1
- package/lib/module/core/AudioStretcher.js +26 -0
- package/lib/module/core/AudioStretcher.js.map +1 -0
- package/lib/module/core/BaseAudioContext.js +76 -28
- package/lib/module/core/BaseAudioContext.js.map +1 -1
- package/lib/module/core/ConstantSourceNode.js +11 -0
- package/lib/module/core/ConstantSourceNode.js.map +1 -0
- package/lib/module/core/OfflineAudioContext.js +11 -2
- package/lib/module/core/OfflineAudioContext.js.map +1 -1
- package/lib/module/core/OscillatorNode.js +6 -0
- package/lib/module/core/OscillatorNode.js.map +1 -1
- package/lib/module/core/WorkletNode.js +5 -0
- package/lib/module/core/WorkletNode.js.map +1 -0
- package/lib/module/core/WorkletProcessingNode.js +5 -0
- package/lib/module/core/WorkletProcessingNode.js.map +1 -0
- package/lib/module/core/WorkletSourceNode.js +5 -0
- package/lib/module/core/WorkletSourceNode.js.map +1 -0
- package/lib/module/hooks/{useSytemVolume.js → useSystemVolume.js} +1 -1
- package/lib/module/hooks/useSystemVolume.js.map +1 -0
- package/lib/module/utils/index.js +8 -0
- package/lib/module/utils/index.js.map +1 -1
- package/lib/module/web-core/AudioContext.js +4 -0
- package/lib/module/web-core/AudioContext.js.map +1 -1
- package/lib/module/web-core/AudioScheduledSourceNode.js +1 -1
- package/lib/module/web-core/AudioScheduledSourceNode.js.map +1 -1
- package/lib/module/web-core/ConstantSourceNode.js +11 -0
- package/lib/module/web-core/ConstantSourceNode.js.map +1 -0
- package/lib/module/web-core/OfflineAudioContext.js +4 -0
- package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
- package/lib/typescript/api.d.ts +13 -5
- 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 +2 -2
- 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/AudioBufferSourceNode.d.ts +4 -0
- package/lib/typescript/core/AudioBufferSourceNode.d.ts.map +1 -1
- package/lib/typescript/core/AudioContext.d.ts +1 -0
- package/lib/typescript/core/AudioContext.d.ts.map +1 -1
- package/lib/typescript/core/AudioDecoder.d.ts +4 -0
- package/lib/typescript/core/AudioDecoder.d.ts.map +1 -0
- package/lib/typescript/core/AudioScheduledSourceNode.d.ts +1 -1
- package/lib/typescript/core/AudioStretcher.d.ts +3 -0
- package/lib/typescript/core/AudioStretcher.d.ts.map +1 -0
- package/lib/typescript/core/BaseAudioContext.d.ts +21 -16
- package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
- package/lib/typescript/core/ConstantSourceNode.d.ts +9 -0
- package/lib/typescript/core/ConstantSourceNode.d.ts.map +1 -0
- package/lib/typescript/core/OfflineAudioContext.d.ts +1 -0
- package/lib/typescript/core/OfflineAudioContext.d.ts.map +1 -1
- package/lib/typescript/core/OscillatorNode.d.ts +3 -0
- package/lib/typescript/core/OscillatorNode.d.ts.map +1 -1
- package/lib/typescript/core/WorkletNode.d.ts +4 -0
- package/lib/typescript/core/WorkletNode.d.ts.map +1 -0
- package/lib/typescript/core/WorkletProcessingNode.d.ts +4 -0
- package/lib/typescript/core/WorkletProcessingNode.d.ts.map +1 -0
- package/lib/typescript/core/WorkletSourceNode.d.ts +4 -0
- package/lib/typescript/core/WorkletSourceNode.d.ts.map +1 -0
- package/lib/typescript/events/types.d.ts +2 -0
- package/lib/typescript/events/types.d.ts.map +1 -1
- package/lib/typescript/hooks/{useSytemVolume.d.ts → useSystemVolume.d.ts} +1 -1
- package/lib/typescript/hooks/useSystemVolume.d.ts.map +1 -0
- package/lib/typescript/interfaces.d.ts +31 -6
- package/lib/typescript/interfaces.d.ts.map +1 -1
- package/lib/typescript/types.d.ts +2 -1
- package/lib/typescript/types.d.ts.map +1 -1
- package/lib/typescript/utils/index.d.ts +8 -0
- package/lib/typescript/utils/index.d.ts.map +1 -1
- package/lib/typescript/web-core/AudioBufferSourceNode.d.ts +1 -1
- package/lib/typescript/web-core/AudioContext.d.ts +4 -2
- package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
- package/lib/typescript/web-core/AudioScheduledSourceNode.d.ts +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/ConstantSourceNode.d.ts +8 -0
- package/lib/typescript/web-core/ConstantSourceNode.d.ts.map +1 -0
- package/lib/typescript/web-core/OfflineAudioContext.d.ts +4 -2
- package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
- package/package.json +3 -2
- package/src/api.ts +22 -3
- package/src/api.web.ts +1 -0
- package/src/core/AudioBufferBaseSourceNode.ts +9 -9
- package/src/core/AudioBufferQueueSourceNode.ts +1 -9
- package/src/core/AudioBufferSourceNode.ts +28 -0
- package/src/core/AudioContext.ts +12 -1
- package/src/core/AudioDecoder.ts +78 -0
- package/src/core/AudioScheduledSourceNode.ts +5 -5
- package/src/core/AudioStretcher.ts +43 -0
- package/src/core/BaseAudioContext.ts +174 -41
- package/src/core/ConstantSourceNode.ts +13 -0
- package/src/core/OfflineAudioContext.ts +18 -2
- package/src/core/OscillatorNode.ts +11 -0
- package/src/core/WorkletNode.ts +3 -0
- package/src/core/WorkletProcessingNode.ts +3 -0
- package/src/core/WorkletSourceNode.ts +3 -0
- package/src/events/types.ts +2 -0
- package/src/interfaces.ts +85 -11
- package/src/types.ts +3 -1
- package/src/utils/index.ts +21 -0
- package/src/web-core/AudioBufferSourceNode.tsx +1 -1
- package/src/web-core/AudioContext.tsx +7 -2
- package/src/web-core/AudioScheduledSourceNode.tsx +1 -1
- package/src/web-core/BaseAudioContext.tsx +2 -0
- package/src/web-core/ConstantSourceNode.tsx +12 -0
- package/src/web-core/OfflineAudioContext.tsx +7 -2
- package/common/cpp/audioapi/HostObjects/AnalyserNodeHostObject.h +0 -149
- package/common/cpp/audioapi/HostObjects/AudioBufferBaseSourceNodeHostObject.h +0 -76
- package/common/cpp/audioapi/HostObjects/AudioBufferHostObject.h +0 -120
- package/common/cpp/audioapi/HostObjects/AudioBufferQueueSourceNodeHostObject.h +0 -67
- package/common/cpp/audioapi/HostObjects/AudioBufferSourceNodeHostObject.h +0 -142
- package/common/cpp/audioapi/HostObjects/AudioRecorderHostObject.h +0 -86
- package/common/cpp/audioapi/HostObjects/AudioScheduledSourceNodeHostObject.h +0 -56
- package/common/cpp/audioapi/HostObjects/BiquadFilterNodeHostObject.h +0 -89
- package/common/cpp/audioapi/HostObjects/GainNodeHostObject.h +0 -27
- package/common/cpp/audioapi/HostObjects/OscillatorNodeHostObject.h +0 -65
- package/common/cpp/audioapi/HostObjects/StereoPannerNodeHostObject.h +0 -29
- package/common/cpp/audioapi/HostObjects/StreamerNodeHostObject.h +0 -30
- package/common/cpp/audioapi/events/AudioEventHandlerRegistryHostObject.h +0 -48
- package/ios/audioapi/ios/core/AudioDecoder.mm +0 -156
- package/ios/audioapi/ios/events/IOSAudioEventHandlerRegistry.h +0 -7
- package/ios/audioapi/ios/events/IOSAudioEventHandlerRegistry.mm +0 -12
- package/lib/commonjs/hooks/useSytemVolume.js.map +0 -1
- package/lib/module/hooks/useSytemVolume.js.map +0 -1
- package/lib/typescript/hooks/useSytemVolume.d.ts.map +0 -1
- /package/common/cpp/audioapi/HostObjects/{AudioDestinationNodeHostObject.h → destinations/AudioDestinationNodeHostObject.h} +0 -0
- /package/common/cpp/audioapi/HostObjects/{PeriodicWaveHostObject.h → effects/PeriodicWaveHostObject.h} +0 -0
- /package/common/cpp/audioapi/core/{AudioParamEventQueue.h → utils/AudioParamEventQueue.h} +0 -0
- /package/src/hooks/{useSytemVolume.ts → useSystemVolume.ts} +0 -0
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
#import <React/RCTBridge+Private.h>
|
|
2
2
|
#import <audioapi/ios/AudioAPIModule.h>
|
|
3
|
+
|
|
4
|
+
#import <audioapi/core/utils/worklets/SafeIncludes.h>
|
|
5
|
+
#if RN_AUDIO_API_ENABLE_WORKLETS
|
|
6
|
+
#import <worklets/apple/WorkletsModule.h>
|
|
7
|
+
#endif
|
|
3
8
|
#ifdef RCT_NEW_ARCH_ENABLED
|
|
4
9
|
#import <React/RCTCallInvoker.h>
|
|
5
10
|
#endif // RCT_NEW_ARCH_ENABLED
|
|
6
|
-
|
|
7
11
|
#import <audioapi/AudioAPIModuleInstaller.h>
|
|
8
12
|
#import <audioapi/ios/system/AudioEngine.h>
|
|
9
13
|
#import <audioapi/ios/system/AudioSessionManager.h>
|
|
@@ -14,6 +18,7 @@
|
|
|
14
18
|
|
|
15
19
|
using namespace audioapi;
|
|
16
20
|
using namespace facebook::react;
|
|
21
|
+
using namespace worklets;
|
|
17
22
|
|
|
18
23
|
@interface RCTBridge (JSIRuntime)
|
|
19
24
|
- (void *)runtime;
|
|
@@ -30,10 +35,12 @@ using namespace facebook::react;
|
|
|
30
35
|
|
|
31
36
|
@implementation AudioAPIModule {
|
|
32
37
|
std::shared_ptr<AudioEventHandlerRegistry> _eventHandler;
|
|
38
|
+
std::weak_ptr<WorkletsModuleProxy> weakWorkletsModuleProxy_;
|
|
33
39
|
}
|
|
34
40
|
|
|
35
41
|
#if defined(RCT_NEW_ARCH_ENABLED)
|
|
36
42
|
@synthesize callInvoker = _callInvoker;
|
|
43
|
+
@synthesize moduleRegistry = _moduleRegistry;
|
|
37
44
|
#endif // defined(RCT_NEW_ARCH_ENABLED)
|
|
38
45
|
|
|
39
46
|
RCT_EXPORT_MODULE(AudioAPIModule);
|
|
@@ -69,12 +76,32 @@ RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(install)
|
|
|
69
76
|
|
|
70
77
|
_eventHandler = std::make_shared<AudioEventHandlerRegistry>(jsiRuntime, jsCallInvoker);
|
|
71
78
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
79
|
+
#if RN_AUDIO_API_ENABLE_WORKLETS
|
|
80
|
+
WorkletsModule *workletsModule = [_moduleRegistry moduleForName:"WorkletsModule"];
|
|
81
|
+
|
|
82
|
+
if (!workletsModule) {
|
|
83
|
+
NSLog(@"WorkletsModule not found in module registry");
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
auto workletsModuleProxy = [workletsModule getWorkletsModuleProxy];
|
|
87
|
+
|
|
88
|
+
if (!workletsModuleProxy) {
|
|
89
|
+
NSLog(@"WorkletsModuleProxy not available");
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
weakWorkletsModuleProxy_ = workletsModuleProxy;
|
|
93
|
+
|
|
94
|
+
auto uiWorkletRuntime = workletsModuleProxy->getUIWorkletRuntime();
|
|
95
|
+
|
|
96
|
+
if (!uiWorkletRuntime) {
|
|
97
|
+
NSLog(@"UI Worklet Runtime not available");
|
|
98
|
+
}
|
|
76
99
|
|
|
100
|
+
// Get the actual JSI Runtime reference
|
|
101
|
+
audioapi::AudioAPIModuleInstaller::injectJSIBindings(jsiRuntime, jsCallInvoker, _eventHandler, uiWorkletRuntime);
|
|
102
|
+
#else
|
|
77
103
|
audioapi::AudioAPIModuleInstaller::injectJSIBindings(jsiRuntime, jsCallInvoker, _eventHandler);
|
|
104
|
+
#endif
|
|
78
105
|
|
|
79
106
|
NSLog(@"Successfully installed JSI bindings for react-native-audio-api!");
|
|
80
107
|
return @true;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#import <AVFoundation/AVFoundation.h>
|
|
2
2
|
|
|
3
|
-
#include <audioapi/core/Constants.h>
|
|
3
|
+
#include <audioapi/core/utils/Constants.h>
|
|
4
4
|
#include <audioapi/dsp/VectorMath.h>
|
|
5
5
|
#include <audioapi/events/AudioEventHandlerRegistry.h>
|
|
6
6
|
#include <audioapi/ios/core/IOSAudioRecorder.h>
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
#define MINIAUDIO_IMPLEMENTATION
|
|
2
|
+
#import <audioapi/libs/miniaudio/miniaudio.h>
|
|
3
|
+
|
|
4
|
+
#include <audioapi/libs/miniaudio/decoders/libopus/miniaudio_libopus.h>
|
|
5
|
+
#include <audioapi/libs/miniaudio/decoders/libvorbis/miniaudio_libvorbis.h>
|
|
6
|
+
|
|
7
|
+
#include <audioapi/core/sources/AudioBuffer.h>
|
|
8
|
+
#include <audioapi/core/utils/AudioDecoder.h>
|
|
9
|
+
#include <audioapi/dsp/VectorMath.h>
|
|
10
|
+
#include <audioapi/libs/audio-stretch/stretch.h>
|
|
11
|
+
#include <audioapi/libs/base64/base64.h>
|
|
12
|
+
#include <audioapi/libs/ffmpeg/FFmpegDecoding.h>
|
|
13
|
+
#include <audioapi/utils/AudioArray.h>
|
|
14
|
+
#include <audioapi/utils/AudioBus.h>
|
|
15
|
+
|
|
16
|
+
namespace audioapi {
|
|
17
|
+
|
|
18
|
+
// Decoding audio in fixed-size chunks because total frame count can't be
|
|
19
|
+
// determined in advance. Note: ma_decoder_get_length_in_pcm_frames() always
|
|
20
|
+
// returns 0 for Vorbis decoders.
|
|
21
|
+
std::vector<float> AudioDecoder::readAllPcmFrames(ma_decoder &decoder, int outputChannels)
|
|
22
|
+
{
|
|
23
|
+
std::vector<float> buffer;
|
|
24
|
+
std::vector<float> temp(CHUNK_SIZE * outputChannels);
|
|
25
|
+
ma_uint64 outFramesRead = 0;
|
|
26
|
+
|
|
27
|
+
while (true) {
|
|
28
|
+
ma_uint64 tempFramesDecoded = 0;
|
|
29
|
+
ma_decoder_read_pcm_frames(&decoder, temp.data(), CHUNK_SIZE, &tempFramesDecoded);
|
|
30
|
+
if (tempFramesDecoded == 0) {
|
|
31
|
+
break;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
buffer.insert(buffer.end(), temp.data(), temp.data() + tempFramesDecoded * outputChannels);
|
|
35
|
+
outFramesRead += tempFramesDecoded;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (outFramesRead == 0) {
|
|
39
|
+
NSLog(@"Failed to decode");
|
|
40
|
+
}
|
|
41
|
+
return buffer;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
std::shared_ptr<AudioBuffer> AudioDecoder::makeAudioBufferFromFloatBuffer(
|
|
45
|
+
const std::vector<float> &buffer,
|
|
46
|
+
float outputSampleRate,
|
|
47
|
+
int outputChannels)
|
|
48
|
+
{
|
|
49
|
+
if (buffer.empty()) {
|
|
50
|
+
return nullptr;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
auto outputFrames = buffer.size() / outputChannels;
|
|
54
|
+
auto audioBus = std::make_shared<AudioBus>(outputFrames, outputChannels, outputSampleRate);
|
|
55
|
+
|
|
56
|
+
for (int ch = 0; ch < outputChannels; ++ch) {
|
|
57
|
+
auto channelData = audioBus->getChannel(ch)->getData();
|
|
58
|
+
for (int i = 0; i < outputFrames; ++i) {
|
|
59
|
+
channelData[i] = buffer[i * outputChannels + ch];
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return std::make_shared<AudioBuffer>(audioBus);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithFilePath(const std::string &path, float sampleRate)
|
|
66
|
+
{
|
|
67
|
+
if (AudioDecoder::pathHasExtension(path, {".mp4", ".m4a", ".aac"})) {
|
|
68
|
+
auto buffer = ffmpegdecoder::decodeWithFilePath(path, static_cast<int>(sampleRate));
|
|
69
|
+
if (buffer == nullptr) {
|
|
70
|
+
NSLog(@"Failed to decode with FFmpeg: %s", path.c_str());
|
|
71
|
+
return nullptr;
|
|
72
|
+
}
|
|
73
|
+
return buffer;
|
|
74
|
+
}
|
|
75
|
+
ma_decoder decoder;
|
|
76
|
+
ma_decoder_config config = ma_decoder_config_init(ma_format_f32, 0, static_cast<int>(sampleRate));
|
|
77
|
+
ma_decoding_backend_vtable *customBackends[] = {ma_decoding_backend_libvorbis, ma_decoding_backend_libopus};
|
|
78
|
+
|
|
79
|
+
config.ppCustomBackendVTables = customBackends;
|
|
80
|
+
config.customBackendCount = sizeof(customBackends) / sizeof(customBackends[0]);
|
|
81
|
+
|
|
82
|
+
if (ma_decoder_init_file(path.c_str(), &config, &decoder) != MA_SUCCESS) {
|
|
83
|
+
NSLog(@"Failed to initialize decoder for file: %s", path.c_str());
|
|
84
|
+
ma_decoder_uninit(&decoder);
|
|
85
|
+
return nullptr;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
auto outputSampleRate = static_cast<float>(decoder.outputSampleRate);
|
|
89
|
+
auto outputChannels = static_cast<int>(decoder.outputChannels);
|
|
90
|
+
|
|
91
|
+
std::vector<float> buffer = readAllPcmFrames(decoder, outputChannels);
|
|
92
|
+
ma_decoder_uninit(&decoder);
|
|
93
|
+
return makeAudioBufferFromFloatBuffer(buffer, outputSampleRate, outputChannels);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithMemoryBlock(const void *data, size_t size, float sampleRate)
|
|
97
|
+
{
|
|
98
|
+
const AudioFormat format = AudioDecoder::detectAudioFormat(data, size);
|
|
99
|
+
if (format == AudioFormat::MP4 || format == AudioFormat::M4A || format == AudioFormat::AAC) {
|
|
100
|
+
auto buffer = ffmpegdecoder::decodeWithMemoryBlock(data, size, static_cast<int>(sampleRate));
|
|
101
|
+
if (buffer == nullptr) {
|
|
102
|
+
NSLog(@"Failed to decode with FFmpeg");
|
|
103
|
+
return nullptr;
|
|
104
|
+
}
|
|
105
|
+
return buffer;
|
|
106
|
+
}
|
|
107
|
+
ma_decoder decoder;
|
|
108
|
+
ma_decoder_config config = ma_decoder_config_init(ma_format_f32, 0, static_cast<int>(sampleRate));
|
|
109
|
+
|
|
110
|
+
ma_decoding_backend_vtable *customBackends[] = {ma_decoding_backend_libvorbis, ma_decoding_backend_libopus};
|
|
111
|
+
|
|
112
|
+
config.ppCustomBackendVTables = customBackends;
|
|
113
|
+
config.customBackendCount = sizeof(customBackends) / sizeof(customBackends[0]);
|
|
114
|
+
|
|
115
|
+
if (ma_decoder_init_memory(data, size, &config, &decoder) != MA_SUCCESS) {
|
|
116
|
+
NSLog(@"Failed to initialize decoder for memory block");
|
|
117
|
+
ma_decoder_uninit(&decoder);
|
|
118
|
+
return nullptr;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
auto outputSampleRate = static_cast<float>(decoder.outputSampleRate);
|
|
122
|
+
auto outputChannels = static_cast<int>(decoder.outputChannels);
|
|
123
|
+
|
|
124
|
+
std::vector<float> buffer = readAllPcmFrames(decoder, outputChannels);
|
|
125
|
+
ma_decoder_uninit(&decoder);
|
|
126
|
+
return makeAudioBufferFromFloatBuffer(buffer, outputSampleRate, outputChannels);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
std::shared_ptr<AudioBuffer> AudioDecoder::decodeWithPCMInBase64(
|
|
130
|
+
const std::string &data,
|
|
131
|
+
float inputSampleRate,
|
|
132
|
+
int inputChannelCount,
|
|
133
|
+
bool interleaved)
|
|
134
|
+
{
|
|
135
|
+
auto decodedData = base64_decode(data, false);
|
|
136
|
+
const auto uint8Data = reinterpret_cast<uint8_t *>(decodedData.data());
|
|
137
|
+
size_t numFramesDecoded = decodedData.size() / (inputChannelCount * sizeof(int16_t));
|
|
138
|
+
|
|
139
|
+
auto audioBus = std::make_shared<AudioBus>(numFramesDecoded, inputChannelCount, inputSampleRate);
|
|
140
|
+
|
|
141
|
+
for (int ch = 0; ch < inputChannelCount; ++ch) {
|
|
142
|
+
auto channelData = audioBus->getChannel(ch)->getData();
|
|
143
|
+
|
|
144
|
+
for (size_t i = 0; i < numFramesDecoded; ++i) {
|
|
145
|
+
size_t offset;
|
|
146
|
+
if (interleaved) {
|
|
147
|
+
// Ch1, Ch2, Ch1, Ch2, ...
|
|
148
|
+
offset = (i * inputChannelCount + ch) * sizeof(int16_t);
|
|
149
|
+
} else {
|
|
150
|
+
// Ch1, Ch1, Ch1, ..., Ch2, Ch2, Ch2, ...
|
|
151
|
+
offset = (ch * numFramesDecoded + i) * sizeof(int16_t);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
channelData[i] = uint8ToFloat(uint8Data[offset], uint8Data[offset + 1]);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return std::make_shared<AudioBuffer>(audioBus);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
} // namespace audioapi
|
package/lib/commonjs/api.js
CHANGED
|
@@ -69,6 +69,12 @@ Object.defineProperty(exports, "AudioScheduledSourceNode", {
|
|
|
69
69
|
return _AudioScheduledSourceNode.default;
|
|
70
70
|
}
|
|
71
71
|
});
|
|
72
|
+
Object.defineProperty(exports, "AudioWorkletRuntime", {
|
|
73
|
+
enumerable: true,
|
|
74
|
+
get: function () {
|
|
75
|
+
return _types.AudioWorkletRuntime;
|
|
76
|
+
}
|
|
77
|
+
});
|
|
72
78
|
Object.defineProperty(exports, "BaseAudioContext", {
|
|
73
79
|
enumerable: true,
|
|
74
80
|
get: function () {
|
|
@@ -99,6 +105,12 @@ Object.defineProperty(exports, "ChannelInterpretation", {
|
|
|
99
105
|
return _types.ChannelInterpretation;
|
|
100
106
|
}
|
|
101
107
|
});
|
|
108
|
+
Object.defineProperty(exports, "ConstantSourceNode", {
|
|
109
|
+
enumerable: true,
|
|
110
|
+
get: function () {
|
|
111
|
+
return _ConstantSourceNode.default;
|
|
112
|
+
}
|
|
113
|
+
});
|
|
102
114
|
Object.defineProperty(exports, "ContextState", {
|
|
103
115
|
enumerable: true,
|
|
104
116
|
get: function () {
|
|
@@ -189,13 +201,52 @@ Object.defineProperty(exports, "WindowType", {
|
|
|
189
201
|
return _types.WindowType;
|
|
190
202
|
}
|
|
191
203
|
});
|
|
204
|
+
Object.defineProperty(exports, "WorkletNode", {
|
|
205
|
+
enumerable: true,
|
|
206
|
+
get: function () {
|
|
207
|
+
return _WorkletNode.default;
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
Object.defineProperty(exports, "WorkletProcessingNode", {
|
|
211
|
+
enumerable: true,
|
|
212
|
+
get: function () {
|
|
213
|
+
return _WorkletProcessingNode.default;
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
Object.defineProperty(exports, "WorkletSourceNode", {
|
|
217
|
+
enumerable: true,
|
|
218
|
+
get: function () {
|
|
219
|
+
return _WorkletSourceNode.default;
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
Object.defineProperty(exports, "changePlaybackSpeed", {
|
|
223
|
+
enumerable: true,
|
|
224
|
+
get: function () {
|
|
225
|
+
return _AudioStretcher.default;
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
Object.defineProperty(exports, "decodeAudioData", {
|
|
229
|
+
enumerable: true,
|
|
230
|
+
get: function () {
|
|
231
|
+
return _AudioDecoder.decodeAudioData;
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
Object.defineProperty(exports, "decodePCMInBase64", {
|
|
235
|
+
enumerable: true,
|
|
236
|
+
get: function () {
|
|
237
|
+
return _AudioDecoder.decodePCMInBase64;
|
|
238
|
+
}
|
|
239
|
+
});
|
|
192
240
|
Object.defineProperty(exports, "useSystemVolume", {
|
|
193
241
|
enumerable: true,
|
|
194
242
|
get: function () {
|
|
195
|
-
return
|
|
243
|
+
return _useSystemVolume.default;
|
|
196
244
|
}
|
|
197
245
|
});
|
|
198
246
|
var _specs = require("./specs");
|
|
247
|
+
var _WorkletNode = _interopRequireDefault(require("./core/WorkletNode"));
|
|
248
|
+
var _WorkletSourceNode = _interopRequireDefault(require("./core/WorkletSourceNode"));
|
|
249
|
+
var _WorkletProcessingNode = _interopRequireDefault(require("./core/WorkletProcessingNode"));
|
|
199
250
|
var _RecorderAdapterNode = _interopRequireDefault(require("./core/RecorderAdapterNode"));
|
|
200
251
|
var _AudioBuffer = _interopRequireDefault(require("./core/AudioBuffer"));
|
|
201
252
|
var _AudioBufferSourceNode = _interopRequireDefault(require("./core/AudioBufferSourceNode"));
|
|
@@ -214,8 +265,11 @@ var _OscillatorNode = _interopRequireDefault(require("./core/OscillatorNode"));
|
|
|
214
265
|
var _StereoPannerNode = _interopRequireDefault(require("./core/StereoPannerNode"));
|
|
215
266
|
var _AudioRecorder = _interopRequireDefault(require("./core/AudioRecorder"));
|
|
216
267
|
var _StreamerNode = _interopRequireDefault(require("./core/StreamerNode"));
|
|
268
|
+
var _ConstantSourceNode = _interopRequireDefault(require("./core/ConstantSourceNode"));
|
|
217
269
|
var _system = _interopRequireDefault(require("./system"));
|
|
218
|
-
var
|
|
270
|
+
var _useSystemVolume = _interopRequireDefault(require("./hooks/useSystemVolume"));
|
|
271
|
+
var _AudioDecoder = require("./core/AudioDecoder");
|
|
272
|
+
var _AudioStretcher = _interopRequireDefault(require("./core/AudioStretcher"));
|
|
219
273
|
var _types = require("./types");
|
|
220
274
|
var _errors = require("./errors");
|
|
221
275
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -223,7 +277,7 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
|
|
|
223
277
|
|
|
224
278
|
/* eslint-disable no-var */
|
|
225
279
|
|
|
226
|
-
if (global.createAudioContext == null || global.createOfflineAudioContext == null || global.createAudioRecorder == null || global.AudioEventEmitter == null) {
|
|
280
|
+
if (global.createAudioContext == null || global.createOfflineAudioContext == null || global.createAudioRecorder == null || global.createAudioDecoder == null || global.createAudioStretcher == null || global.AudioEventEmitter == null) {
|
|
227
281
|
if (!_specs.NativeAudioAPIModule) {
|
|
228
282
|
throw new Error(`Failed to install react-native-audio-api: The native module could not be found.`);
|
|
229
283
|
}
|
package/lib/commonjs/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_specs","require","
|
|
1
|
+
{"version":3,"names":["_specs","require","_WorkletNode","_interopRequireDefault","_WorkletSourceNode","_WorkletProcessingNode","_RecorderAdapterNode","_AudioBuffer","_AudioBufferSourceNode","_AudioBufferQueueSourceNode","_AudioContext","_OfflineAudioContext","_AudioDestinationNode","_AudioNode","_AnalyserNode","_AudioParam","_AudioScheduledSourceNode","_BaseAudioContext","_BiquadFilterNode","_GainNode","_OscillatorNode","_StereoPannerNode","_AudioRecorder","_StreamerNode","_ConstantSourceNode","_system","_useSystemVolume","_AudioDecoder","_AudioStretcher","_types","_errors","e","__esModule","default","global","createAudioContext","createOfflineAudioContext","createAudioRecorder","createAudioDecoder","createAudioStretcher","AudioEventEmitter","NativeAudioAPIModule","Error","install"],"sourceRoot":"../../src","sources":["api.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAsDA,IAAAC,YAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,kBAAA,GAAAD,sBAAA,CAAAF,OAAA;AACA,IAAAI,sBAAA,GAAAF,sBAAA,CAAAF,OAAA;AACA,IAAAK,oBAAA,GAAAH,sBAAA,CAAAF,OAAA;AACA,IAAAM,YAAA,GAAAJ,sBAAA,CAAAF,OAAA;AACA,IAAAO,sBAAA,GAAAL,sBAAA,CAAAF,OAAA;AACA,IAAAQ,2BAAA,GAAAN,sBAAA,CAAAF,OAAA;AACA,IAAAS,aAAA,GAAAP,sBAAA,CAAAF,OAAA;AACA,IAAAU,oBAAA,GAAAR,sBAAA,CAAAF,OAAA;AACA,IAAAW,qBAAA,GAAAT,sBAAA,CAAAF,OAAA;AACA,IAAAY,UAAA,GAAAV,sBAAA,CAAAF,OAAA;AACA,IAAAa,aAAA,GAAAX,sBAAA,CAAAF,OAAA;AACA,IAAAc,WAAA,GAAAZ,sBAAA,CAAAF,OAAA;AACA,IAAAe,yBAAA,GAAAb,sBAAA,CAAAF,OAAA;AACA,IAAAgB,iBAAA,GAAAd,sBAAA,CAAAF,OAAA;AACA,IAAAiB,iBAAA,GAAAf,sBAAA,CAAAF,OAAA;AACA,IAAAkB,SAAA,GAAAhB,sBAAA,CAAAF,OAAA;AACA,IAAAmB,eAAA,GAAAjB,sBAAA,CAAAF,OAAA;AACA,IAAAoB,iBAAA,GAAAlB,sBAAA,CAAAF,OAAA;AACA,IAAAqB,cAAA,GAAAnB,sBAAA,CAAAF,OAAA;AACA,IAAAsB,aAAA,GAAApB,sBAAA,CAAAF,OAAA;AACA,IAAAuB,mBAAA,GAAArB,sBAAA,CAAAF,OAAA;AACA,IAAAwB,OAAA,GAAAtB,sBAAA,CAAAF,OAAA;AACA,IAAAyB,gBAAA,GAAAvB,sBAAA,CAAAF,OAAA;AACA,IAAA0B,aAAA,GAAA1B,OAAA;AACA,IAAA2B,eAAA,GAAAzB,sBAAA,CAAAF,OAAA;AAEA,IAAA4B,MAAA,GAAA5B,OAAA;AAWA,IAAA6B,OAAA,GAAA7B,OAAA;AAMkB,SAAAE,uBAAA4B,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAvFlB;;AAwBA;;AAEA,IACEG,MAAM,CAACC,kBAAkB,IAAI,IAAI,IACjCD,MAAM,CAACE,yBAAyB,IAAI,IAAI,IACxCF,MAAM,CAACG,mBAAmB,IAAI,IAAI,IAClCH,MAAM,CAACI,kBAAkB,IAAI,IAAI,IACjCJ,MAAM,CAACK,oBAAoB,IAAI,IAAI,IACnCL,MAAM,CAACM,iBAAiB,IAAI,IAAI,EAChC;EACA,IAAI,CAACC,2BAAoB,EAAE;IACzB,MAAM,IAAIC,KAAK,CACb,iFACF,CAAC;EACH;EAEAD,2BAAoB,CAACE,OAAO,CAAC,CAAC;AAChC","ignoreList":[]}
|
package/lib/commonjs/api.web.js
CHANGED
|
@@ -18,6 +18,7 @@ var _exportNames = {
|
|
|
18
18
|
GainNode: true,
|
|
19
19
|
OscillatorNode: true,
|
|
20
20
|
StereoPannerNode: true,
|
|
21
|
+
ConstantSourceNode: true,
|
|
21
22
|
OscillatorType: true,
|
|
22
23
|
BiquadFilterType: true,
|
|
23
24
|
ChannelCountMode: true,
|
|
@@ -109,6 +110,12 @@ Object.defineProperty(exports, "ChannelInterpretation", {
|
|
|
109
110
|
return _types.ChannelInterpretation;
|
|
110
111
|
}
|
|
111
112
|
});
|
|
113
|
+
Object.defineProperty(exports, "ConstantSourceNode", {
|
|
114
|
+
enumerable: true,
|
|
115
|
+
get: function () {
|
|
116
|
+
return _ConstantSourceNode.default;
|
|
117
|
+
}
|
|
118
|
+
});
|
|
112
119
|
Object.defineProperty(exports, "ContextState", {
|
|
113
120
|
enumerable: true,
|
|
114
121
|
get: function () {
|
|
@@ -201,6 +208,7 @@ var _BiquadFilterNode = _interopRequireDefault(require("./web-core/BiquadFilterN
|
|
|
201
208
|
var _GainNode = _interopRequireDefault(require("./web-core/GainNode"));
|
|
202
209
|
var _OscillatorNode = _interopRequireDefault(require("./web-core/OscillatorNode"));
|
|
203
210
|
var _StereoPannerNode = _interopRequireDefault(require("./web-core/StereoPannerNode"));
|
|
211
|
+
var _ConstantSourceNode = _interopRequireDefault(require("./web-core/ConstantSourceNode"));
|
|
204
212
|
var _custom = require("./web-core/custom");
|
|
205
213
|
Object.keys(_custom).forEach(function (key) {
|
|
206
214
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_AudioBuffer","_interopRequireDefault","require","_AudioBufferSourceNode","_AudioContext","_OfflineAudioContext","_AudioDestinationNode","_AudioNode","_AnalyserNode","_AudioParam","_AudioScheduledSourceNode","_BaseAudioContext","_BiquadFilterNode","_GainNode","_OscillatorNode","_StereoPannerNode","_custom","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_types","_errors","e","__esModule","default"],"sourceRoot":"../../src","sources":["api.web.ts"],"mappings":"
|
|
1
|
+
{"version":3,"names":["_AudioBuffer","_interopRequireDefault","require","_AudioBufferSourceNode","_AudioContext","_OfflineAudioContext","_AudioDestinationNode","_AudioNode","_AnalyserNode","_AudioParam","_AudioScheduledSourceNode","_BaseAudioContext","_BiquadFilterNode","_GainNode","_OscillatorNode","_StereoPannerNode","_ConstantSourceNode","_custom","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_types","_errors","e","__esModule","default"],"sourceRoot":"../../src","sources":["api.web.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,sBAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,aAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,oBAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,qBAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,UAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,aAAA,GAAAP,sBAAA,CAAAC,OAAA;AACA,IAAAO,WAAA,GAAAR,sBAAA,CAAAC,OAAA;AACA,IAAAQ,yBAAA,GAAAT,sBAAA,CAAAC,OAAA;AACA,IAAAS,iBAAA,GAAAV,sBAAA,CAAAC,OAAA;AACA,IAAAU,iBAAA,GAAAX,sBAAA,CAAAC,OAAA;AACA,IAAAW,SAAA,GAAAZ,sBAAA,CAAAC,OAAA;AACA,IAAAY,eAAA,GAAAb,sBAAA,CAAAC,OAAA;AACA,IAAAa,iBAAA,GAAAd,sBAAA,CAAAC,OAAA;AACA,IAAAc,mBAAA,GAAAf,sBAAA,CAAAC,OAAA;AAEA,IAAAe,OAAA,GAAAf,OAAA;AAAAgB,MAAA,CAAAC,IAAA,CAAAF,OAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,OAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,OAAA,CAAAI,GAAA;IAAA;EAAA;AAAA;AAEA,IAAAS,MAAA,GAAA5B,OAAA;AAUA,IAAA6B,OAAA,GAAA7B,OAAA;AAMkB,SAAAD,uBAAA+B,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA","ignoreList":[]}
|
|
@@ -14,19 +14,19 @@ class AudioBufferBaseSourceNode extends _AudioScheduledSourceNode.default {
|
|
|
14
14
|
this.playbackRate = new _AudioParam.default(node.playbackRate, context);
|
|
15
15
|
}
|
|
16
16
|
get onPositionChanged() {
|
|
17
|
-
return this.
|
|
17
|
+
return this.onPositionChangedCallback;
|
|
18
18
|
}
|
|
19
19
|
set onPositionChanged(callback) {
|
|
20
20
|
if (!callback) {
|
|
21
21
|
this.node.onPositionChanged = '0';
|
|
22
|
-
this.
|
|
23
|
-
this.
|
|
24
|
-
this.
|
|
22
|
+
this.onPositionChangedSubscription?.remove();
|
|
23
|
+
this.onPositionChangedSubscription = undefined;
|
|
24
|
+
this.onPositionChangedCallback = undefined;
|
|
25
25
|
return;
|
|
26
26
|
}
|
|
27
|
-
this.
|
|
28
|
-
this.
|
|
29
|
-
this.node.onPositionChanged = this.
|
|
27
|
+
this.onPositionChangedCallback = callback;
|
|
28
|
+
this.onPositionChangedSubscription = this.audioEventEmitter.addAudioEventListener('positionChanged', callback);
|
|
29
|
+
this.node.onPositionChanged = this.onPositionChangedSubscription.subscriptionId;
|
|
30
30
|
}
|
|
31
31
|
get onPositionChangedInterval() {
|
|
32
32
|
return this.node.onPositionChangedInterval;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_AudioParam","_interopRequireDefault","require","_AudioScheduledSourceNode","e","__esModule","default","AudioBufferBaseSourceNode","AudioScheduledSourceNode","constructor","context","node","detune","AudioParam","playbackRate","onPositionChanged","
|
|
1
|
+
{"version":3,"names":["_AudioParam","_interopRequireDefault","require","_AudioScheduledSourceNode","e","__esModule","default","AudioBufferBaseSourceNode","AudioScheduledSourceNode","constructor","context","node","detune","AudioParam","playbackRate","onPositionChanged","onPositionChangedCallback","callback","onPositionChangedSubscription","remove","undefined","audioEventEmitter","addAudioEventListener","subscriptionId","onPositionChangedInterval","value","exports"],"sourceRoot":"../../../src","sources":["core/AudioBufferBaseSourceNode.ts"],"mappings":";;;;;;AAAA,IAAAA,WAAA,GAAAC,sBAAA,CAAAC,OAAA;AAKA,IAAAC,yBAAA,GAAAF,sBAAA,CAAAC,OAAA;AAAkE,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEnD,MAAMG,yBAAyB,SAASC,iCAAwB,CAAC;EAM9EC,WAAWA,CAACC,OAAyB,EAAEC,IAAgC,EAAE;IACvE,KAAK,CAACD,OAAO,EAAEC,IAAI,CAAC;IAEpB,IAAI,CAACC,MAAM,GAAG,IAAIC,mBAAU,CAACF,IAAI,CAACC,MAAM,EAAEF,OAAO,CAAC;IAClD,IAAI,CAACI,YAAY,GAAG,IAAID,mBAAU,CAACF,IAAI,CAACG,YAAY,EAAEJ,OAAO,CAAC;EAChE;EAEA,IAAWK,iBAAiBA,CAAA,EAEd;IACZ,OAAO,IAAI,CAACC,yBAAyB;EACvC;EAEA,IAAWD,iBAAiBA,CAC1BE,QAAsD,EACtD;IACA,IAAI,CAACA,QAAQ,EAAE;MACZ,IAAI,CAACN,IAAI,CAAgCI,iBAAiB,GAAG,GAAG;MACjE,IAAI,CAACG,6BAA6B,EAAEC,MAAM,CAAC,CAAC;MAC5C,IAAI,CAACD,6BAA6B,GAAGE,SAAS;MAC9C,IAAI,CAACJ,yBAAyB,GAAGI,SAAS;MAE1C;IACF;IAEA,IAAI,CAACJ,yBAAyB,GAAGC,QAAQ;IACzC,IAAI,CAACC,6BAA6B,GAChC,IAAI,CAACG,iBAAiB,CAACC,qBAAqB,CAAC,iBAAiB,EAAEL,QAAQ,CAAC;IAE1E,IAAI,CAACN,IAAI,CAAgCI,iBAAiB,GACzD,IAAI,CAACG,6BAA6B,CAACK,cAAc;EACrD;EAEA,IAAWC,yBAAyBA,CAAA,EAAW;IAC7C,OAAQ,IAAI,CAACb,IAAI,CAAgCa,yBAAyB;EAC5E;EAEA,IAAWA,yBAAyBA,CAACC,KAAa,EAAE;IACjD,IAAI,CAACd,IAAI,CAAgCa,yBAAyB,GAAGC,KAAK;EAC7E;AACF;AAACC,OAAA,CAAApB,OAAA,GAAAC,yBAAA","ignoreList":[]}
|
|
@@ -21,15 +21,10 @@ class AudioBufferQueueSourceNode extends _AudioBufferBaseSourceNode.default {
|
|
|
21
21
|
clearBuffers() {
|
|
22
22
|
this.node.clearBuffers();
|
|
23
23
|
}
|
|
24
|
-
start(when = 0
|
|
24
|
+
start(when = 0) {
|
|
25
25
|
if (when < 0) {
|
|
26
26
|
throw new _errors.RangeError(`when must be a finite non-negative number: ${when}`);
|
|
27
27
|
}
|
|
28
|
-
if (offset) {
|
|
29
|
-
if (offset < 0) {
|
|
30
|
-
throw new _errors.RangeError(`offset must be a finite non-negative number: ${offset}`);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
28
|
this.node.start(when);
|
|
34
29
|
}
|
|
35
30
|
stop(when = 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_AudioBufferBaseSourceNode","_interopRequireDefault","require","_errors","e","__esModule","default","AudioBufferQueueSourceNode","AudioBufferBaseSourceNode","enqueueBuffer","buffer","node","dequeueBuffer","bufferId","id","parseInt","isNaN","RangeError","clearBuffers","start","when","
|
|
1
|
+
{"version":3,"names":["_AudioBufferBaseSourceNode","_interopRequireDefault","require","_errors","e","__esModule","default","AudioBufferQueueSourceNode","AudioBufferBaseSourceNode","enqueueBuffer","buffer","node","dequeueBuffer","bufferId","id","parseInt","isNaN","RangeError","clearBuffers","start","when","stop","pause","exports"],"sourceRoot":"../../../src","sources":["core/AudioBufferQueueSourceNode.ts"],"mappings":";;;;;;AACA,IAAAA,0BAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,OAAA,GAAAD,OAAA;AAAuC,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAExB,MAAMG,0BAA0B,SAASC,kCAAyB,CAAC;EACzEC,aAAaA,CAACC,MAAmB,EAAU;IAChD,OAAQ,IAAI,CAACC,IAAI,CAAiCF,aAAa,CAC7DC,MAAM,CAACA,MACT,CAAC;EACH;EAEOE,aAAaA,CAACC,QAAgB,EAAQ;IAC3C,MAAMC,EAAE,GAAGC,QAAQ,CAACF,QAAQ,EAAE,EAAE,CAAC;IACjC,IAAIG,KAAK,CAACF,EAAE,CAAC,IAAIA,EAAE,GAAG,CAAC,EAAE;MACvB,MAAM,IAAIG,kBAAU,CAClB,4CAA4CJ,QAAQ,EACtD,CAAC;IACH;IACC,IAAI,CAACF,IAAI,CAAiCC,aAAa,CAACE,EAAE,CAAC;EAC9D;EAEOI,YAAYA,CAAA,EAAS;IACzB,IAAI,CAACP,IAAI,CAAiCO,YAAY,CAAC,CAAC;EAC3D;EAEgBC,KAAKA,CAACC,IAAY,GAAG,CAAC,EAAQ;IAC5C,IAAIA,IAAI,GAAG,CAAC,EAAE;MACZ,MAAM,IAAIH,kBAAU,CAClB,8CAA8CG,IAAI,EACpD,CAAC;IACH;IAEC,IAAI,CAACT,IAAI,CAAiCQ,KAAK,CAACC,IAAI,CAAC;EACxD;EAEgBC,IAAIA,CAACD,IAAY,GAAG,CAAC,EAAQ;IAC3C,IAAIA,IAAI,GAAG,CAAC,EAAE;MACZ,MAAM,IAAIH,kBAAU,CAClB,8CAA8CG,IAAI,EACpD,CAAC;IACH;IAEC,IAAI,CAACT,IAAI,CAAiCU,IAAI,CAACD,IAAI,CAAC;EACvD;EAEOE,KAAKA,CAAA,EAAS;IAClB,IAAI,CAACX,IAAI,CAAiCW,KAAK,CAAC,CAAC;EACpD;AACF;AAACC,OAAA,CAAAjB,OAAA,GAAAC,0BAAA","ignoreList":[]}
|
|
@@ -69,6 +69,21 @@ class AudioBufferSourceNode extends _AudioBufferBaseSourceNode.default {
|
|
|
69
69
|
set onEnded(callback) {
|
|
70
70
|
super.onEnded = callback;
|
|
71
71
|
}
|
|
72
|
+
get onLoopEnded() {
|
|
73
|
+
return this.onLoopEndedCallback;
|
|
74
|
+
}
|
|
75
|
+
set onLoopEnded(callback) {
|
|
76
|
+
if (!callback) {
|
|
77
|
+
this.node.onLoopEnded = '0';
|
|
78
|
+
this.onLoopEndedSubscription?.remove();
|
|
79
|
+
this.onLoopEndedSubscription = undefined;
|
|
80
|
+
this.onLoopEndedCallback = undefined;
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
this.onLoopEndedCallback = callback;
|
|
84
|
+
this.onLoopEndedSubscription = this.audioEventEmitter.addAudioEventListener('loopEnded', callback);
|
|
85
|
+
this.node.onLoopEnded = this.onLoopEndedSubscription.subscriptionId;
|
|
86
|
+
}
|
|
72
87
|
}
|
|
73
88
|
exports.default = AudioBufferSourceNode;
|
|
74
89
|
//# sourceMappingURL=AudioBufferSourceNode.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_AudioBufferBaseSourceNode","_interopRequireDefault","require","_AudioBuffer","_errors","e","__esModule","default","AudioBufferSourceNode","AudioBufferBaseSourceNode","buffer","node","AudioBuffer","setBuffer","loopSkip","value","loop","loopStart","loopEnd","start","when","offset","duration","RangeError","hasBeenStarted","InvalidStateError","onEnded","callback","exports"],"sourceRoot":"../../../src","sources":["core/AudioBufferSourceNode.ts"],"mappings":";;;;;;AACA,IAAAA,0BAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AAA0D,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;
|
|
1
|
+
{"version":3,"names":["_AudioBufferBaseSourceNode","_interopRequireDefault","require","_AudioBuffer","_errors","e","__esModule","default","AudioBufferSourceNode","AudioBufferBaseSourceNode","buffer","node","AudioBuffer","setBuffer","loopSkip","value","loop","loopStart","loopEnd","start","when","offset","duration","RangeError","hasBeenStarted","InvalidStateError","onEnded","callback","onLoopEnded","onLoopEndedCallback","onLoopEndedSubscription","remove","undefined","audioEventEmitter","addAudioEventListener","subscriptionId","exports"],"sourceRoot":"../../../src","sources":["core/AudioBufferSourceNode.ts"],"mappings":";;;;;;AACA,IAAAA,0BAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AAA0D,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAI3C,MAAMG,qBAAqB,SAASC,kCAAyB,CAAC;EAI3E,IAAWC,MAAMA,CAAA,EAAuB;IACtC,MAAMA,MAAM,GAAI,IAAI,CAACC,IAAI,CAA4BD,MAAM;IAC3D,IAAI,CAACA,MAAM,EAAE;MACX,OAAO,IAAI;IACb;IACA,OAAO,IAAIE,oBAAW,CAACF,MAAM,CAAC;EAChC;EAEA,IAAWA,MAAMA,CAACA,MAA0B,EAAE;IAC5C,IAAI,CAACA,MAAM,EAAE;MACV,IAAI,CAACC,IAAI,CAA4BE,SAAS,CAAC,IAAI,CAAC;MACrD;IACF;IAEC,IAAI,CAACF,IAAI,CAA4BE,SAAS,CAACH,MAAM,CAACA,MAAM,CAAC;EAChE;EAEA,IAAWI,QAAQA,CAAA,EAAY;IAC7B,OAAQ,IAAI,CAACH,IAAI,CAA4BG,QAAQ;EACvD;EAEA,IAAWA,QAAQA,CAACC,KAAc,EAAE;IACjC,IAAI,CAACJ,IAAI,CAA4BG,QAAQ,GAAGC,KAAK;EACxD;EAEA,IAAWC,IAAIA,CAAA,EAAY;IACzB,OAAQ,IAAI,CAACL,IAAI,CAA4BK,IAAI;EACnD;EAEA,IAAWA,IAAIA,CAACD,KAAc,EAAE;IAC7B,IAAI,CAACJ,IAAI,CAA4BK,IAAI,GAAGD,KAAK;EACpD;EAEA,IAAWE,SAASA,CAAA,EAAW;IAC7B,OAAQ,IAAI,CAACN,IAAI,CAA4BM,SAAS;EACxD;EAEA,IAAWA,SAASA,CAACF,KAAa,EAAE;IACjC,IAAI,CAACJ,IAAI,CAA4BM,SAAS,GAAGF,KAAK;EACzD;EAEA,IAAWG,OAAOA,CAAA,EAAW;IAC3B,OAAQ,IAAI,CAACP,IAAI,CAA4BO,OAAO;EACtD;EAEA,IAAWA,OAAOA,CAACH,KAAa,EAAE;IAC/B,IAAI,CAACJ,IAAI,CAA4BO,OAAO,GAAGH,KAAK;EACvD;EAEOI,KAAKA,CAACC,IAAY,GAAG,CAAC,EAAEC,MAAc,GAAG,CAAC,EAAEC,QAAiB,EAAQ;IAC1E,IAAIF,IAAI,GAAG,CAAC,EAAE;MACZ,MAAM,IAAIG,kBAAU,CAClB,8CAA8CH,IAAI,EACpD,CAAC;IACH;IAEA,IAAIC,MAAM,GAAG,CAAC,EAAE;MACd,MAAM,IAAIE,kBAAU,CAClB,gDAAgDF,MAAM,EACxD,CAAC;IACH;IAEA,IAAIC,QAAQ,IAAIA,QAAQ,GAAG,CAAC,EAAE;MAC5B,MAAM,IAAIC,kBAAU,CAClB,kDAAkDD,QAAQ,EAC5D,CAAC;IACH;IAEA,IAAI,IAAI,CAACE,cAAc,EAAE;MACvB,MAAM,IAAIC,yBAAiB,CAAC,kCAAkC,CAAC;IACjE;IAEA,IAAI,CAACD,cAAc,GAAG,IAAI;IACzB,IAAI,CAACb,IAAI,CAA4BQ,KAAK,CAACC,IAAI,EAAEC,MAAM,EAAEC,QAAQ,CAAC;EACrE;EAEA,IAAoBI,OAAOA,CAAA,EAAkD;IAC3E,OAAO,KAAK,CAACA,OAAO;EACtB;EAEA,IAAoBA,OAAOA,CACzBC,QAAkD,EAClD;IACA,KAAK,CAACD,OAAO,GAAGC,QAAQ;EAC1B;EAEA,IAAWC,WAAWA,CAAA,EAAkD;IACtE,OAAO,IAAI,CAACC,mBAAmB;EACjC;EAEA,IAAWD,WAAWA,CAACD,QAAkD,EAAE;IACzE,IAAI,CAACA,QAAQ,EAAE;MACZ,IAAI,CAAChB,IAAI,CAA4BiB,WAAW,GAAG,GAAG;MACvD,IAAI,CAACE,uBAAuB,EAAEC,MAAM,CAAC,CAAC;MACtC,IAAI,CAACD,uBAAuB,GAAGE,SAAS;MACxC,IAAI,CAACH,mBAAmB,GAAGG,SAAS;MAEpC;IACF;IAEA,IAAI,CAACH,mBAAmB,GAAGF,QAAQ;IACnC,IAAI,CAACG,uBAAuB,GAAG,IAAI,CAACG,iBAAiB,CAACC,qBAAqB,CACzE,WAAW,EACXP,QACF,CAAC;IAEA,IAAI,CAAChB,IAAI,CAA4BiB,WAAW,GAC/C,IAAI,CAACE,uBAAuB,CAACK,cAAc;EAC/C;AACF;AAACC,OAAA,CAAA7B,OAAA,GAAAC,qBAAA","ignoreList":[]}
|
|
@@ -7,13 +7,22 @@ exports.default = void 0;
|
|
|
7
7
|
var _BaseAudioContext = _interopRequireDefault(require("./BaseAudioContext"));
|
|
8
8
|
var _system = _interopRequireDefault(require("../system"));
|
|
9
9
|
var _errors = require("../errors");
|
|
10
|
+
var _utils = require("../utils");
|
|
10
11
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
12
|
class AudioContext extends _BaseAudioContext.default {
|
|
13
|
+
// We need to keep here a reference to this runtime to better manage its lifecycle
|
|
14
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any
|
|
15
|
+
_audioRuntime = null;
|
|
12
16
|
constructor(options) {
|
|
13
17
|
if (options && options.sampleRate && (options.sampleRate < 8000 || options.sampleRate > 96000)) {
|
|
14
18
|
throw new _errors.NotSupportedError(`The provided sampleRate is not supported: ${options.sampleRate}`);
|
|
15
19
|
}
|
|
16
|
-
|
|
20
|
+
let audioRuntime = null;
|
|
21
|
+
if (_utils.isWorkletsAvailable) {
|
|
22
|
+
audioRuntime = _utils.workletsModule.createWorkletRuntime('AudioWorkletRuntime');
|
|
23
|
+
}
|
|
24
|
+
super(global.createAudioContext(options?.sampleRate || _system.default.getDevicePreferredSampleRate(), options?.initSuspended || false, audioRuntime));
|
|
25
|
+
this._audioRuntime = audioRuntime;
|
|
17
26
|
}
|
|
18
27
|
async close() {
|
|
19
28
|
return this.context.close();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_BaseAudioContext","_interopRequireDefault","require","_system","_errors","e","__esModule","default","AudioContext","BaseAudioContext","constructor","options","sampleRate","NotSupportedError","global","createAudioContext","AudioManager","getDevicePreferredSampleRate","initSuspended","close","context","resume","suspend","exports"],"sourceRoot":"../../../src","sources":["core/AudioContext.ts"],"mappings":";;;;;;AACA,IAAAA,iBAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAF,sBAAA,CAAAC,OAAA;AAEA,IAAAE,OAAA,GAAAF,OAAA;
|
|
1
|
+
{"version":3,"names":["_BaseAudioContext","_interopRequireDefault","require","_system","_errors","_utils","e","__esModule","default","AudioContext","BaseAudioContext","_audioRuntime","constructor","options","sampleRate","NotSupportedError","audioRuntime","isWorkletsAvailable","workletsModule","createWorkletRuntime","global","createAudioContext","AudioManager","getDevicePreferredSampleRate","initSuspended","close","context","resume","suspend","exports"],"sourceRoot":"../../../src","sources":["core/AudioContext.ts"],"mappings":";;;;;;AACA,IAAAA,iBAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAF,sBAAA,CAAAC,OAAA;AAEA,IAAAE,OAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AAA+D,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEhD,MAAMG,YAAY,SAASC,yBAAgB,CAAC;EACzD;EACA;EACQC,aAAa,GAAQ,IAAI;EAEjCC,WAAWA,CAACC,OAA6B,EAAE;IACzC,IACEA,OAAO,IACPA,OAAO,CAACC,UAAU,KACjBD,OAAO,CAACC,UAAU,GAAG,IAAI,IAAID,OAAO,CAACC,UAAU,GAAG,KAAK,CAAC,EACzD;MACA,MAAM,IAAIC,yBAAiB,CACzB,6CAA6CF,OAAO,CAACC,UAAU,EACjE,CAAC;IACH;IACA,IAAIE,YAAY,GAAG,IAAI;IACvB,IAAIC,0BAAmB,EAAE;MACvBD,YAAY,GAAGE,qBAAc,CAACC,oBAAoB,CAAC,qBAAqB,CAAC;IAC3E;IAEA,KAAK,CACHC,MAAM,CAACC,kBAAkB,CACvBR,OAAO,EAAEC,UAAU,IAAIQ,eAAY,CAACC,4BAA4B,CAAC,CAAC,EAClEV,OAAO,EAAEW,aAAa,IAAI,KAAK,EAC/BR,YACF,CACF,CAAC;IACD,IAAI,CAACL,aAAa,GAAGK,YAAY;EACnC;EAEA,MAAMS,KAAKA,CAAA,EAAkB;IAC3B,OAAQ,IAAI,CAACC,OAAO,CAAmBD,KAAK,CAAC,CAAC;EAChD;EAEA,MAAME,MAAMA,CAAA,EAAqB;IAC/B,OAAQ,IAAI,CAACD,OAAO,CAAmBC,MAAM,CAAC,CAAC;EACjD;EAEA,MAAMC,OAAOA,CAAA,EAAqB;IAChC,OAAQ,IAAI,CAACF,OAAO,CAAmBE,OAAO,CAAC,CAAC;EAClD;AACF;AAACC,OAAA,CAAArB,OAAA,GAAAC,YAAA","ignoreList":[]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.decodeAudioData = decodeAudioData;
|
|
7
|
+
exports.decodePCMInBase64 = decodePCMInBase64;
|
|
8
|
+
var _AudioBuffer = _interopRequireDefault(require("./AudioBuffer"));
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
+
class AudioDecoder {
|
|
11
|
+
static instance = null;
|
|
12
|
+
constructor() {
|
|
13
|
+
this.decoder = global.createAudioDecoder();
|
|
14
|
+
}
|
|
15
|
+
static getInstance() {
|
|
16
|
+
if (!AudioDecoder.instance) {
|
|
17
|
+
AudioDecoder.instance = new AudioDecoder();
|
|
18
|
+
}
|
|
19
|
+
return AudioDecoder.instance;
|
|
20
|
+
}
|
|
21
|
+
async decodeAudioDataInstance(input, sampleRate) {
|
|
22
|
+
let buffer;
|
|
23
|
+
if (typeof input === 'string') {
|
|
24
|
+
// Remove the file:// prefix if it exists
|
|
25
|
+
if (input.startsWith('file://')) {
|
|
26
|
+
input = input.replace('file://', '');
|
|
27
|
+
}
|
|
28
|
+
buffer = await this.decoder.decodeWithFilePath(input, sampleRate ?? 0);
|
|
29
|
+
} else if (input instanceof ArrayBuffer) {
|
|
30
|
+
buffer = await this.decoder.decodeWithMemoryBlock(new Uint8Array(input), sampleRate ?? 0);
|
|
31
|
+
}
|
|
32
|
+
if (!buffer) {
|
|
33
|
+
throw new Error('Unsupported input type or failed to decode audio');
|
|
34
|
+
}
|
|
35
|
+
return new _AudioBuffer.default(buffer);
|
|
36
|
+
}
|
|
37
|
+
async decodePCMInBase64Instance(base64String, inputSampleRate, inputChannelCount, interleaved) {
|
|
38
|
+
const buffer = await this.decoder.decodeWithPCMInBase64(base64String, inputSampleRate, inputChannelCount, interleaved);
|
|
39
|
+
return new _AudioBuffer.default(buffer);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async function decodeAudioData(input, sampleRate) {
|
|
43
|
+
return AudioDecoder.getInstance().decodeAudioDataInstance(input, sampleRate);
|
|
44
|
+
}
|
|
45
|
+
async function decodePCMInBase64(base64String, inputSampleRate, inputChannelCount, isInterleaved = true) {
|
|
46
|
+
return AudioDecoder.getInstance().decodePCMInBase64Instance(base64String, inputSampleRate, inputChannelCount, isInterleaved);
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=AudioDecoder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_AudioBuffer","_interopRequireDefault","require","e","__esModule","default","AudioDecoder","instance","constructor","decoder","global","createAudioDecoder","getInstance","decodeAudioDataInstance","input","sampleRate","buffer","startsWith","replace","decodeWithFilePath","ArrayBuffer","decodeWithMemoryBlock","Uint8Array","Error","AudioBuffer","decodePCMInBase64Instance","base64String","inputSampleRate","inputChannelCount","interleaved","decodeWithPCMInBase64","decodeAudioData","decodePCMInBase64","isInterleaved"],"sourceRoot":"../../../src","sources":["core/AudioDecoder.ts"],"mappings":";;;;;;;AACA,IAAAA,YAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAwC,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAExC,MAAMG,YAAY,CAAC;EACjB,OAAeC,QAAQ,GAAwB,IAAI;EAG3CC,WAAWA,CAAA,EAAG;IACpB,IAAI,CAACC,OAAO,GAAGC,MAAM,CAACC,kBAAkB,CAAC,CAAC;EAC5C;EAEA,OAAcC,WAAWA,CAAA,EAAiB;IACxC,IAAI,CAACN,YAAY,CAACC,QAAQ,EAAE;MAC1BD,YAAY,CAACC,QAAQ,GAAG,IAAID,YAAY,CAAC,CAAC;IAC5C;IACA,OAAOA,YAAY,CAACC,QAAQ;EAC9B;EAEA,MAAaM,uBAAuBA,CAClCC,KAA2B,EAC3BC,UAAmB,EACG;IACtB,IAAIC,MAAM;IACV,IAAI,OAAOF,KAAK,KAAK,QAAQ,EAAE;MAC7B;MACA,IAAIA,KAAK,CAACG,UAAU,CAAC,SAAS,CAAC,EAAE;QAC/BH,KAAK,GAAGA,KAAK,CAACI,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;MACtC;MACAF,MAAM,GAAG,MAAM,IAAI,CAACP,OAAO,CAACU,kBAAkB,CAACL,KAAK,EAAEC,UAAU,IAAI,CAAC,CAAC;IACxE,CAAC,MAAM,IAAID,KAAK,YAAYM,WAAW,EAAE;MACvCJ,MAAM,GAAG,MAAM,IAAI,CAACP,OAAO,CAACY,qBAAqB,CAC/C,IAAIC,UAAU,CAACR,KAAK,CAAC,EACrBC,UAAU,IAAI,CAChB,CAAC;IACH;IAEA,IAAI,CAACC,MAAM,EAAE;MACX,MAAM,IAAIO,KAAK,CAAC,kDAAkD,CAAC;IACrE;IACA,OAAO,IAAIC,oBAAW,CAACR,MAAM,CAAC;EAChC;EAEA,MAAaS,yBAAyBA,CACpCC,YAAoB,EACpBC,eAAuB,EACvBC,iBAAyB,EACzBC,WAAoB,EACE;IACtB,MAAMb,MAAM,GAAG,MAAM,IAAI,CAACP,OAAO,CAACqB,qBAAqB,CACrDJ,YAAY,EACZC,eAAe,EACfC,iBAAiB,EACjBC,WACF,CAAC;IACD,OAAO,IAAIL,oBAAW,CAACR,MAAM,CAAC;EAChC;AACF;AAEO,eAAee,eAAeA,CACnCjB,KAA2B,EAC3BC,UAAmB,EACG;EACtB,OAAOT,YAAY,CAACM,WAAW,CAAC,CAAC,CAACC,uBAAuB,CAACC,KAAK,EAAEC,UAAU,CAAC;AAC9E;AAEO,eAAeiB,iBAAiBA,CACrCN,YAAoB,EACpBC,eAAuB,EACvBC,iBAAyB,EACzBK,aAAsB,GAAG,IAAI,EACP;EACtB,OAAO3B,YAAY,CAACM,WAAW,CAAC,CAAC,CAACa,yBAAyB,CACzDC,YAAY,EACZC,eAAe,EACfC,iBAAiB,EACjBK,aACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -36,14 +36,14 @@ class AudioScheduledSourceNode extends _AudioNode.default {
|
|
|
36
36
|
set onEnded(callback) {
|
|
37
37
|
if (!callback) {
|
|
38
38
|
this.node.onEnded = '0';
|
|
39
|
-
this.
|
|
40
|
-
this.
|
|
39
|
+
this.onEndedSubscription?.remove();
|
|
40
|
+
this.onEndedSubscription = undefined;
|
|
41
41
|
this.onEndedCallback = undefined;
|
|
42
42
|
return;
|
|
43
43
|
}
|
|
44
44
|
this.onEndedCallback = callback;
|
|
45
|
-
this.
|
|
46
|
-
this.node.onEnded = this.
|
|
45
|
+
this.onEndedSubscription = this.audioEventEmitter.addAudioEventListener('ended', callback);
|
|
46
|
+
this.node.onEnded = this.onEndedSubscription.subscriptionId;
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
exports.default = AudioScheduledSourceNode;
|