Android音频录制—MediaRecorder

MediaRecorder (基于文件录音)
集成了录音,编码,压缩等,支持少量的音频格式文件。
优点:封装度很高,操作简单
缺点:无法实现实时处理音频,输出的音频格式少。

首先来看看 MediaRecorder 的生命周期:

这里写图片描述

从生命周期中可以看出,录制音频的基本步骤如下:

MediaRecorder mMediaRecorder= new MediaRecorder();
// 音频输入源
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
// 输出格式
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
// 编码格式
mMediaRecorder.setAudioEncoder(MediaRecorder.OutputFormat.DEFAULT);
// 设置录制音频的输出存放文件
mMediaRecorder.setOutputFile(audioFile.getAbsolutePath());
// 准备
mMediaRecorder.prepare();
// 开始录音
mMediaRecorder.start();
......
// 停止录音
mMediaRecorder.stop();
// 重置录音器
mMediaRecorder.reset();
// 释放录音器资源
mMediaRecorder.release();

将以上整个流程拆分成业务逻辑,主要为:

  1. 初始化
  2. 开始录音
  3. 停止录音
  4. 重置录音器
  5. 释放录音器资源

下面我们来看看具体代码实现:

1.初始化

public void initRecorder(File audioFile){
    if(mMediaRecorder==null){
        mMediaRecorder = new MediaRecorder();
    }
        mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
        mMediaRecorder.setAudioEncoder(MediaRecorder.OutputFormat.DEFAULT);
        try {
            if(!audioFile.exists()) audioFile.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
        mMediaRecorder.setOutputFile(audioFile.getAbsolutePath());
        mMediaRecorder.prepare();
}

2.开始录音

mMediaRecorder.start();

3.停止录音

mMediaRecorder.stop();

4.重置录音器

mMediaRecorder.reset();

5.释放录音器资源

if(mMediaRecorder!=null){
      mMediaRecorder.release();
      mMediaRecorder = null;
}

使用情况如下:
(1)一次录制完成
1 —> 2 —> 3 —>5
(2)录制完不满意,想重新录制,此时文件还是同一文件,控制 audioFile 参数即可
1 —> 2 —> 3 —>4 —> 1 —> 2 —>3 —> 5
(3)录制完继续录制第二个,此时文件是另一个新文件,控制 audioFile 参数即可
1 —> 2 —> 3 —>4 —> 1 —> 2 —>3 —> 5

其他情况可自行处理。

猜你喜欢

转载自blog.csdn.net/yypccc/article/details/80090549