Android MediaRecorder录制音频的方法


最近项目中有录音上传的需求,所以研究了一下 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捕获异常进行特殊处理

你可能感兴趣的:(Android)