gpt4 book ai didi

android - Android 的 MediaRecorder 的 getMaxAmplitude() 函数实际上给了我什么?

转载 作者:IT老高 更新时间:2023-10-28 22:25:45 27 4
gpt4 key购买 nike

Android MediaRecorder 有一个功能

.getMaxAmplitude();
which, as the API tells me, "Returns the maximum absolute amplitude that was sampled since the last call to this method." but I can't find what amplitude this is? Is it in pascal or watts?

I have found on several pages on the web that you can calculate a value closely corelated to decibels using (as suggested here).

double db = (20 * Math.log10(amplitude / REFERENCE)); 

这会让我假设返回值是某种线性比例(可能类似于 milipascal...)

REFERENCE=0.1(我知道这应该类似于 2*10^(-5) Pascal ((20 uPascal)),但返回的值很奇怪...... 0.1 奇怪地工作得更好。)

现在我使用

getMaxAmplitude()
and put this into the variable amplitude.

This is the method:

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;
}
}
测量 MaxAmplitude()

这在半秒内完成了 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 根本没有指定返回的内容,这似乎很奇怪......

最佳答案

我可以找到这个问题的答案,我会在这里与任何关心的人分享:MediaRecorder.getMaxAmplitude() 函数返回无符号的 16 位整数值 (0-32767)。这可能只是范围从 -32768 到 32767 的 CD 质量样本值的 abs()。这意味着它们可能代表麦克风构建的 0-100% 最大电压范围的电输出的 16 位数字化进那部手机。由于即使在一个品牌的手机中,这些麦克风的精确范围有时也会有所不同,即使对于类似的手机而言,在与相同声源的距离相同的情况下也不一定会返回相同的值。

然而,这个值与 Pascal 中的声压相关,因为它也是声压的线性量化,在可以用给定麦克风测量声音的区域(由于手机的限制,它不会覆盖整个频谱)。

关于android - Android 的 MediaRecorder 的 getMaxAmplitude() 函数实际上给了我什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10655703/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com