如何从 getByteFrequencyData 正确确定音量(以 dB 为单位)

Arm*_*ter 5 javascript web-audio-api

我知道getByteFrequencyData返回每个频段的音量(以 dB 为单位)。如何确定VU 表中显示的信号总音量(以 dB 为单位)?

大多数时候,我看到的代码只是将每个频段的音量相加,然后将总和除以频段数量,但这肯定是不正确的。这意味着每个频段都需要为 6 dB,整个信号才能达到 6 dB。当然,事实并非如此。

我的问题:

  1. 如何正确确定信号的总音量?

  2. 如果minDecibels设置为 -96 和maxDecibels0,我假设值 0 转换为 -96 dB,值 255 转换为 0 db。但是:128 的值意味着什么?-48分贝?

Ray*_*Toy 4

  1. 我认为这取决于你所说的“体积”是什么意思。如果是信号的能量,那么您可以只取 输出的平均值getFloatFrequencyData,但平均值不应平均 dB 值。在进行平均之前,您需要转换为线性。这很昂贵;您可以只获取时域数据并计算平均平方和并得到相同的答案(几乎)。
  2. 是的,FFT 数据转换为 dB,然后在最小值和最大值之间线性映射。请参阅https://webaudio.github.io/web-audio-api/#widl-AnalyserNode-getByteFrequencyData-void-Uint8Array-array