我正在使用 AudioRecord 类来分析麦克风中的原始 pcm 字节。
所以这工作得很好。现在我需要将 pcm 字节转换为分贝。
我有一个公式,可以将 Pa 中的声压转换为 db。
分贝 = 20 * log10(Pa/参考 Pa)
所以问题是我从缓冲区中从录音机获得的字节是什么,它是幅度帕斯卡声压还是什么。
我试图将值放入公式中,但它返回的分贝非常高,所以我认为它不正确
thanks
免责声明:我对Android知之甚少。
您的设备可能以每秒 44,100 个样本(可能更少)的单声道记录,每个样本使用两个字节。所以你的第一步是将原始数据中的字节对组合成两字节整数(我不知道这在Android中是如何完成的)。
然后,您可以通过首先获取样本的归一化绝对值并将其传递给 Db 函数来计算每个样本的分贝值(相对于峰值):
float Db = 20 * log10(ABS(sampleVal) / 32768)
接近峰值的值(例如 +32767 或 -32768)将具有接近 0 的 Db 值。3277 (0.1) 的值将具有 -20 的 Db 值;值为 327 (.01) 时,Db 值为 -40 等。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)