1

我想在录制时在我的录制应用程序中实现一个 VU 表AND playing。录音的时候知道怎么做,但是播放的时候出现问题。How can I grab the max amplitude at a given point in time from android MediaPlayer?我知道有一种方法,因为我看到一些小部件在我的设备上播放音乐时会做同样的事情。我不想使用 android Visualizer 进行渲染,我想让我自己的 VU 表适用于 OS 2.3+ 的设备。基本上,我需要 MediaPlayer 的 getMaxAmplitude。

4

1 回答 1

-2

//首先导入这个库

import android.media.MediaRecorder;

private MediaRecorder mRecorder = null;

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

}

//如果您需要更多详细信息,这是我的班级正在做同样的事情

package com.spaidevelopers.noisealert;

import java.io.IOException;
import android.media.MediaRecorder;

public class SoundMeter {
        // This file is used to record voice
        static final private double EMA_FILTER = 0.6;

        private MediaRecorder mRecorder = null;
        private double mEMA = 0.0;

        public void start() {

            if (mRecorder == null) {

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

                        try {
                            mRecorder.prepare();
                        } catch (IllegalStateException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }

                       mRecorder.start();
                       mEMA = 0.0;
                }
        }

        public void stop() {
                if (mRecorder != null) {
                        mRecorder.stop();       
                        mRecorder.release();
                        mRecorder = null;
                }
        }

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

        }

        public double getAmplitudeEMA() {
                double amp = getAmplitude();
                mEMA = EMA_FILTER * amp + (1.0 - EMA_FILTER) * mEMA;
                return mEMA;
        }
}
于 2014-03-26T08:37:10.857 回答