我在网上的几个页面上找到了一个与分贝密切相关的值的计算方法(如此处建议)。
double db = (20 * Math.log10(amplitude / REFERENCE));
这让我可以假设返回的值是按线性比例尺测量的(可能是类似于毫帕斯卡的东西...)
REFERENCE=0.1(我知道这应该是类似于2*10^(-5)帕斯卡(即20微帕斯卡),但那会返回奇怪的值... 0.1 表现得更好。)
当前,我使用
getMaxAmplitude()测量 amplitude 变量的最大振幅。
这是这个方法:
public double getNoiseLevel()
{
//Log.d("SPLService", "getNoiseLevel() ");
int x = mRecorder.getMaxAmplitude();
double x2 = x;
Log.d("SPLService", "x="+x);
double db = (20 * Math.log10(x2 / REFERENCE));
//Log.d("SPLService", "db="+db);
if(db>0)
{
return db;
}
else
{
return 0;
}
}
这个操作在半秒钟内完成了5次,可以得到一个平均值。
for(int i=0; i<5; i++)
{
try
{
Thread.sleep(100);
}
catch (InterruptedException e)
{
e.printStackTrace();
return 0;
}
level = level+getNoiseLevel();
if(level>0)
{
counter++;
}
}
level=level/counter;
Log.d(LOG_TAG, "level="+level);
我得到了一些看起来像分贝的东西,但我不确定它是否真的是分贝...
那么,有人能帮我吗?这似乎非常奇怪,因为API根本没有明确返回什么...