我正在尝试计算存储在缓冲区中的音轨的响度。缓冲区包含信号的 PCM 数据,我想通过使用 Root Mean Squared 来了解它的“响度”。我假设我可以在时域中做到这一点,而不必切换到频域。这样做的伪代码是什么?
我会简单地采样一秒钟(音频 [0] - 音频 [44099]、音频 [44099] - 音频 [88199] 等)并计算这些值的 RMS 吗?所以,例如,我会这样做:
每秒?
我正在尝试计算存储在缓冲区中的音轨的响度。缓冲区包含信号的 PCM 数据,我想通过使用 Root Mean Squared 来了解它的“响度”。我假设我可以在时域中做到这一点,而不必切换到频域。这样做的伪代码是什么?
我会简单地采样一秒钟(音频 [0] - 音频 [44099]、音频 [44099] - 音频 [88199] 等)并计算这些值的 RMS 吗?所以,例如,我会这样做:
每秒?
另一件事是 RMS 值与感知响度的相关性不是很好。您可能要考虑将其称为 level 或 volume。有一种称为等响度轮廓的东西,它可以量化耳朵对一个特定频率与另一个频率相比的敏感程度,请参阅维基百科文章。这些曲线是电平相关的。例如,与 100Hz 音调相比,人耳对 1kHz 音调非常敏感,如下图所示(横轴是以 Hz 为单位的频率):
您可以做的相对简单的事情之一是使用反向等响度曲线过滤您的 PCM 数据。或者您可以应用标准 A 加权,请参阅 Wikipedia Weighting Filter 文章。然后您可以计算等响度加权滤波器输出的 RMS 值。