Android 音频的录制

MediaRecorder类详解


手机一般都有麦克风和摄像头,而Android系统就可以利用这些硬件来录制音视频了。
为了增加对录制音视频的支持,Android系统提供了一个MediaRecorder的类。该类的使用也非常简单,下面让我们来了解一下这个类

一、结构

java.lang.Object->android.media.MediaRecorder


二、类概述:

用于录制音频和视频的一个类。

三、状态图:





说明:


与MediaPlayer类非常相似MediaRecorder也有它自己的状态图。下面是关于MediaRecorder的各个状态的介绍:


1、Initial:初始状态,当使用new()方法创建一个MediaRecorder对象或者调用了reset()方法时,该MediaRecorder对象处于Initial状态。在设定视频源或者音频源之后将转换为Initialized状态。另外,在除Released状态外的其它状态通过调用reset()方法都可以使MediaRecorder进入该状态。


2、Initialized:已初始化状态,可以通过在Initial状态调用setAudioSource()或setVideoSource()方法进入该状态。在这个状态可以通过setOutputFormat()方法设置输出格式,此时MediaRecorder转换为DataSourceConfigured状态。另外,通过reset()方法进入Initial状态。


3、DataSourceConfigured:数据源配置状态,这期间可以设定编码方式、输出文件、屏幕旋转、预览显示等等。可以在Initialized状态通过setOutputFormat()方法进入该状态。另外,可以通过reset()方法回到Initial状态,或者通过prepare()方法到达Prepared状态。


4、Prepared:就绪状态,在DataSourceConfigured状态通过prepare()方法进入该状态。在这个状态可以通过start()进入录制状态。另外,可以通过reset()方法回到Initialized状态。


5、Recording:录制状态,可以在Prepared状态通过调用start()方法进入该状态。另外,它可以通过stop()方法或reset()方法回到Initial状态。


6、Released:释放状态(官方文档给出的词叫做Idle state 空闲状态),可以通过在Initial状态调用release()方法来进入这个状态,这时将会释放所有和MediaRecorder对象绑定的资源。


7、Error:错误状态,当错误发生的时候进入这个状态,它可以通过reset()方法进入Initial状态。



提示: 与MediaPlayer相似使用MediaRecorder录音录像时需要严格遵守状态图说明中的函数调用先后顺序,在不同的状态调用不同的函数,否则会出现异常。

下面一个实例代码描述了的创建过程:


/**
	 * 开始录音
	 */
	private void startRecording() 
	{
		BaseUtils.printd(TAG, "startRecording");
		mParams.mFileName = mParams.mFileDir + System.currentTimeMillis() + "amr";
		mRecorder = new MediaRecorder();
		mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
		mRecorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);
		mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
		mRecorder.setOutputFile(mParams.mFileName);
		mRecorder.setOnInfoListener(mRecorderOnInfoListener);
		
		if(mParams.mMaxFileSize > 0)
		{
			mRecorder.setMaxFileSize(mParams.mMaxFileSize);
		}
		
		if(mParams.mMaxDurationSize > 0)
		{
			mRecorder.setMaxDuration(mParams.mMaxDurationSize);
		}
		
		try 
		{
			mRecorder.prepare();
			
			mRecorder.start();
			mObtainDecibelThread = new ObtainDecibelThread();
			mObtainDecibelThread.start();
		} 
		catch (Exception e) 
		{
			BaseUtils.printe("Exception", "Exception:" + e);
		}

		

	}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值