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
package/src/api.ts
CHANGED
|
@@ -29,7 +29,7 @@ export { default as WorkletProcessingNode } from './core/WorkletProcessingNode';
|
|
|
29
29
|
export { default as WorkletSourceNode } from './core/WorkletSourceNode';
|
|
30
30
|
|
|
31
31
|
export { default as useSystemVolume } from './hooks/useSystemVolume';
|
|
32
|
-
export { default as
|
|
32
|
+
export { default as PeriodicWave } from './core/PeriodicWave';
|
|
33
33
|
|
|
34
34
|
export * from './errors';
|
|
35
35
|
export * from './system/types';
|
|
@@ -40,6 +40,8 @@ export { default as FilePreset } from './utils/filePresets';
|
|
|
40
40
|
export { PlaybackNotificationManager } from './system/notification';
|
|
41
41
|
export { RecordingNotificationManager } from './system/notification';
|
|
42
42
|
|
|
43
|
+
export { default as AudioManager } from './system';
|
|
44
|
+
|
|
43
45
|
export {
|
|
44
46
|
NotificationManager,
|
|
45
47
|
PlaybackControlName,
|
package/src/api.web.ts
CHANGED
|
@@ -15,18 +15,17 @@ export { default as OscillatorNode } from './web-core/OscillatorNode';
|
|
|
15
15
|
export { default as StereoPannerNode } from './web-core/StereoPannerNode';
|
|
16
16
|
export { default as ConstantSourceNode } from './web-core/ConstantSourceNode';
|
|
17
17
|
export { default as ConvolverNode } from './web-core/ConvolverNode';
|
|
18
|
+
export { default as PeriodicWave } from './web-core/PeriodicWave';
|
|
18
19
|
export { default as WaveShaperNode } from './web-core/WaveShaperNode';
|
|
19
20
|
|
|
20
21
|
export * from './web-core/custom';
|
|
21
22
|
|
|
22
23
|
export {
|
|
23
24
|
OscillatorType,
|
|
24
|
-
BiquadFilterType,
|
|
25
25
|
ChannelCountMode,
|
|
26
26
|
ChannelInterpretation,
|
|
27
27
|
ContextState,
|
|
28
28
|
WindowType,
|
|
29
|
-
PeriodicWaveConstraints,
|
|
30
29
|
} from './types';
|
|
31
30
|
|
|
32
31
|
export {
|
package/src/core/AnalyserNode.ts
CHANGED
|
@@ -1,13 +1,28 @@
|
|
|
1
|
+
import BaseAudioContext from './BaseAudioContext';
|
|
2
|
+
import { AnalyserOptions } from '../defaults';
|
|
1
3
|
import { IndexSizeError } from '../errors';
|
|
2
4
|
import { IAnalyserNode } from '../interfaces';
|
|
3
|
-
import { WindowType } from '../types';
|
|
5
|
+
import { WindowType, TAnalyserOptions } from '../types';
|
|
4
6
|
import AudioNode from './AudioNode';
|
|
7
|
+
import { AnalyserOptionsValidator } from '../options-validators';
|
|
5
8
|
|
|
6
9
|
export default class AnalyserNode extends AudioNode {
|
|
7
10
|
private static allowedFFTSize: number[] = [
|
|
8
11
|
32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768,
|
|
9
12
|
];
|
|
10
13
|
|
|
14
|
+
constructor(context: BaseAudioContext, options?: TAnalyserOptions) {
|
|
15
|
+
const finalOptions: TAnalyserOptions = {
|
|
16
|
+
...AnalyserOptions,
|
|
17
|
+
...options,
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
AnalyserOptionsValidator.validate(finalOptions);
|
|
21
|
+
const analyserNode: IAnalyserNode =
|
|
22
|
+
context.context.createAnalyser(finalOptions);
|
|
23
|
+
super(context, analyserNode);
|
|
24
|
+
}
|
|
25
|
+
|
|
11
26
|
public get fftSize(): number {
|
|
12
27
|
return (this.node as IAnalyserNode).fftSize;
|
|
13
28
|
}
|
package/src/core/AudioBuffer.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { IAudioBuffer } from '../interfaces';
|
|
2
2
|
import { IndexSizeError } from '../errors';
|
|
3
|
+
import BaseAudioContext from './BaseAudioContext';
|
|
4
|
+
import { TAudioBufferOptions } from '../types';
|
|
5
|
+
import { AudioBufferOptions } from '../defaults';
|
|
3
6
|
|
|
4
7
|
export default class AudioBuffer {
|
|
5
8
|
readonly length: number;
|
|
@@ -9,12 +12,29 @@ export default class AudioBuffer {
|
|
|
9
12
|
/** @internal */
|
|
10
13
|
public readonly buffer: IAudioBuffer;
|
|
11
14
|
|
|
12
|
-
constructor(buffer: IAudioBuffer)
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
constructor(buffer: IAudioBuffer);
|
|
16
|
+
constructor(context: BaseAudioContext, options: TAudioBufferOptions);
|
|
17
|
+
|
|
18
|
+
constructor(
|
|
19
|
+
contextOrBuffer: BaseAudioContext | IAudioBuffer,
|
|
20
|
+
options?: TAudioBufferOptions
|
|
21
|
+
) {
|
|
22
|
+
let buf: IAudioBuffer;
|
|
23
|
+
if (contextOrBuffer instanceof BaseAudioContext) {
|
|
24
|
+
const finalOptions = {
|
|
25
|
+
...AudioBufferOptions,
|
|
26
|
+
...options,
|
|
27
|
+
};
|
|
28
|
+
const context = contextOrBuffer;
|
|
29
|
+
buf = context.context.createBuffer(finalOptions);
|
|
30
|
+
} else {
|
|
31
|
+
buf = contextOrBuffer;
|
|
32
|
+
}
|
|
33
|
+
this.buffer = buf;
|
|
34
|
+
this.length = buf.length;
|
|
35
|
+
this.duration = buf.duration;
|
|
36
|
+
this.sampleRate = buf.sampleRate;
|
|
37
|
+
this.numberOfChannels = buf.numberOfChannels;
|
|
18
38
|
}
|
|
19
39
|
|
|
20
40
|
public getChannelData(channel: number): Float32Array {
|
|
@@ -2,8 +2,28 @@ import { IAudioBufferQueueSourceNode } from '../interfaces';
|
|
|
2
2
|
import AudioBufferBaseSourceNode from './AudioBufferBaseSourceNode';
|
|
3
3
|
import AudioBuffer from './AudioBuffer';
|
|
4
4
|
import { RangeError } from '../errors';
|
|
5
|
+
import BaseAudioContext from './BaseAudioContext';
|
|
6
|
+
import { TBaseAudioBufferSourceOptions } from '../types';
|
|
7
|
+
import { BaseAudioBufferSourceOptions } from '../defaults';
|
|
8
|
+
import { AudioEventSubscription } from '../events';
|
|
9
|
+
import { OnBufferEndEventType } from '../events/types';
|
|
5
10
|
|
|
6
11
|
export default class AudioBufferQueueSourceNode extends AudioBufferBaseSourceNode {
|
|
12
|
+
private onBufferEndedSubscription?: AudioEventSubscription;
|
|
13
|
+
private onBufferEndedCallback?: (event: OnBufferEndEventType) => void;
|
|
14
|
+
|
|
15
|
+
constructor(
|
|
16
|
+
context: BaseAudioContext,
|
|
17
|
+
options?: TBaseAudioBufferSourceOptions
|
|
18
|
+
) {
|
|
19
|
+
const finalOptions: TBaseAudioBufferSourceOptions = {
|
|
20
|
+
...BaseAudioBufferSourceOptions,
|
|
21
|
+
...options,
|
|
22
|
+
};
|
|
23
|
+
const node = context.context.createBufferQueueSource(finalOptions);
|
|
24
|
+
super(context, node);
|
|
25
|
+
}
|
|
26
|
+
|
|
7
27
|
public enqueueBuffer(buffer: AudioBuffer): string {
|
|
8
28
|
return (this.node as IAudioBufferQueueSourceNode).enqueueBuffer(
|
|
9
29
|
buffer.buffer
|
|
@@ -50,6 +70,32 @@ export default class AudioBufferQueueSourceNode extends AudioBufferBaseSourceNod
|
|
|
50
70
|
(this.node as IAudioBufferQueueSourceNode).stop(when);
|
|
51
71
|
}
|
|
52
72
|
|
|
73
|
+
public get onBufferEnded():
|
|
74
|
+
| ((event: OnBufferEndEventType) => void)
|
|
75
|
+
| undefined {
|
|
76
|
+
return this.onBufferEndedCallback;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
public set onBufferEnded(
|
|
80
|
+
callback: ((event: OnBufferEndEventType) => void) | null
|
|
81
|
+
) {
|
|
82
|
+
if (!callback) {
|
|
83
|
+
(this.node as IAudioBufferQueueSourceNode).onBufferEnded = '0';
|
|
84
|
+
this.onBufferEndedSubscription?.remove();
|
|
85
|
+
this.onBufferEndedSubscription = undefined;
|
|
86
|
+
this.onBufferEndedCallback = undefined;
|
|
87
|
+
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
this.onBufferEndedCallback = callback;
|
|
92
|
+
this.onBufferEndedSubscription =
|
|
93
|
+
this.audioEventEmitter.addAudioEventListener('bufferEnded', callback);
|
|
94
|
+
|
|
95
|
+
(this.node as IAudioBufferQueueSourceNode).onBufferEnded =
|
|
96
|
+
this.onBufferEndedSubscription.subscriptionId;
|
|
97
|
+
}
|
|
98
|
+
|
|
53
99
|
public pause(): void {
|
|
54
100
|
(this.node as IAudioBufferQueueSourceNode).pause();
|
|
55
101
|
}
|
|
@@ -4,11 +4,23 @@ import AudioBuffer from './AudioBuffer';
|
|
|
4
4
|
import { InvalidStateError, RangeError } from '../errors';
|
|
5
5
|
import { EventEmptyType } from '../events/types';
|
|
6
6
|
import { AudioEventSubscription } from '../events';
|
|
7
|
+
import { TAudioBufferSourceOptions } from '../types';
|
|
8
|
+
import BaseAudioContext from './BaseAudioContext';
|
|
9
|
+
import { AudioBufferSourceOptions } from '../defaults';
|
|
7
10
|
|
|
8
11
|
export default class AudioBufferSourceNode extends AudioBufferBaseSourceNode {
|
|
9
12
|
private onLoopEndedSubscription?: AudioEventSubscription;
|
|
10
13
|
private onLoopEndedCallback?: (event: EventEmptyType) => void;
|
|
11
14
|
|
|
15
|
+
constructor(context: BaseAudioContext, options?: TAudioBufferSourceOptions) {
|
|
16
|
+
const finalOptions: TAudioBufferSourceOptions = {
|
|
17
|
+
...AudioBufferSourceOptions,
|
|
18
|
+
...options,
|
|
19
|
+
};
|
|
20
|
+
const node = context.context.createBufferSource(finalOptions);
|
|
21
|
+
super(context, node);
|
|
22
|
+
}
|
|
23
|
+
|
|
12
24
|
public get buffer(): AudioBuffer | null {
|
|
13
25
|
const buffer = (this.node as IAudioBufferSourceNode).buffer;
|
|
14
26
|
if (!buffer) {
|
|
@@ -85,16 +97,6 @@ export default class AudioBufferSourceNode extends AudioBufferBaseSourceNode {
|
|
|
85
97
|
(this.node as IAudioBufferSourceNode).start(when, offset, duration);
|
|
86
98
|
}
|
|
87
99
|
|
|
88
|
-
public override get onEnded(): ((event: EventEmptyType) => void) | undefined {
|
|
89
|
-
return super.onEnded as ((event: EventEmptyType) => void) | undefined;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
public override set onEnded(
|
|
93
|
-
callback: ((event: EventEmptyType) => void) | null
|
|
94
|
-
) {
|
|
95
|
-
super.onEnded = callback;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
100
|
public get onLoopEnded(): ((event: EventEmptyType) => void) | undefined {
|
|
99
101
|
return this.onLoopEndedCallback;
|
|
100
102
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { IAudioScheduledSourceNode } from '../interfaces';
|
|
2
2
|
import AudioNode from './AudioNode';
|
|
3
3
|
import { InvalidStateError, RangeError } from '../errors';
|
|
4
|
-
import {
|
|
4
|
+
import { EventEmptyType } from '../events/types';
|
|
5
5
|
import { AudioEventEmitter, AudioEventSubscription } from '../events';
|
|
6
6
|
|
|
7
7
|
export default class AudioScheduledSourceNode extends AudioNode {
|
|
@@ -11,7 +11,7 @@ export default class AudioScheduledSourceNode extends AudioNode {
|
|
|
11
11
|
);
|
|
12
12
|
|
|
13
13
|
private onEndedSubscription?: AudioEventSubscription;
|
|
14
|
-
private onEndedCallback?: (event:
|
|
14
|
+
private onEndedCallback?: (event: EventEmptyType) => void;
|
|
15
15
|
|
|
16
16
|
public start(when: number = 0): void {
|
|
17
17
|
if (when < 0) {
|
|
@@ -44,11 +44,11 @@ export default class AudioScheduledSourceNode extends AudioNode {
|
|
|
44
44
|
(this.node as IAudioScheduledSourceNode).stop(when);
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
public get onEnded(): ((event:
|
|
47
|
+
public get onEnded(): ((event: EventEmptyType) => void) | undefined {
|
|
48
48
|
return this.onEndedCallback;
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
public set onEnded(callback: ((event:
|
|
51
|
+
public set onEnded(callback: ((event: EventEmptyType) => void) | null) {
|
|
52
52
|
if (!callback) {
|
|
53
53
|
(this.node as IAudioScheduledSourceNode).onEnded = '0';
|
|
54
54
|
this.onEndedSubscription?.remove();
|
|
@@ -1,19 +1,10 @@
|
|
|
1
|
-
import AudioAPIModule from '../AudioAPIModule';
|
|
2
1
|
import {
|
|
3
2
|
InvalidAccessError,
|
|
4
3
|
InvalidStateError,
|
|
5
4
|
NotSupportedError,
|
|
6
5
|
} from '../errors';
|
|
7
6
|
import { IBaseAudioContext } from '../interfaces';
|
|
8
|
-
import {
|
|
9
|
-
AudioBufferBaseSourceNodeOptions,
|
|
10
|
-
AudioWorkletRuntime,
|
|
11
|
-
ContextState,
|
|
12
|
-
ConvolverNodeOptions,
|
|
13
|
-
DecodeDataInput,
|
|
14
|
-
IIRFilterNodeOptions,
|
|
15
|
-
PeriodicWaveConstraints,
|
|
16
|
-
} from '../types';
|
|
7
|
+
import { AudioWorkletRuntime, ContextState, DecodeDataInput } from '../types';
|
|
17
8
|
import { assertWorkletsEnabled } from '../utils';
|
|
18
9
|
import AnalyserNode from './AnalyserNode';
|
|
19
10
|
import AudioBuffer from './AudioBuffer';
|
|
@@ -96,26 +87,12 @@ export default class BaseAudioContext {
|
|
|
96
87
|
}
|
|
97
88
|
|
|
98
89
|
assertWorkletsEnabled();
|
|
99
|
-
|
|
100
|
-
const shareableWorklet =
|
|
101
|
-
AudioAPIModule.workletsModule!.makeShareableCloneRecursive(
|
|
102
|
-
(audioBuffers: Array<ArrayBuffer>, channelCount: number) => {
|
|
103
|
-
'worklet';
|
|
104
|
-
const floatAudioData: Array<Float32Array> = audioBuffers.map(
|
|
105
|
-
(buffer) => new Float32Array(buffer)
|
|
106
|
-
);
|
|
107
|
-
callback(floatAudioData, channelCount);
|
|
108
|
-
}
|
|
109
|
-
);
|
|
110
|
-
|
|
111
90
|
return new WorkletNode(
|
|
112
91
|
this,
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
inputChannelCount
|
|
118
|
-
)
|
|
92
|
+
workletRuntime,
|
|
93
|
+
callback,
|
|
94
|
+
bufferLength,
|
|
95
|
+
inputChannelCount
|
|
119
96
|
);
|
|
120
97
|
}
|
|
121
98
|
|
|
@@ -129,33 +106,7 @@ export default class BaseAudioContext {
|
|
|
129
106
|
workletRuntime: AudioWorkletRuntime = 'AudioRuntime'
|
|
130
107
|
): WorkletProcessingNode {
|
|
131
108
|
assertWorkletsEnabled();
|
|
132
|
-
|
|
133
|
-
const shareableWorklet =
|
|
134
|
-
AudioAPIModule.workletsModule!.makeShareableCloneRecursive(
|
|
135
|
-
(
|
|
136
|
-
inputBuffers: Array<ArrayBuffer>,
|
|
137
|
-
outputBuffers: Array<ArrayBuffer>,
|
|
138
|
-
framesToProcess: number,
|
|
139
|
-
currentTime: number
|
|
140
|
-
) => {
|
|
141
|
-
'worklet';
|
|
142
|
-
const inputData: Array<Float32Array> = inputBuffers.map(
|
|
143
|
-
(buffer) => new Float32Array(buffer, 0, framesToProcess)
|
|
144
|
-
);
|
|
145
|
-
const outputData: Array<Float32Array> = outputBuffers.map(
|
|
146
|
-
(buffer) => new Float32Array(buffer, 0, framesToProcess)
|
|
147
|
-
);
|
|
148
|
-
callback(inputData, outputData, framesToProcess, currentTime);
|
|
149
|
-
}
|
|
150
|
-
);
|
|
151
|
-
|
|
152
|
-
return new WorkletProcessingNode(
|
|
153
|
-
this,
|
|
154
|
-
this.context.createWorkletProcessingNode(
|
|
155
|
-
shareableWorklet,
|
|
156
|
-
workletRuntime === 'UIRuntime'
|
|
157
|
-
)
|
|
158
|
-
);
|
|
109
|
+
return new WorkletProcessingNode(this, workletRuntime, callback);
|
|
159
110
|
}
|
|
160
111
|
|
|
161
112
|
createWorkletSourceNode(
|
|
@@ -168,71 +119,56 @@ export default class BaseAudioContext {
|
|
|
168
119
|
workletRuntime: AudioWorkletRuntime = 'AudioRuntime'
|
|
169
120
|
): WorkletSourceNode {
|
|
170
121
|
assertWorkletsEnabled();
|
|
171
|
-
|
|
172
|
-
AudioAPIModule.workletsModule!.makeShareableCloneRecursive(
|
|
173
|
-
(
|
|
174
|
-
audioBuffers: Array<ArrayBuffer>,
|
|
175
|
-
framesToProcess: number,
|
|
176
|
-
currentTime: number,
|
|
177
|
-
startOffset: number
|
|
178
|
-
) => {
|
|
179
|
-
'worklet';
|
|
180
|
-
const floatAudioData: Array<Float32Array> = audioBuffers.map(
|
|
181
|
-
(buffer) => new Float32Array(buffer)
|
|
182
|
-
);
|
|
183
|
-
callback(floatAudioData, framesToProcess, currentTime, startOffset);
|
|
184
|
-
}
|
|
185
|
-
);
|
|
186
|
-
|
|
187
|
-
return new WorkletSourceNode(
|
|
188
|
-
this,
|
|
189
|
-
this.context.createWorkletSourceNode(
|
|
190
|
-
shareableWorklet,
|
|
191
|
-
workletRuntime === 'UIRuntime'
|
|
192
|
-
)
|
|
193
|
-
);
|
|
122
|
+
return new WorkletSourceNode(this, workletRuntime, callback);
|
|
194
123
|
}
|
|
195
124
|
|
|
196
125
|
createRecorderAdapter(): RecorderAdapterNode {
|
|
197
|
-
return new RecorderAdapterNode(this
|
|
126
|
+
return new RecorderAdapterNode(this);
|
|
198
127
|
}
|
|
199
128
|
|
|
200
129
|
createOscillator(): OscillatorNode {
|
|
201
|
-
return new OscillatorNode(this
|
|
130
|
+
return new OscillatorNode(this);
|
|
202
131
|
}
|
|
203
132
|
|
|
204
133
|
createStreamer(): StreamerNode {
|
|
205
|
-
|
|
206
|
-
if (!streamer) {
|
|
207
|
-
throw new NotSupportedError('StreamerNode requires FFmpeg build');
|
|
208
|
-
}
|
|
209
|
-
return new StreamerNode(this, streamer);
|
|
134
|
+
return new StreamerNode(this);
|
|
210
135
|
}
|
|
211
136
|
|
|
212
137
|
createConstantSource(): ConstantSourceNode {
|
|
213
|
-
return new ConstantSourceNode(this
|
|
138
|
+
return new ConstantSourceNode(this);
|
|
214
139
|
}
|
|
215
140
|
|
|
216
141
|
createGain(): GainNode {
|
|
217
|
-
return new GainNode(this
|
|
142
|
+
return new GainNode(this);
|
|
218
143
|
}
|
|
219
144
|
|
|
220
145
|
createDelay(maxDelayTime?: number): DelayNode {
|
|
221
|
-
|
|
222
|
-
|
|
146
|
+
if (maxDelayTime !== undefined) {
|
|
147
|
+
return new DelayNode(this, { maxDelayTime });
|
|
148
|
+
} else {
|
|
149
|
+
return new DelayNode(this);
|
|
150
|
+
}
|
|
223
151
|
}
|
|
224
152
|
|
|
225
153
|
createStereoPanner(): StereoPannerNode {
|
|
226
|
-
return new StereoPannerNode(this
|
|
154
|
+
return new StereoPannerNode(this);
|
|
227
155
|
}
|
|
228
156
|
|
|
229
157
|
createBiquadFilter(): BiquadFilterNode {
|
|
230
|
-
return new BiquadFilterNode(this
|
|
158
|
+
return new BiquadFilterNode(this);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
createBufferSource(options?: {
|
|
162
|
+
pitchCorrection: boolean;
|
|
163
|
+
}): AudioBufferSourceNode {
|
|
164
|
+
if (options !== undefined) {
|
|
165
|
+
return new AudioBufferSourceNode(this, options);
|
|
166
|
+
} else {
|
|
167
|
+
return new AudioBufferSourceNode(this);
|
|
168
|
+
}
|
|
231
169
|
}
|
|
232
170
|
|
|
233
|
-
createIIRFilter(
|
|
234
|
-
const feedforward = options.feedforward;
|
|
235
|
-
const feedback = options.feedback;
|
|
171
|
+
createIIRFilter(feedforward: number[], feedback: number[]): IIRFilterNode {
|
|
236
172
|
if (feedforward.length < 1 || feedforward.length > 20) {
|
|
237
173
|
throw new NotSupportedError(
|
|
238
174
|
`The provided feedforward array has length (${feedforward.length}) outside the range [1, 20]`
|
|
@@ -256,42 +192,27 @@ export default class BaseAudioContext {
|
|
|
256
192
|
);
|
|
257
193
|
}
|
|
258
194
|
|
|
259
|
-
return new IIRFilterNode(
|
|
260
|
-
this,
|
|
261
|
-
this.context.createIIRFilter(feedforward, feedback)
|
|
262
|
-
);
|
|
195
|
+
return new IIRFilterNode(this, { feedforward, feedback });
|
|
263
196
|
}
|
|
264
197
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
):
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
this
|
|
272
|
-
|
|
273
|
-
);
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
createBufferQueueSource(
|
|
277
|
-
options?: AudioBufferBaseSourceNodeOptions
|
|
278
|
-
): AudioBufferQueueSourceNode {
|
|
279
|
-
const pitchCorrection = options?.pitchCorrection ?? false;
|
|
280
|
-
|
|
281
|
-
return new AudioBufferQueueSourceNode(
|
|
282
|
-
this,
|
|
283
|
-
this.context.createBufferQueueSource(pitchCorrection)
|
|
284
|
-
);
|
|
198
|
+
createBufferQueueSource(options?: {
|
|
199
|
+
pitchCorrection: boolean;
|
|
200
|
+
}): AudioBufferQueueSourceNode {
|
|
201
|
+
if (options !== undefined) {
|
|
202
|
+
return new AudioBufferQueueSourceNode(this, options);
|
|
203
|
+
} else {
|
|
204
|
+
return new AudioBufferQueueSourceNode(this);
|
|
205
|
+
}
|
|
285
206
|
}
|
|
286
207
|
|
|
287
208
|
createBuffer(
|
|
288
|
-
|
|
209
|
+
numberOfChannels: number,
|
|
289
210
|
length: number,
|
|
290
211
|
sampleRate: number
|
|
291
212
|
): AudioBuffer {
|
|
292
|
-
if (
|
|
213
|
+
if (numberOfChannels < 1 || numberOfChannels >= 32) {
|
|
293
214
|
throw new NotSupportedError(
|
|
294
|
-
`The number of channels provided (${
|
|
215
|
+
`The number of channels provided (${numberOfChannels}) is outside the range [1, 32]`
|
|
295
216
|
);
|
|
296
217
|
}
|
|
297
218
|
|
|
@@ -307,9 +228,7 @@ export default class BaseAudioContext {
|
|
|
307
228
|
);
|
|
308
229
|
}
|
|
309
230
|
|
|
310
|
-
return new AudioBuffer(
|
|
311
|
-
this.context.createBuffer(numOfChannels, length, sampleRate)
|
|
312
|
-
);
|
|
231
|
+
return new AudioBuffer(this, { numberOfChannels, length, sampleRate });
|
|
313
232
|
}
|
|
314
233
|
|
|
315
234
|
createPeriodicWave(
|
|
@@ -322,40 +241,18 @@ export default class BaseAudioContext {
|
|
|
322
241
|
`The lengths of the real (${real.length}) and imaginary (${imag.length}) arrays must match.`
|
|
323
242
|
);
|
|
324
243
|
}
|
|
325
|
-
|
|
326
|
-
const disableNormalization = constraints?.disableNormalization ?? false;
|
|
327
|
-
|
|
328
|
-
return new PeriodicWave(
|
|
329
|
-
this.context.createPeriodicWave(real, imag, disableNormalization)
|
|
330
|
-
);
|
|
244
|
+
return new PeriodicWave(this, { real, imag, ...constraints });
|
|
331
245
|
}
|
|
332
246
|
|
|
333
247
|
createAnalyser(): AnalyserNode {
|
|
334
|
-
return new AnalyserNode(this
|
|
248
|
+
return new AnalyserNode(this);
|
|
335
249
|
}
|
|
336
250
|
|
|
337
|
-
createConvolver(
|
|
338
|
-
|
|
339
|
-
const numberOfChannels = options.buffer.numberOfChannels;
|
|
340
|
-
if (
|
|
341
|
-
numberOfChannels !== 1 &&
|
|
342
|
-
numberOfChannels !== 2 &&
|
|
343
|
-
numberOfChannels !== 4
|
|
344
|
-
) {
|
|
345
|
-
throw new NotSupportedError(
|
|
346
|
-
`The number of channels provided (${numberOfChannels}) in impulse response for ConvolverNode buffer must be 1 or 2 or 4.`
|
|
347
|
-
);
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
const buffer = options?.buffer ?? null;
|
|
351
|
-
const disableNormalization = options?.disableNormalization ?? false;
|
|
352
|
-
return new ConvolverNode(
|
|
353
|
-
this,
|
|
354
|
-
this.context.createConvolver(buffer?.buffer, disableNormalization)
|
|
355
|
-
);
|
|
251
|
+
createConvolver(): ConvolverNode {
|
|
252
|
+
return new ConvolverNode(this);
|
|
356
253
|
}
|
|
357
254
|
|
|
358
255
|
createWaveShaper(): WaveShaperNode {
|
|
359
|
-
return new WaveShaperNode(this
|
|
256
|
+
return new WaveShaperNode(this);
|
|
360
257
|
}
|
|
361
258
|
}
|
|
@@ -3,7 +3,8 @@ import { IBiquadFilterNode } from '../interfaces';
|
|
|
3
3
|
import AudioNode from './AudioNode';
|
|
4
4
|
import AudioParam from './AudioParam';
|
|
5
5
|
import BaseAudioContext from './BaseAudioContext';
|
|
6
|
-
import {
|
|
6
|
+
import { BiquadFilterOptions } from '../defaults';
|
|
7
|
+
import { TBiquadFilterOptions } from '../types';
|
|
7
8
|
|
|
8
9
|
export default class BiquadFilterNode extends AudioNode {
|
|
9
10
|
readonly frequency: AudioParam;
|
|
@@ -11,7 +12,13 @@ export default class BiquadFilterNode extends AudioNode {
|
|
|
11
12
|
readonly Q: AudioParam;
|
|
12
13
|
readonly gain: AudioParam;
|
|
13
14
|
|
|
14
|
-
constructor(context: BaseAudioContext,
|
|
15
|
+
constructor(context: BaseAudioContext, options?: TBiquadFilterOptions) {
|
|
16
|
+
const finalOptions: TBiquadFilterOptions = {
|
|
17
|
+
...BiquadFilterOptions,
|
|
18
|
+
...options,
|
|
19
|
+
};
|
|
20
|
+
const biquadFilter: IBiquadFilterNode =
|
|
21
|
+
context.context.createBiquadFilter(finalOptions);
|
|
15
22
|
super(context, biquadFilter);
|
|
16
23
|
this.frequency = new AudioParam(biquadFilter.frequency, context);
|
|
17
24
|
this.detune = new AudioParam(biquadFilter.detune, context);
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { IConstantSourceNode } from '../interfaces';
|
|
2
|
+
import { ConstantSourceOptions } from '../defaults';
|
|
3
|
+
import { TConstantSourceOptions } from '../types';
|
|
2
4
|
import AudioParam from './AudioParam';
|
|
3
5
|
import AudioScheduledSourceNode from './AudioScheduledSourceNode';
|
|
4
6
|
import BaseAudioContext from './BaseAudioContext';
|
|
@@ -6,7 +8,13 @@ import BaseAudioContext from './BaseAudioContext';
|
|
|
6
8
|
export default class ConstantSourceNode extends AudioScheduledSourceNode {
|
|
7
9
|
readonly offset: AudioParam;
|
|
8
10
|
|
|
9
|
-
constructor(context: BaseAudioContext,
|
|
11
|
+
constructor(context: BaseAudioContext, options?: TConstantSourceOptions) {
|
|
12
|
+
const finalOptions: TConstantSourceOptions = {
|
|
13
|
+
...ConstantSourceOptions,
|
|
14
|
+
...options,
|
|
15
|
+
};
|
|
16
|
+
const node: IConstantSourceNode =
|
|
17
|
+
context.context.createConstantSource(finalOptions);
|
|
10
18
|
super(context, node);
|
|
11
19
|
this.offset = new AudioParam(node.offset, context);
|
|
12
20
|
}
|
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
import { IConvolverNode } from '../interfaces';
|
|
2
|
+
import { ConvolverOptions } from '../defaults';
|
|
3
|
+
import { TConvolverOptions } from '../types';
|
|
2
4
|
import BaseAudioContext from './BaseAudioContext';
|
|
3
5
|
import AudioNode from './AudioNode';
|
|
4
6
|
import AudioBuffer from './AudioBuffer';
|
|
5
7
|
|
|
6
8
|
export default class ConvolverNode extends AudioNode {
|
|
7
|
-
constructor(context: BaseAudioContext,
|
|
8
|
-
|
|
9
|
-
|
|
9
|
+
constructor(context: BaseAudioContext, options?: TConvolverOptions) {
|
|
10
|
+
const finalOptions: TConvolverOptions = {
|
|
11
|
+
...ConvolverOptions,
|
|
12
|
+
...options,
|
|
13
|
+
};
|
|
14
|
+
const convolverNode: IConvolverNode =
|
|
15
|
+
context.context.createConvolver(finalOptions);
|
|
16
|
+
super(context, convolverNode);
|
|
17
|
+
this.normalize = convolverNode.normalize;
|
|
10
18
|
}
|
|
11
19
|
|
|
12
20
|
public get buffer(): AudioBuffer | null {
|
package/src/core/DelayNode.ts
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
import { IDelayNode } from '../interfaces';
|
|
2
1
|
import AudioNode from './AudioNode';
|
|
3
2
|
import AudioParam from './AudioParam';
|
|
4
3
|
import BaseAudioContext from './BaseAudioContext';
|
|
4
|
+
import { TDelayOptions } from '../types';
|
|
5
|
+
import { DelayOptions } from '../defaults';
|
|
5
6
|
|
|
6
7
|
export default class DelayNode extends AudioNode {
|
|
7
8
|
readonly delayTime: AudioParam;
|
|
8
9
|
|
|
9
|
-
constructor(context: BaseAudioContext,
|
|
10
|
+
constructor(context: BaseAudioContext, options?: TDelayOptions) {
|
|
11
|
+
const finalOptions = { ...DelayOptions, ...options };
|
|
12
|
+
const delay = context.context.createDelay(finalOptions);
|
|
10
13
|
super(context, delay);
|
|
11
14
|
this.delayTime = new AudioParam(delay.delayTime, context);
|
|
12
15
|
}
|
package/src/core/GainNode.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { IGainNode } from '../interfaces';
|
|
2
|
+
import { GainOptions } from '../defaults';
|
|
3
|
+
import { TGainOptions } from '../types';
|
|
2
4
|
import AudioNode from './AudioNode';
|
|
3
5
|
import AudioParam from './AudioParam';
|
|
4
6
|
import BaseAudioContext from './BaseAudioContext';
|
|
@@ -6,8 +8,13 @@ import BaseAudioContext from './BaseAudioContext';
|
|
|
6
8
|
export default class GainNode extends AudioNode {
|
|
7
9
|
readonly gain: AudioParam;
|
|
8
10
|
|
|
9
|
-
constructor(context: BaseAudioContext,
|
|
10
|
-
|
|
11
|
-
|
|
11
|
+
constructor(context: BaseAudioContext, options?: TGainOptions) {
|
|
12
|
+
const finalOptions: TGainOptions = {
|
|
13
|
+
...GainOptions,
|
|
14
|
+
...options,
|
|
15
|
+
};
|
|
16
|
+
const gainNode: IGainNode = context.context.createGain(finalOptions);
|
|
17
|
+
super(context, gainNode);
|
|
18
|
+
this.gain = new AudioParam(gainNode.gain, context);
|
|
12
19
|
}
|
|
13
20
|
}
|
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
import { NotSupportedError } from '../errors';
|
|
2
2
|
import { IIIRFilterNode } from '../interfaces';
|
|
3
3
|
import AudioNode from './AudioNode';
|
|
4
|
+
import { TIIRFilterOptions } from '../types';
|
|
5
|
+
import { AudioNodeOptions } from '../defaults';
|
|
6
|
+
import BaseAudioContext from './BaseAudioContext';
|
|
4
7
|
|
|
5
8
|
export default class IIRFilterNode extends AudioNode {
|
|
9
|
+
constructor(context: BaseAudioContext, options: TIIRFilterOptions) {
|
|
10
|
+
const finalOptions: TIIRFilterOptions = {
|
|
11
|
+
...AudioNodeOptions,
|
|
12
|
+
...options,
|
|
13
|
+
};
|
|
14
|
+
const iirFilterNode = context.context.createIIRFilter(finalOptions);
|
|
15
|
+
super(context, iirFilterNode);
|
|
16
|
+
}
|
|
17
|
+
|
|
6
18
|
public getFrequencyResponse(
|
|
7
19
|
frequencyArray: Float32Array,
|
|
8
20
|
magResponseOutput: Float32Array,
|