O que a função getMaxAmplitude () do Android para o MediaRecorder realmente me oferece?
O Android MediaRecorder tem uma função
.getMaxAmplitude();que, como oAPI diga-me,"Retorna a amplitude absoluta máxima que foi amostrada desde a última chamada para este método." mas não consigo encontrar que amplitude é essa? É em pascal ou watts?
Eu encontrei em várias páginas na web que você pode calcular um valor semelhante a decibéis usando (como sugeridoAqui).
double db = (20 * Math.log10(amplitude / REFERENCE));
o que me deixaria assumir que o valor retornado está em alguma escala linear (provavelmente algo como milipascal ...)
REFERENCE = 0.1 (estou ciente de que isso deve ser algo como 2 * 10 ^ (- 5) Pascal ((20 u Pascal)), mas que retorna valores estranhos ... 0.1 estranhamente funciona melhor.)
Agora eu medir o MaxAmplitude () usando o
getMaxAmplitude()e colocar isso na variávelamplitude.
Este é o método:
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;
}
}
Isso é feito 5 vezes em meio segundo, o que fica meio que uma média
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);
Eu recebo algo que parece um decibel mas não tenho certeza se é realmente um decibel ...
Então, alguém poderia me ajudar nisso? Parece muito estranho que a API não especifique em nada o que é retornado ...