AMR文件结构
轉(zhuǎn)自:http://blog.csdn.net/dinggo/article/details/1966444
https://blog.csdn.net/wlsfling/article/details/5875928
?
目錄
1.????概述
2.????AMR編碼方式
3.????AMR文件結(jié)構(gòu)示范圖
4.????AMR幀頭格式分析
5.????異常幀分析
6.????AMR幀讀取算法
7.????參考資料
1.??????概述
現(xiàn)在很多智能手機(jī)都支持多媒體功能,特別是音頻和視頻播放功能,而AMR文件格式是手機(jī)端普遍支持的音頻文件格式。
?
AMR,全稱是:Adaptive Multi-Rate,自適應(yīng)多速率,是一種音頻編碼文件格式,專用于有效地壓縮語音頻率。
?
AMR音頻主要用于移動(dòng)設(shè)備的音頻壓縮,壓縮比非常高,但是音質(zhì)比較差,主要用于語音類的音頻壓縮,不適合對(duì)音質(zhì)要求較高的音樂類音頻的壓縮。
?
下面是兩個(gè)AMR示范文件,一個(gè)是新聞?lì)?#xff0c;一個(gè)是歌曲,可以聽出來,音樂類壓縮成AMR格式后,音質(zhì)大大降低。
| 編號(hào) | 文件名 | 文件長(zhǎng)度 | 時(shí)長(zhǎng) |
| 1 | h.amr??????????????(歌曲) | 409KB | 04:21 |
| 2 | zbc1217.amr | 242KB | 02:36 |
?
?
?
?
?
?
?
2.????????AMR編碼方式
AMR有多種編碼方式,每種編碼方式的采樣頻率不同:
?
| ? | 規(guī)格 | 比特率(kbps) | 音頻幀大小(字節(jié)) | 幀頭(1個(gè)字節(jié)) | 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 |
?
說明:
04 的二進(jìn)制:00000100
0C?的二進(jìn)制:00001100
?
說明:
l?????????比特率是指將數(shù)字聲音由模擬格式轉(zhuǎn)化成數(shù)字格式的采樣率,采樣率越高,還原后的音質(zhì)就越好。
?
l?????????比特率值與現(xiàn)實(shí)音頻對(duì)照:
16kbps=電話音質(zhì)
24kbps=增加電話音質(zhì)、短波廣播、長(zhǎng)波廣播、歐洲制式中波廣播
40kbps=美國制式中波廣播
56kbps=話音
64kbps=增加話音(手機(jī)鈴聲最佳比特率設(shè)定值、手機(jī)單聲道MP3播放器最佳設(shè)定值)
112kbps=FM調(diào)頻立體聲廣播
128kbps=磁帶(手機(jī)立體聲MP3播放器最佳設(shè)定值、低檔MP3播放器最佳設(shè)定值)
160kbps=HIFI高保真(中高檔MP3播放器最佳設(shè)定值)
192kbps=CD(高檔MP3播放器最佳設(shè)定值)
256kbps=Studio音樂工作室(音樂發(fā)燒友適用)
?
l?????????音頻數(shù)據(jù)幀大小的計(jì)算:
amr?一幀對(duì)應(yīng)20ms,那么一秒有50幀的音頻數(shù)據(jù)。由于比特率不同,每幀的數(shù)據(jù)大小也不同。
如果比特率是12.2kbs,那么每秒采樣的音頻數(shù)據(jù)位數(shù)為:
12200 / 50 = 244bit = 30.5byte,取整為31字節(jié)。
取整要四舍五入。
再加上一個(gè)字節(jié)的幀頭,這樣數(shù)據(jù)幀的大小為32字節(jié)。
3.??????AMR文件結(jié)構(gòu)示范圖
下面是一個(gè)AMR文件示范:
?
?
從圖中可以看出,所有AMR文件頭標(biāo)志是6個(gè)字節(jié)。(最后一個(gè)字節(jié)是換行符“/n”)
后面就緊跟的是音頻幀。這個(gè)文件是每幀32字節(jié)。
?
| 文件頭 |
| 語音幀?1 |
| 語音幀?2 |
| … |
?
?
4.??????AMR幀格式分析
?
AMR語音幀格式為幀頭和語音數(shù)據(jù)組成。
| 幀頭 | 語音數(shù)據(jù) |
?
?
?
?
AMR語音幀頭占1個(gè)字節(jié),如下圖所示:
?
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| P | FT | Q | P | P | |||
| 0 | ? | ? | ? | ? | 0 | 0 | 0 |
?
?
其中:
P = 0;
FT:Frame Type,對(duì)應(yīng)不同編碼模式。(參見“2. AMR編碼方式”中表格中的說明),
用法:在解析了音頻幀的FT數(shù)據(jù)之后,就可以根據(jù)?“”AMR編碼方式表格“”來確定這個(gè)音頻文件的比特率。
Q:幀質(zhì)量指示器,0:表示為壞幀。
后面的P補(bǔ)0。
5.??????異常幀分析
下圖是一個(gè)出現(xiàn)異常幀的示例:(zbc1217.amr)
?
?
從上圖可以看見,本amr音頻幀頭都是0x3C,但是在0x000091e6處,幀頭字節(jié)為0x44。與0x3C不一致。而在0x00009243處,才恢復(fù)到0x3C。
?
對(duì)異常幀的簡(jiǎn)單處理辦法是,遇到異常幀就跳過異常幀。后面的讀幀算法有描述。
?
6.??????AMR幀讀取算法
因?yàn)榭赡艽嬖诋惓?#xff0c;所以不一定所有的語音幀大小一致,對(duì)于跟正常幀大小不一致的,或者幀頭跟正常幀頭不一致的,就不交給解碼器,直接拋棄該壞幀。
?
讀取幀的算法,用C語言來編寫,readAMRFrame.c,JAVA可以用類似的方法。
下面是算法描述流程圖。
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
后記
采樣率,比特率,文件格式的說明:
?
通俗的講采樣頻率是指計(jì)算機(jī)每秒鐘采集多少個(gè)信號(hào)樣本。它用赫茲(Hz)來表示。
以上文中提到數(shù)據(jù)為例:
amr?一幀對(duì)應(yīng)20ms,這個(gè)數(shù)值跟采樣率的關(guān)系:
1s=1000ms
20ms = 1000ms/50
采樣率為50hz
?
比特率:
音頻文件專用算法:【比特率】(kbps)=【量化采樣點(diǎn)】(kHz)×【位深】(bit/采樣點(diǎn))×【聲道數(shù)量】(一般為2)
?
【比特率】(kbps) = 采樣率值×采樣大小值×聲道數(shù) bps
?
以電話為例,每秒3000次取樣,每次取樣是7比特(bit),那么電話的比特率是21000。
?
反過來,知道了比特率跟采樣率,可以知道每次采樣的數(shù)據(jù)是多少bit,
12200 / 50 = 244bit = 30.5byte,取整為31字節(jié)。取整要四舍五入。
(為什么要四舍五入呢?猜測(cè)是因?yàn)樵趯懭胛募臅r(shí)候是按照 8 bits = 1 byte 來對(duì)齊的)
?
?
https://zhidao.baidu.com/question/1539029237582451067.html
?
如果把原始16位深調(diào)到32位,那么精度增大。就像一座1000米的山,原來有10級(jí)臺(tái)階,現(xiàn)在修成100級(jí)臺(tái)階,但高度沒變還是1000米。此外16位到32位也不是增加一倍,而是2的32-16=16次冪即65536倍。
?
量化精度:
??? 聲波在轉(zhuǎn)為數(shù)字的過程中不是只有采樣率會(huì)影響原始聲音的完整性,另一個(gè)亦具有舉足輕重的參數(shù)——量化精度,也是相當(dāng)?shù)闹匾R话銇碚f,音質(zhì)分辨率就是大家常說的bit數(shù)。目前,絕大多數(shù)的聲卡都已經(jīng)可以支持24bit的量化精度。
?那么,什么是量化精度呢?前面曾說明采樣頻率,它是針對(duì)每秒鐘所采樣的數(shù)量,而量化精度則是對(duì)于聲波的“振幅”進(jìn)行切割,形成類似階梯的度量單位。所以,如果說采樣頻率是對(duì)聲波水平進(jìn)行的X軸切割,那么量化精度則是對(duì)Y軸的切割,
切割的數(shù)量是以最大振幅切成2的n次方計(jì)算,n就是bit數(shù)。
??? 舉個(gè)例子,如果是8bit,那么在振幅方面的采樣就有256階,若是16bit,則振幅的計(jì)量單位便會(huì)成為65536階,越多的階數(shù)就越能精確描述每個(gè)采樣的振幅高度。如此,也就越接近原始聲波的“能量”,在還原的過程序也就越接近原始的聲音了。
?
【轉(zhuǎn)貼掃盲】位深度、采樣率以及碼率:
http://blog.renren.com/share/233588808/4959169016/0
?
轉(zhuǎn)載于:https://www.cnblogs.com/zhangxuan/p/8492905.html
總結(jié)
- 上一篇: 20001数的表示
- 下一篇: Web前端大作业——城旅游景点介绍(HT