博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android多媒体-MediaRecorder 录制音视频
阅读量:6305 次
发布时间:2019-06-22

本文共 4515 字,大约阅读时间需要 15 分钟。

不多说,直接上代码,有具体凝视

MyAudioRecord.java

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);//setAudioSource/setVedioSource			//指定OutputFormat,我们选择3gp格式			//其它格式,MPEG-4:这将指定录制的文件为mpeg-4格式			//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;					}	}}
AndroidManifest.xml

转载地址:http://eonxa.baihongyu.com/

你可能感兴趣的文章
注册和上传文件(头像)
查看>>
使用OVS
查看>>
键盘回收的几种方法
查看>>
Python(条件判断和循环)
查看>>
day4 linux安装python
查看>>
LeetCode Container With Most Water (Two Pointers)
查看>>
vue (v-if show 问题)
查看>>
https基础
查看>>
css3 canvas之刮刮卡效果
查看>>
并查集模板
查看>>
RESTful Mongodb
查看>>
BZOJ3237:[AHOI2013]连通图(线段树分治,并查集)
查看>>
如何提高Ajax性能
查看>>
Android--自定义加载框
查看>>
LINUX下 lamp安装及配置
查看>>
BZOJ3105 [cqoi2013]新Nim游戏
查看>>
困惑的前置操作与后置操作
查看>>
SDNU 1269.整数序列(水题)
查看>>
BZOJ 2118 Dijkstra
查看>>
Go语言基础之结构体
查看>>