第六十五讲:Android之多媒体(Media)(三)

知识使用才有价值,智能共享方显实力!

本讲内容:MediaRecoder 类 录音的使用

一、使用MediaRecorder录制音频实现步骤:

1、创建MediaRecorder对象

2、通过MediaRecoder对象的setAudioSource()方法设置录音的来源

3、通过MediaRecoder对象的setOutputFormat()设置输出格式

4、通过MediaRecoder对象的setAudioEncoder()、setAudioEncodeingBitRate(int
bitRate)、setAudioAudioSamling(int samplingRate)设置所录制的声音的编码格式、编码位率、采样率

5、通过MediaRecorder对象的setOutputFile(String
path)方法设置录制的音频文件的保存位置

6、调用MeidaRecorder对象的prepare()做预期准备录制

7、调用MediaRecorder对象的start()开始录制声音

我们通过一个例子感受一下,代码的讲解都写在注释里了

下面是MainActivity.java主界面文件:

public class MainActivity extends Activity implements OnClickListener {
	private Button start;
	private Button stop;
	private MediaRecorder mediaRecorder;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		start = (Button) findViewById(R.id.start);
		stop = (Button) findViewById(R.id.stop);
		start.setOnClickListener(this);
		stop.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.start:
			// 先检测下是否含有SDCard
			if (!Environment.getExternalStorageState().equals(
					Environment.MEDIA_MOUNTED)) {
				Toast.makeText(MainActivity.this, "SD卡不存在,请插入SD卡",
						Toast.LENGTH_LONG).show();
				return;
			}

			// 创建音频输出的文件路径
			File file = new File("/sdcard/"+ "dan"
					+ new DateFormat().format("yyyyMMdd_hhmmss",
							Calendar.getInstance(Locale.CHINA))+ ".amr");
			Toast.makeText(getApplicationContext(),
			"正在录音,录音文件在" + file.getAbsolutePath(), Toast.LENGTH_LONG).show();

			// 创建录音对象
			mediaRecorder = new MediaRecorder();
			// 从麦克风源进行录音
			mediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
			// 设置录制的声音输出格式
			mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
			// 设置声音的编码格式
			mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
			// 设置录音的输出(保存)的文件路径
			mediaRecorder.setOutputFile(file.getAbsolutePath());
			try {
				// 创建文件
				file.createNewFile();
				// 准备录制
				mediaRecorder.prepare();
			} catch (Exception e) {
				// TODO: handle exception
			}
			// 开始录制
			mediaRecorder.start();
			start.setText("录音中……");
			break;
		case R.id.stop:
			if (mediaRecorder != null) {
				mediaRecorder.stop();
				// 释放资源
				mediaRecorder.release();
				mediaRecorder = null;
				start.setText("录音");
			Toast.makeText(getApplicationContext(), "录音完毕",Toast.LENGTH_LONG).show();
			}
			break;
		}
	}

	@Override
	protected void onDestroy() {// 更加完美可以写
		if (mediaRecorder != null) {
			mediaRecorder.stop();
			// 释放资源
			mediaRecorder.release();
			mediaRecorder = null;
			start.setText("录音");
			Toast.makeText(getApplicationContext(), "录音完毕", Toast.LENGTH_LONG).show();
		}
		super.onDestroy();
	}
}

因为录音和写存储卡都需要权限声明,在AndroidManifest.xml注册:

    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

下面是运行结果:

录音文件在存储卡的根目录几个以dan开头的amr文件

本讲就到这里,Take your time and enjoy it

时间: 2024-08-04 21:41:56

第六十五讲:Android之多媒体(Media)(三)的相关文章

Android笔记(六十五) android中的动画——属性动画(propertyanimation)

补间动画只能定义起始和结束两个帧在“透明度”.“旋转”.“倾斜”.“位移”4个方面的变化,逐帧动画也只能是播放多个图片,无法满足我们日常复杂的动画需求,所以谷歌在3.0开始,推出了属性动画(property animation) 属性动画已经不再是针对View来设计的了,也不仅限定于只能实现移动.缩放.淡入淡出这几种动画操作,同时也不再是一种视觉上的动画效果了.它实际上是一种不断的对值进行操作的机制,并将值赋值到指定对象的指定属性上,可以是任意对象的任意属性. ValueAnimator Val

Android笔记(六十)Android总结:四大组件——BroadcastReceiver篇

什么是BroadcastReceiver BroadcastReceiver是Android体系的四大组件之一,本质上是一种全局的监听器,用于监听系统全局的广播消息,正式因为其本质为全局监听,因此可以非常方便的实现系统中不同组件之间的通信.也方便我们自己的app针对系统开机.电量低等广播做出相应反映.同时我们也可以自己发送广播,来实现不同组件之间的通信 系统接收短信广播,然后弹出Toast: package cn.lixyz.broadcastreceiver; import android.a

Android笔记(六十四) android中的动画——补间动画(tweened animation)

补间动画就是只需要定义动画开始和结束的位置,动画中间的变化由系统去补齐. 补间动画由一下四种方式: 1.AplhaAnimation——透明度动画效果 2.ScaleAnimation ——缩放动画效果 3.TranslateAnimation——位移动画效果 4.RotateAnimation——旋转动画效果 1.AplhaAnimation AplhaAnimation的参数: fromAlpha:动画开始时的透明度,0.0表示完全透明 toAlpha:动画结束时的透明度,1.0表示完全不透

Android Studio 第六十一期 - Android ToastUtil

代码已经整理好,效果如下如图: ? ?地址:https://github.com/geeklx/myapplication2018/tree/master/p005_toastutils 原文地址:http://blog.51cto.com/liangxiao/2085570

Android Studio 第六十期 - Android推流直播(斗鱼部分页面功能)

代码已经整理好,效果如下图: 地址:https://github.com/geeklx/myapplication2018/tree/master/p004_livedemo 原文地址:http://blog.51cto.com/liangxiao/2085562

Android Studio 第六十二期 - Android框架

开发一款任意APP的框架搭建以及类库使用,详见:https://github.com/geeklx/APPkuangjia 原文地址:http://blog.51cto.com/liangxiao/2130888

Android Studio 第六十三期 - Android框架 -RecycleView所有用法

最近在review代码,发现很多东西可以独立出来,效果如下图: github地址:https://github.com/geeklx/APPkuangjia/tree/master/baselibrary/src/main/java/com/haier/cellarette/baselibrary/recycleviewalluses 原文地址:http://blog.51cto.com/liangxiao/2136795

Android项目实战(三十六):给背景加上阴影效果

原文:Android项目实战(三十六):给背景加上阴影效果 圆角背景大家应该经常用: 一个drawable资源文件  里面控制corner圆角 和solid填充色 <shape xmlns:android="http://schemas.android.com/apk/res/android"> <corners android:radius="@dimen/dp_2"></corners> <solid android:c

Android MediaStore与Media.EXTERNAL_CONTENT_URI

MediaStore这个类是Android系统提供的一个多媒体数据库,android中多媒体信息都可以从这里提取.这个MediaStore包括了多媒体数据库的所有信息,包括音频,视频和图像,android把所有的多媒体数据库接口进行了封装,所有的数据库不用自己进行创建,直接调用利用ContentResolver去掉用那些封装好的接口就可以进行数据库的操作了.今天我就介绍一些这些接口的用法.    首先,要得到一个ContentResolver实例,ContentResolver可以这样获取,利用