Что на самом деле дает мне функция Android getMaxAmplitude() для MediaRecorder?

Android MediaRecorder имеет функцию

.getMaxAmplitude();

, которая, как мне сообщает API, "возвращает максимальную абсолютную амплитуду, которая была выбрана с момента последней вызов этого метода.", но я не могу найти, что это за амплитуда? Это в паскалях или ваттах?

Я нашел на нескольких страницах в Интернете, что вы можете рассчитать значение, тесно связанное с децибелами, используя (как предложено здесь).

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

что позволило бы мне предположить, что возвращаемое значение находится в некоторой линейной шкале (вероятно, что-то вроде миллипаскаля...)

REFERENCE=0.1 (Я знаю, что это должно быть что-то вроде 2*10^(-5) Паскалей ((20 мкПаскалей)), но это возвращает странные значения... Как ни странно, 0,1 работает лучше.)

Прямо сейчас я измеряю максимальную амплитуду. () с помощью

getMaxAmplitude()

и поместите это в переменную амплитуда.

Вот метод:

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 вообще не указывает, что возвращается...

25
задан Community 23 May 2017 в 10:31
поделиться