`

(转)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 block
				e.printStackTrace();
			}
			
			recorder.setOutputFile(audioFile.getAbsolutePath());
			
			//下面就开始录制了
			try {
				recorder.prepare();
			} catch (IllegalStateException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.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() {
				
				@Override
				public 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 block
				e.printStackTrace();
			} catch (IllegalStateException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.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:
			//完成录制,返回录制的音频的Uri
			Intent 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();  

分享到:
评论

相关推荐

    Android多媒体功能开发-使用MediaRecorder类录制音频

    Android应用使用MediaRecorder类录制音频的例子。

    android音频录制

    而Android系统的多媒体框架也为开发者提供了MediaRecorder类来实现视频录制功能。在使用MediaRecorder时我们要注意以下几点: 第一:无法使用模拟器进行测试,在使用MediaRecorder进行音视频录制时,需要用真机进行...

    Android-Video-Trimmer-master.zip

    MediaRecorder:是Android系统直接提供给我们的录制类,用于录制音频和视频的一个类,简单方便,不需要理会中间录制过程,结束录制后可以直接得到音频文件进行播放,录制的音频文件是经过压缩的,需要设置编码器,...

    疯狂Android讲义(第2版)源代码 第6章~第9章

    11.2、使用MediaRecorder录制音频: 11.3、控制摄像头拍照:Camera; 第12章、OpenGL与3D应用开发 12.2、OpenGL ES基础: 12.3、绘制2D图形: 12.4、绘制3D图形: 第13章、Android的网络应用 13.1、基于TCP协议...

    Android实例代码

    11.2、使用MediaRecorder录制音频: 11.3、控制摄像头拍照:Camera; 第12章、OpenGL与3D应用开发 12.2、OpenGL ES基础: 12.3、绘制2D图形: 12.4、绘制3D图形: 第13章、Android的网络应用 13.1、基于TCP协议...

    疯狂Android讲义(第2版)源代码 第10章~第13章

    11.2、使用MediaRecorder录制音频: 11.3、控制摄像头拍照:Camera; 第12章、OpenGL与3D应用开发 12.2、OpenGL ES基础: 12.3、绘制2D图形: 12.4、绘制3D图形: 第13章、Android的网络应用 13.1、基于TCP协议...

    疯狂Android讲义源码

     11.2 使用MediaRecorder录制  音频 439  11.3 控制摄像头拍照 442  11.3.1 通过Camera进行拍照 442  11.3.2 录制视频短片 446  11.4 本章小结 450  第12章 OpenGL与3D应用开发 451  12.1 3D图像与3D开发的 ...

    ophone多媒体编程

    ophone应用开发权威指南的第七,八章,关于移动多媒体编程和程序后台运行,同时压缩包里还有这两章的源代码。 第7章 移动多媒体编程 274 7.1 多媒体文件格式与编码 274 7.1.1 多媒体文件格式 274 7.1.2 编码 275 ...

    疯狂Android讲义.part2

    11.2 使用MediaRecorder录制 音频 439 11.3 控制摄像头拍照 442 11.3.1 通过Camera进行拍照 442 11.3.2 录制视频短片 446 11.4 本章小结 450 第12章 OpenGL与3D应用开发 451 12.1 3D图像与3D开发的 基本知识 452 ...

    疯狂Android讲义.part1

    11.2 使用MediaRecorder录制 音频 439 11.3 控制摄像头拍照 442 11.3.1 通过Camera进行拍照 442 11.3.2 录制视频短片 446 11.4 本章小结 450 第12章 OpenGL与3D应用开发 451 12.1 3D图像与3D开发的 基本知识 452 ...

    Android学习系列教程实例.pdf

    Android 学习文档总结 ................... 1 DevDiv 推荐资源 ........................ 2 Windows 8 ........................................................... 2 iOS .........................................

Global site tag (gtag.js) - Google Analytics