Android Media Player Decibel Reading

时间:2011-11-24 06:03:32

标签: android

我搜索了类似的主题,却找不到清晰简洁的答案。我一直试图找出一种方法,可以在播放Android媒体播放器时确定给定时间点的分贝级别输出。我无法找到一种方法来确定在播放歌曲时给定时间点手机的响度。我一直在查看媒体播放器API,但我无法弄清楚如何在播放的歌曲中给定读取时间。

任何想法或帮助表示赞赏。

2 个答案:

答案 0 :(得分:5)

我认为您必须使用MediaRecorder录制音频:

mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mRecorder.setOutputFile("/dev/null"); 
mRecorder.prepare();
mRecorder.start();

   public double getAmplitude() {
            if (mRecorder != null)
                    return  (mRecorder.getMaxAmplitude());
            else
                    return 0;

    }

计算Db值:

  powerDb = 20 * log10(getAmplitude() / referenceAmp);

通常选择最大信号幅度作为参考幅度。也就是说,我们对信号进行归一化,使最大幅度定义为1或0 dB

答案 1 :(得分:1)

作者早已离开这里,但无论如何我都会为了子孙后代。 我认为理解你想要做什么的关键是弄清楚你的意思是分贝,你理解的是android系统的输出。听起来你正试图测量耳机的输出,在这种情况下,如果没有外接耳机校准系统这是不可能的,这样你就可以知道输出的dB值与耳机中的dB SPL相对应。

如果这是目标并且你理解了这一点,那么android提供的visualizer类可能很方便。它还提供8位FFT频率数据以及幅度。