Co właściwie daje mi funkcja getMaxAmplitude () systemu Android dla MediaRecorder?

Android MediaRecorder ma funkcję

.getMaxAmplitude();
który, jakAPI mówi mi,„Zwraca maksymalną amplitudę bezwzględną, która była próbkowana od ostatniego wywołania tej metody.” ale nie mogę znaleźć, jaka to jest amplituda? Czy to pascal czy waty?

Znalazłem na kilku stronach w sieci, że można obliczyć wartość ściśle powiązaną z decybelami za pomocą (jak sugerowano)tutaj).

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

co pozwoliłoby mi założyć, że zwrócona wartość jest w jakiejś skali liniowej (prawdopodobnie coś takiego jak milipascal ...)

REFERENCE = 0.1 (Wiem, że powinno to być coś takiego jak 2 * 10 ^ (- 5) Pascal ((20 uPascal)), ale zwraca dziwne wartości ... 0.1 dziwnie działa lepiej.)

W tej chwili mierzę MaxAmplitude () za pomocą

getMaxAmplitude()
i umieść to w zmiennejamplituda.

Oto metoda:

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;
    }
}

Odbywa się to 5 razy w ciągu pół sekundy, co robi się średnio

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);

Dostaję coś, co wygląda trochę jak decybele, ale nie jestem pewien, czy w ogóle jest to decybel ...

Czy ktoś może mi w tym pomóc? Wydaje się bardzo dziwne, że API w ogóle nie określa, co jest zwracane ...

questionAnswers(2)

yourAnswerToTheQuestion