Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

MP3文件格式解析3

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-4-11 05:01:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
III, 数据帧
  g( c# M* P* x' O! f& k
% q. k3 J* o2 J: \+ V2 t0 B7 O) M数据帧往往有多个,至于有多少,由文件大小和帧大小来决定。每个帧都有一个四字节长的帧头,接下来可能有两个字节的CRC校验,其存在由帧头中的具体信息决定。接着就是帧的实体数据,也就是MAIN_DATA了。 ; l9 y  R" K1 N' K. B
1 O. Q5 p, m; J1 l
A,帧头结构如下: . Z* `# O& w: A

$ `9 E) V3 Y6 ?) G0 l. ^! j1 c位置     长度     描述
; [( F2 T2 W' U* k3 [6 }* K(BIT)  (BITS)3 p& G# S  o2 I& c3 l- a; f- F
————————————————————————————. O' W) l( f! f8 S3 b
31-19   12       Frame sync(0xFFF)
( w( D( z7 Q: M; J* [  |8 p/ G$ A18/17    2        Layer, 00 – reserved, 01 – Layer III
% F$ t5 p) P# b  e; m/ C% B4 H+ ]                         10 – Layer II, 11 - Layer I/ l' |% L2 o" \4 k/ |, F6 ~, z7 \& B
16       1         protection_bit, 0 意味着受CRC保护,帧头后面跟16位的CRC。
$ z$ Z) s( U+ A2 r5 m) S! \% E  ^15-12    4        bitrate_index, 比特率" {- b2 m7 L: s1 I% S& I7 N' d, D
11-10    2        sampling_frequency,    00 – 44.1KHz, 01 – 48KHz$ m5 |$ Z! {- t  Q5 e" Y
                                         10 – 32 KHz,  11 – 保留
2 C  f$ [3 R9 a& i9        1        padding_bit,1 意味着帧里包含padding位,仅当采样频率为44.1KHz时发生。
  o6 k1 N6 [4 |0 E2 l5 C# s8        1        private_bit
4 M' |4 R! r7 [, v1 j8 X7-6     2        mode,    00-stereo,       01-joint stereo(intensity stereo and/or ms_stereo)2 J, e3 B# P) n# g+ H9 E
                           11- dual_channel, 11 – single_channel
5 q( m( j- R9 X. Z8 z8 t0 P6 \5-4      2        mode_extension,在Layer III中表示使用了哪一种joint stereo编码方式。
7 e  D6 ~! Z' S. y3 |; F# i! N                            Intensity_stereo   ms_stereo& q0 V9 |% H* I; G
                   00            off                off1 _. @* z! o  H4 y7 ^) S
                   01            on                 off
% p6 d2 {7 s( ^$ J* M' _                   10            off                on4 e5 I3 I+ y$ W
                   11            on                 on
4 ~' E) O% ~7 f4 J+ M! V3        1        copyright,1 表示受版权保护。
$ m! K6 f6 f3 N  `2        1        original,0表示该bitstream是一个copy,1表示是original.
- v2 H7 [* n) w4 S+ M% n1-0      2        emphasis,表示会使用哪一种de-emphasis。& D0 e) M& f" h( ?0 m/ K
                   00 - no emphasis,     01 – 50/15 microsec. Emphasis
# K  l+ C- t4 B0 _                   10 – reserved,        11 – CCITT J.17
) B& m6 y" n- t, X
1 z9 j% o- \: ^9 A* v1)      无论帧长是多少,每帧的播放时间都是26ms
' ~0 ~, K- x( `4 ^: Q/ v8 o: U7 A2 ]4 R
2)      数据帧大小: 2 l8 [' h; u+ q6 U0 `

3 i+ q  B, W& h+ ^) FFrameSize = 144 * Bitrate / SamplingRate + PaddingBit(bytes)1 m6 {3 C8 E3 u
当144 * Bitrate / SamplingRate不能被8整除,则加上相应的paddingBit. 5 H) K9 V( ~. k& e
8 B) P# a% X# j4 z3 ~9 x
  T$ p( @" S- \8 O5 ~$ {
B,MAIN_DATA: 9 G1 M9 u* [4 X) p& {. n

) J# L' R! B4 P. QMP3的granule包含18 * 32个subband采样。每个数据帧含有两个granule的数据,其内容结如下:% T& k5 M# l+ x, E/ q: O
       - main_data_end pointer( E8 M- n8 B2 k- y3 @2 j/ M
       - side info for both granules (scfsi)
) k' c# E/ t4 H" v$ f  }& k$ ^& {       - side info granule 1
8 G) K  H3 `+ E& H+ y7 W  X       - side info granule 2: x. ~2 H1 i# B# q
       - scalefactors and Huffman code data granule 17 i, C: ?+ c! U  W8 O" _* L9 _
       - scalefactors and Huffman code data granule 2 0 e* D, s" j( u  _& s

# F6 q+ E% a' `8 M4 E7 a1 k# k主要数据里包含了scalefactors, Huffman encoded data和ancillary information。其内容不再详叙,可以参考MP3 SPEC-IS0 11172-3 AUDIO PART。我们一般用的都是立体声,scfsi的长度为32个字节。 7 \7 H; I, h, W) b
, K% O$ n: f6 y" p( k  p
这里要解释的一个概念就是位流――bitstream。我们平常接触到的数据都是整数,最小的单位就是byte后者char。虽然我们也会用一个字节里的不同位来表示不同的含义,但总的来说,我们在出来数据的时候还是把它当作一个个字节看待。但对MP3这种数据格式来说,这是行不通的。在解码时,它的数据输入就是一个个比特流。其中一个或几个比特会是你的采样数据或者信息编码。你需要从整个MAIN_DATA里提取你所需要的以BIT为单位的参数和输入信号,从而进行解码。所以我们需要一个子程序,getbit(n),也就是从缓冲中提取所需要的位,并形成一个新的整数,作为我们的输出。 9 [3 r8 `, I& o) e3 G

' I/ Q  ]9 }2 oC,LAME标签帧
! y9 E3 {- B. u1 P# ]1 n' x$ T% T4 W
可是,当你真的打开一个MP3文件的时候,你会发现,很奇怪,很多时候第一个数据帧的帧头后面的32个字节居然都为0,这是为什么呢,这么奇怪的解码信息该如何解释?找到MP3 INFO TAG REV SPECIFICATION的网站,我才明白,原来第一帧并不是真正的数据帧,而是LAME编码的标志帧。 7 ]7 R2 R: d9 k/ y, V2 d3 \

" _! r2 }( u( R. p9 R8 ~这里又要牵涉到两个概念:CBR和VBR。CBR表示比特率不变,也就是每帧的长度是一致的,它以字符串“INFO”为标记。VBR是Variable BitRate的简称,也就是每帧的比特率和帧的长度是变化的,它以字符串“Xing”为标记。同时,它还存放了MP3文件里帧的总个数,和100个字节的播放总时间分段的帧的INDEX,还有其他一些参数,这被称为Zone A,传统Xing VBR标签数据,共120个字节。 ! [5 Z6 ?4 |3 ~1 m/ y7 P5 u. u+ |
* I) Q% C# p) r  q& L% w
在二进制文本编辑器里我们还可看到一个字符串“LAME”,并且后面清楚地跟着版本号。这就是20个字节的Zone B初始LAME信息,表示该文件是用LAME编码技术。接下来一直到该帧结束就是Zone C-LAME标签。 5 Y* D- r, o4 N1 C' H* e" Z+ O
0 y1 k; G8 o2 m
3,      相关资料 1 e' t/ z& y! r% s. d

2 r/ U! t, d, S0 V: E# W× Mp3 Info Tag rev 1 specifications - draft 0) }- K' T* h" o0 D2 x8 _& Q
http://gabriel.mp3-tech.org/mp3infotag.html % Y! e1 w9 g5 B
) H+ l$ ^3 O/ V/ \! T% J
× MP3 文件格式
. ~, @' Z, u/ ~$ c$ i7 a% khttp://bbs.gliet.edu.cn/bbs/inde ... post&id=1813051
8 d7 B/ D  z1 l/ j# L% h
0 L5 G8 e) W& Q0 R5 \, d) u6 L- i' ^× MP3 SPEC-IS0 11172-3 AUDIO PART 6 `0 {8 Q6 o; \0 ?9 e7 K: x2 L3 K
http://www.ece.cmu.edu/~ece796/documents/MPEG-1_Audio_CD.doc
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-9-28 12:21 PM , Processed in 0.160009 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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