首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Android环境下获取媒体播放器播放音频的幅度或频率

在Android环境下获取媒体播放器播放音频的幅度或频率
EN

Stack Overflow用户
提问于 2014-07-31 10:11:47
回答 1查看 3K关注 0票数 1

我是Android的初学者,我想找到安卓的频率密度或音量幅度,或者用安卓媒体播放器作为mp3文件。我尝试了很多不同的方法,但我没有得到succeeded.Can,请帮我做这个。

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

代码语言:javascript
复制
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/

我也检查了快速傅立叶变换,但它是在记录时间,我需要检测频率/振幅,同时播放音频文件(mp3文件)。

EN

回答 1

Stack Overflow用户

发布于 2014-07-31 13:13:54

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

这相当于:

代码语言:javascript
复制
max(abs(signal));

您需要检查您的Reference变量,使用1.0浮点数据表示,或32767来短int!

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

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

代码语言:javascript
复制
% 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()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25056252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档