您的位置:首页 > 移动开发 > Android开发

Android之录音(一)

2016-08-11 17:48 204 查看
音频数据每秒的传输率精准度是根据采样率(Hz)和量化位数(bit)和有声道数(bit/s)来衡量或决定的,量化位数越高,信号动态范围越大,音频信号就越有可能接近原始音频信号,音频文件也就越大。
数据率=采样频率(Hz)×量化位数(bit)×声道数(bit/s)
bit和byte
1bite表示1位
1byte表示1字节
1byte=8bit

android提供了两个API用于实现录音功能:
1、android.media.AudioRecord
主要实现边录边播(AudioRecord+AudioTrack)以及对音频的实时处理
优点:语音的实时处理,可以用代码实现各种音频的封装
缺点:输出的是PCM语言数据,如果保存成音频文件,是不能够被播放器播放的,所以必须先写代码实现数据的编码以及压缩,可以用AudioTrack进行pcm的播放
2、android.media.MediaRecorder
已经集成了录音、编码、压缩等,支持少量的音频格式,大概有.acc(api16).amr .3gp
优点:功能大部分已经封装好,直接调用相关结构即可,代码量小,易用
缺点:无法实时处理音频,输出的音频格式不是很多

AudioRecord的实现流程
(开启录音的时候需要新建一个线程,因为AudioRecord是边录边存,录完还要将录音写入数据流中)
1、创建一个Output数据流
2、构造一个AudioRecord对象,其中需要的最小录音缓存buffer大小可以通过getMinBufferSize()得到,如果buffer容量过小,将导致对象构造失败
3、初始化一个buffer,该buffer大于等于AudioRecord对象用于写声音数据的buffer大小。
4、开始录音
5、从AudioRecord中读取声音数据到初始化的buffer,将buffer中的数据导入数据流
6、停止录音
7、关闭录音
8、要播放录音的话需要用到AudioTrack
打开数据流,将数据流中的数据写到buffer中
在调用write()将buffer中的数据写到AudioTrack对象中

MediaRecorder实现流程
1、初始化对象
2、设置音频源
3、设置输出格式
4、设置输出文件
5、设置编码格式
6、prepare、start
7、stop、release

源码下载:(MediaRecorder和AudioRecord,第二种方式需要AudioTrack来播放) http://download.csdn.net/detail/manbas_j/9601070
http://www.cnblogs.com/Amandaliu/archive/2013/02/04/2891604.html
提到了音频的编码方式
http://blog.sina.com.cn/s/blog_4c070656010127tn.html
AudioRecord的基本录制与播放
http://blog.csdn.net/hellofeiya/article/details/7877687
MediaRecord的深入浅出

下个篇幅:进行录音文件的编码还有上传到服务器
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息