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

问题描述 投票:0回答:3

对于项目工作,我需要从录制的音频文件或使用麦克风实时录音来测量音量。经过初步研究,我尝试使用声音文件库。该文件是使用声音文件读取的,并使用

20*np.log10(np.sqrt(np.mean(np.absolute(a)**2)))
,我计算了 dB 值。我得到的声音文件为负值。但正常的声音可能在 50-70 dB 范围内,而我得到的是负值。有人可以帮我解决这个问题吗?

python numpy signal-processing wav pyaudio
3个回答
6
投票

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

长答案:dB 级别总是定义与某个参考值的关系。 对于音频/声学,有许多参考值,您需要指定使用哪个参考值,以 dB 为单位的值才有意义。 dB 值计算如下

20*log10(value/reference)dB

(假设它是一个根功率量,对于功率量来说,因子是 10,而不是 20)。需要注意的一件重要事情是,除以参考值会按预期删除单位。

所以,当你说

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

这并不是一个准确的说法,您可能是指

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

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

在数字系统中,声音文件通常由浮点数

< 1
表示,然后我们用参考值1(无单位)来表示dB FS(dB满量程)。根据数学定律,dB FS 值为负。

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


2
投票

您需要添加声音参考,即 20

log10(P rms_value/P ref)+120 dB
才能获取
dB
范围内的数据,Pref 可以从您的输入模块进行调整


0
投票

数字音频以 dBFS(分贝满量程)为单位进行测量,其中 0dBFS 是最大音频输出,-65 dBFS 是最安静的输出。

我对代码或 Windows 如何测量一无所知,但确实了解数字音频,因此可以通过这种方式解释负值。

© www.soinside.com 2019 - 2024. All rights reserved.