今天来一个简单的录音功能,主要流程就是,录音-保存文件-播放录音。过程主要就是这个比较简单,这里就不啰嗦了,直接上代码,代码里面我已经注释的很清楚了。
public class MainActivity extends ActionBarActivity {
/**录音*/
private Button record_Voice_Bt;
/**停止录音*/
private Button stoprecord_Voice_Bt;
/**播放录音*/
private Button play_Voice_Bt;
/**停止播放录音*/
private Button stopplay_Voice_Bt;
/**录音控件*/
private MediaRecorder mediaRecorder = null;
/**播放录音控件*/
private MediaPlayer play = null;
/**路劲名*/
private String file;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
record_Voice_Bt = (Button) findViewById(R.id.RecordVoiceID);
play_Voice_Bt = (Button)findViewById(R.id.PlayVoiceID);
stoprecord_Voice_Bt = (Button) findViewById(R.id.StopRecordVoiceID);
stopplay_Voice_Bt = (Button) findViewById(R.id.stopPlayVoiceID);
file = Environment.getExternalStorageDirectory().getAbsolutePath();
file += "/audiorecor.3gp";
recordVoic();//录音
stoprecordVoic();//停止录音
PlayVoice();//播放录音
stopPlayVoice();//停止播放
}
/**停止播放录音*/
private void stopPlayVoice() {
stopplay_Voice_Bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(play != null){
play.release();//停止播放录音,把Media播放器释放即可
play = null;
Toast.makeText(MainActivity.this, "停止播放", 0).show();
}
}
});
}
/**停止录音*/
private void stoprecordVoic() {
stoprecord_Voice_Bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(mediaRecorder != null){
mediaRecorder.stop(); //停止录音
mediaRecorder.reset(); // 在释放资源时,必须要重置一下,不然下一步释放时可能会出错
mediaRecorder.release(); // 这个是否录音控件的,不然会一直占据资源
Toast.makeText(MainActivity.this, "停止录音", 0).show();
}
}
});
}
/**播放录音*/
private void PlayVoice() {
play_Voice_Bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
play = new MediaPlayer();
try {
play.setDataSource(file);//读原录音文件,这里传入路径
play.prepare();//准备播放录音,这里系统会开始去解析录音文件
play.start();//开始播放
}catch (IOException e) {
stopPlayVoice();
e.printStackTrace();
}
}
});
}
/**开始录音*/
private void recordVoic() {
record_Voice_Bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mediaRecorder = null;
mediaRecorder = new MediaRecorder();
//设置录音的编码格式,即数据源的格式,这里设置什么格式主要根据录音的用途来判断
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//设置录音文件的格式,这里是指文件的后缀名格式,这个设置的3GP
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
//设置录音的解码格式,这个必须在setOutputFile方法前设置,否则无效
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mediaRecorder.setOutputFile(file);//设置录音文件的输出路径
try {
mediaRecorder.prepare();
} catch (IllegalStateException e) {
stoprecordVoic();
Log.e("", "==========录音出错了==============");
e.printStackTrace();
} catch (IOException e) {
stoprecordVoic();
Log.e("", "==========录音出错了==============");
e.printStackTrace();
}
mediaRecorder.start(); //开始录音
Toast.makeText(MainActivity.this, "开始录音", 0).show();
}
});
}
}
主要代码都在这里了,我就不上demo工程了。这只是录音的基础功能,之后再看看有没有时间,再写一个深入一点的分析。这里记得要在配置文件里面加上这两个权限,
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
一个是读SD卡权限,一个是调用录音硬件设备的权限。暂时就这样吧!!!!!有错欢迎指出.........
工程demo