如何获得MediaRecorder的幅度

时间:2016-09-06 17:55:38

标签: android mediarecorder

我试图在Android上获得麦克风的振幅水平,如下所示:

MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);

Timer timer = new Timer();
timer.scheduleAtFixedRate(new RecorderTask(recorder), 0, 1000);

private class RecorderTask extends TimerTask {
    private MediaRecorder recorder;

    public RecorderTask(MediaRecorder recorder) {
        this.recorder = recorder;
    }

    public void run() {
        Log.v("MicInfoService", "amplitude: " + recorder.getMaxAmplitude());
    }
}

不幸的是,这只会一直返回0。

看来为了实现这一点,我必须真正开始录制。这是对的吗?

如果是这样,我是否需要录制500ms,获得振幅,停止录制并重复?

最后,我是否必须录制到文件中?我不需要保存这个音频文件,不能记录自上次调用当前实时麦克风输入后的当前幅度或最高幅度而不进行录制?

感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

是的,你必须开始录音。如果你没有录音,那么找不到幅度的信号就没有了。

不,您不需要停止录制,getMaxAmplitude会在您上次调用后找到最大振幅。

是的,使用此api,您必须写入文件。您可以在完成后删除该文件。或者尝试使用/ dev / null作为文件。