使用Visualizer从MediaPlayer获取振幅

时间:2016-11-14 08:39:26

标签: android audio visualizer amplitude decibel

我一直在阅读另一篇关于从媒体播放器实时计算振幅的帖子,但我不清楚如何获得对我有用的价值。我需要的是线性幅度值在0-100之间归一化,但正如我在其他帖子中观察到的那样,他们正在执行一个没有多大意义的数据计算,因为它们没有被标准化为最大0dB值(来自{{3} }):

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,我应该如下所示(来自How to calculate the audio amplitude in real time (android)

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],而不是dB​​值。

0 个答案:

没有答案