获取Android中Media Player播放的音频幅度或频率

时间:2014-07-31 10:11:47

标签: android audio android-mediaplayer frequency

我是Android的初学者。我想在Android中找到频率密度或音量幅度,或者使用Android Media Player获取mp3文件。我尝试了很多不同的方法,但我没有成功。可以帮助我用这个

我找到了这段代码,但它在录音机时间内给出了getMaxAmplitude()值,但在播放mp3文件时没有得到。 以下是链接:What does Android's getMaxAmplitude() function for the MediaRecorder actually give me?

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

我也提到了ringdroid链接:https://code.google.com/p/ringdroid/

我还检查了FFT,但它处于录制时间。我需要在播放音频文件(mp3文件)时检测频率/振幅。

1 个答案:

答案 0 :(得分:0)

mRecorder.getMaxAmplitude()返回自上次调用以来测量的最大绝对幅度,或第一次调用时的0

相当于:

max(abs(signal));

您需要检查Reference变量使用1.0到浮点数据表示或32767到short int!

要将最大绝对振幅转换为dB,您需要执行20 * log10(x/Reference)

matlab中的等效代码显示了这个概念:

% create a audio signal in float point at 90dB
signal = 10^(90/20)*sin(2*pi*f/Fs*t)';
%equivalent of mRecorder.getMaxAmplitude()
x = max(abs(signal));
%find dB (Reference for this example is 1.0 data in float point)
decibel = 20 * log10(x/1.0)

结果为89.9955

要在播放mp3文件时显示分贝,您需要为每个已处理的帧调用getNoiseLevel()