32

我使用了来自 Analyzer 节点的 FFT 数据,使用getByteFrequencyDataWeb Audio API 中的方法来创建频谱可视化器,如下所示:

频谱可视化器

在这种情况下,我有 256 个数据箱。这里面的数字到底对应什么?是不是每个频率分量的分贝级。如果是这样,我怎么知道每个 bin 的频率值对应于什么?

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

谢谢你的帮助。

4

3 回答 3

36

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

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

N * samplerate/fftSize

因此,第一个 bin 为 0。
假设采样率为 44100,a<analyzerNode>.fftSize为 512,则第二个 bin 为:86.13 Hz,依此类推...

在dspSO上,您会发现这两个问题和答案很有用:

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

于 2013-02-09T16:12:53.440 回答
6

对于 256 个 bin,每个 bin 的间隔约为 86 Hz(44100 kHz 采样率 / fftSize,其中 fftSize 是 bin 数量的两倍)。所以你从零开始,然后以 86 Hz 的增量上升。

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

于 2013-02-09T16:11:23.127 回答
1

TL;DR 我想它会产生 dBu


如果有人,就像我不是一名音频工程师一样,努力试图找出一个合适的尺度(它的实际含义)来自getByteFrequencyData/getFloatFrequencyData这里的结果是我的发现:

  • 首先查看这个网络音频规范 ,我们可以找到一个从 afrequency datadB value自身的方程

Y[k]=20log10X^[k]

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

  • 以前我看过这个视频以了解基础知识

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

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

于 2021-07-06T10:20:18.800 回答