Android amr语音编解码解惑
来源:互联网 发布:公众号管理平台源码 编辑:程序博客网 时间:2024/06/03 14:24
关于android中的语音压缩编码,今天算是好好的研究了一下,有了小小的心得:
首先关于采集到得声音源的格式是PCM-16bit的格式,什么是PCM格式,大家看下面的这篇文章:
http://blog.csdn.net/tkboy/archive/2009/12/19/5038947.aspx
PCM就是无压缩的声音源,PCM信号是由[1]、[0]等符号构成的数字信号,android设备采取的声音源也就是这种格式,我们也正是对这种格式进行的压缩编码。
编码库不是我自己写的,是用bambuser中提取出来的,测试发现,这个库还真是他妈的强大,强大到无以复加的地步,每次编码的时候是这样的:
read= mAudioRecorder.read(arrayOfByte1,0,320);
encodeLength = mAmrEncoder.encode(arrayOfByte1,0,read,arrayOfByte2,AmrEncoder.MR475);
为什么是320呢?
请教了一位做SIP的朋友,是这样说的:
每320个字节或他的倍数的字节打包一次
可能这个就是原因吧,但是其实我对这个还是不是很理解,然后我们技术总监是这样说的:
传统是MS的,语音帧的最小单位是20m,每20ms对应的数据就是320字节,当然这是对应16bit,8Khz.
怎么计算出来的,有高手的指点下.
好,给大家说下编码后的情况,加深大家对这方面的了解:
这320字节的PCM-16语音经过编码后,编程的长度就是13个字节,也就是amr nb的语音格式,如果我们要通过AudioTrack来播放的话,就得用AmrDecoder来进行解码,将这13个字节还原成为320字节的PCM来进行播放。
AMR目前来说效率是比较高的,压缩比为:320:13 ,320字节压缩成为13字节
GSM也可以考虑: 320:33,320字节给你压缩成33字节
首先关于采集到得声音源的格式是PCM-16bit的格式,什么是PCM格式,大家看下面的这篇文章:
http://blog.csdn.net/tkboy/archive/2009/12/19/5038947.aspx
PCM就是无压缩的声音源,PCM信号是由[1]、[0]等符号构成的数字信号,android设备采取的声音源也就是这种格式,我们也正是对这种格式进行的压缩编码。
编码库不是我自己写的,是用bambuser中提取出来的,测试发现,这个库还真是他妈的强大,强大到无以复加的地步,每次编码的时候是这样的:
read= mAudioRecorder.read(arrayOfByte1,0,320);
encodeLength = mAmrEncoder.encode(arrayOfByte1,0,read,arrayOfByte2,AmrEncoder.MR475);
为什么是320呢?
请教了一位做SIP的朋友,是这样说的:
每320个字节或他的倍数的字节打包一次
可能这个就是原因吧,但是其实我对这个还是不是很理解,然后我们技术总监是这样说的:
传统是MS的,语音帧的最小单位是20m,每20ms对应的数据就是320字节,当然这是对应16bit,8Khz.
怎么计算出来的,有高手的指点下.
好,给大家说下编码后的情况,加深大家对这方面的了解:
这320字节的PCM-16语音经过编码后,编程的长度就是13个字节,也就是amr nb的语音格式,如果我们要通过AudioTrack来播放的话,就得用AmrDecoder来进行解码,将这13个字节还原成为320字节的PCM来进行播放。
AMR目前来说效率是比较高的,压缩比为:320:13 ,320字节压缩成为13字节
GSM也可以考虑: 320:33,320字节给你压缩成33字节
/**
* @author 张兴业
* 邮箱:xy-zhang#163.com
* android开发进阶群:278401545
*
*/
- Android amr语音编解码解惑
- android amr编解码
- android amr编解码
- android语音编解码:speex编解码
- iOS、安卓IM语音聊天(AMR编解码)
- AMR音频编解码
- AMR音频编解码
- windows mobile平台下amr语音编解码测试程序(支持录音,VOIP实时语音)
- amr与wave编解码
- Ios实现amr编解码
- 语音编解码标准
- 闲聊语音编解码
- 语音编解码记录
- 闲聊语音编解码
- 语音编解码
- AMR 文件解析及编解码流程
- AMR 文件解析及编解码流程
- AMR 文件解析及编解码流程
- redhat下node websocket服务初探
- 关于Android的HTTP客户端的小秘密
- Java的沙箱机制
- VC中 spin控件的使用
- SQL SERVER2005发送邮件
- Android amr语音编解码解惑
- VC中tab控件的使用
- 如何查看用户当前shell和修改用户登陆时的默认shell
- js confirm()方法的用法
- 点击按钮链接 163邮箱的邮箱验证!(借鉴别人的)
- Check Box的使用
- linux系统路由功能
- hiernate数据更新模版代码
- 【Java核心技术】守护线程总结