react-native-audio-api 0.12.0-nightly-37d6b7c-20260119 → 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/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.cpp +8 -5
- package/android/src/main/cpp/audioapi/android/core/AndroidAudioRecorder.h +1 -1
- package/android/src/main/cpp/audioapi/android/core/utils/AndroidFileWriterBackend.h +1 -1
- package/android/src/main/cpp/audioapi/android/core/utils/FileOptions.cpp +7 -3
- package/android/src/main/cpp/audioapi/android/core/utils/FileOptions.h +1 -1
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.cpp +4 -2
- package/android/src/main/cpp/audioapi/android/core/utils/ffmpegBackend/FFmpegFileWriter.h +1 -1
- package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.cpp +5 -4
- package/android/src/main/cpp/audioapi/android/core/utils/miniaudioBackend/MiniAudioFileWriter.h +2 -2
- package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.cpp +52 -49
- package/common/cpp/audioapi/HostObjects/inputs/AudioRecorderHostObject.cpp +2 -1
- 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/inputs/AudioRecorder.h +1 -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/ios/audioapi/ios/core/IOSAudioRecorder.h +1 -1
- package/ios/audioapi/ios/core/IOSAudioRecorder.mm +5 -4
- package/ios/audioapi/ios/core/utils/FileOptions.h +3 -1
- package/ios/audioapi/ios/core/utils/FileOptions.mm +9 -3
- package/ios/audioapi/ios/core/utils/IOSFileWriter.h +2 -1
- package/ios/audioapi/ios/core/utils/IOSFileWriter.mm +5 -2
- 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/AudioRecorder.js +3 -3
- package/lib/commonjs/core/AudioRecorder.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/AudioRecorder.js +3 -4
- package/lib/module/core/AudioRecorder.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/AudioRecorder.d.ts +2 -2
- package/lib/typescript/core/AudioRecorder.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 +17 -16
- 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 +83 -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/AudioRecorder.ts +4 -3
- 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 +38 -25
- package/src/options-validators.ts +66 -0
- package/src/types.ts +100 -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,3 +1,41 @@
|
|
|
1
1
|
import AudioNode from './AudioNode';
|
|
2
|
+
import BaseAudioContext from './BaseAudioContext';
|
|
3
|
+
import { AudioWorkletRuntime } from '../types';
|
|
4
|
+
import AudioAPIModule from '../AudioAPIModule';
|
|
2
5
|
|
|
3
|
-
export default class WorkletProcessingNode extends AudioNode {
|
|
6
|
+
export default class WorkletProcessingNode extends AudioNode {
|
|
7
|
+
constructor(
|
|
8
|
+
context: BaseAudioContext,
|
|
9
|
+
runtime: AudioWorkletRuntime,
|
|
10
|
+
callback: (
|
|
11
|
+
inputData: Array<Float32Array>,
|
|
12
|
+
outputData: Array<Float32Array>,
|
|
13
|
+
framesToProcess: number,
|
|
14
|
+
currentTime: number
|
|
15
|
+
) => void
|
|
16
|
+
) {
|
|
17
|
+
const shareableWorklet =
|
|
18
|
+
AudioAPIModule.workletsModule!.makeShareableCloneRecursive(
|
|
19
|
+
(
|
|
20
|
+
inputBuffers: Array<ArrayBuffer>,
|
|
21
|
+
outputBuffers: Array<ArrayBuffer>,
|
|
22
|
+
framesToProcess: number,
|
|
23
|
+
currentTime: number
|
|
24
|
+
) => {
|
|
25
|
+
'worklet';
|
|
26
|
+
const inputData: Array<Float32Array> = inputBuffers.map(
|
|
27
|
+
(buffer) => new Float32Array(buffer, 0, framesToProcess)
|
|
28
|
+
);
|
|
29
|
+
const outputData: Array<Float32Array> = outputBuffers.map(
|
|
30
|
+
(buffer) => new Float32Array(buffer, 0, framesToProcess)
|
|
31
|
+
);
|
|
32
|
+
callback(inputData, outputData, framesToProcess, currentTime);
|
|
33
|
+
}
|
|
34
|
+
);
|
|
35
|
+
const node = context.context.createWorkletProcessingNode(
|
|
36
|
+
shareableWorklet,
|
|
37
|
+
runtime === 'UIRuntime'
|
|
38
|
+
);
|
|
39
|
+
super(context, node);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -1,3 +1,38 @@
|
|
|
1
1
|
import AudioScheduledSourceNode from './AudioScheduledSourceNode';
|
|
2
|
+
import BaseAudioContext from './BaseAudioContext';
|
|
3
|
+
import { AudioWorkletRuntime } from '../types';
|
|
4
|
+
import AudioAPIModule from '../AudioAPIModule';
|
|
2
5
|
|
|
3
|
-
export default class WorkletSourceNode extends AudioScheduledSourceNode {
|
|
6
|
+
export default class WorkletSourceNode extends AudioScheduledSourceNode {
|
|
7
|
+
constructor(
|
|
8
|
+
context: BaseAudioContext,
|
|
9
|
+
runtime: AudioWorkletRuntime,
|
|
10
|
+
callback: (
|
|
11
|
+
audioData: Array<Float32Array>,
|
|
12
|
+
framesToProcess: number,
|
|
13
|
+
currentTime: number,
|
|
14
|
+
startOffset: number
|
|
15
|
+
) => void
|
|
16
|
+
) {
|
|
17
|
+
const shareableWorklet =
|
|
18
|
+
AudioAPIModule.workletsModule!.makeShareableCloneRecursive(
|
|
19
|
+
(
|
|
20
|
+
audioBuffers: Array<ArrayBuffer>,
|
|
21
|
+
framesToProcess: number,
|
|
22
|
+
currentTime: number,
|
|
23
|
+
startOffset: number
|
|
24
|
+
) => {
|
|
25
|
+
'worklet';
|
|
26
|
+
const floatAudioData: Array<Float32Array> = audioBuffers.map(
|
|
27
|
+
(buffer) => new Float32Array(buffer)
|
|
28
|
+
);
|
|
29
|
+
callback(floatAudioData, framesToProcess, currentTime, startOffset);
|
|
30
|
+
}
|
|
31
|
+
);
|
|
32
|
+
const node = context.context.createWorkletSourceNode(
|
|
33
|
+
shareableWorklet,
|
|
34
|
+
runtime === 'UIRuntime'
|
|
35
|
+
);
|
|
36
|
+
super(context, node);
|
|
37
|
+
}
|
|
38
|
+
}
|
package/src/defaults.ts
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import {
|
|
2
|
+
TAudioNodeOptions,
|
|
3
|
+
TGainOptions,
|
|
4
|
+
TSteroPannerOptions,
|
|
5
|
+
TConvolverOptions,
|
|
6
|
+
TConstantSourceOptions,
|
|
7
|
+
TPeriodicWaveConstraints,
|
|
8
|
+
TAnalyserOptions,
|
|
9
|
+
TBiquadFilterOptions,
|
|
10
|
+
TOscillatorOptions,
|
|
11
|
+
TBaseAudioBufferSourceOptions,
|
|
12
|
+
TAudioBufferSourceOptions,
|
|
13
|
+
TAudioBufferOptions,
|
|
14
|
+
TDelayOptions,
|
|
15
|
+
TWaveShaperOptions,
|
|
16
|
+
} from './types';
|
|
17
|
+
|
|
18
|
+
export const AudioNodeOptions: TAudioNodeOptions = {
|
|
19
|
+
channelCount: 2,
|
|
20
|
+
channelCountMode: 'max',
|
|
21
|
+
channelInterpretation: 'speakers',
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export const GainOptions: TGainOptions = {
|
|
25
|
+
...AudioNodeOptions,
|
|
26
|
+
gain: 1,
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export const SteroPannerOptions: TSteroPannerOptions = {
|
|
30
|
+
...AudioNodeOptions,
|
|
31
|
+
channelCountMode: 'clamped-max',
|
|
32
|
+
pan: 0,
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export const AnalyserOptions: TAnalyserOptions = {
|
|
36
|
+
...AudioNodeOptions,
|
|
37
|
+
fftSize: 2048,
|
|
38
|
+
minDecibels: -100,
|
|
39
|
+
maxDecibels: -30,
|
|
40
|
+
smoothingTimeConstant: 0.8,
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export const BiquadFilterOptions: TBiquadFilterOptions = {
|
|
44
|
+
...AudioNodeOptions,
|
|
45
|
+
Q: 1,
|
|
46
|
+
detune: 0,
|
|
47
|
+
frequency: 350,
|
|
48
|
+
gain: 0,
|
|
49
|
+
type: 'lowpass',
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
export const ConvolverOptions: TConvolverOptions = {
|
|
53
|
+
...AudioNodeOptions,
|
|
54
|
+
disableNormalization: false,
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
export const ConstantSourceOptions: TConstantSourceOptions = {
|
|
58
|
+
offset: 1,
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
export const PeriodicWaveConstraints: TPeriodicWaveConstraints = {
|
|
62
|
+
disableNormalization: false,
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
export const OscillatorOptions: TOscillatorOptions = {
|
|
66
|
+
...AudioNodeOptions,
|
|
67
|
+
type: 'sine',
|
|
68
|
+
frequency: 440,
|
|
69
|
+
detune: 0,
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export const BaseAudioBufferSourceOptions: TBaseAudioBufferSourceOptions = {
|
|
73
|
+
playbackRate: 1,
|
|
74
|
+
detune: 0,
|
|
75
|
+
pitchCorrection: false,
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
export const AudioBufferSourceOptions: TAudioBufferSourceOptions = {
|
|
79
|
+
...BaseAudioBufferSourceOptions,
|
|
80
|
+
loop: false,
|
|
81
|
+
loopStart: 0,
|
|
82
|
+
loopEnd: 0,
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
export const AudioBufferOptions: TAudioBufferOptions = {
|
|
86
|
+
numberOfChannels: 1,
|
|
87
|
+
length: 0, // always overwritten by provided value, only placeholder
|
|
88
|
+
sampleRate: 44100, // always overwritten by provided value, only placeholder
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
export const DelayOptions: TDelayOptions = {
|
|
92
|
+
...AudioNodeOptions,
|
|
93
|
+
maxDelayTime: 1.0,
|
|
94
|
+
delayTime: 0.0,
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export const WaveShaperOptions: TWaveShaperOptions = {
|
|
98
|
+
...AudioNodeOptions,
|
|
99
|
+
oversample: 'none',
|
|
100
|
+
};
|
package/src/interfaces.ts
CHANGED
|
@@ -11,6 +11,20 @@ import type {
|
|
|
11
11
|
OverSampleType,
|
|
12
12
|
Result,
|
|
13
13
|
WindowType,
|
|
14
|
+
TGainOptions,
|
|
15
|
+
TSteroPannerOptions,
|
|
16
|
+
TConvolverOptions,
|
|
17
|
+
TConstantSourceOptions,
|
|
18
|
+
TAnalyserOptions,
|
|
19
|
+
TBiquadFilterOptions,
|
|
20
|
+
TOscillatorOptions,
|
|
21
|
+
TBaseAudioBufferSourceOptions,
|
|
22
|
+
TAudioBufferSourceOptions,
|
|
23
|
+
TStreamerOptions,
|
|
24
|
+
TAudioBufferOptions,
|
|
25
|
+
TDelayOptions,
|
|
26
|
+
TIIRFilterOptions,
|
|
27
|
+
TWaveShaperOptions,
|
|
14
28
|
} from './types';
|
|
15
29
|
|
|
16
30
|
// IMPORTANT: use only IClass, because it is a part of contract between cpp host object and js layer
|
|
@@ -62,37 +76,35 @@ export interface IBaseAudioContext {
|
|
|
62
76
|
shareableWorklet: ShareableWorkletCallback,
|
|
63
77
|
shouldUseUiRuntime: boolean
|
|
64
78
|
): IWorkletProcessingNode;
|
|
65
|
-
createOscillator(): IOscillatorNode;
|
|
66
|
-
createConstantSource(
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
79
|
+
createOscillator(oscillatorOptions: TOscillatorOptions): IOscillatorNode;
|
|
80
|
+
createConstantSource(
|
|
81
|
+
constantSourceOptions: TConstantSourceOptions
|
|
82
|
+
): IConstantSourceNode;
|
|
83
|
+
createGain(gainOptions: TGainOptions): IGainNode;
|
|
84
|
+
createStereoPanner(
|
|
85
|
+
stereoPannerOptions: TSteroPannerOptions
|
|
86
|
+
): IStereoPannerNode;
|
|
87
|
+
createBiquadFilter: (
|
|
88
|
+
biquadFilterOptions: TBiquadFilterOptions
|
|
89
|
+
) => IBiquadFilterNode;
|
|
90
|
+
createBufferSource: (
|
|
91
|
+
audioBufferSourceOptions: TAudioBufferSourceOptions
|
|
92
|
+
) => IAudioBufferSourceNode;
|
|
93
|
+
createDelay(delayOptions: TDelayOptions): IDelayNode;
|
|
94
|
+
createIIRFilter: (IIRFilterOptions: TIIRFilterOptions) => IIIRFilterNode;
|
|
76
95
|
createBufferQueueSource: (
|
|
77
|
-
|
|
96
|
+
audioBufferQueueSourceOptions: TBaseAudioBufferSourceOptions
|
|
78
97
|
) => IAudioBufferQueueSourceNode;
|
|
79
|
-
createBuffer: (
|
|
80
|
-
channels: number,
|
|
81
|
-
length: number,
|
|
82
|
-
sampleRate: number
|
|
83
|
-
) => IAudioBuffer;
|
|
98
|
+
createBuffer: (audioBufferOptions: TAudioBufferOptions) => IAudioBuffer;
|
|
84
99
|
createPeriodicWave: (
|
|
85
100
|
real: Float32Array,
|
|
86
101
|
imag: Float32Array,
|
|
87
102
|
disableNormalization: boolean
|
|
88
103
|
) => IPeriodicWave;
|
|
89
|
-
createAnalyser: () => IAnalyserNode;
|
|
90
|
-
createConvolver: (
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
) => IConvolverNode;
|
|
94
|
-
createStreamer: () => IStreamerNode | null; // null when FFmpeg is not enabled
|
|
95
|
-
createWaveShaper: () => IWaveShaperNode;
|
|
104
|
+
createAnalyser: (analyserOptions: TAnalyserOptions) => IAnalyserNode;
|
|
105
|
+
createConvolver: (convolverOptions: TConvolverOptions) => IConvolverNode;
|
|
106
|
+
createStreamer: (streamerOptions?: TStreamerOptions) => IStreamerNode | null; // null when FFmpeg is not enabled
|
|
107
|
+
createWaveShaper: (waveShaperOptions?: TWaveShaperOptions) => IWaveShaperNode;
|
|
96
108
|
}
|
|
97
109
|
|
|
98
110
|
export interface IAudioContext extends IBaseAudioContext {
|
|
@@ -186,6 +198,7 @@ export interface IOscillatorNode extends IAudioScheduledSourceNode {
|
|
|
186
198
|
}
|
|
187
199
|
|
|
188
200
|
export interface IStreamerNode extends IAudioNode {
|
|
201
|
+
readonly streamPath: string;
|
|
189
202
|
initialize(streamPath: string): boolean;
|
|
190
203
|
}
|
|
191
204
|
|
|
@@ -304,7 +317,7 @@ export interface IAudioRecorderCallbackOptions
|
|
|
304
317
|
|
|
305
318
|
export interface IAudioRecorder {
|
|
306
319
|
// default recorder methods
|
|
307
|
-
start: () => Result<{ path: string }>;
|
|
320
|
+
start: (fileNameOverride?: string) => Result<{ path: string }>;
|
|
308
321
|
stop: () => Result<FileInfo>;
|
|
309
322
|
isRecording: () => boolean;
|
|
310
323
|
isPaused: () => boolean;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { IndexSizeError, NotSupportedError } from './errors';
|
|
2
|
+
import {
|
|
3
|
+
OptionsValidator,
|
|
4
|
+
TAnalyserOptions,
|
|
5
|
+
TConvolverOptions,
|
|
6
|
+
TOscillatorOptions,
|
|
7
|
+
TPeriodicWaveOptions,
|
|
8
|
+
} from './types';
|
|
9
|
+
|
|
10
|
+
export const AnalyserOptionsValidator: OptionsValidator<TAnalyserOptions> = {
|
|
11
|
+
validate(options: TAnalyserOptions): void {
|
|
12
|
+
const allowedFFTSize: number[] = [
|
|
13
|
+
32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768,
|
|
14
|
+
];
|
|
15
|
+
if (options.fftSize && !allowedFFTSize.includes(options.fftSize)) {
|
|
16
|
+
throw new IndexSizeError(
|
|
17
|
+
`fftSize must be one of the following values: ${allowedFFTSize.join(
|
|
18
|
+
', '
|
|
19
|
+
)}`
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export const ConvolverOptionsValidator: OptionsValidator<TConvolverOptions> = {
|
|
26
|
+
validate(options: TConvolverOptions): void {
|
|
27
|
+
if (options.buffer) {
|
|
28
|
+
const numberOfChannels = options.buffer.numberOfChannels;
|
|
29
|
+
if (
|
|
30
|
+
numberOfChannels !== 1 &&
|
|
31
|
+
numberOfChannels !== 2 &&
|
|
32
|
+
numberOfChannels !== 4
|
|
33
|
+
) {
|
|
34
|
+
throw new NotSupportedError(
|
|
35
|
+
`The number of channels provided (${numberOfChannels}) in impulse response for ConvolverNode buffer must be 1 or 2 or 4.`
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
export const OscillatorOptionsValidator: OptionsValidator<TOscillatorOptions> =
|
|
43
|
+
{
|
|
44
|
+
validate(options: TOscillatorOptions): void {
|
|
45
|
+
if (options.type === 'custom' && !options.periodicWave) {
|
|
46
|
+
throw new NotSupportedError(
|
|
47
|
+
"'type' cannot be set to 'custom' without providing a 'periodicWave'."
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
export const PeriodicWaveOptionsValidator: OptionsValidator<TPeriodicWaveOptions> =
|
|
54
|
+
{
|
|
55
|
+
validate(options: TPeriodicWaveOptions): void {
|
|
56
|
+
if (
|
|
57
|
+
options.real &&
|
|
58
|
+
options.imag &&
|
|
59
|
+
options.real.length !== options.imag.length
|
|
60
|
+
) {
|
|
61
|
+
throw new NotSupportedError(
|
|
62
|
+
"'real' and 'imag' arrays must have the same length"
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
};
|
package/src/types.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import AudioBuffer from './core/AudioBuffer';
|
|
2
|
+
import PeriodicWave from './core/PeriodicWave';
|
|
2
3
|
|
|
3
4
|
export type Result<T> =
|
|
4
5
|
| ({ status: 'success' } & T)
|
|
@@ -29,10 +30,6 @@ export type OscillatorType =
|
|
|
29
30
|
| 'triangle'
|
|
30
31
|
| 'custom';
|
|
31
32
|
|
|
32
|
-
export interface PeriodicWaveConstraints {
|
|
33
|
-
disableNormalization: boolean;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
33
|
export interface AudioContextOptions {
|
|
37
34
|
sampleRate?: number;
|
|
38
35
|
}
|
|
@@ -110,17 +107,99 @@ export interface FileInfo {
|
|
|
110
107
|
|
|
111
108
|
export type WindowType = 'blackman' | 'hann';
|
|
112
109
|
|
|
113
|
-
export
|
|
114
|
-
|
|
110
|
+
export type ProcessorMode = 'processInPlace' | 'processThrough';
|
|
111
|
+
|
|
112
|
+
export interface TAudioNodeOptions {
|
|
113
|
+
channelCount?: number;
|
|
114
|
+
channelCountMode?: ChannelCountMode;
|
|
115
|
+
channelInterpretation?: ChannelInterpretation;
|
|
115
116
|
}
|
|
116
117
|
|
|
117
|
-
export
|
|
118
|
+
export interface TGainOptions extends TAudioNodeOptions {
|
|
119
|
+
gain?: number;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
export interface TSteroPannerOptions extends TAudioNodeOptions {
|
|
123
|
+
pan?: number;
|
|
124
|
+
}
|
|
118
125
|
|
|
119
|
-
export interface
|
|
120
|
-
|
|
126
|
+
export interface TAnalyserOptions extends TAudioNodeOptions {
|
|
127
|
+
fftSize?: number;
|
|
128
|
+
minDecibels?: number;
|
|
129
|
+
maxDecibels?: number;
|
|
130
|
+
smoothingTimeConstant?: number;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export interface OptionsValidator<T> {
|
|
134
|
+
validate(options: T): void;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
export interface TBiquadFilterOptions extends TAudioNodeOptions {
|
|
138
|
+
type?: BiquadFilterType;
|
|
139
|
+
frequency?: number;
|
|
140
|
+
detune?: number;
|
|
141
|
+
Q?: number;
|
|
142
|
+
gain?: number;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
export interface TOscillatorOptions {
|
|
146
|
+
type?: OscillatorType;
|
|
147
|
+
frequency?: number;
|
|
148
|
+
detune?: number;
|
|
149
|
+
periodicWave?: PeriodicWave;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
export interface TBaseAudioBufferSourceOptions {
|
|
153
|
+
detune?: number;
|
|
154
|
+
playbackRate?: number;
|
|
155
|
+
pitchCorrection?: boolean;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
export interface TAudioBufferSourceOptions
|
|
159
|
+
extends TBaseAudioBufferSourceOptions {
|
|
160
|
+
buffer?: AudioBuffer;
|
|
161
|
+
loop?: boolean;
|
|
162
|
+
loopStart?: number;
|
|
163
|
+
loopEnd?: number;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
export interface TConvolverOptions extends TAudioNodeOptions {
|
|
167
|
+
buffer?: AudioBuffer;
|
|
121
168
|
disableNormalization?: boolean;
|
|
122
169
|
}
|
|
123
170
|
|
|
171
|
+
export interface TWebConvolverOptions {
|
|
172
|
+
buffer?: globalThis.AudioBuffer | null;
|
|
173
|
+
normalize?: boolean;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
export interface TConstantSourceOptions {
|
|
177
|
+
offset?: number;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
export interface TStreamerOptions {
|
|
181
|
+
streamPath?: string;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
export interface TPeriodicWaveConstraints {
|
|
185
|
+
disableNormalization?: boolean;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
export interface TPeriodicWaveOptions extends TPeriodicWaveConstraints {
|
|
189
|
+
real?: Float32Array;
|
|
190
|
+
imag?: Float32Array;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
export interface TAudioBufferOptions {
|
|
194
|
+
numberOfChannels?: number;
|
|
195
|
+
length: number;
|
|
196
|
+
sampleRate: number;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
export interface TIIRFilterOptions extends TAudioNodeOptions {
|
|
200
|
+
feedforward: number[];
|
|
201
|
+
feedback: number[];
|
|
202
|
+
}
|
|
124
203
|
export type OverSampleType = 'none' | '2x' | '4x';
|
|
125
204
|
|
|
126
205
|
export interface AudioRecorderCallbackOptions {
|
|
@@ -145,9 +224,18 @@ export interface AudioRecorderCallbackOptions {
|
|
|
145
224
|
channelCount: number;
|
|
146
225
|
}
|
|
147
226
|
|
|
148
|
-
export interface
|
|
149
|
-
|
|
150
|
-
|
|
227
|
+
export interface TDelayOptions extends TAudioNodeOptions {
|
|
228
|
+
maxDelayTime?: number;
|
|
229
|
+
delayTime?: number;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
export interface TWaveShaperOptions extends TAudioNodeOptions {
|
|
233
|
+
curve?: Float32Array;
|
|
234
|
+
oversample?: OverSampleType;
|
|
151
235
|
}
|
|
152
236
|
|
|
153
237
|
export type DecodeDataInput = number | string | ArrayBuffer;
|
|
238
|
+
|
|
239
|
+
export interface AudioRecorderStartOptions {
|
|
240
|
+
fileNameOverride?: string;
|
|
241
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import AudioNode from './AudioNode';
|
|
2
|
-
import { WindowType } from '../types';
|
|
2
|
+
import { WindowType, TAnalyserOptions } from '../types';
|
|
3
3
|
import BaseAudioContext from './BaseAudioContext';
|
|
4
4
|
|
|
5
5
|
export default class AnalyserNode extends AudioNode {
|
|
@@ -9,7 +9,8 @@ export default class AnalyserNode extends AudioNode {
|
|
|
9
9
|
maxDecibels: number;
|
|
10
10
|
smoothingTimeConstant: number;
|
|
11
11
|
|
|
12
|
-
constructor(context: BaseAudioContext,
|
|
12
|
+
constructor(context: BaseAudioContext, analyserOptions?: TAnalyserOptions) {
|
|
13
|
+
const node = new globalThis.AnalyserNode(context.context, analyserOptions);
|
|
13
14
|
super(context, node);
|
|
14
15
|
|
|
15
16
|
this.fftSize = node.fftSize;
|
|
@@ -30,18 +31,26 @@ export default class AnalyserNode extends AudioNode {
|
|
|
30
31
|
}
|
|
31
32
|
|
|
32
33
|
public getByteFrequencyData(array: Uint8Array): void {
|
|
33
|
-
(this.node as globalThis.AnalyserNode).getByteFrequencyData(
|
|
34
|
+
(this.node as globalThis.AnalyserNode).getByteFrequencyData(
|
|
35
|
+
array as Uint8Array<ArrayBuffer>
|
|
36
|
+
);
|
|
34
37
|
}
|
|
35
38
|
|
|
36
39
|
public getByteTimeDomainData(array: Uint8Array): void {
|
|
37
|
-
(this.node as globalThis.AnalyserNode).getByteTimeDomainData(
|
|
40
|
+
(this.node as globalThis.AnalyserNode).getByteTimeDomainData(
|
|
41
|
+
array as Uint8Array<ArrayBuffer>
|
|
42
|
+
);
|
|
38
43
|
}
|
|
39
44
|
|
|
40
45
|
public getFloatFrequencyData(array: Float32Array): void {
|
|
41
|
-
(this.node as globalThis.AnalyserNode).getFloatFrequencyData(
|
|
46
|
+
(this.node as globalThis.AnalyserNode).getFloatFrequencyData(
|
|
47
|
+
array as Float32Array<ArrayBuffer>
|
|
48
|
+
);
|
|
42
49
|
}
|
|
43
50
|
|
|
44
51
|
public getFloatTimeDomainData(array: Float32Array): void {
|
|
45
|
-
(this.node as globalThis.AnalyserNode).getFloatTimeDomainData(
|
|
52
|
+
(this.node as globalThis.AnalyserNode).getFloatTimeDomainData(
|
|
53
|
+
array as Float32Array<ArrayBuffer>
|
|
54
|
+
);
|
|
46
55
|
}
|
|
47
56
|
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { IndexSizeError } from '../errors';
|
|
2
|
+
import BaseAudioContext from './BaseAudioContext';
|
|
3
|
+
import { TAudioBufferOptions } from '../types';
|
|
2
4
|
|
|
3
5
|
export default class AudioBuffer {
|
|
4
6
|
readonly length: number;
|
|
@@ -9,12 +11,24 @@ export default class AudioBuffer {
|
|
|
9
11
|
/** @internal */
|
|
10
12
|
public readonly buffer: globalThis.AudioBuffer;
|
|
11
13
|
|
|
12
|
-
constructor(buffer: globalThis.AudioBuffer)
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
constructor(buffer: globalThis.AudioBuffer);
|
|
15
|
+
constructor(context: BaseAudioContext, options: TAudioBufferOptions);
|
|
16
|
+
|
|
17
|
+
constructor(
|
|
18
|
+
contextOrBuffer: BaseAudioContext | globalThis.AudioBuffer,
|
|
19
|
+
options?: TAudioBufferOptions
|
|
20
|
+
) {
|
|
21
|
+
let buf: globalThis.AudioBuffer;
|
|
22
|
+
if (contextOrBuffer instanceof BaseAudioContext) {
|
|
23
|
+
buf = new globalThis.AudioBuffer(options!);
|
|
24
|
+
} else {
|
|
25
|
+
buf = contextOrBuffer as globalThis.AudioBuffer;
|
|
26
|
+
}
|
|
27
|
+
this.buffer = buf;
|
|
28
|
+
this.length = buf.length;
|
|
29
|
+
this.duration = buf.duration;
|
|
30
|
+
this.sampleRate = buf.sampleRate;
|
|
31
|
+
this.numberOfChannels = buf.numberOfChannels;
|
|
18
32
|
}
|
|
19
33
|
|
|
20
34
|
public getChannelData(channel: number): Float32Array {
|