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的深入浅出
下个篇幅:进行录音文件的编码还有上传到服务器
数据率=采样频率(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的深入浅出
下个篇幅:进行录音文件的编码还有上传到服务器
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories