Python:实时或从 wav 文件获取音量分贝级别

K K*_*K K 1 python signal-processing numpy wav pyaudio

对于项目工作,我需要通过录制的音频文件或使用麦克风实时录制来测量音量。在我的初步研究之后,我尝试使用 soundfile 库。该文件是使用 soundfile 读取的20*np.log10(np.sqrt(np.mean(np.absolute(a)**2))),我已经计算了 dB 值。我得到了声音文件的负值。但是正常的声音可能在 50-70 dB 的范围内,而我得到的是负值。有人可以帮我解决这个问题吗?

che*_*ate 5

简短回答:dB 与 dB 不同。你的结果可能是正确的。

长答案:dB 电平总是定义与某个参考值的关系。对于音频/声学,有很多参考值,您需要指定您使用的是哪个值,以 dB 为单位的值才有意义。当你说

正常声音可能在 50-70 分贝范围内

这不是一个准确的陈述,你可能是说

正常声音可能在 50-70 dB SPL 范围内

您给出的值相对于20 µPa参考声压级

在数字系统中,声音文件通常由浮点数表示< 1,然后我们说dB FS(dB 满量程),参考值为 1。根据数学定律,dB FS 值为负。

同样很明显,您不能直接将 dB FS 值与 dB SPL 值相关联:如果您播放相同的音频文件(即取一些 dB FS 值)并播放两次,但调高扬声器的音量旋钮,它将导致到两个不同的值 dB SPL(你听到的)。