天天好味道

没钱没权没户口,靠走靠吼靠小狗
随笔 - 66, 文章 - 1, 评论 - 524, 引用 - 5

导航

<2007年6月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

留言簿(12)

随笔分类

随笔档案

文章档案

我的链接

搜索

最新评论

阅读排行榜

评论排行榜

AMR格式和在s60上的解码

AMR 文件格式

AMR 有8种采样率,分别是

Mode 0 - AMR 4.75 - Encodes at 4.75kbit/s
Mode 1 - AMR 5.15 - Encodes at 5.15kbit/s
Mode 2 - AMR 5.9 - Encodes at 5.9kbit/s
Mode 3 - AMR 6.7 - Encodes at 6.7kbit/s
Mode 4 - AMR 7.4 - Encodes at 7.4kbit/s
Mode 5 - AMR 7.95 - Encodes at 7.95kbit/s
Mode 6 - AMR 10.2 - Encodes at 10.2kbit/s
Mode 7 - AMR 12.2 - Encodes at 12.2kbit/s

每种格式对应的帧的大小如下。
CMR Mode Frame size (bytes)
0 AMR 4.75 13
1 AMR 5.15 14
2 AMR 5.9 16
3 AMR 6.7 18
4 AMR 7.4 20
5 AMR 7.95 21
6 AMR 10.2 27
7 AMR 12.2 32


三、文件格式
Amr的文件格式极为简单,如图1所示:

文件最开始时6个字节的header,
[#!AMR\n] 括号间的部分
(或者十六进制表示为 0x2321414d520a ).

接下来就是连续的语音帧,

+----------------------+
| Header |
+----------------------+
| Speech Frame 1 |
+----------------------+
: ... :
+----------------------+
| Speech Frame n |
+----------------------+

每个帧包含一个帧头+语音数据,帧头是一个字节
0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
|P| FT |Q|P|P|
+-+-+-+-+-+-+-+-+

P设置为0
FT为编码模式,上面已经列举了可用的值。(0~7)

Q为帧质量指示器,如果为0表明帧被损坏,接受者需要将RX_TYPE设置成SPEECH_BAD或者SID_BAD。

具体在S60中可以如创建codec
#define KAdvancedUidCodecAMRToPCM16 0x101FAF67
iCodec = CMMFCodec::NewL( TUid::Uid( KAdvancedUidCodecAMRToPCM16 ) );
KAdvancedUidCodecAMRToPCM16 是一个Nokia魔鬼数字.
在跳过头6个字节后,再多读一个字节,获取其2,3,4,5bit.就可以知道实际的采样率和桢长度.
然后就一个桢一个桢的读,调用
iCodec的ProcessL方法转换为PCM16. 对了, PCM16每桢的长度为320

posted on 2007-06-18 11:35 jzhang 阅读(1570) 评论(3)  编辑 收藏

评论

# re: AMR格式和在s60上的解码

好像不大能看懂,不过既然来了,还是支持一把,辛苦了
http://www.dell86.org.cn/ DELL电脑
2007-06-25 23:34 | DELL

# re: AMR格式和在s60上的解码

请问有AMR解压成pcm数据的算法资料么?
suyang0.0@163.com   不胜感激!!
2007-08-03 14:29 | Gorgr

# 我现在使用的是内建的解码器

所以没有深入研究。
2007-08-03 17:18 | jzhang
标题  
姓名  
主页
验证码 *
内容   
  登录  使用高级评论  Top
[使用Ctrl+Enter键可以直接提交]