MediaRecorder实现手机录音功能

MediaRecorder实现手机录音功能_第1张图片

  我们的手机上都有麦克,录音功能一般都需要依赖这个硬件。android已经封装了MediaRecorder类供我们使用。我们的录音功能主要使用这个类来实现。

  录音过程比较简单,大概分为以下几个步骤:

  1. 创建MediaRecorder对象
  2. 设置声音来源,主要调用该对象的SetAudioSource(AudioSource.MIC)方法,告诉MediaRecorder录制来自麦克风的声音
  3. 设置录制音频文件的格式,如amr、aac
  4. 设置录制声音的编码格式,编码位率,采样率等,一般来说音质越好,声音文件会相对越大一些。
  5. 设置保存音频文件的位置

  然后我们就可以开始录制了,需要注意一点就是3和4步的顺序不可以颠倒。必需先设置音频文件的格式,才可以设置采样率。否则就会报IlegalStateException异常。

  录音是需要授予录音权限的,记得在Manifest文件里加入权限设置。

<uses-permission android:name="android.permission.RECORD_AUDIO"/>

  程序界面比较简单,一个录制按钮,一个结束按钮。下面开始我们录音功能的实现。

 
import java.io.File;
import java.io.IOException;
 
import android.app.Activity;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
 
public class MainActivity extends Activity implements OnClickListener{
 
    Button btnStart;
    Button btnStop;
    //音频文件
    File soundFile;
    MediaRecorder mediaRecorder;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        //初始化按钮
        btnStart = (Button)findViewById(R.id.btnStart);
        btnStop = (Button)findViewById(R.id.btnStop);
        
        //为两个按钮绑定单击
        btnStart.setOnClickListener(this);
        btnStop.setOnClickListener(this);
    }
 
 
    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        if(soundFile != null && soundFile.exists()) {
            //停止录音
            mediaRecorder.stop();
            //释放资源
            mediaRecorder.release();
            mediaRecorder = null;
        }
        
        super.onDestroy();
    }
    /* (non-Javadoc)
     * @see android.view.View.OnClickListener#onClick(android.view.View)
     */
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        //开始录音
        case R.id.btnStart:
            if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
                Toast.makeText(MainActivity.this, "SD卡不存在,请插入SD卡", Toast.LENGTH_SHORT).show();
                return;
            }
            
            try {  
                Log.d("lb", Environment.getExternalStorageDirectory().getCanonicalFile().toString());
                //直接存储到了sdcard中  
                soundFile = new File(Environment.getExternalStorageDirectory().getCanonicalFile() + "/sound1.amr");  
                mediaRecorder = new MediaRecorder();  
                mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);  //录制的声音的来源  
//              recorder.setVideoSource(video_source);   //录制视频  
                  //录制的声音的输出格式(必须在设置声音的编码格式之前设置)  
                mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
                   //设置声音的编码格式   
                mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); 
                //设置声音的保存位置  
                mediaRecorder.setOutputFile(soundFile.getAbsolutePath());  
                mediaRecorder.prepare();  //**准备录音**  
                mediaRecorder.start();    //**开始录音**  
            } catch (IllegalStateException e) {  
                e.printStackTrace();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }   
            break;
        case R.id.btnStop:
            if(soundFile != null && soundFile.exists()){  
                mediaRecorder.stop();    //**停止录音**  
                mediaRecorder.release(); //**释放资源**  
                mediaRecorder = null;      
            }  
            break;
        default:
            break;
        }
        
    }
 
    
}

  试听一下,还不错哦。

你可能感兴趣的:(MediaRecorder实现手机录音功能)