現在很多智能手機都支持多媒體功能,特別是音頻和視頻播放功能,而AMR文件格式是手機端普遍支持的音頻文件格式。
AMR,全稱是:Adaptive Multi-Rate,自適應多速率,是一種音頻編碼文件格式,專用于有效地壓縮語音頻率。
AMR音頻主要用于移動設備的音頻壓縮,壓縮比非常高,但是音質比較差,主要用于語音類的音頻壓縮,不適合對音質要求較高的音樂類音頻的壓縮。
下面是兩個AMR示范文件,一個是新聞類,一個是歌曲,可以聽出來,音樂類壓縮成AMR格式后,音質大大降低。
編號 |
文件名 |
文件長度 |
時長 |
1 |
h.amr (歌曲) |
409KB |
04:21 |
2 |
zbc1217.amr |
242KB |
02:36 |
AMR有多種編碼方式,每種編碼方式的采樣頻率不同:
|
規格 |
比特率(kbps) |
音頻幀大。ㄗ止潱 |
幀頭(字節) |
FT |
0 |
AMR 4.75 |
|
13 |
04 00000100 |
0000 |
1 |
AMR 5.15 |
|
14 |
0C 00001100 |
0001 |
2 |
AMR 5.9 |
|
16 |
14 00010100 |
0010 |
3 |
AMR 6.7 |
|
18 |
1C 00011100 |
0011 |
4 |
AMR 7.4 |
|
20 |
24 00100100 |
0100 |
5 |
AMR 7.95 |
|
21 |
2C 00101100 |
0101 |
6 |
AMR 10.2 |
|
27 |
34 00110100 |
0110 |
7 |
AMR 12.2 |
|
32 |
3C 00111100 |
0111 |
說明:
l 比特率是指將數字聲音由模擬格式轉化成數字格式的采樣率,采樣率越高,還原后的音質就越好。
l 比特率值與現實音頻對照:
16kbps=電話音質
24kbps=增加電話音質、短波廣播、長波廣播、歐洲制式中波廣播
40kbps=美國制式中波廣播
56kbps=話音
64kbps=增加話音(手機鈴聲最佳比特率設定值、手機單聲道MP3播放器最佳設定值)
112kbps=FM調頻立體聲廣播
128kbps=磁帶(手機立體聲MP3播放器最佳設定值、低檔MP3播放器最佳設定值)
160kbps=HIFI高保真(中高檔MP3播放器最佳設定值)
192kbps=CD(高檔MP3播放器最佳設定值)
256kbps=Studio音樂工作室(音樂發燒友適用)
l 音頻數據幀大小的計算:
amr 一幀對應20ms,那么一秒有50幀的音頻數據。由于比特率不同,每幀的數據大小也不同。
如果比特率是12.2kbs,那么每秒采樣的音頻數據位數為:
12200 / 50 = 244bit = 30.5byte,取整為31字節。
取整要四舍五入。
再加上一個字節的幀頭,這樣數據幀的大小為32字節。
下面是一個AMR文件示范:
從圖中可以看出,所有AMR文件頭標志是6個字節。(最后一個字節是換行符“\n”)
后面就緊跟的是音頻幀。這個文件是每幀32字節。
文件頭 |
語音幀 1 |
語音幀 2 |
… |
AMR語音幀格式為幀頭和語音數據組成。
幀頭 |
語音數據 |
AMR語音幀頭占1個字節,如下圖所示:
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
P |
FT |
Q |
P |
P |
|||
0 |
|
|
|
|
0 |
0 |
0 |
其中:
P = 0;
FT:Frame Type,對應不同編碼模式。(參見“2. AMR編碼方式”中表格中的說明)
Q:幀質量指示器,0:表示為壞幀。
后面的P補0。
下圖是一個出現異常幀的示例:(zbc1217.amr)
從上圖可以看見,本amr音頻幀頭都是0x3C,但是在0x000091e6處,幀頭字節為0x44。與0x3C不一致。而在0x00009243處,才恢復到0x3C。
對異常幀的簡單處理辦法是,遇到異常幀就跳過異常幀。后面的讀幀算法有描述。
因為可能存在異常幀,所以不一定所有的語音幀大小一致,對于跟正常幀大小不一致的,或者幀頭跟正常幀頭不一致的,就不交給解碼器,直接拋棄該壞幀。
讀取幀的算法,用C語言來編寫,readAMRFrame.c,JAVA可以用類似的方法。
下面是算法描述流程圖。
l rfc3267
http://www.rfc-editor.org/rfc/rfc3267.txt
http://ietfreport.isoc.org/rfc/PDF/rfc3267.pdf
l 3GPP TS 26.104 V 6.1.0 (2004-03)
http://www.3gpp.org/ftp/Specs/html-info/26104-CRs.htm
l 3GPP AMR Floating-point Speech Codec
http://www.3gpp.org/ftp/Specs/html-info/26104.htm
l “amr編程匯總”
http://blog.csdn.net/windcao/archive/2006/01/04/570348.aspx
l 關于AMR文件格式的解釋
http://www.mcublog.com/blog/user1/11409/archives/2006/16832.html