`
1140566087
  • 浏览: 547670 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
博客专栏
2c4ae07c-10c2-3bb0-a106-d91fe0a10f37
c/c++ 入门笔记
浏览量:18076
3161ba8d-c410-3ef9-871c-3e48524c5263
Android 学习笔记
浏览量:309479
Group-logo
J2ME 基础学习课程集
浏览量:17993
A98a97d4-eb03-3faf-af96-c7c28f709feb
Spring 学习过程记录...
浏览量:17195
社区版块
存档分类
最新评论

Android 之 MeidaRedoreder实现音频录制

阅读更多
调用系统自带的程序进行音频的录制:
package com.example.media_record;

import android.app.Activity;

import android.content.Intent;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

/* 使用自带的音频录制程序
 * 利用MediaRecorder 类实现自己的音频录制程序,也可以录制视频;
 * 创建实例后,调用:
 * 			1、setAudioSource  初始化
 * 			2、setOuputFormat	音频格式
 * 			3、setAudioEncoder 初始化;
 * 			4、setOutputFile() 指定存放录制内容的文件;
 * 
 * */
public class MainActivity extends Activity {

	private Button system_record,custom_media,custom_audio;
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		/* 获取组件对象,并且设置事件监听 */
		system_record = (Button) findViewById(R.id.system_mediaRecord);
		custom_media = (Button) findViewById(R.id.custom_mediaRecord);
		custom_audio = (Button) findViewById(R.id.custom_audioRecord);
		
		/* 设置事件监听 */
		system_record.setOnClickListener(listener);
		custom_audio.setOnClickListener(listener);
		custom_media.setOnClickListener(listener);
		
	}

	/* 覆盖该方法,接收数据 *//*  这里获取录制到的音频的Uri, 可以进行播放等操作 */
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		
		if(requestCode == RESULT_OK){
			Uri audioPath = data.getData();
			MediaPlayer mediaPlayer = MediaPlayer.create(this, audioPath);
			mediaPlayer.start();
			Toast.makeText(MainActivity.this, audioPath.toString(), 1000).show();
		}
	}
		
	/* 设置按钮事件监听器 */
	OnClickListener listener = new OnClickListener() {
		
		public void onClick(View v) {
			// TODO Auto-generated method stub
			switch(v.getId()){
			case R.id.system_mediaRecord:
				/* 调用Android自带的音频录制程序 */
				Intent intent1= new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION);
				startActivityForResult(intent1, 0);
				
				break;
			case R.id.custom_mediaRecord:
				
				/* 通过MediaRecorder 类实现自己的音频录制程序 */
				Intent intent2 = new Intent();
				intent2.setClass(MainActivity.this,MyMediarRecorder.class);
				startActivityForResult(intent2, 1);
				
				break;
			case R.id.custom_audioRecord:
				
				/* 通过AudioRecord类实现自己的音频录制程序 */
				Intent intent3 = new Intent();
				intent3.setClass(MainActivity.this, MyAudioRecord.class);
				startActivityForResult(intent3, 2);
				break;
			}
		}
	};
	


}



使用MediaRecoreder实现音频录制:

package com.example.media_record;
import java.io.File;

import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
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.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

/* 启动自定义的音频录制程序来完成录制的工作
 * 
 *  权限: 为了可以录制音频需要:RECORD_AUDIO权限
 *  权限:为了可以写入SDCard,需要:WRITE_EXTERNAL_STORAGE权限;
 *  
 *  */
public class MyMediarRecorder extends Activity {

	private TextView stateView;
	private Button start,stop,play,finish;
	private MediaRecorder recorder;
	private File audioFile;
	private Uri fileUri;
	private MediaPlayer mediaPlayer;
	
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.media_recorder_layout);

		/* 获取组件对象 */
		stateView = (TextView) findViewById(R.id.stateView);
		start = (Button) findViewById(R.id.start);
		stop = (Button) findViewById(R.id.stop);
		play = (Button) findViewById(R.id.play);
		finish = (Button) findViewById(R.id.finish);
		
		start.setOnClickListener(listener);
		stop.setOnClickListener(listener);
		play.setOnClickListener(listener);
		finish.setOnClickListener(listener);

		stop.setEnabled(false);
		play.setEnabled(false);

	}

	/* 事件:处理用户的动作  */
	OnClickListener listener = new OnClickListener() {

		public void onClick(View v) {
			// TODO Auto-generated method stub
			switch (v.getId()) {
			case R.id.start:

				/* 开始录制 *//* 需要一个MediaRecorder对象 */
				recorder = new MediaRecorder();

				/* 指定MIC(Microphone audio source) */
				recorder.setAudioSource(MediaRecorder.AudioSource.MIC);

				/* 指定音频文件保存的格式 */
				/* 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(Exception ex){
					Toast.makeText(MyMediarRecorder.this, "临时文件创建失败", 1000).show();
				}

				/* 设置文件的存储位置 */
				recorder.setOutputFile(audioFile.getAbsolutePath());

				/* 开始录制 */
				try{
					/* 准备 */
					recorder.prepare();
				}catch(Exception ex){
					Toast.makeText(MyMediarRecorder.this, "录音失败", 1000).show();
				}

				/* 开始 */
				recorder.start();
				stateView.setText("正在录制...");
				start.setEnabled(false);
				play.setEnabled(false);
				stop.setEnabled(true);

				break;

				/*********************************************************/	
			case R.id.stop:

				/* 停止录制 */
				recorder.stop();

				/* 释放资源 */
				recorder.release();

				/* 然后将录制的文件存储在MediaStore中 ,实现数据共享*/
				ContentValues values = new  ContentValues();
				values.put(MediaStore.Audio.Media.TITLE, "this is my first recored_audio");
				values.put(MediaStore.Audio.Media.DATE_ADDED, System.currentTimeMillis());
				values.put(MediaStore.Audio.Media.DATA, audioFile.getAbsolutePath());

				/* 获取插入数据的Uri */
				fileUri = getContentResolver().insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, values);

				/* 录制结束后 ,实例化一个MediaPlayer对象,播放*/
				mediaPlayer = new MediaPlayer();
				mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
					public void onCompletion(MediaPlayer mp) {

						/* 更新状态 */
						stateView.setText("准备录制...");
						play.setEnabled(true);
						start.setEnabled(true);
						stop.setEnabled(false);
					}
				});

				/* 准备播放 */
				try{
					mediaPlayer.setDataSource(audioFile.getAbsolutePath());
					mediaPlayer.prepare();
					
				}catch(Exception ex){
					
				}
				
				/* 更新状态 */
				stateView.setText("准备播放");
				play.setEnabled(true);
				start.setEnabled(true);
				stop.setEnabled(false);

				break;

			case R.id.play:
				
				/* 播放录音 *//* 在录音结束的时候,已经实例化了MediaPlayer , 做好了播放的准备 */
				mediaPlayer.start();
				
				/* 更新状态 */
				stateView.setText("正在播放");
				start.setEnabled(false);
				stop.setEnabled(false);
				play.setEnabled(false);
				
				
				break;

			case R.id.finish:
				
				/* 完成录制,返回录制的音频的Uri */
				Intent intent = new Intent();
				intent.setData(fileUri);
				this.setResult(RESULT_OK,intent);
				this.finish();
				
				break;
			default:
				break;
			}

		}

		private void finish() {
			// TODO Auto-generated method stub
			
		}

		private void setResult(int resultOk, Intent intent) {
			// TODO Auto-generated method stub
			
		}
	};

}



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics