(转)Android多媒体学习九:利用MediaRecorder类实现自己的音频录制程序
?在上一篇中,我们在代码中有?
case R.id.btn2://通过MediaRecorder类来实现自己的音频录制程序Intent intent2 = new Intent();intent2.setClass(this, MyAudioRecord.class);startActivityForResult(intent2, 1);break;?
?
这是启动我们自己定义的音频录制程序来完成录制工作。
代码如下:
?
package demo.camera;import java.io.File;import java.io.IOException;import android.app.Activity;import android.content.ContentValues;import android.content.Intent;import android.media.MediaPlayer;import android.media.MediaRecorder;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import android.view.View;import android.widget.Button;import android.widget.TextView;/** * 这个是利用MediaRecorder类来实现自己的音频录制程序 * * 为了可以录制音频我们需要RECORD_AUDIO权限 * 为了可以写入SDCard,我们需要WRITE_EXTERNAL_STORAGE权限 * @author Administrator * */public class MyAudioRecord extends Activity {private TextView stateView;private Button btnStart,btnStop,btnPlay,btnFinish;private MediaRecorder recorder;private MediaPlayer player;private File audioFile;private Uri fileUri;public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.my_audio_record);stateView = (TextView)this.findViewById(R.id.view_state);stateView.setText("准备开始");btnStart = (Button)this.findViewById(R.id.btn_start);btnStop = (Button)this.findViewById(R.id.btn_stop);btnPlay = (Button)this.findViewById(R.id.btn_play);btnFinish = (Button)this.findViewById(R.id.btn_finish);btnStop.setEnabled(false);btnPlay.setEnabled(false);}public void onClick(View v){int id = v.getId();switch(id){case R.id.btn_start://开始录制//我们需要实例化一个MediaRecorder对象,然后进行相应的设置recorder = new MediaRecorder();//指定AudioSource 为MIC(Microphone audio source ),这是最长用的recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//指定OutputFormat,我们选择3gp格式//其他格式,MPEG-4:这将指定录制的文件为mpeg-4格式,可以保护Audio和Video//RAW_AMR:录制原始文件,这只支持音频录制,同时要求音频编码为AMR_NB//THREE_GPP:录制后文件是一个3gp文件,支持音频和视频录制recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//指定Audio编码方式,目前只有AMR_NB格式recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//接下来我们需要指定录制后文件的存储路径File fpath = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/data/files/");fpath.mkdirs();//创建文件夹try {//创建临时文件audioFile = File.createTempFile("recording", ".3gp", fpath);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}recorder.setOutputFile(audioFile.getAbsolutePath());//下面就开始录制了try {recorder.prepare();} catch (IllegalStateException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}recorder.start();stateView.setText("正在录制");btnStart.setEnabled(false);btnPlay.setEnabled(false);btnStop.setEnabled(true);break;case R.id.btn_stop:recorder.stop();recorder.release();//然后我们可以将我们的录制文件存储到MediaStore中ContentValues values = new ContentValues();values.put(MediaStore.Audio.Media.TITLE, "this is my first record-audio");values.put(MediaStore.Audio.Media.DATE_ADDED, System.currentTimeMillis());values.put(MediaStore.Audio.Media.DATA, audioFile.getAbsolutePath());fileUri = this.getContentResolver().insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, values);//录制结束后,我们实例化一个MediaPlayer对象,然后准备播放player = new MediaPlayer();player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {@Overridepublic void onCompletion(MediaPlayer arg0) {//更新状态stateView.setText("准备录制");btnPlay.setEnabled(true);btnStart.setEnabled(true);btnStop.setEnabled(false);}});//准备播放try {player.setDataSource(audioFile.getAbsolutePath());player.prepare();} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalStateException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}//更新状态stateView.setText("准备播放");btnPlay.setEnabled(true);btnStart.setEnabled(true);btnStop.setEnabled(false);break;case R.id.btn_play://播放录音//注意,我们在录音结束的时候,已经实例化了MediaPlayer,做好了播放的准备player.start();//更新状态stateView.setText("正在播放");btnStart.setEnabled(false);btnStop.setEnabled(false);btnPlay.setEnabled(false);//在播放结束的时候也要更新状态break;case R.id.btn_finish://完成录制,返回录制的音频的UriIntent intent = new Intent();intent.setData(fileUri);this.setResult(RESULT_OK, intent);this.finish();break;}}}?
?
?
?转自chenjie19891104的的博客(http://blog.csdn.net/chenjie19891104/article/category/756236),以
便以后学习和查询!
?
学习总结
?
MediaRecorder录制音频
1、实例化MediaRecorder对象
?? MediaRecorder recorder = new MediaRecorder();??
??
2、指定AudioSource 为MIC(Microphone audio source ),这是最长用的??
?? recorder.setAudioSource(MediaRecorder.AudioSource.MIC);??
3、指定OutputFormat, 选择3gp格式
?? recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);?
4、指定Audio编码方式,目前只有AMR_NB格式
?? recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);??
5、设置声音文件的保存路径
? recorder.setOutputFile(audioFile.getAbsolutePath());??
?
6、准备录制(录制前一定要调用这个方法)
?? recorder.prepare();??
7、开始录制
? recorder.start();??
8、停止录制
??? recorder.stop();??
9、释放资源
?? recorder.release();??