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.初始化
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
其他情况可自行处理。