Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

MP3文件格式解析3

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-4-11 05:01:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
III, 数据帧 8 t( b0 b$ P9 }+ l  j7 O! w- D
9 ~8 q* {9 D. F
数据帧往往有多个,至于有多少,由文件大小和帧大小来决定。每个帧都有一个四字节长的帧头,接下来可能有两个字节的CRC校验,其存在由帧头中的具体信息决定。接着就是帧的实体数据,也就是MAIN_DATA了。 + l. |7 z9 s# w9 R& c

3 f4 S+ t. c3 ]& M+ @A,帧头结构如下: - f9 L0 B: i+ N- H

: u! F! C- b- |7 a! C& X8 F位置     长度     描述
# _+ x6 J+ E) r6 C" Q7 D' X(BIT)  (BITS)- {* K8 J8 {# ~2 Q# S
————————————————————————————
! R- J( u  |8 c; y- W31-19   12       Frame sync(0xFFF)
/ a5 V' P" t  r2 a0 N! ]18/17    2        Layer, 00 – reserved, 01 – Layer III: {, A4 J, q/ g' E5 d, P( V
                         10 – Layer II, 11 - Layer I2 I4 Q' `+ |) ]0 L- X0 P
16       1         protection_bit, 0 意味着受CRC保护,帧头后面跟16位的CRC。
) x( W. W; p. Y9 d15-12    4        bitrate_index, 比特率
2 f5 r8 G% w+ N; X! K& i8 x11-10    2        sampling_frequency,    00 – 44.1KHz, 01 – 48KHz
: D2 y. x* }9 a$ i! [, k: J* J                                         10 – 32 KHz,  11 – 保留6 l2 M7 m9 i. P4 e- [) J; o' K
9        1        padding_bit,1 意味着帧里包含padding位,仅当采样频率为44.1KHz时发生。
: W2 e; k; b( N4 H8        1        private_bit
3 z1 l/ t, I+ Q5 {7 i7-6     2        mode,    00-stereo,       01-joint stereo(intensity stereo and/or ms_stereo)- R* ]. y- t( L4 i2 K0 X
                           11- dual_channel, 11 – single_channel; @7 d, ~2 j* y& d
5-4      2        mode_extension,在Layer III中表示使用了哪一种joint stereo编码方式。
1 j/ L9 l$ ?  E& [8 J6 O' h                            Intensity_stereo   ms_stereo  o/ J6 T6 M( J8 l7 z2 S* Q' c
                   00            off                off
4 o+ r7 e" u5 ?2 B) b  P+ `% T: Z                   01            on                 off
+ o2 }8 u. y! ?, o% h' f                   10            off                on
6 `: X+ F( q9 c% i                   11            on                 on* O. l/ B% W5 N6 s0 o4 y
3        1        copyright,1 表示受版权保护。* h+ X  y3 U" p& i7 O
2        1        original,0表示该bitstream是一个copy,1表示是original.
5 {; @9 s( _2 @" e$ P1-0      2        emphasis,表示会使用哪一种de-emphasis。$ l$ J* Z6 a3 ]) a) j( r
                   00 - no emphasis,     01 – 50/15 microsec. Emphasis
1 b! T" \. w% W1 `                   10 – reserved,        11 – CCITT J.17 # i5 A" M1 j8 F

. n$ A' X# U: k- I1 s7 ~2 S1)      无论帧长是多少,每帧的播放时间都是26ms
# m2 w  [, M5 \' R9 Y. v. ~% W3 j
2)      数据帧大小: ; D, p1 J" ^4 k4 K4 q

/ C* Z, `$ N( {7 W" S1 ]FrameSize = 144 * Bitrate / SamplingRate + PaddingBit(bytes)
2 V7 Q# L& y1 p- a1 s8 B' Z) }当144 * Bitrate / SamplingRate不能被8整除,则加上相应的paddingBit. . _9 `2 f5 F9 A# e+ j
0 @2 ^2 c$ c" Z, G

/ Q+ p) E$ D$ ]9 ?B,MAIN_DATA: 5 m) i& ^5 g4 L2 ]1 c

2 o5 C' d/ V$ {* f& Z5 zMP3的granule包含18 * 32个subband采样。每个数据帧含有两个granule的数据,其内容结如下:
4 z! x4 P4 Q3 S       - main_data_end pointer* }4 i% o0 m( k1 g" T8 ^
       - side info for both granules (scfsi)
- m2 `( t, z5 Q" t* W3 B       - side info granule 1
& V, z! h: c2 i+ \" j       - side info granule 2
! g2 c. ~/ e# H% o. B- F8 Q       - scalefactors and Huffman code data granule 1# |, }7 }7 E- d7 y* U
       - scalefactors and Huffman code data granule 2
1 Z9 i1 ]' d2 j; A3 e7 p
# U, X8 M4 o9 w: Z* K0 X/ O/ Y; s7 [8 t主要数据里包含了scalefactors, Huffman encoded data和ancillary information。其内容不再详叙,可以参考MP3 SPEC-IS0 11172-3 AUDIO PART。我们一般用的都是立体声,scfsi的长度为32个字节。
: A; q% q8 _* V/ |7 `2 p" l# ]2 A" U" q0 f) w1 t% E* p8 v, y
这里要解释的一个概念就是位流――bitstream。我们平常接触到的数据都是整数,最小的单位就是byte后者char。虽然我们也会用一个字节里的不同位来表示不同的含义,但总的来说,我们在出来数据的时候还是把它当作一个个字节看待。但对MP3这种数据格式来说,这是行不通的。在解码时,它的数据输入就是一个个比特流。其中一个或几个比特会是你的采样数据或者信息编码。你需要从整个MAIN_DATA里提取你所需要的以BIT为单位的参数和输入信号,从而进行解码。所以我们需要一个子程序,getbit(n),也就是从缓冲中提取所需要的位,并形成一个新的整数,作为我们的输出。 ! p( R8 [* |3 _0 w0 |
: Z9 T# P9 J9 d0 R7 G" \" h
C,LAME标签帧 ; ], X; p# f' `8 X3 g

/ ]1 N+ q; t: ?1 J. T3 K# G可是,当你真的打开一个MP3文件的时候,你会发现,很奇怪,很多时候第一个数据帧的帧头后面的32个字节居然都为0,这是为什么呢,这么奇怪的解码信息该如何解释?找到MP3 INFO TAG REV SPECIFICATION的网站,我才明白,原来第一帧并不是真正的数据帧,而是LAME编码的标志帧。 % ^# S& m% }* _* h, Y/ z) X

/ Y0 X% K9 R  u0 r这里又要牵涉到两个概念:CBR和VBR。CBR表示比特率不变,也就是每帧的长度是一致的,它以字符串“INFO”为标记。VBR是Variable BitRate的简称,也就是每帧的比特率和帧的长度是变化的,它以字符串“Xing”为标记。同时,它还存放了MP3文件里帧的总个数,和100个字节的播放总时间分段的帧的INDEX,还有其他一些参数,这被称为Zone A,传统Xing VBR标签数据,共120个字节。 $ M; b0 m" N7 ^& f9 W* X% b, u

, Z  p: {. ?0 I' ^9 w0 x在二进制文本编辑器里我们还可看到一个字符串“LAME”,并且后面清楚地跟着版本号。这就是20个字节的Zone B初始LAME信息,表示该文件是用LAME编码技术。接下来一直到该帧结束就是Zone C-LAME标签。
: S( j4 b0 M* G' m4 o' A* \0 V, e1 X5 D
3,      相关资料 3 J$ P! X; F4 ~8 O

, d7 ~: L( f) O× Mp3 Info Tag rev 1 specifications - draft 0' u' O4 K5 [1 |) H/ ?
http://gabriel.mp3-tech.org/mp3infotag.html
; I* E3 z: h- `& M: A
0 q; y' H% _7 ^× MP3 文件格式
4 s8 v" G3 e, Z' l' y, O( P) Rhttp://bbs.gliet.edu.cn/bbs/inde ... post&id=1813051
4 N* s: d& Y7 \5 {- \* r
! g  X/ F% |2 H- e/ c' E7 @/ ~  Z× MP3 SPEC-IS0 11172-3 AUDIO PART
: {8 ?* u$ c  I- u9 Rhttp://www.ece.cmu.edu/~ece796/documents/MPEG-1_Audio_CD.doc
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2025-2-19 06:10 AM , Processed in 0.156009 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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