Что на самом деле мне дает функция Android getMaxAmplitude () для MediaRecorder?
Android MediaRecorder имеет функцию
.getMaxAmplitude();который, какAPI говорит мне,"Returns the maximum absolute amplitude that was sampled since the last call to this method." но я не могу найти, что это за амплитуда? Это в паскалях или ваттах?
Я обнаружил на нескольких страницах в Интернете, что вы можете рассчитать значение, тесно связанное с децибелами, используя (как предложено)Вот).
double db = (20 * Math.log10(amplitude / REFERENCE));
что позволило бы мне предположить, что возвращаемое значение находится в некотором линейном масштабе (вероятно, что-то вроде милипаскаля ...)
ССЫЛКА = 0.1 (я знаю, что это должно быть что-то вроде 2 * 10 ^ (- 5) Паскаль ((20 uPascal)), но это возвращает странные значения ... 0.1 странно работает лучше.)
Прямо сейчас я измеряю MaxAmplitude (), используя
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 не уточняет, что возвращается ...