录制音频
文章目录
-
- 录制音频
-
- 1、AndroidMediaRecorder架构详解
- 2、MediaRecorder状态图
- 3、 使用MediaRecorder类录制视频基本步骤如下:
-
- 3.1.调用new MediaRecorder()创建MediaRecorder对象。
- 3.2 调用MediaRecorder对象的setAudioSource()方法设置声音来源,
- 3.3. 调用MediaRecorder对象的setOutputFormat()方法设置输出文件的格式。
- 3.4. 设置所录制的音频和视频的编码格式、编码位率等
- 3.5 调用MediaRecorder对象的setOutputFile(String path)方法设置所录制视频文件的保存位置。
- 3.6 调用MediaRecorder对象的setPreviewDisplay(Surface sv)方法设置使用哪个SurfaceView来显示视频预览。
- 3.7 调用MediaRecorder对象的prepare()方法准备录制视频。
- 3.8. 调用MediaRecorder对象的start()方法开始录制视频。
- 3.9 录制完成,调用MediaRecorder对象的stop()方法停止录制,并调用release()方法释放资源。
1、AndroidMediaRecorder架构详解
在android中录制音频有两种方式,MediaRecorder和AudioRecord。两者的区别如下:
(1) MediaRecorder
录制的音频文件是经过压缩后的,需要设置编码器,并且录制的音频文件可以用系统自带的Music播放器播放。MediaRecorder已经集成了录音、编码、压缩等,并支持少量的录音音频格式,但是这也是他的缺点,支持的格式过少并且无法实时处理音频数据。
(2) AudioRecorder
主要实现对音频实时处理以及边录边播功能,相对MediaRecorder比较专业,在声音录制过程中,可以处理采集的声音数据,如降噪、合成等。过程为一段一段进行录制然后得到数据分别进行处理。录制的是PCM格式的音频文件,如果保存成音频文件,是不能够被播放器播放的,需要用AudioTrack来播放,所以必须先写代码实现数据编码以及压缩。
2、MediaRecorder状态图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eetZVJVX-1598595416228)(E:\StudyNotes\TyporaNotes\移动终端高级开发####图片\wps4.png)]
⭐️ Initial:初始状态,当使用new()方法创建一个MediaRecorder对象或者调用了reset()方法时,该MediaRecorder对象处于Initial状态。在设定视频源或者音频源之后将转换为Initialized状态。另外,在除Released状态外的其它状态通过调用reset()方法都可以使MediaRecorder进入该状态。
⭐️ Initialized:已初始化状态,可以通过在Initial状态调用setAudioSource()或setVideoSource()方法进入该状态。在这个状态可以通过setOutputFormat()方法设置输出格式,此时MediaRecorder转换为DataSourceConfigured状态。另外,通过reset()方法进入Initial状态。
⭐️ DataSourceConfigured:数据源配置状态,这期间可以设定编码方式、输出文件、屏幕旋转、预览显示等等。可以在Initialized状态通过setOutputFormat()方法进入该状态。另外,可以通过reset()方法回到Initial状态,或者通过prepare()方法到达Prepared状态。
⭐️ Prepared:就绪状态,在DataSourceConfigured状态通过prepare()方法进入该状态。在这个状态可以通过start()进入录制状态。另外,可以通过reset()方法回到Initialized状态。
⭐️ Recording:录制状态,可以在Prepared状态通过调用start()方法进入该状态。另外,它可以通过stop()方法或reset()方法回到Initial状态。
⭐️ Released:释放状态(官方文档给出的词叫做Idle state 空闲状态),可以通过在Initial状态调用release()方法来进入这个状态,这时将会释放所有和MediaRecorder对象绑定的资源。
⭐️ Error:错误状态,当错误发生的时候进入这个状态,它可以通过reset()方法进入Initial状态。