react-native-audio-api 0.12.0-nightly-0d1a19d-20260120 → 0.12.0-nightly-75589dc-20260121
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/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +52 -49
- 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 +9 -6
- package/common/cpp/audioapi/core/sources/AudioBufferQueueSourceNode.h +2 -1
- package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.cpp +9 -7
- package/common/cpp/audioapi/core/sources/AudioBufferSourceNode.h +4 -1
- 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/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/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 +9 -0
- package/lib/commonjs/core/AudioBufferQueueSourceNode.js.map +1 -1
- package/lib/commonjs/core/AudioBufferSourceNode.js +9 -0
- package/lib/commonjs/core/AudioBufferSourceNode.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 -1
- 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/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/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 +9 -0
- package/lib/module/core/AudioBufferQueueSourceNode.js.map +1 -1
- package/lib/module/core/AudioBufferSourceNode.js +9 -0
- package/lib/module/core/AudioBufferSourceNode.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 -1
- 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/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/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 +3 -0
- package/lib/typescript/core/AudioBufferQueueSourceNode.d.ts.map +1 -1
- package/lib/typescript/core/AudioBufferSourceNode.d.ts +3 -0
- package/lib/typescript/core/AudioBufferSourceNode.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 -3
- 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/interfaces.d.ts +16 -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/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/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 +15 -0
- package/src/core/AudioBufferSourceNode.ts +12 -0
- 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 -2
- 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/interfaces.ts +37 -24
- package/src/options-validators.ts +66 -0
- 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/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,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.pitchCorrection !== 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.pitchCorrection !== 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,
|
|
@@ -1,17 +1,28 @@
|
|
|
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
7
|
import { EventEmptyType } from '../events/types';
|
|
8
|
+
import { OscillatorOptions } from '../defaults';
|
|
9
|
+
import { TOscillatorOptions } from '../types';
|
|
9
10
|
|
|
10
11
|
export default class OscillatorNode extends AudioScheduledSourceNode {
|
|
11
12
|
readonly frequency: AudioParam;
|
|
12
13
|
readonly detune: AudioParam;
|
|
13
14
|
|
|
14
|
-
constructor(context: BaseAudioContext,
|
|
15
|
+
constructor(context: BaseAudioContext, options?: TOscillatorOptions) {
|
|
16
|
+
const finalOptions: TOscillatorOptions = {
|
|
17
|
+
...OscillatorOptions,
|
|
18
|
+
...options,
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
if (finalOptions.periodicWave) {
|
|
22
|
+
finalOptions.type = 'custom';
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const node = context.context.createOscillator(finalOptions);
|
|
15
26
|
super(context, node);
|
|
16
27
|
this.frequency = new AudioParam(node.frequency, context);
|
|
17
28
|
this.detune = new AudioParam(node.detune, context);
|
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
|
+
}
|