Pro Android学习笔记(一三一):Media Frameworks(6):MediaRecorder进行录音

文章转载只能用于非商业性质,且不能带有虚拟货币、积分、注册等附加条件。转载须注明出处http://blog.csdn.net/flowingflying/以及作者@恺风Wei。

Android提供MediaRecorder进行音频和视频的录制,提供AudioRecord进行音频的录音,此外,还可以通过intent调用系统的录音和录像。

我们先学习通过MediaRecorder进行录音的方式。进行录音需要下面的权限:

<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!--如果录音文件存放在SD卡,需要有写的权限  -->

MediaRecorder对录音进行了很好的封装,代码很简单,关键的代码片段如下:

private String OUTPUT_FILE = Environment.getExternalStorageDirectory() + "/myrecord001.3gpp";
private MediaRecorder recorder = null;
… …
private void beginRecording() throws Exception{
    killMediaRecorder();  
    
    //删除旧文件,如果存在
    File outFile = new File(OUTPUT_FILE);
    if(outFile.exists()){
        outFile.delete();
    }

   
    //步骤[【1】获取MediaRecorder对象,【2】设置录音参数,【3】prepare(),【4】开始录音start() 
    recorder = new MediaRecorder();
    /* 音频来源,最常见的就是MIC。
     * 可以对phone call进行录音,使用VOICE_CALL,VOICE_UPLINK(本端)或VOICE_DOWNLINK远端。
     * 在Android 2.1增加两个音频源:
     * - CAMCORDER 将使用camera相关的麦克风,如果没有则使用设备的主麦克风;
     * - VOICE_RECOGNITION 将用于语音识别,即音频流尽可能raw,保持原样,即不对音频进行修改,例如某些HTC手机对麦克风有AGC(自动增益控制), 但这会对语音识别是有影响的,采用VOICE_RECOGNITION则音频进行额外的处理。 */

    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
//文件格式
    /* 设置音频编码,在Android2.3.3之前,只能使用AMR_NB,而之后,可以使用AMR_WB和AAC。

     * 注意:setAudioEncoder()应在setOutputFormat()之后,否者会出现setAudioEncoder called in an invalid state(2)的错误 */

    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
    recorder.setOutputFile(OUTPUT_FILE);
//输出文件 
    //recorder.setMaxDuration(30*1000);//设定30秒录音时间,如果到底上限,自动停止 
   //recorder.setMaxFileSize(1000000); //设定1M的文件大小,如果到底上限,自动停止 
    recorder.prepare();
    recorder.start();

   
}

private void stopRecording() throws Exception{
    if(recorder != null)
        recorder.stop(); //停止录音
}

private void killMediaRecorder(){
    if(recorder != null){
        try{
            recorder.release(); //释放录音资源
            recorder = null;
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

@Override
protected void onDestroy() { 
    killMediaRecorder();       
    super.onDestroy();
}

 小例子代码在:Pro Android学习:media framworks小例子

相关链接:我的Android开发相关文章

你可能感兴趣的:(Pro Android学习笔记(一三一):Media Frameworks(6):MediaRecorder进行录音)