numpy 实时或从WAV文件中获取音量分贝级别

dldeef67  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(155)

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

8yoxcaq7

8yoxcaq71#

简短的回答是:db和db不一样。你的结果可能是正确的。
长篇解答:数据库级别总是定义与某些参考值的关系。对于音频/声学,有许多参考值,您需要指定使用哪个参考值才能使以分贝为单位的值有意义。然后将DB值计算为

(假设它是根电力量,则电气量的系数是10,而不是20)。需要注意的重要一点是,除以参考值将按预期删除单位。
所以,当你说
正常声音可能在50-70分贝的范围内
这不是一个准确的说法,你的意思可能是
正常声音可能在50-70分贝SPL范围内
其中,您给出的值相对于参考声压级20微帕。
在数字系统中,声音文件通常由浮点数< 1表示,然后我们使用参考值1(无单位)来表示dB FS (dB full scale)。根据数学定律,dBFS值为负值。
同样清楚的是,您不能将分贝FS值与分贝SPL值直接关联:如果您播放相同的音频文件(即取一些分贝FS值)并播放两次,但打开扬声器的音量旋钮,将导致两个不同的值分贝SPL(您听到的)。

kh212irz

kh212irz2#

您需要添加声音参考,即20log10(P rms_value/P ref)+120 dB才能获得dB范围内的数据,可以从输入模块调整Pref

相关问题