使用RMS获得曲目的响度


15

我正在尝试计算存储在缓冲区中的音轨的响度。缓冲区包含信号的PCM数据,我想通过使用均方根来获得“响度”。我假设我可以在时域中执行此操作,而不必切换到频域。这样做的伪代码是什么?

我是否只需采样一秒钟(音频[0]-音频[44099],音频[44099]-音频[88199]等),然后计算这些值的均方根值?因此,例如,我会这样做:

RMS=audio[0]2+audio[1]2+audio[2]2.....audio[44099]244100

每秒钟?


1
上面的表达式中有一个缺失的括号-我自己添加了它,但显然编辑至少需要6个字符...
Paul R

3
@PaulR- <!-- html comment -->在极少数情况下,如果另外完善的帖子有一个很小但非常重要的错误,您可以添加一个来解决字符限制。这种需求很少发生:通常需要进行6个以上的改进。例如,当缺少括号时,通常最好在TeX中使用\sqrt{}and \frac{}{}构造。
凯文·维米尔

1
@Kevin:感谢您的提示-以后我会使用您的HTML注释建议。
Paul R

@PaulR-之前已经讨论过:限制是有意的,旨在防止不完整或毫无意义的编辑(请参阅此处的防御),但有反对者(请参阅此处的讨论)。
凯文·维米尔

4
请注意,仅RMS并不能告诉您响度。极低或极高的声音的音量低于相同RMS值的3 kHz。A加权滤波器将为您提供更准确的估计。 gist.github.com/148112
endolith 2011年

Answers:


12

另一件事是,RMS值与感知的响度不是很好地相关。您可能需要考虑将其称为音量或音量。有一种称为等响度等值线,可以量化耳朵对一种特定频率与另一种频率相比的敏感程度,请参阅Wikipedia文章。这些曲线取决于水平。例如,如下图所示,与100Hz的音调相比,耳朵对1kHz的音调非常敏感(横轴是频率,单位为Hz):

相等的响度轮廓

您可以做的相对简单的事情之一就是用倒置的相等响度曲线过滤PCM数据。或者,您可以应用标准的A加权,请参阅Wikipedia 加权过滤器文章。然后,您可以计算等响度加权滤波器输出的RMS值。


我不清楚如何从quesitoner的代码到这。问题的示例是对音频样本的平方求和。答案是关于对频率应用滤波器,因此似乎“用倒置的等响度曲线过滤PCM数据”是不够的。您首先必须具有每个频率的值,然后您才能弄清楚如何正确应用曲线?但这是一个重大的进步。
gman

@gman的想法是使用滤波器对音频进行预处理,然后将其用于问题中(RMS计算)。我不确定100%的意思。您不确定如何进行滤波或滤波器设计吗?
niaren '19
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.