Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 3495|回復: 0
打印 上一主題 下一主題

MP3文件格式解析3

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-4-11 05:01:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
III, 数据帧
5 w6 n, u" G/ x+ p% N0 Q2 V6 z
  k. B" _  m3 Y5 J$ R; V! R1 L数据帧往往有多个,至于有多少,由文件大小和帧大小来决定。每个帧都有一个四字节长的帧头,接下来可能有两个字节的CRC校验,其存在由帧头中的具体信息决定。接着就是帧的实体数据,也就是MAIN_DATA了。 . L$ {# G) i- J9 J$ l# p
: F! l3 U4 q$ N9 e9 @0 s
A,帧头结构如下: 8 k# g4 H% J" v% ~, g  |
) f, Z" o) c) l
位置     长度     描述8 _' G) g  ~: p1 w) W- C2 C
(BIT)  (BITS)
7 T* d7 ]; c7 N: J————————————————————————————) j8 C" F( M9 K* e& u* J5 J) T
31-19   12       Frame sync(0xFFF)
0 g0 d+ `& t+ S7 ]& A1 T0 W18/17    2        Layer, 00 – reserved, 01 – Layer III% p8 W; ?7 l5 `4 w! \
                         10 – Layer II, 11 - Layer I
0 `! b2 x) x4 T5 p' @/ q$ h16       1         protection_bit, 0 意味着受CRC保护,帧头后面跟16位的CRC。6 c" |+ C$ @: |/ l/ i* y# a
15-12    4        bitrate_index, 比特率4 p3 `# D) B' R4 H+ f# t/ Q7 e
11-10    2        sampling_frequency,    00 – 44.1KHz, 01 – 48KHz4 q" R( o; [! c% a
                                         10 – 32 KHz,  11 – 保留& G. w. ~3 Y' t, d# j
9        1        padding_bit,1 意味着帧里包含padding位,仅当采样频率为44.1KHz时发生。
1 `9 j: f; }$ @, U6 ^6 [8        1        private_bit
1 N2 n' E' m& [1 P. P1 I8 z7-6     2        mode,    00-stereo,       01-joint stereo(intensity stereo and/or ms_stereo)2 U: z  \( v3 A1 s. x( f$ s8 B
                           11- dual_channel, 11 – single_channel+ `6 T. K/ B: K$ S0 @
5-4      2        mode_extension,在Layer III中表示使用了哪一种joint stereo编码方式。9 X' p' q) z7 Q5 Z" I
                            Intensity_stereo   ms_stereo
8 H4 d! w2 I6 G5 [) J                   00            off                off6 t( M% G0 N+ D  J# n$ g
                   01            on                 off
% g4 H9 G1 G8 M- H" f                   10            off                on6 v1 q; J" W: C, q/ y# a9 m
                   11            on                 on
0 o$ k$ {; a. u" [4 G8 A  W& S6 l5 l3        1        copyright,1 表示受版权保护。
$ d) b! M; `- r1 [" \6 b8 Z0 E! g2        1        original,0表示该bitstream是一个copy,1表示是original.9 D) A' i  t! w5 o
1-0      2        emphasis,表示会使用哪一种de-emphasis。
: I% t% o5 I! y6 ?- @5 ~" Z$ C, l                   00 - no emphasis,     01 – 50/15 microsec. Emphasis, K5 x3 \# }1 `# T/ O9 v$ x
                   10 – reserved,        11 – CCITT J.17 / h" b9 ^$ a* r# W
3 Q' y8 K1 K2 s1 Q7 x
1)      无论帧长是多少,每帧的播放时间都是26ms
) c+ V+ y  p* M- T# ]- Z: J( O0 u) _0 e
5 P) B, \$ w8 s5 l2)      数据帧大小: 0 `& E5 D8 G/ s- X$ m3 P. @* l  ~
: B! n+ d$ U3 y' j. k+ J
FrameSize = 144 * Bitrate / SamplingRate + PaddingBit(bytes)5 X8 r/ v4 M" T8 q6 ]8 e: G
当144 * Bitrate / SamplingRate不能被8整除,则加上相应的paddingBit.
9 S/ R3 c% d) C, z, c1 \- c, r
/ j  k" f/ k9 u& y5 E
B,MAIN_DATA:
9 d/ N, I$ Q. p! Z) @, \6 e
/ k7 I/ q- d6 g6 J6 a6 [! YMP3的granule包含18 * 32个subband采样。每个数据帧含有两个granule的数据,其内容结如下:) _4 C8 P! g: w
       - main_data_end pointer
( I5 p; i$ t; a: y+ R$ W2 B: x       - side info for both granules (scfsi)
4 Z5 r3 C: K! ?- b. r( s, D       - side info granule 1& i0 \4 Q9 z" I, b. l
       - side info granule 22 p" }: I/ [- u1 w
       - scalefactors and Huffman code data granule 1( ?  M5 {: W/ ~2 S
       - scalefactors and Huffman code data granule 2 3 Z" l" P" S# m
3 ?" l- Z- B( B. f- H/ s& ]' {
主要数据里包含了scalefactors, Huffman encoded data和ancillary information。其内容不再详叙,可以参考MP3 SPEC-IS0 11172-3 AUDIO PART。我们一般用的都是立体声,scfsi的长度为32个字节。 ! ]1 n, M1 |, j( {9 G! I5 O
; t/ T8 a, c: s9 U& ~0 \% p9 a1 Q
这里要解释的一个概念就是位流――bitstream。我们平常接触到的数据都是整数,最小的单位就是byte后者char。虽然我们也会用一个字节里的不同位来表示不同的含义,但总的来说,我们在出来数据的时候还是把它当作一个个字节看待。但对MP3这种数据格式来说,这是行不通的。在解码时,它的数据输入就是一个个比特流。其中一个或几个比特会是你的采样数据或者信息编码。你需要从整个MAIN_DATA里提取你所需要的以BIT为单位的参数和输入信号,从而进行解码。所以我们需要一个子程序,getbit(n),也就是从缓冲中提取所需要的位,并形成一个新的整数,作为我们的输出。 * b$ V7 d7 o$ a' ?' g7 g

& F+ O+ _$ B0 w' b6 `" IC,LAME标签帧 / {3 @8 \2 ]+ t" A8 Q! V; J) L

( ?3 H& a/ O$ k8 o! ]; F4 O可是,当你真的打开一个MP3文件的时候,你会发现,很奇怪,很多时候第一个数据帧的帧头后面的32个字节居然都为0,这是为什么呢,这么奇怪的解码信息该如何解释?找到MP3 INFO TAG REV SPECIFICATION的网站,我才明白,原来第一帧并不是真正的数据帧,而是LAME编码的标志帧。
3 u0 L  E* X1 Z* w/ r! A
- i! \+ U. ?9 s4 j这里又要牵涉到两个概念:CBR和VBR。CBR表示比特率不变,也就是每帧的长度是一致的,它以字符串“INFO”为标记。VBR是Variable BitRate的简称,也就是每帧的比特率和帧的长度是变化的,它以字符串“Xing”为标记。同时,它还存放了MP3文件里帧的总个数,和100个字节的播放总时间分段的帧的INDEX,还有其他一些参数,这被称为Zone A,传统Xing VBR标签数据,共120个字节。
% Y+ S( [) A. a: Y" ]4 E% f1 l* c4 O6 F0 x, [) Z
在二进制文本编辑器里我们还可看到一个字符串“LAME”,并且后面清楚地跟着版本号。这就是20个字节的Zone B初始LAME信息,表示该文件是用LAME编码技术。接下来一直到该帧结束就是Zone C-LAME标签。
$ f* S, q9 b& `+ i9 A6 Q9 Q8 v' p) Q8 y9 `
3,      相关资料 9 n2 g1 R) M! U
2 e1 A- u- c& d* B" a
× Mp3 Info Tag rev 1 specifications - draft 0
6 K) ?2 w8 W$ r1 h/ Z& n4 Lhttp://gabriel.mp3-tech.org/mp3infotag.html
' |: L7 N' c' q. A/ j* r7 P
# C5 A0 B* l  O× MP3 文件格式 2 K" Z& r- {8 B' p  T
http://bbs.gliet.edu.cn/bbs/inde ... post&id=1813051( e" O* t# u/ c- C
2 I$ ^$ o, @+ J9 B) i; H$ P/ T2 V
× MP3 SPEC-IS0 11172-3 AUDIO PART
- Z0 y' L* r1 q; p8 fhttp://www.ece.cmu.edu/~ece796/documents/MPEG-1_Audio_CD.doc
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

首頁|手機版|Chip123 科技應用創新平台 |新契機國際商機整合股份有限公司

GMT+8, 2024-11-16 07:31 AM , Processed in 0.146008 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表