gpt4 book ai didi

javascript - AnalyserNode.getByteFrequencyData中的数据对应的是什么时间窗口?

转载 作者:行者123 更新时间:2023-11-30 19:26:54 24 4
gpt4 key购买 nike

我想捕捉一个小时间窗口(即 ~1 秒)的傅里叶变换。

let audioCtx = new AudioContext();
let analyser = audioCtx.createAnalyser()
let buffer = new Uint8Array(analyser.frequencyBinCount);

//given an audio stream 'stream'
let source = audioCtx.createMediaStreamSource(stream);

setInterval(()=>{
analyser.getByteFrequencyData(buffer);
//Do some analysis with buffer...
},1000)

使用 WebAPI 的 AnalyserNode,我可以获得宽度为 44100/analyser.fftSize = 22050/analyser.frequencyBinCount 的 bin 中的傅立叶数据,允许通过设置 analyser.fftSize 指定分辨率>。我从文档中不清楚的是时间窗口是如何设置的。

来自API :

Rendering an audio graph is done in blocks of 128 samples-frames. A block of 128 samples-frames is called a render quantum, and the render quantum size is 128.

这是否意味着 128/44100Hz=2.9ms 的时间窗口?

最佳答案

Rendering an audio graph is done in blocks of 128 samples-frames. A block of 128 samples-frames is called a render quantum, and the render quantum size is 128.

这是否意味着 128/44100Hz=2.9ms 的时间窗口?

不完全是。渲染量程大小是渲染循环一次处理的样本帧数,但它不会阻止节点在缓冲区中累积额外的样本。在 AnalyserNode 的特定情况下,保留最后的 fftSize 样本用于 FFT 计算。所以时间窗口实际上是 analyser.fftSize/sampleRate,其中 sampleRate 是您的 configured sample rate (可能是 44100,但可能因输出设备而异)。要捕获约 1 秒的音频,假设采样率为 44100Hz,您需要 fftSize = 32768(这将导致约 0.74 秒的时间窗口)。

关于javascript - AnalyserNode.getByteFrequencyData中的数据对应的是什么时间窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56809131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com