Получить амплитуду из MediaPlayer с помощью Visualizer

Я читал другие сообщения о вычислении амплитуды в реальном времени из медиаплеера, но я не знаю, как получить значение, полезное для меня. Мне нужно, чтобы значение линейной амплитуды нормализовалось между 0-100, но, как я видел в других сообщениях, они выполняют расчет дБ, который не имеет особого смысла, потому что они не нормализованы до максимального значения 0 дБ (от Как рассчитать амплитуду звука в реальном времени (Android) ):

double amplitude = 0;
for (int i = 0; i < audioData.length/2; i++) {
    double y = (audioData[i*2] | audioData[i*2+1] << 8) / 32768.0
    // depending on your endianness:
    // double y = (audioData[i*2]<<8 | audioData[i*2+1]) / 32768.0
    amplitude += Math.abs(y);
}
amplitude = amplitude / audioData.length / 2;

Я наблюдал, что для расчета de dB я должен делать, как показано ниже (из media-player">Как вычислить амплитуду в децибелах (дБ) из медиаплеера? )

double sum=0;
for (int i = 0; i < audioData.length/2; i++) {
    double y = (audioData[i*2] | audioData[i*2+1] << 8) / 32768.0;
    sum += y * y;
}
double rms = Math.sqrt(sum / audioData.length/2);
dbAmp = 20.0*Math.log10(rms);

Я пробовал это решение, но значения в реальном времени близки к 0, но иногда превышают 0, я имею в виду что-то между -Inifinit (без звука) до 1,2 (если я избегаю умножения 20,0*) или что-то еще, кроме порядка . В любом случае, я хотел бы получить нормализованное значение [0-100], а не значение в дБ.


person Billyjoker    schedule 14.11.2016    source источник
comment
Как вы решили это?   -  person Elletlar    schedule 17.07.2018