Web Audio API中的FFT数据对应于什么?

时间:2013-02-09 14:49:52

标签: audio fft html5-audio web-audio

我使用了来自Analyzer节点的FFT数据,使用Web Audio API中的getByteFrequencyData方法创建了一个频谱可视化工具,如下所示:

Spectrum Visualizer

在这个例子中,我有256个数据库。这个数字到底对应的是什么?它是每个频率成分的分贝水平。如果是这样,我怎么知道每个bin的频率值对应于什么?

我想知道,所以我可以尝试构建图形方程,因此想知道在哪些点指示滤波器频段。理想情况下,我想表示20Hz到20kHz的频率,并相应地绘制它们之间的间隔。

感谢您的帮助。

3 个答案:

答案 0 :(得分:32)

是的,getByteFrequencyData会产生0到255之间的标准化数组。 (它将数据复制到传入的数组中。)

频段被平分,因此数组的每个元素N对应于:

N * samplerate/fftSize

所以,第一个bin是0 并且,假设采样率为44100且<analyzerNode>.fftSize为512,则第二个采样率为:86.13 Hz,依此类推......

您会在dspSO上找到这两个有用的问题和答案:

请注意,您的采样数据的长度是<analyzerNode>.fftSize的一半,有效地将频率范围限制为采样率的一半。

答案 1 :(得分:5)

使用256个箱,每个箱将相隔约86 Hz(44100 kHz采样率/ fftSize,其中fftSize是箱数的两倍)。所以你从0开始,从那里以86 Hz的增量上升。

箱中的实际值只是表示信号中每个频率的存在量(即频率的“响亮程度”)。

答案 2 :(得分:0)

TL;DR 我想它会产生 dBu


如果有人,就像我不是音频工程师一样,努力为 getByteFrequencyData/getFloatFrequencyData 的结果找出适当的比例(它的实际含义),这是我的发现:< /p>

  • 首先看看这个web audio spec 在那里我们可以找到一个方程来从 frequency datadB value 本身
<块引用>

Y[k]=20log10X^[k]

并看到 dBu 计算看起来非常相似 dBu

  • 以前我看过this video to understand the basics

  • 所以建立一个刻度以将 dB 显示为 dBu,零位于 -4dBu(我希望这是有道理的) dB scale

  • 现在尝试使用适当的流来验证此比例。所以我可以产生 -24 dBFS(-18dBFS = +4dBu 这应该是一个标准?)信号应该是 -18 + -24 + 4 - -4 = -34 在上面的比例。这就是我最终得到的 enter image description here