MediaRecorder类是Android sdk提供的一个专门用于音视频录制,通常利用手机麦克风采集音频和摄像头采集图像.这个类是属于简单的音频录制类,录制音频简单容易可是对音频流的控制也比较弱,这篇博客将只介绍音频的录制android
<!--音频录制权限 --> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <!--读取和写入存储权限--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
注意!在Android 5.0后须要动态受权网络
private MediaRecorder mMediaRecorder; private void initMediaRecorer(){ mMediaRecorder = new MediaRecorder(); }
没啥好说的,就是new一个MediaRecorderide
private void configMediaRecorer(){ File demoAmrFile = new File(getExternalCacheDir(),"demo.amr"); if (demoAmrFile.exists()){ demoAmrFile.delete(); } mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);//音频录入源 mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);//录制音频的输出格式 mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//录制音频的编码格式 目前手机设备上可能就AMR_NB有用 mMediaRecorder.setOutputFile(demoAmrFile.getAbsolutePath());//音频输出路径和文件名称 注意!这个设置是有顺序要求的,必需是上面编码格式设置完成后才能,写到前面会报错 mMediaRecorder.setOnErrorListener(new MediaRecorder.OnErrorListener() { @Override public void onError(MediaRecorder mr, int what, int extra) { //异常监听 mMediaRecorder.stop();//暂停 mMediaRecorder.release();//释放资源 mMediaRecorder = null; } }); mMediaRecorder.setOnInfoListener(new MediaRecorder.OnInfoListener() {//信息回调 @Override public void onInfo(MediaRecorder mr, int what, int extra) { } }); }
注意!每一次录制音频前都须要配置一次.假设你录制暂停后,想从新录制新音频也须要从新执行一次这个方法,从新配置MediaRecorder!ui
再次注意! 配置参数是有顺序要求的的,没有按照顺序配置会报错,通常顺序是 > 配置音频源 > 配置音频输出格式 和 编码格式 > 配置其余参数(例如:文件大小限制/录制时间限制/音频比特率)> 配置文件保存路径 > 配置各类监听.
编码
private void startRecorer(){ if (mMediaRecorder != null){ try { mMediaRecorder.prepare();//准备 mMediaRecorder.start();//开启 } catch (IOException e) { e.printStackTrace(); } } }
注意!点击后,开始录制以前先配置一次spa
mBtnStatr.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { configMediaRecorer(); startRecorer(); } });
private void stopRecorer(){ if (mMediaRecorder != null){ mMediaRecorder.stop();//暂停 mMediaRecorder.reset();//重启到空闲状态 此方法调用后须要从新配置参数 } }
暂停录制,注意这里是pause()方法,不是stop()code
private void pauseRecorder(){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { mMediaRecorder.pause();//暂停 } }
恢复录制orm
private void resumeRecorder(){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { mMediaRecorder.resume();//恢复 } }
private void destroy(){ if (mMediaRecorder != null){ mMediaRecorder.stop(); mMediaRecorder.release();//调用这个方法前必需先调用stop()方法 mMediaRecorder = null; } }
关于开始/中止/暂停/恢复/重置/释放的方法我就不在这里说明了,上面的流程代码里有写注释.也说了它们的关键点.另外录制视频的相关API也不在这里介绍视频
配置音频录入源,通常只须要选择MediaRecorder.AudioSource.MIC便可blog
设置录制音频的输出格式,在MediaRecorder.OutputFormat里有如下这些格式能够选择
设置录制音频的编码格式 目前手机设备上可能就MediaRecorder.AudioEncoder.AMR_NB有用,其余都会报错
设置输出音频文件的路径加文件名称,另外有一个setOutputFile(File file)方法,这个方法须要26API
设置音频的比特率, 比特率是指每秒传送的比特(bit)数。单位为 bps(Bit Per Second),比特率越高,每秒传送数据就越多,音频也就越清晰
设置录音文件的最大存储大小 ,单位是byte
设置录音文件的最大录制时间,单位是毫秒
设置监听异常报错
设置音频声道,官方注解里也说了这个方法的值通常是1或者2,分别表明单声道与双声道.
设置监听录制信息