最近项目中有录音上传的需求,所以研究了一下 AudioRecord 和 MediaRecorder 两种实现方案,相比AudioRecord,MediaRecorder 更加简单方便,所以最后选择用 MediaRecorder 作为基础,制作录音工具类。
- 首先实例化 MediaRecorder
/* 如果正在录音,那么释放MediaRecorder
if (isRecording) {
mRecorder.release();
mRecorder = null;
}
mRecorder = MediaRecorder();
- 设置音频源
如果不调用这个方法,那么输出文件将不包含音轨,在设置录制参数或者编码器之前调用,并且只能在setOutputFormat()
之前调用
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
- 设置输出格式
设置录制输出文件格式,要在setAudioSource()
之后而且在prepare()
之前调用
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
是的,没有看错~,为了能保证和iOS的录音都能播放,没有办法,只好选择了MP4格式。
- 设置音频编码格式
设置要用于录制的音频编码器。 如果没调用此方法,则输出文件将不包含音轨。 在setOutputFormat()
之后但在prepare()
之前调用此方法。
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
- 设置采样率
设置录制的音频采样率。 在prepare()
之前调用这个方法。 Prepare()
可以对参数执行额外的检查,以确定指定的音频采样率是否适用。 采样率实际上取决于录音的格式以及平台的功能。 例如,AAC音频编码标准支持的采样率范围为8至96 kHz,AMRNB支持的采样率为8 kHz,AMRWB支持的采样率为16 kHz。 有关支持的音频采样率,请参阅相关的音频编码标准。
mRecorder.setAudioSamplingRate(8000);
- 设置输出的路径
这个方法要写在 setOutputFormat()
之后 prepare()
之前
filePath = getCacheFilePath(context, fileName + ".mp3");
mRecorder.setOutputFile(filePath);
- 还有其他的一些参数,但是我没有用到,详细的可以查看官方的文档
https://developer.android.google.cn/reference/android/media/MediaRecorder
- 最后调用
prepare()
start()
两个方法, 开始录音
mRecorder.prepare();
mRecorder.start();
isRecording = true;
- 停止录音
mRecorder.stop();
mRecorder.reset();
mRecorder.release();
- 值得注意的地方
有些时候由于一些非正常的操作,开始和结束,会出现异常,所以要用 try
catch
捕获异常进行特殊处理
网友评论