使用Python测量音频“响度”

3 投票
1 回答
8459 浏览
提问于 2025-04-16 18:35

我想用Python来计算一段音频的响度——可能是通过提取音频的峰值音量,或者使用更准确的测量方法(比如RMS)。

请问有什么好的方法吗?我看过pyaudio,但感觉它没有满足我的需求。看起来ruby-audio不错,因为它似乎内置了sound.abs.max这个功能。

输入的音频将来自一些本地的MP3文件,时长大约30秒。

1 个回答

5

我觉得RMS(均方根)是最准确的测量方式。有一点需要注意的是,我们对不同频率的响度感知是不同的,所以可以用快速傅里叶变换(fft)把音频转换到频率空间(用numpy.fft处理30秒的音频效果很好)。接下来,从这个频率空间计算出功率谱密度(PSD)。然后,使用某种响度曲线根据频率对PSD进行加权。特别是低于10Hz的频率,因为那里会有很多能量(这会在时域中主导RMS的计算),但我们是听不到的。最后,整合PSD并取平方根,这样就能得到感知的RMS。

你还可以把mp3分成几个部分或窗口,然后应用这个方法来计算特定部分的音量。

撰写回答