Python: 实时或从 wav 文件获取音量分贝级别
Python: Get volume decibel Level real time or from a wav file
对于项目工作,我需要从录制的音频文件或使用麦克风实时录音来测量音量。经过初步研究,我尝试使用声音文件库。使用 soundfile 读取文件并使用 20*np.log10(np.sqrt(np.mean(np.absolute(a)**2)))
,我计算了 dB 值。我得到了声音文件的负值。但是正常的声音可能在 50-70 dB 的范围内,我得到的是负值。谁能帮我解决这个问题?
简短回答:dB 与 dB 不同。您的结果可能是正确的。
长答案:dB 级别总是定义与某个参考值的关系。 For audio / acoustics, there are many reference values,您需要指定您使用的是哪一个,以 dB 为单位的值才有意义。当你说
normal sound may be in the range of 50-70 dB
这不是一个准确的说法,你可能是说
normal sound may be in the range of 50-70 dB SPL
相对于 reference sound pressure level of 20 µPa.
的值
在数字系统中,声音文件通常用浮点数 < 1
表示,然后我们用 dB FS (dB full scale) 表示参考值 1。根据数学定律,dB FS 值是负数。
同样清楚的是,您不能直接将 dB FS 值与 dB SPL 值相关联:如果您播放相同的音频文件(即采用一些 dB FS 值)并播放两次,但调高您的音量旋钮扬声器,它会导致两个不同的值 dB SPL(你听到的)。
您需要添加声音参考,即 20 log10(P rms_value/P ref)+120 dB
以获得 dB
范围内的数据,可以从您的输入模块调整 Pref
对于项目工作,我需要从录制的音频文件或使用麦克风实时录音来测量音量。经过初步研究,我尝试使用声音文件库。使用 soundfile 读取文件并使用 20*np.log10(np.sqrt(np.mean(np.absolute(a)**2)))
,我计算了 dB 值。我得到了声音文件的负值。但是正常的声音可能在 50-70 dB 的范围内,我得到的是负值。谁能帮我解决这个问题?
简短回答:dB 与 dB 不同。您的结果可能是正确的。
长答案:dB 级别总是定义与某个参考值的关系。 For audio / acoustics, there are many reference values,您需要指定您使用的是哪一个,以 dB 为单位的值才有意义。当你说
normal sound may be in the range of 50-70 dB
这不是一个准确的说法,你可能是说
normal sound may be in the range of 50-70 dB SPL
相对于 reference sound pressure level of 20 µPa.
的值在数字系统中,声音文件通常用浮点数 < 1
表示,然后我们用 dB FS (dB full scale) 表示参考值 1。根据数学定律,dB FS 值是负数。
同样清楚的是,您不能直接将 dB FS 值与 dB SPL 值相关联:如果您播放相同的音频文件(即采用一些 dB FS 值)并播放两次,但调高您的音量旋钮扬声器,它会导致两个不同的值 dB SPL(你听到的)。
您需要添加声音参考,即 20 log10(P rms_value/P ref)+120 dB
以获得 dB
范围内的数据,可以从您的输入模块调整 Pref