react-native-audio-api 0.12.0-nightly-0d1a19d-20260120 → 0.12.0-nightly-6993a06-20260122
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/android/src/main/java/com/swmansion/audioapi/AudioAPIModule.kt +16 -2
- package/android/src/main/java/com/swmansion/audioapi/system/AudioFocusListener.kt +7 -3
- package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionManager.kt +6 -6
- package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +52 -49
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.cpp +18 -0
- package/common/cpp/audioapi/HostObjects/sources/AudioBufferQueueSourceNodeHostObject.h +4 -0
- package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.cpp +6 -0
- package/common/cpp/audioapi/HostObjects/sources/StreamerNodeHostObject.h +1 -0
- package/common/cpp/audioapi/HostObjects/utils/NodeOptions.h +111 -0
- package/common/cpp/audioapi/HostObjects/utils/NodeOptionsParser.h +262 -0
- package/common/cpp/audioapi/core/AudioNode.cpp +13 -6
- package/common/cpp/audioapi/core/AudioNode.h +2 -0
- package/common/cpp/audioapi/core/BaseAudioContext.cpp +42 -44
- package/common/cpp/audioapi/core/BaseAudioContext.h +32 -21
- package/common/cpp/audioapi/core/analysis/AnalyserNode.cpp +8 -6
- package/common/cpp/audioapi/core/analysis/AnalyserNode.h +2 -1
- package/common/cpp/audioapi/core/effects/BiquadFilterNode.cpp +7 -8
- package/common/cpp/audioapi/core/effects/BiquadFilterNode.h +4 -1
- package/common/cpp/audioapi/core/effects/ConvolverNode.cpp +5 -9
- package/common/cpp/audioapi/core/effects/ConvolverNode.h +2 -2
- package/common/cpp/audioapi/core/effects/DelayNode.cpp +5 -4
- package/common/cpp/audioapi/core/effects/DelayNode.h +2 -1
- package/common/cpp/audioapi/core/effects/GainNode.cpp +4 -3
- package/common/cpp/audioapi/core/effects/GainNode.h +2 -1
- package/common/cpp/audioapi/core/effects/IIRFilterNode.cpp +6 -6
- package/common/cpp/audioapi/core/effects/IIRFilterNode.h +3 -2
- package/common/cpp/audioapi/core/effects/StereoPannerNode.cpp +3 -3
- package/common/cpp/audioapi/core/effects/StereoPannerNode.h +4 -1
- package/common/cpp/audioapi/core/effects/WaveShaperNode.cpp +4 -3
- package/common/cpp/audioapi/core/effects/WaveShaperNode.h +4 -1
- package/common/cpp/audioapi/core/sources/AudioBuffer.cpp +3 -2
- package/common/cpp/audioapi/core/sources/AudioBuffer.h +2 -1
- package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.cpp +16 -22
- package/common/cpp/audioapi/core/sources/AudioBufferBaseSourceNode.h +2 -1
- package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.cpp +38 -20
- package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +9 -1
- package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +10 -8
- package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +5 -2
- package/common/cpp/audioapi/core/sources/ConstantSourceNode.cpp +5 -8
- package/common/cpp/audioapi/core/sources/ConstantSourceNode.h +4 -1
- package/common/cpp/audioapi/core/sources/OscillatorNode.cpp +21 -16
- package/common/cpp/audioapi/core/sources/OscillatorNode.h +4 -1
- package/common/cpp/audioapi/core/sources/StreamerNode.cpp +4 -2
- package/common/cpp/audioapi/core/sources/StreamerNode.h +11 -1
- package/common/cpp/audioapi/events/AudioEventHandlerRegistry.h +8 -2
- package/common/cpp/test/src/ConstantSourceTest.cpp +3 -2
- package/common/cpp/test/src/DelayTest.cpp +12 -5
- package/common/cpp/test/src/GainTest.cpp +3 -2
- package/common/cpp/test/src/IIRFilterTest.cpp +3 -2
- package/common/cpp/test/src/OscillatorTest.cpp +2 -1
- package/common/cpp/test/src/StereoPannerTest.cpp +3 -2
- package/common/cpp/test/src/biquad/BiquadFilterTest.cpp +10 -9
- package/common/cpp/test/src/core/effects/WaveShaperNodeTest.cpp +4 -3
- package/ios/audioapi/ios/AudioAPIModule.h +2 -2
- package/ios/audioapi/ios/AudioAPIModule.mm +3 -3
- package/ios/audioapi/ios/system/AudioEngine.mm +3 -1
- package/ios/audioapi/ios/system/AudioSessionManager.h +1 -0
- package/ios/audioapi/ios/system/{NotificationManager.h → SystemNotificationManager.h} +1 -1
- package/ios/audioapi/ios/system/{NotificationManager.mm → SystemNotificationManager.mm} +9 -4
- package/lib/commonjs/api.js +11 -3
- package/lib/commonjs/api.js.map +1 -1
- package/lib/commonjs/api.web.js +4 -10
- package/lib/commonjs/api.web.js.map +1 -1
- package/lib/commonjs/core/AnalyserNode.js +11 -0
- package/lib/commonjs/core/AnalyserNode.js.map +1 -1
- package/lib/commonjs/core/AudioBuffer.js +20 -6
- package/lib/commonjs/core/AudioBuffer.js.map +1 -1
- package/lib/commonjs/core/AudioBufferQueueSourceNode.js +24 -0
- package/lib/commonjs/core/AudioBufferQueueSourceNode.js.map +1 -1
- package/lib/commonjs/core/AudioBufferSourceNode.js +9 -6
- package/lib/commonjs/core/AudioBufferSourceNode.js.map +1 -1
- package/lib/commonjs/core/AudioScheduledSourceNode.js.map +1 -1
- package/lib/commonjs/core/BaseAudioContext.js +52 -65
- package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
- package/lib/commonjs/core/BiquadFilterNode.js +7 -1
- package/lib/commonjs/core/BiquadFilterNode.js.map +1 -1
- package/lib/commonjs/core/ConstantSourceNode.js +7 -1
- package/lib/commonjs/core/ConstantSourceNode.js.map +1 -1
- package/lib/commonjs/core/ConvolverNode.js +9 -3
- package/lib/commonjs/core/ConvolverNode.js.map +1 -1
- package/lib/commonjs/core/DelayNode.js +7 -1
- package/lib/commonjs/core/DelayNode.js.map +1 -1
- package/lib/commonjs/core/GainNode.js +9 -3
- package/lib/commonjs/core/GainNode.js.map +1 -1
- package/lib/commonjs/core/IIRFilterNode.js +9 -0
- package/lib/commonjs/core/IIRFilterNode.js.map +1 -1
- package/lib/commonjs/core/OscillatorNode.js +10 -7
- package/lib/commonjs/core/OscillatorNode.js.map +1 -1
- package/lib/commonjs/core/PeriodicWave.js +30 -2
- package/lib/commonjs/core/PeriodicWave.js.map +1 -1
- package/lib/commonjs/core/RecorderAdapterNode.js +3 -0
- package/lib/commonjs/core/RecorderAdapterNode.js.map +1 -1
- package/lib/commonjs/core/StereoPannerNode.js +7 -1
- package/lib/commonjs/core/StereoPannerNode.js.map +1 -1
- package/lib/commonjs/core/StreamerNode.js +25 -1
- package/lib/commonjs/core/StreamerNode.js.map +1 -1
- package/lib/commonjs/core/WaveShaperNode.js +12 -0
- package/lib/commonjs/core/WaveShaperNode.js.map +1 -1
- package/lib/commonjs/core/WorkletNode.js +13 -1
- package/lib/commonjs/core/WorkletNode.js.map +1 -1
- package/lib/commonjs/core/WorkletProcessingNode.js +14 -1
- package/lib/commonjs/core/WorkletProcessingNode.js.map +1 -1
- package/lib/commonjs/core/WorkletSourceNode.js +13 -1
- package/lib/commonjs/core/WorkletSourceNode.js.map +1 -1
- package/lib/commonjs/defaults.js +78 -0
- package/lib/commonjs/defaults.js.map +1 -0
- package/lib/commonjs/options-validators.js +40 -0
- package/lib/commonjs/options-validators.js.map +1 -0
- package/lib/commonjs/specs/NativeAudioAPIModule.js.map +1 -1
- package/lib/commonjs/specs/NativeAudioAPIModule.web.js.map +1 -1
- package/lib/commonjs/system/AudioManager.js +7 -2
- package/lib/commonjs/system/AudioManager.js.map +1 -1
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/web-core/AnalyserNode.js +2 -1
- package/lib/commonjs/web-core/AnalyserNode.js.map +1 -1
- package/lib/commonjs/web-core/AudioBuffer.js +14 -6
- package/lib/commonjs/web-core/AudioBuffer.js.map +1 -1
- package/lib/commonjs/web-core/AudioBufferSourceNode.js +276 -89
- package/lib/commonjs/web-core/AudioBufferSourceNode.js.map +1 -1
- package/lib/commonjs/web-core/AudioContext.js +33 -32
- package/lib/commonjs/web-core/AudioContext.js.map +1 -1
- package/lib/commonjs/web-core/AudioNode.js +4 -0
- package/lib/commonjs/web-core/AudioNode.js.map +1 -1
- package/lib/commonjs/web-core/AudioScheduledSourceNode.js +4 -2
- package/lib/commonjs/web-core/AudioScheduledSourceNode.js.map +1 -1
- package/lib/commonjs/web-core/BiquadFilterNode.js +2 -1
- package/lib/commonjs/web-core/BiquadFilterNode.js.map +1 -1
- package/lib/commonjs/web-core/ConstantSourceNode.js +2 -1
- package/lib/commonjs/web-core/ConstantSourceNode.js.map +1 -1
- package/lib/commonjs/web-core/ConvolverNode.js +3 -5
- package/lib/commonjs/web-core/ConvolverNode.js.map +1 -1
- package/lib/commonjs/web-core/DelayNode.js +7 -1
- package/lib/commonjs/web-core/DelayNode.js.map +1 -1
- package/lib/commonjs/web-core/GainNode.js +2 -1
- package/lib/commonjs/web-core/GainNode.js.map +1 -1
- package/lib/commonjs/web-core/IIRFilterNode.js +12 -0
- package/lib/commonjs/web-core/IIRFilterNode.js.map +1 -1
- package/lib/commonjs/web-core/OfflineAudioContext.js +33 -32
- package/lib/commonjs/web-core/OfflineAudioContext.js.map +1 -1
- package/lib/commonjs/web-core/OscillatorNode.js +2 -1
- package/lib/commonjs/web-core/OscillatorNode.js.map +1 -1
- package/lib/commonjs/web-core/PeriodicWave.js +6 -1
- package/lib/commonjs/web-core/PeriodicWave.js.map +1 -1
- package/lib/commonjs/web-core/StereoPannerNode.js +2 -1
- package/lib/commonjs/web-core/StereoPannerNode.js.map +1 -1
- package/lib/module/api.js +2 -1
- package/lib/module/api.js.map +1 -1
- package/lib/module/api.web.js +2 -1
- package/lib/module/api.web.js.map +1 -1
- package/lib/module/core/AnalyserNode.js +11 -0
- package/lib/module/core/AnalyserNode.js.map +1 -1
- package/lib/module/core/AudioBuffer.js +19 -6
- package/lib/module/core/AudioBuffer.js.map +1 -1
- package/lib/module/core/AudioBufferQueueSourceNode.js +24 -0
- package/lib/module/core/AudioBufferQueueSourceNode.js.map +1 -1
- package/lib/module/core/AudioBufferSourceNode.js +9 -6
- package/lib/module/core/AudioBufferSourceNode.js.map +1 -1
- package/lib/module/core/AudioScheduledSourceNode.js.map +1 -1
- package/lib/module/core/BaseAudioContext.js +52 -65
- package/lib/module/core/BaseAudioContext.js.map +1 -1
- package/lib/module/core/BiquadFilterNode.js +7 -1
- package/lib/module/core/BiquadFilterNode.js.map +1 -1
- package/lib/module/core/ConstantSourceNode.js +7 -1
- package/lib/module/core/ConstantSourceNode.js.map +1 -1
- package/lib/module/core/ConvolverNode.js +9 -3
- package/lib/module/core/ConvolverNode.js.map +1 -1
- package/lib/module/core/DelayNode.js +7 -1
- package/lib/module/core/DelayNode.js.map +1 -1
- package/lib/module/core/GainNode.js +9 -3
- package/lib/module/core/GainNode.js.map +1 -1
- package/lib/module/core/IIRFilterNode.js +9 -0
- package/lib/module/core/IIRFilterNode.js.map +1 -1
- package/lib/module/core/OscillatorNode.js +10 -7
- package/lib/module/core/OscillatorNode.js.map +1 -1
- package/lib/module/core/PeriodicWave.js +29 -2
- package/lib/module/core/PeriodicWave.js.map +1 -1
- package/lib/module/core/RecorderAdapterNode.js +3 -0
- package/lib/module/core/RecorderAdapterNode.js.map +1 -1
- package/lib/module/core/StereoPannerNode.js +7 -1
- package/lib/module/core/StereoPannerNode.js.map +1 -1
- package/lib/module/core/StreamerNode.js +25 -1
- package/lib/module/core/StreamerNode.js.map +1 -1
- package/lib/module/core/WaveShaperNode.js +12 -0
- package/lib/module/core/WaveShaperNode.js.map +1 -1
- package/lib/module/core/WorkletNode.js +13 -1
- package/lib/module/core/WorkletNode.js.map +1 -1
- package/lib/module/core/WorkletProcessingNode.js +14 -1
- package/lib/module/core/WorkletProcessingNode.js.map +1 -1
- package/lib/module/core/WorkletSourceNode.js +13 -1
- package/lib/module/core/WorkletSourceNode.js.map +1 -1
- package/lib/module/defaults.js +74 -0
- package/lib/module/defaults.js.map +1 -0
- package/lib/module/options-validators.js +36 -0
- package/lib/module/options-validators.js.map +1 -0
- package/lib/module/specs/NativeAudioAPIModule.js.map +1 -1
- package/lib/module/specs/NativeAudioAPIModule.web.js.map +1 -1
- package/lib/module/system/AudioManager.js +7 -2
- package/lib/module/system/AudioManager.js.map +1 -1
- package/lib/module/types.js.map +1 -1
- package/lib/module/web-core/AnalyserNode.js +2 -1
- package/lib/module/web-core/AnalyserNode.js.map +1 -1
- package/lib/module/web-core/AudioBuffer.js +13 -6
- package/lib/module/web-core/AudioBuffer.js.map +1 -1
- package/lib/module/web-core/AudioBufferSourceNode.js +277 -90
- package/lib/module/web-core/AudioBufferSourceNode.js.map +1 -1
- package/lib/module/web-core/AudioContext.js +33 -32
- package/lib/module/web-core/AudioContext.js.map +1 -1
- package/lib/module/web-core/AudioNode.js +4 -0
- package/lib/module/web-core/AudioNode.js.map +1 -1
- package/lib/module/web-core/AudioScheduledSourceNode.js +4 -2
- package/lib/module/web-core/AudioScheduledSourceNode.js.map +1 -1
- package/lib/module/web-core/BiquadFilterNode.js +2 -1
- package/lib/module/web-core/BiquadFilterNode.js.map +1 -1
- package/lib/module/web-core/ConstantSourceNode.js +2 -1
- package/lib/module/web-core/ConstantSourceNode.js.map +1 -1
- package/lib/module/web-core/ConvolverNode.js +3 -5
- package/lib/module/web-core/ConvolverNode.js.map +1 -1
- package/lib/module/web-core/DelayNode.js +7 -1
- package/lib/module/web-core/DelayNode.js.map +1 -1
- package/lib/module/web-core/GainNode.js +2 -1
- package/lib/module/web-core/GainNode.js.map +1 -1
- package/lib/module/web-core/IIRFilterNode.js +12 -0
- package/lib/module/web-core/IIRFilterNode.js.map +1 -1
- package/lib/module/web-core/OfflineAudioContext.js +33 -32
- package/lib/module/web-core/OfflineAudioContext.js.map +1 -1
- package/lib/module/web-core/OscillatorNode.js +2 -1
- package/lib/module/web-core/OscillatorNode.js.map +1 -1
- package/lib/module/web-core/PeriodicWave.js +6 -1
- package/lib/module/web-core/PeriodicWave.js.map +1 -1
- package/lib/module/web-core/StereoPannerNode.js +2 -1
- package/lib/module/web-core/StereoPannerNode.js.map +1 -1
- package/lib/typescript/api.d.ts +2 -1
- package/lib/typescript/api.d.ts.map +1 -1
- package/lib/typescript/api.web.d.ts +2 -1
- package/lib/typescript/api.web.d.ts.map +1 -1
- package/lib/typescript/core/AnalyserNode.d.ts +3 -1
- package/lib/typescript/core/AnalyserNode.d.ts.map +1 -1
- package/lib/typescript/core/AudioBuffer.d.ts +3 -0
- package/lib/typescript/core/AudioBuffer.d.ts.map +1 -1
- package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts +8 -0
- package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts.map +1 -1
- package/lib/typescript/core/AudioBufferSourceNode.d.ts +3 -2
- package/lib/typescript/core/AudioBufferSourceNode.d.ts.map +1 -1
- package/lib/typescript/core/AudioScheduledSourceNode.d.ts +3 -3
- package/lib/typescript/core/AudioScheduledSourceNode.d.ts.map +1 -1
- package/lib/typescript/core/BaseAudioContext.d.ts +10 -6
- package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
- package/lib/typescript/core/BiquadFilterNode.d.ts +2 -3
- package/lib/typescript/core/BiquadFilterNode.d.ts.map +1 -1
- package/lib/typescript/core/ConstantSourceNode.d.ts +2 -2
- package/lib/typescript/core/ConstantSourceNode.d.ts.map +1 -1
- package/lib/typescript/core/ConvolverNode.d.ts +2 -2
- package/lib/typescript/core/ConvolverNode.d.ts.map +1 -1
- package/lib/typescript/core/DelayNode.d.ts +2 -2
- package/lib/typescript/core/DelayNode.d.ts.map +1 -1
- package/lib/typescript/core/GainNode.d.ts +2 -2
- package/lib/typescript/core/GainNode.d.ts.map +1 -1
- package/lib/typescript/core/IIRFilterNode.d.ts +3 -0
- package/lib/typescript/core/IIRFilterNode.d.ts.map +1 -1
- package/lib/typescript/core/OscillatorNode.d.ts +2 -6
- package/lib/typescript/core/OscillatorNode.d.ts.map +1 -1
- package/lib/typescript/core/PeriodicWave.d.ts +4 -1
- package/lib/typescript/core/PeriodicWave.d.ts.map +1 -1
- package/lib/typescript/core/RecorderAdapterNode.d.ts +2 -0
- package/lib/typescript/core/RecorderAdapterNode.d.ts.map +1 -1
- package/lib/typescript/core/StereoPannerNode.d.ts +2 -2
- package/lib/typescript/core/StereoPannerNode.d.ts.map +1 -1
- package/lib/typescript/core/StreamerNode.d.ts +5 -0
- package/lib/typescript/core/StreamerNode.d.ts.map +1 -1
- package/lib/typescript/core/WaveShaperNode.d.ts +3 -0
- package/lib/typescript/core/WaveShaperNode.d.ts.map +1 -1
- package/lib/typescript/core/WorkletNode.d.ts +3 -0
- package/lib/typescript/core/WorkletNode.d.ts.map +1 -1
- package/lib/typescript/core/WorkletProcessingNode.d.ts +3 -0
- package/lib/typescript/core/WorkletProcessingNode.d.ts.map +1 -1
- package/lib/typescript/core/WorkletSourceNode.d.ts +3 -0
- package/lib/typescript/core/WorkletSourceNode.d.ts.map +1 -1
- package/lib/typescript/defaults.d.ts +16 -0
- package/lib/typescript/defaults.d.ts.map +1 -0
- package/lib/typescript/events/types.d.ts +6 -4
- package/lib/typescript/events/types.d.ts.map +1 -1
- package/lib/typescript/interfaces.d.ts +17 -15
- package/lib/typescript/interfaces.d.ts.map +1 -1
- package/lib/typescript/options-validators.d.ts +6 -0
- package/lib/typescript/options-validators.d.ts.map +1 -0
- package/lib/typescript/specs/NativeAudioAPIModule.d.ts +2 -1
- package/lib/typescript/specs/NativeAudioAPIModule.d.ts.map +1 -1
- package/lib/typescript/specs/NativeAudioAPIModule.web.d.ts +2 -2
- package/lib/typescript/specs/NativeAudioAPIModule.web.d.ts.map +1 -1
- package/lib/typescript/system/AudioManager.d.ts +2 -2
- package/lib/typescript/system/AudioManager.d.ts.map +1 -1
- package/lib/typescript/system/types.d.ts +2 -1
- package/lib/typescript/system/types.d.ts.map +1 -1
- package/lib/typescript/types.d.ts +80 -11
- package/lib/typescript/types.d.ts.map +1 -1
- package/lib/typescript/web-core/AnalyserNode.d.ts +2 -2
- package/lib/typescript/web-core/AnalyserNode.d.ts.map +1 -1
- package/lib/typescript/web-core/AudioBuffer.d.ts +3 -0
- package/lib/typescript/web-core/AudioBuffer.d.ts.map +1 -1
- package/lib/typescript/web-core/AudioBufferSourceNode.d.ts +24 -15
- package/lib/typescript/web-core/AudioBufferSourceNode.d.ts.map +1 -1
- package/lib/typescript/web-core/AudioContext.d.ts +5 -6
- package/lib/typescript/web-core/AudioContext.d.ts.map +1 -1
- package/lib/typescript/web-core/AudioNode.d.ts +2 -2
- package/lib/typescript/web-core/AudioNode.d.ts.map +1 -1
- package/lib/typescript/web-core/AudioScheduledSourceNode.d.ts +2 -0
- package/lib/typescript/web-core/AudioScheduledSourceNode.d.ts.map +1 -1
- package/lib/typescript/web-core/BaseAudioContext.d.ts +3 -3
- package/lib/typescript/web-core/BaseAudioContext.d.ts.map +1 -1
- package/lib/typescript/web-core/BiquadFilterNode.d.ts +2 -2
- package/lib/typescript/web-core/BiquadFilterNode.d.ts.map +1 -1
- package/lib/typescript/web-core/ConstantSourceNode.d.ts +2 -1
- package/lib/typescript/web-core/ConstantSourceNode.d.ts.map +1 -1
- package/lib/typescript/web-core/ConvolverNode.d.ts +2 -1
- package/lib/typescript/web-core/ConvolverNode.d.ts.map +1 -1
- package/lib/typescript/web-core/DelayNode.d.ts +2 -1
- package/lib/typescript/web-core/DelayNode.d.ts.map +1 -1
- package/lib/typescript/web-core/GainNode.d.ts +2 -1
- package/lib/typescript/web-core/GainNode.d.ts.map +1 -1
- package/lib/typescript/web-core/IIRFilterNode.d.ts +3 -0
- package/lib/typescript/web-core/IIRFilterNode.d.ts.map +1 -1
- package/lib/typescript/web-core/OfflineAudioContext.d.ts +5 -6
- package/lib/typescript/web-core/OfflineAudioContext.d.ts.map +1 -1
- package/lib/typescript/web-core/OscillatorNode.d.ts +2 -2
- package/lib/typescript/web-core/OscillatorNode.d.ts.map +1 -1
- package/lib/typescript/web-core/PeriodicWave.d.ts +3 -1
- package/lib/typescript/web-core/PeriodicWave.d.ts.map +1 -1
- package/lib/typescript/web-core/StereoPannerNode.d.ts +2 -1
- package/lib/typescript/web-core/StereoPannerNode.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/api.ts +3 -1
- package/src/api.web.ts +1 -2
- package/src/core/AnalyserNode.ts +16 -1
- package/src/core/AudioBuffer.ts +26 -6
- package/src/core/AudioBufferQueueSourceNode.ts +46 -0
- package/src/core/AudioBufferSourceNode.ts +12 -10
- package/src/core/AudioScheduledSourceNode.ts +4 -4
- package/src/core/BaseAudioContext.ts +48 -151
- package/src/core/BiquadFilterNode.ts +9 -2
- package/src/core/ConstantSourceNode.ts +9 -1
- package/src/core/ConvolverNode.ts +11 -3
- package/src/core/DelayNode.ts +5 -2
- package/src/core/GainNode.ts +10 -3
- package/src/core/IIRFilterNode.ts +12 -0
- package/src/core/OscillatorNode.ts +13 -13
- package/src/core/PeriodicWave.ts +36 -2
- package/src/core/RecorderAdapterNode.ts +5 -0
- package/src/core/StereoPannerNode.ts +9 -1
- package/src/core/StreamerNode.ts +29 -1
- package/src/core/WaveShaperNode.ts +17 -0
- package/src/core/WorkletNode.ts +30 -1
- package/src/core/WorkletProcessingNode.ts +39 -1
- package/src/core/WorkletSourceNode.ts +36 -1
- package/src/defaults.ts +100 -0
- package/src/events/types.ts +6 -4
- package/src/interfaces.ts +40 -24
- package/src/options-validators.ts +66 -0
- package/src/specs/NativeAudioAPIModule.ts +6 -1
- package/src/specs/NativeAudioAPIModule.web.ts +6 -2
- package/src/system/AudioManager.ts +8 -2
- package/src/system/types.ts +7 -1
- package/src/types.ts +96 -12
- package/src/web-core/AnalyserNode.tsx +15 -6
- package/src/web-core/AudioBuffer.tsx +20 -6
- package/src/web-core/AudioBufferSourceNode.tsx +393 -148
- package/src/web-core/AudioContext.tsx +22 -72
- package/src/web-core/AudioNode.tsx +6 -2
- package/src/web-core/AudioScheduledSourceNode.tsx +6 -1
- package/src/web-core/BaseAudioContext.tsx +3 -7
- package/src/web-core/BiquadFilterNode.tsx +6 -2
- package/src/web-core/ConstantSourceNode.tsx +3 -1
- package/src/web-core/ConvolverNode.tsx +8 -8
- package/src/web-core/DelayNode.tsx +5 -1
- package/src/web-core/GainNode.tsx +3 -1
- package/src/web-core/IIRFilterNode.tsx +15 -0
- package/src/web-core/OfflineAudioContext.tsx +19 -67
- package/src/web-core/OscillatorNode.tsx +3 -2
- package/src/web-core/PeriodicWave.tsx +11 -1
- package/src/web-core/StereoPannerNode.tsx +9 -1
|
@@ -1,17 +1,27 @@
|
|
|
1
1
|
import { IOscillatorNode } from '../interfaces';
|
|
2
|
-
import { OscillatorType } from '../types';
|
|
3
2
|
import AudioScheduledSourceNode from './AudioScheduledSourceNode';
|
|
4
3
|
import AudioParam from './AudioParam';
|
|
5
4
|
import BaseAudioContext from './BaseAudioContext';
|
|
6
5
|
import PeriodicWave from './PeriodicWave';
|
|
7
6
|
import { InvalidStateError } from '../errors';
|
|
8
|
-
import {
|
|
7
|
+
import { OscillatorOptions } from '../defaults';
|
|
8
|
+
import { TOscillatorOptions } from '../types';
|
|
9
9
|
|
|
10
10
|
export default class OscillatorNode extends AudioScheduledSourceNode {
|
|
11
11
|
readonly frequency: AudioParam;
|
|
12
12
|
readonly detune: AudioParam;
|
|
13
13
|
|
|
14
|
-
constructor(context: BaseAudioContext,
|
|
14
|
+
constructor(context: BaseAudioContext, options?: TOscillatorOptions) {
|
|
15
|
+
const finalOptions: TOscillatorOptions = {
|
|
16
|
+
...OscillatorOptions,
|
|
17
|
+
...options,
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
if (finalOptions.periodicWave) {
|
|
21
|
+
finalOptions.type = 'custom';
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const node = context.context.createOscillator(finalOptions);
|
|
15
25
|
super(context, node);
|
|
16
26
|
this.frequency = new AudioParam(node.frequency, context);
|
|
17
27
|
this.detune = new AudioParam(node.detune, context);
|
|
@@ -35,14 +45,4 @@ export default class OscillatorNode extends AudioScheduledSourceNode {
|
|
|
35
45
|
public setPeriodicWave(wave: PeriodicWave): void {
|
|
36
46
|
(this.node as IOscillatorNode).setPeriodicWave(wave.periodicWave);
|
|
37
47
|
}
|
|
38
|
-
|
|
39
|
-
public override get onEnded(): ((event: EventEmptyType) => void) | undefined {
|
|
40
|
-
return super.onEnded as ((event: EventEmptyType) => void) | undefined;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
public override set onEnded(
|
|
44
|
-
callback: ((event: EventEmptyType) => void) | null
|
|
45
|
-
) {
|
|
46
|
-
super.onEnded = callback;
|
|
47
|
-
}
|
|
48
48
|
}
|
package/src/core/PeriodicWave.ts
CHANGED
|
@@ -1,10 +1,44 @@
|
|
|
1
1
|
import { IPeriodicWave } from '../interfaces';
|
|
2
|
+
import BaseAudioContext from './BaseAudioContext';
|
|
3
|
+
import { TPeriodicWaveOptions } from '../types';
|
|
4
|
+
import { PeriodicWaveConstraints } from '../defaults';
|
|
5
|
+
import { PeriodicWaveOptionsValidator } from '../options-validators';
|
|
6
|
+
|
|
7
|
+
export function generateRealAndImag(
|
|
8
|
+
options?: TPeriodicWaveOptions
|
|
9
|
+
): TPeriodicWaveOptions {
|
|
10
|
+
let real: Float32Array | undefined;
|
|
11
|
+
let imag: Float32Array | undefined;
|
|
12
|
+
if (!options || (!options.real && !options.imag)) {
|
|
13
|
+
real = new Float32Array(2);
|
|
14
|
+
imag = new Float32Array(2);
|
|
15
|
+
imag[1] = 1;
|
|
16
|
+
} else {
|
|
17
|
+
real = options.real;
|
|
18
|
+
imag = options.imag;
|
|
19
|
+
PeriodicWaveOptionsValidator.validate(options);
|
|
20
|
+
if (real && !imag) {
|
|
21
|
+
imag = new Float32Array(real.length);
|
|
22
|
+
} else if (!real && imag) {
|
|
23
|
+
real = new Float32Array(imag.length);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
const norm: boolean = options?.disableNormalization
|
|
27
|
+
? options.disableNormalization
|
|
28
|
+
: PeriodicWaveConstraints.disableNormalization!;
|
|
29
|
+
return { real, imag, disableNormalization: norm };
|
|
30
|
+
}
|
|
2
31
|
|
|
3
32
|
export default class PeriodicWave {
|
|
4
33
|
/** @internal */
|
|
5
34
|
public readonly periodicWave: IPeriodicWave;
|
|
6
35
|
|
|
7
|
-
constructor(
|
|
8
|
-
|
|
36
|
+
constructor(context: BaseAudioContext, options?: TPeriodicWaveOptions) {
|
|
37
|
+
const finalOptions = generateRealAndImag(options);
|
|
38
|
+
this.periodicWave = context.context.createPeriodicWave(
|
|
39
|
+
finalOptions.real!,
|
|
40
|
+
finalOptions.imag!,
|
|
41
|
+
finalOptions.disableNormalization!
|
|
42
|
+
);
|
|
9
43
|
}
|
|
10
44
|
}
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import { IRecorderAdapterNode } from '../interfaces';
|
|
2
2
|
import AudioNode from './AudioNode';
|
|
3
|
+
import BaseAudioContext from './BaseAudioContext';
|
|
3
4
|
|
|
4
5
|
export default class RecorderAdapterNode extends AudioNode {
|
|
5
6
|
/** @internal */
|
|
6
7
|
public wasConnected: boolean = false;
|
|
7
8
|
|
|
9
|
+
constructor(context: BaseAudioContext) {
|
|
10
|
+
super(context, context.context.createRecorderAdapter());
|
|
11
|
+
}
|
|
12
|
+
|
|
8
13
|
/** @internal */
|
|
9
14
|
public getNode(): IRecorderAdapterNode {
|
|
10
15
|
return this.node as IRecorderAdapterNode;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { IStereoPannerNode } from '../interfaces';
|
|
2
|
+
import { SteroPannerOptions } from '../defaults';
|
|
3
|
+
import { TSteroPannerOptions } from '../types';
|
|
2
4
|
import AudioNode from './AudioNode';
|
|
3
5
|
import AudioParam from './AudioParam';
|
|
4
6
|
import BaseAudioContext from './BaseAudioContext';
|
|
@@ -6,7 +8,13 @@ import BaseAudioContext from './BaseAudioContext';
|
|
|
6
8
|
export default class StereoPannerNode extends AudioNode {
|
|
7
9
|
readonly pan: AudioParam;
|
|
8
10
|
|
|
9
|
-
constructor(context: BaseAudioContext,
|
|
11
|
+
constructor(context: BaseAudioContext, options?: TSteroPannerOptions) {
|
|
12
|
+
const finalOptions: TSteroPannerOptions = {
|
|
13
|
+
...SteroPannerOptions,
|
|
14
|
+
...options,
|
|
15
|
+
};
|
|
16
|
+
const pan: IStereoPannerNode =
|
|
17
|
+
context.context.createStereoPanner(finalOptions);
|
|
10
18
|
super(context, pan);
|
|
11
19
|
this.pan = new AudioParam(pan.pan, context);
|
|
12
20
|
}
|
package/src/core/StreamerNode.ts
CHANGED
|
@@ -1,8 +1,36 @@
|
|
|
1
1
|
import { IStreamerNode } from '../interfaces';
|
|
2
2
|
import AudioScheduledSourceNode from './AudioScheduledSourceNode';
|
|
3
|
+
import { TStreamerOptions } from '../types';
|
|
4
|
+
import { InvalidStateError, NotSupportedError } from '../errors';
|
|
5
|
+
import BaseAudioContext from './BaseAudioContext';
|
|
3
6
|
|
|
4
7
|
export default class StreamerNode extends AudioScheduledSourceNode {
|
|
8
|
+
private hasBeenSetup: boolean = false;
|
|
9
|
+
constructor(context: BaseAudioContext, options?: TStreamerOptions) {
|
|
10
|
+
const node = context.context.createStreamer(options);
|
|
11
|
+
if (!node) {
|
|
12
|
+
throw new NotSupportedError('StreamerNode requires FFmpeg build');
|
|
13
|
+
}
|
|
14
|
+
super(context, node);
|
|
15
|
+
if (options?.streamPath) {
|
|
16
|
+
if (this.initialize(options.streamPath)) {
|
|
17
|
+
this.hasBeenSetup = true;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
5
22
|
public initialize(streamPath: string): boolean {
|
|
6
|
-
|
|
23
|
+
if (this.hasBeenSetup) {
|
|
24
|
+
throw new InvalidStateError('Node is already setup');
|
|
25
|
+
}
|
|
26
|
+
const res = (this.node as IStreamerNode).initialize(streamPath);
|
|
27
|
+
if (res) {
|
|
28
|
+
this.hasBeenSetup = true;
|
|
29
|
+
}
|
|
30
|
+
return res;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
public get streamPath(): string {
|
|
34
|
+
return (this.node as IStreamerNode).streamPath;
|
|
7
35
|
}
|
|
8
36
|
}
|
|
@@ -1,10 +1,27 @@
|
|
|
1
1
|
import AudioNode from './AudioNode';
|
|
2
|
+
import BaseAudioContext from './BaseAudioContext';
|
|
2
3
|
import { InvalidStateError } from '../errors';
|
|
3
4
|
import { IWaveShaperNode } from '../interfaces';
|
|
5
|
+
import { WaveShaperOptions } from '../defaults';
|
|
6
|
+
import { TWaveShaperOptions } from '../types';
|
|
4
7
|
|
|
5
8
|
export default class WaveShaperNode extends AudioNode {
|
|
6
9
|
private isCurveSet: boolean = false;
|
|
7
10
|
|
|
11
|
+
constructor(context: BaseAudioContext, options?: TWaveShaperOptions) {
|
|
12
|
+
const finalOptions: TWaveShaperOptions = {
|
|
13
|
+
...WaveShaperOptions,
|
|
14
|
+
...options,
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
const node = context.context.createWaveShaper(finalOptions);
|
|
18
|
+
super(context, node);
|
|
19
|
+
|
|
20
|
+
if (finalOptions.curve) {
|
|
21
|
+
this.isCurveSet = true;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
8
25
|
get curve(): Float32Array | null {
|
|
9
26
|
if (!this.isCurveSet) {
|
|
10
27
|
return null;
|
package/src/core/WorkletNode.ts
CHANGED
|
@@ -1,3 +1,32 @@
|
|
|
1
1
|
import AudioNode from './AudioNode';
|
|
2
|
+
import BaseAudioContext from './BaseAudioContext';
|
|
3
|
+
import { AudioWorkletRuntime } from '../types';
|
|
4
|
+
import AudioAPIModule from '../AudioAPIModule';
|
|
2
5
|
|
|
3
|
-
export default class WorkletNode extends AudioNode {
|
|
6
|
+
export default class WorkletNode extends AudioNode {
|
|
7
|
+
constructor(
|
|
8
|
+
context: BaseAudioContext,
|
|
9
|
+
runtime: AudioWorkletRuntime,
|
|
10
|
+
callback: (audioData: Array<Float32Array>, channelCount: number) => void,
|
|
11
|
+
bufferLength: number,
|
|
12
|
+
inputChannelCount: number
|
|
13
|
+
) {
|
|
14
|
+
const shareableWorklet =
|
|
15
|
+
AudioAPIModule.workletsModule!.makeShareableCloneRecursive(
|
|
16
|
+
(audioBuffers: Array<ArrayBuffer>, channelCount: number) => {
|
|
17
|
+
'worklet';
|
|
18
|
+
const floatAudioData: Array<Float32Array> = audioBuffers.map(
|
|
19
|
+
(buffer) => new Float32Array(buffer)
|
|
20
|
+
);
|
|
21
|
+
callback(floatAudioData, channelCount);
|
|
22
|
+
}
|
|
23
|
+
);
|
|
24
|
+
const node = context.context.createWorkletNode(
|
|
25
|
+
shareableWorklet,
|
|
26
|
+
runtime === 'UIRuntime',
|
|
27
|
+
bufferLength,
|
|
28
|
+
inputChannelCount
|
|
29
|
+
);
|
|
30
|
+
super(context, node);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -1,3 +1,41 @@
|
|
|
1
1
|
import AudioNode from './AudioNode';
|
|
2
|
+
import BaseAudioContext from './BaseAudioContext';
|
|
3
|
+
import { AudioWorkletRuntime } from '../types';
|
|
4
|
+
import AudioAPIModule from '../AudioAPIModule';
|
|
2
5
|
|
|
3
|
-
export default class WorkletProcessingNode extends AudioNode {
|
|
6
|
+
export default class WorkletProcessingNode extends AudioNode {
|
|
7
|
+
constructor(
|
|
8
|
+
context: BaseAudioContext,
|
|
9
|
+
runtime: AudioWorkletRuntime,
|
|
10
|
+
callback: (
|
|
11
|
+
inputData: Array<Float32Array>,
|
|
12
|
+
outputData: Array<Float32Array>,
|
|
13
|
+
framesToProcess: number,
|
|
14
|
+
currentTime: number
|
|
15
|
+
) => void
|
|
16
|
+
) {
|
|
17
|
+
const shareableWorklet =
|
|
18
|
+
AudioAPIModule.workletsModule!.makeShareableCloneRecursive(
|
|
19
|
+
(
|
|
20
|
+
inputBuffers: Array<ArrayBuffer>,
|
|
21
|
+
outputBuffers: Array<ArrayBuffer>,
|
|
22
|
+
framesToProcess: number,
|
|
23
|
+
currentTime: number
|
|
24
|
+
) => {
|
|
25
|
+
'worklet';
|
|
26
|
+
const inputData: Array<Float32Array> = inputBuffers.map(
|
|
27
|
+
(buffer) => new Float32Array(buffer, 0, framesToProcess)
|
|
28
|
+
);
|
|
29
|
+
const outputData: Array<Float32Array> = outputBuffers.map(
|
|
30
|
+
(buffer) => new Float32Array(buffer, 0, framesToProcess)
|
|
31
|
+
);
|
|
32
|
+
callback(inputData, outputData, framesToProcess, currentTime);
|
|
33
|
+
}
|
|
34
|
+
);
|
|
35
|
+
const node = context.context.createWorkletProcessingNode(
|
|
36
|
+
shareableWorklet,
|
|
37
|
+
runtime === 'UIRuntime'
|
|
38
|
+
);
|
|
39
|
+
super(context, node);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -1,3 +1,38 @@
|
|
|
1
1
|
import AudioScheduledSourceNode from './AudioScheduledSourceNode';
|
|
2
|
+
import BaseAudioContext from './BaseAudioContext';
|
|
3
|
+
import { AudioWorkletRuntime } from '../types';
|
|
4
|
+
import AudioAPIModule from '../AudioAPIModule';
|
|
2
5
|
|
|
3
|
-
export default class WorkletSourceNode extends AudioScheduledSourceNode {
|
|
6
|
+
export default class WorkletSourceNode extends AudioScheduledSourceNode {
|
|
7
|
+
constructor(
|
|
8
|
+
context: BaseAudioContext,
|
|
9
|
+
runtime: AudioWorkletRuntime,
|
|
10
|
+
callback: (
|
|
11
|
+
audioData: Array<Float32Array>,
|
|
12
|
+
framesToProcess: number,
|
|
13
|
+
currentTime: number,
|
|
14
|
+
startOffset: number
|
|
15
|
+
) => void
|
|
16
|
+
) {
|
|
17
|
+
const shareableWorklet =
|
|
18
|
+
AudioAPIModule.workletsModule!.makeShareableCloneRecursive(
|
|
19
|
+
(
|
|
20
|
+
audioBuffers: Array<ArrayBuffer>,
|
|
21
|
+
framesToProcess: number,
|
|
22
|
+
currentTime: number,
|
|
23
|
+
startOffset: number
|
|
24
|
+
) => {
|
|
25
|
+
'worklet';
|
|
26
|
+
const floatAudioData: Array<Float32Array> = audioBuffers.map(
|
|
27
|
+
(buffer) => new Float32Array(buffer)
|
|
28
|
+
);
|
|
29
|
+
callback(floatAudioData, framesToProcess, currentTime, startOffset);
|
|
30
|
+
}
|
|
31
|
+
);
|
|
32
|
+
const node = context.context.createWorkletSourceNode(
|
|
33
|
+
shareableWorklet,
|
|
34
|
+
runtime === 'UIRuntime'
|
|
35
|
+
);
|
|
36
|
+
super(context, node);
|
|
37
|
+
}
|
|
38
|
+
}
|
package/src/defaults.ts
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import {
|
|
2
|
+
TAudioNodeOptions,
|
|
3
|
+
TGainOptions,
|
|
4
|
+
TSteroPannerOptions,
|
|
5
|
+
TConvolverOptions,
|
|
6
|
+
TConstantSourceOptions,
|
|
7
|
+
TPeriodicWaveConstraints,
|
|
8
|
+
TAnalyserOptions,
|
|
9
|
+
TBiquadFilterOptions,
|
|
10
|
+
TOscillatorOptions,
|
|
11
|
+
TBaseAudioBufferSourceOptions,
|
|
12
|
+
TAudioBufferSourceOptions,
|
|
13
|
+
TAudioBufferOptions,
|
|
14
|
+
TDelayOptions,
|
|
15
|
+
TWaveShaperOptions,
|
|
16
|
+
} from './types';
|
|
17
|
+
|
|
18
|
+
export const AudioNodeOptions: TAudioNodeOptions = {
|
|
19
|
+
channelCount: 2,
|
|
20
|
+
channelCountMode: 'max',
|
|
21
|
+
channelInterpretation: 'speakers',
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export const GainOptions: TGainOptions = {
|
|
25
|
+
...AudioNodeOptions,
|
|
26
|
+
gain: 1,
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export const SteroPannerOptions: TSteroPannerOptions = {
|
|
30
|
+
...AudioNodeOptions,
|
|
31
|
+
channelCountMode: 'clamped-max',
|
|
32
|
+
pan: 0,
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export const AnalyserOptions: TAnalyserOptions = {
|
|
36
|
+
...AudioNodeOptions,
|
|
37
|
+
fftSize: 2048,
|
|
38
|
+
minDecibels: -100,
|
|
39
|
+
maxDecibels: -30,
|
|
40
|
+
smoothingTimeConstant: 0.8,
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export const BiquadFilterOptions: TBiquadFilterOptions = {
|
|
44
|
+
...AudioNodeOptions,
|
|
45
|
+
Q: 1,
|
|
46
|
+
detune: 0,
|
|
47
|
+
frequency: 350,
|
|
48
|
+
gain: 0,
|
|
49
|
+
type: 'lowpass',
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
export const ConvolverOptions: TConvolverOptions = {
|
|
53
|
+
...AudioNodeOptions,
|
|
54
|
+
disableNormalization: false,
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
export const ConstantSourceOptions: TConstantSourceOptions = {
|
|
58
|
+
offset: 1,
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
export const PeriodicWaveConstraints: TPeriodicWaveConstraints = {
|
|
62
|
+
disableNormalization: false,
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
export const OscillatorOptions: TOscillatorOptions = {
|
|
66
|
+
...AudioNodeOptions,
|
|
67
|
+
type: 'sine',
|
|
68
|
+
frequency: 440,
|
|
69
|
+
detune: 0,
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export const BaseAudioBufferSourceOptions: TBaseAudioBufferSourceOptions = {
|
|
73
|
+
playbackRate: 1,
|
|
74
|
+
detune: 0,
|
|
75
|
+
pitchCorrection: false,
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
export const AudioBufferSourceOptions: TAudioBufferSourceOptions = {
|
|
79
|
+
...BaseAudioBufferSourceOptions,
|
|
80
|
+
loop: false,
|
|
81
|
+
loopStart: 0,
|
|
82
|
+
loopEnd: 0,
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
export const AudioBufferOptions: TAudioBufferOptions = {
|
|
86
|
+
numberOfChannels: 1,
|
|
87
|
+
length: 0, // always overwritten by provided value, only placeholder
|
|
88
|
+
sampleRate: 44100, // always overwritten by provided value, only placeholder
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
export const DelayOptions: TDelayOptions = {
|
|
92
|
+
...AudioNodeOptions,
|
|
93
|
+
maxDelayTime: 1.0,
|
|
94
|
+
delayTime: 0.0,
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export const WaveShaperOptions: TWaveShaperOptions = {
|
|
98
|
+
...AudioNodeOptions,
|
|
99
|
+
oversample: 'none',
|
|
100
|
+
};
|
package/src/events/types.ts
CHANGED
|
@@ -46,12 +46,13 @@ interface RemoteCommandEvents {
|
|
|
46
46
|
type SystemEvents = RemoteCommandEvents & {
|
|
47
47
|
volumeChange: EventTypeWithValue;
|
|
48
48
|
interruption: OnInterruptionEventType;
|
|
49
|
+
duck: EventEmptyType;
|
|
49
50
|
routeChange: OnRouteChangeEventType;
|
|
50
51
|
};
|
|
51
52
|
|
|
52
|
-
export interface
|
|
53
|
-
bufferId: string
|
|
54
|
-
|
|
53
|
+
export interface OnBufferEndEventType {
|
|
54
|
+
bufferId: string;
|
|
55
|
+
isLastBufferInQueue: boolean;
|
|
55
56
|
}
|
|
56
57
|
|
|
57
58
|
/**
|
|
@@ -79,10 +80,11 @@ export interface OnAudioReadyEventType {
|
|
|
79
80
|
}
|
|
80
81
|
|
|
81
82
|
interface AudioAPIEvents {
|
|
82
|
-
ended:
|
|
83
|
+
ended: EventEmptyType;
|
|
83
84
|
loopEnded: EventEmptyType;
|
|
84
85
|
audioReady: OnAudioReadyEventType;
|
|
85
86
|
positionChanged: EventTypeWithValue;
|
|
87
|
+
bufferEnded: OnBufferEndEventType;
|
|
86
88
|
audioError: EventEmptyType; // to change
|
|
87
89
|
systemStateChanged: EventEmptyType; // to change
|
|
88
90
|
recorderError: OnRecorderErrorEventType;
|
package/src/interfaces.ts
CHANGED
|
@@ -11,6 +11,20 @@ import type {
|
|
|
11
11
|
OverSampleType,
|
|
12
12
|
Result,
|
|
13
13
|
WindowType,
|
|
14
|
+
TGainOptions,
|
|
15
|
+
TSteroPannerOptions,
|
|
16
|
+
TConvolverOptions,
|
|
17
|
+
TConstantSourceOptions,
|
|
18
|
+
TAnalyserOptions,
|
|
19
|
+
TBiquadFilterOptions,
|
|
20
|
+
TOscillatorOptions,
|
|
21
|
+
TBaseAudioBufferSourceOptions,
|
|
22
|
+
TAudioBufferSourceOptions,
|
|
23
|
+
TStreamerOptions,
|
|
24
|
+
TAudioBufferOptions,
|
|
25
|
+
TDelayOptions,
|
|
26
|
+
TIIRFilterOptions,
|
|
27
|
+
TWaveShaperOptions,
|
|
14
28
|
} from './types';
|
|
15
29
|
|
|
16
30
|
// IMPORTANT: use only IClass, because it is a part of contract between cpp host object and js layer
|
|
@@ -62,37 +76,35 @@ export interface IBaseAudioContext {
|
|
|
62
76
|
shareableWorklet: ShareableWorkletCallback,
|
|
63
77
|
shouldUseUiRuntime: boolean
|
|
64
78
|
): IWorkletProcessingNode;
|
|
65
|
-
createOscillator(): IOscillatorNode;
|
|
66
|
-
createConstantSource(
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
79
|
+
createOscillator(oscillatorOptions: TOscillatorOptions): IOscillatorNode;
|
|
80
|
+
createConstantSource(
|
|
81
|
+
constantSourceOptions: TConstantSourceOptions
|
|
82
|
+
): IConstantSourceNode;
|
|
83
|
+
createGain(gainOptions: TGainOptions): IGainNode;
|
|
84
|
+
createStereoPanner(
|
|
85
|
+
stereoPannerOptions: TSteroPannerOptions
|
|
86
|
+
): IStereoPannerNode;
|
|
87
|
+
createBiquadFilter: (
|
|
88
|
+
biquadFilterOptions: TBiquadFilterOptions
|
|
89
|
+
) => IBiquadFilterNode;
|
|
90
|
+
createBufferSource: (
|
|
91
|
+
audioBufferSourceOptions: TAudioBufferSourceOptions
|
|
92
|
+
) => IAudioBufferSourceNode;
|
|
93
|
+
createDelay(delayOptions: TDelayOptions): IDelayNode;
|
|
94
|
+
createIIRFilter: (IIRFilterOptions: TIIRFilterOptions) => IIIRFilterNode;
|
|
76
95
|
createBufferQueueSource: (
|
|
77
|
-
|
|
96
|
+
audioBufferQueueSourceOptions: TBaseAudioBufferSourceOptions
|
|
78
97
|
) => IAudioBufferQueueSourceNode;
|
|
79
|
-
createBuffer: (
|
|
80
|
-
channels: number,
|
|
81
|
-
length: number,
|
|
82
|
-
sampleRate: number
|
|
83
|
-
) => IAudioBuffer;
|
|
98
|
+
createBuffer: (audioBufferOptions: TAudioBufferOptions) => IAudioBuffer;
|
|
84
99
|
createPeriodicWave: (
|
|
85
100
|
real: Float32Array,
|
|
86
101
|
imag: Float32Array,
|
|
87
102
|
disableNormalization: boolean
|
|
88
103
|
) => IPeriodicWave;
|
|
89
|
-
createAnalyser: () => IAnalyserNode;
|
|
90
|
-
createConvolver: (
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
) => IConvolverNode;
|
|
94
|
-
createStreamer: () => IStreamerNode | null; // null when FFmpeg is not enabled
|
|
95
|
-
createWaveShaper: () => IWaveShaperNode;
|
|
104
|
+
createAnalyser: (analyserOptions: TAnalyserOptions) => IAnalyserNode;
|
|
105
|
+
createConvolver: (convolverOptions: TConvolverOptions) => IConvolverNode;
|
|
106
|
+
createStreamer: (streamerOptions?: TStreamerOptions) => IStreamerNode | null; // null when FFmpeg is not enabled
|
|
107
|
+
createWaveShaper: (waveShaperOptions?: TWaveShaperOptions) => IWaveShaperNode;
|
|
96
108
|
}
|
|
97
109
|
|
|
98
110
|
export interface IAudioContext extends IBaseAudioContext {
|
|
@@ -186,6 +198,7 @@ export interface IOscillatorNode extends IAudioScheduledSourceNode {
|
|
|
186
198
|
}
|
|
187
199
|
|
|
188
200
|
export interface IStreamerNode extends IAudioNode {
|
|
201
|
+
readonly streamPath: string;
|
|
189
202
|
initialize(streamPath: string): boolean;
|
|
190
203
|
}
|
|
191
204
|
|
|
@@ -216,6 +229,9 @@ export interface IAudioBufferQueueSourceNode
|
|
|
216
229
|
enqueueBuffer: (audioBuffer: IAudioBuffer) => string;
|
|
217
230
|
start: (when?: number, offset?: number) => void;
|
|
218
231
|
pause: () => void;
|
|
232
|
+
|
|
233
|
+
// passing subscriptionId(uint_64 in cpp, string in js) to the cpp
|
|
234
|
+
onBufferEnded: string;
|
|
219
235
|
}
|
|
220
236
|
|
|
221
237
|
export interface IConvolverNode extends IAudioNode {
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { IndexSizeError, NotSupportedError } from './errors';
|
|
2
|
+
import {
|
|
3
|
+
OptionsValidator,
|
|
4
|
+
TAnalyserOptions,
|
|
5
|
+
TConvolverOptions,
|
|
6
|
+
TOscillatorOptions,
|
|
7
|
+
TPeriodicWaveOptions,
|
|
8
|
+
} from './types';
|
|
9
|
+
|
|
10
|
+
export const AnalyserOptionsValidator: OptionsValidator<TAnalyserOptions> = {
|
|
11
|
+
validate(options: TAnalyserOptions): void {
|
|
12
|
+
const allowedFFTSize: number[] = [
|
|
13
|
+
32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768,
|
|
14
|
+
];
|
|
15
|
+
if (options.fftSize && !allowedFFTSize.includes(options.fftSize)) {
|
|
16
|
+
throw new IndexSizeError(
|
|
17
|
+
`fftSize must be one of the following values: ${allowedFFTSize.join(
|
|
18
|
+
', '
|
|
19
|
+
)}`
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export const ConvolverOptionsValidator: OptionsValidator<TConvolverOptions> = {
|
|
26
|
+
validate(options: TConvolverOptions): void {
|
|
27
|
+
if (options.buffer) {
|
|
28
|
+
const numberOfChannels = options.buffer.numberOfChannels;
|
|
29
|
+
if (
|
|
30
|
+
numberOfChannels !== 1 &&
|
|
31
|
+
numberOfChannels !== 2 &&
|
|
32
|
+
numberOfChannels !== 4
|
|
33
|
+
) {
|
|
34
|
+
throw new NotSupportedError(
|
|
35
|
+
`The number of channels provided (${numberOfChannels}) in impulse response for ConvolverNode buffer must be 1 or 2 or 4.`
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
export const OscillatorOptionsValidator: OptionsValidator<TOscillatorOptions> =
|
|
43
|
+
{
|
|
44
|
+
validate(options: TOscillatorOptions): void {
|
|
45
|
+
if (options.type === 'custom' && !options.periodicWave) {
|
|
46
|
+
throw new NotSupportedError(
|
|
47
|
+
"'type' cannot be set to 'custom' without providing a 'periodicWave'."
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
export const PeriodicWaveOptionsValidator: OptionsValidator<TPeriodicWaveOptions> =
|
|
54
|
+
{
|
|
55
|
+
validate(options: TPeriodicWaveOptions): void {
|
|
56
|
+
if (
|
|
57
|
+
options.real &&
|
|
58
|
+
options.imag &&
|
|
59
|
+
options.real.length !== options.imag.length
|
|
60
|
+
) {
|
|
61
|
+
throw new NotSupportedError(
|
|
62
|
+
"'real' and 'imag' arrays must have the same length"
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
};
|
|
@@ -6,6 +6,11 @@ import { AudioDevicesInfo, PermissionStatus } from '../system/types';
|
|
|
6
6
|
type OptionsMap = { [key: string]: string | boolean | number | undefined };
|
|
7
7
|
type NotificationOpResponse = { success: boolean; error?: string };
|
|
8
8
|
type NotificationType = 'playback' | 'recording' | 'simple';
|
|
9
|
+
type AudioFocusType =
|
|
10
|
+
| 'gain'
|
|
11
|
+
| 'gainTransient'
|
|
12
|
+
| 'gainTransientExclusive'
|
|
13
|
+
| 'gainTransientMayDuck';
|
|
9
14
|
|
|
10
15
|
interface Spec extends TurboModule {
|
|
11
16
|
install(): boolean;
|
|
@@ -22,7 +27,7 @@ interface Spec extends TurboModule {
|
|
|
22
27
|
disableSessionManagement(): void;
|
|
23
28
|
|
|
24
29
|
// Remote commands, system events and interruptions
|
|
25
|
-
observeAudioInterruptions(enabled: boolean): void;
|
|
30
|
+
observeAudioInterruptions(focusType: AudioFocusType, enabled: boolean): void;
|
|
26
31
|
activelyReclaimSession(enabled: boolean): void;
|
|
27
32
|
observeVolumeChanges(enabled: boolean): void;
|
|
28
33
|
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { TurboModule } from 'react-native';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
AudioDevicesInfo,
|
|
4
|
+
AudioFocusType,
|
|
5
|
+
PermissionStatus,
|
|
6
|
+
} from '../system/types';
|
|
3
7
|
|
|
4
8
|
// copy of spec from NativeAudioAPIModule.ts
|
|
5
9
|
type OptionsMap = {
|
|
@@ -23,7 +27,7 @@ interface Spec extends TurboModule {
|
|
|
23
27
|
disableSessionManagement(): void;
|
|
24
28
|
|
|
25
29
|
// Remote commands, system events and interruptions
|
|
26
|
-
observeAudioInterruptions(enabled: boolean): void;
|
|
30
|
+
observeAudioInterruptions(focusType: AudioFocusType, enabled: boolean): void;
|
|
27
31
|
activelyReclaimSession(enabled: boolean): void;
|
|
28
32
|
observeVolumeChanges(enabled: boolean): void;
|
|
29
33
|
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
IAudioManager,
|
|
8
8
|
PermissionStatus,
|
|
9
9
|
SessionOptions,
|
|
10
|
+
AudioFocusType,
|
|
10
11
|
} from './types';
|
|
11
12
|
|
|
12
13
|
class AudioManager implements IAudioManager {
|
|
@@ -43,8 +44,13 @@ class AudioManager implements IAudioManager {
|
|
|
43
44
|
NativeAudioAPIModule.disableSessionManagement();
|
|
44
45
|
}
|
|
45
46
|
|
|
46
|
-
observeAudioInterruptions(
|
|
47
|
-
|
|
47
|
+
observeAudioInterruptions(param: AudioFocusType | boolean | null) {
|
|
48
|
+
if (typeof param === 'string') {
|
|
49
|
+
NativeAudioAPIModule.observeAudioInterruptions(param, true);
|
|
50
|
+
} else {
|
|
51
|
+
// audiofocusgain as default value if not provided
|
|
52
|
+
NativeAudioAPIModule.observeAudioInterruptions('gain', param === true);
|
|
53
|
+
}
|
|
48
54
|
}
|
|
49
55
|
|
|
50
56
|
/**
|