Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

MP3文件格式解析3

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-4-11 05:01:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
III, 数据帧 / }1 V2 j' b6 y- ?) I5 R
" q# S4 J+ S; p" X
数据帧往往有多个,至于有多少,由文件大小和帧大小来决定。每个帧都有一个四字节长的帧头,接下来可能有两个字节的CRC校验,其存在由帧头中的具体信息决定。接着就是帧的实体数据,也就是MAIN_DATA了。 ' Z* j- z# @6 V

# u8 D# |5 v2 K" I# B3 N3 |A,帧头结构如下:
/ E& y& R, D, r2 x: @7 A9 f* U2 J( m. x: W" W" x& c- f
位置     长度     描述
& R/ W. X8 Q; v/ H+ K(BIT)  (BITS)
& N6 s' ~& t3 C————————————————————————————4 E9 J0 l+ O  x1 @+ S, o4 M6 t3 ~
31-19   12       Frame sync(0xFFF)
- k' z" Z9 s( W+ O, q! y- r18/17    2        Layer, 00 – reserved, 01 – Layer III1 D' @6 u* E2 q7 `9 ]- x" k  W
                         10 – Layer II, 11 - Layer I
* S- g6 k2 E6 v& i2 Q16       1         protection_bit, 0 意味着受CRC保护,帧头后面跟16位的CRC。
7 b' c" ]0 P$ Q* p9 |9 \+ R  |15-12    4        bitrate_index, 比特率
- q& _! P" t9 [, }2 J! c9 [11-10    2        sampling_frequency,    00 – 44.1KHz, 01 – 48KHz
) w& F4 A  B# M8 i0 l9 V5 ]                                         10 – 32 KHz,  11 – 保留
$ ^' O) l+ F. ^3 N9        1        padding_bit,1 意味着帧里包含padding位,仅当采样频率为44.1KHz时发生。. ~+ i7 F& B1 n% Z) E
8        1        private_bit
. V* `6 }. q5 |8 s6 s6 \7-6     2        mode,    00-stereo,       01-joint stereo(intensity stereo and/or ms_stereo)
- t. l3 c8 N6 V" M/ i                           11- dual_channel, 11 – single_channel
$ f3 z0 O* d/ m) b4 L5-4      2        mode_extension,在Layer III中表示使用了哪一种joint stereo编码方式。
+ \& i/ x  e7 o8 X                            Intensity_stereo   ms_stereo, T/ p  R+ M) g' {0 M, I
                   00            off                off
: b) T$ s5 }# }3 ~' i                   01            on                 off
1 P  R: e, @; P9 S; R9 f+ D                   10            off                on- d4 z2 v; ^9 y2 O& S( x5 \# a
                   11            on                 on/ N2 N$ ?4 v  ?
3        1        copyright,1 表示受版权保护。
1 c2 K! j. W+ Q4 Q2        1        original,0表示该bitstream是一个copy,1表示是original.) @8 A; M+ e" ^+ ?% ^+ s- R. F
1-0      2        emphasis,表示会使用哪一种de-emphasis。+ z. b0 V5 i4 e  j
                   00 - no emphasis,     01 – 50/15 microsec. Emphasis6 ?% }5 F% l# s/ f
                   10 – reserved,        11 – CCITT J.17 . u+ \8 x% f! A% x

+ {1 K0 y+ n4 b/ c1 M, ]1)      无论帧长是多少,每帧的播放时间都是26ms
9 y' Q2 E3 {' M! W. u* Z% d  [) D# v, e  t: H, b, C& X
2)      数据帧大小:
; w" F4 l6 C* J* v7 ?% V( v0 a7 ^7 A! K$ O. B
FrameSize = 144 * Bitrate / SamplingRate + PaddingBit(bytes)
# U! n! K% M( M) E0 _当144 * Bitrate / SamplingRate不能被8整除,则加上相应的paddingBit. / z! x) k& A* v; A7 K5 W( V5 H1 {

" L/ [3 I1 K7 q* s9 D: X1 u* p! h* B+ h6 @; q
B,MAIN_DATA:
9 n2 `  z; @5 g1 N, ~0 T
  _2 U% _$ b( k- h* SMP3的granule包含18 * 32个subband采样。每个数据帧含有两个granule的数据,其内容结如下:
) i' P+ w& Z% H6 ?! a4 K       - main_data_end pointer
  r& y$ y; p4 C' e! o% `( q       - side info for both granules (scfsi)
- @* ~0 Y# s9 F; F; |/ `- D       - side info granule 15 y# h5 W1 f" I. W
       - side info granule 2
0 \# d- X/ U3 ?8 V! w. t- q       - scalefactors and Huffman code data granule 1
/ L& ^7 ]' d& I; M/ ^& v+ q* g       - scalefactors and Huffman code data granule 2
% a, q- `: u: _% t' X4 [$ t/ q8 f; G
5 }4 D2 J' b! m8 E" M/ c主要数据里包含了scalefactors, Huffman encoded data和ancillary information。其内容不再详叙,可以参考MP3 SPEC-IS0 11172-3 AUDIO PART。我们一般用的都是立体声,scfsi的长度为32个字节。
) S+ S! f5 L9 T/ \  N
0 X3 n+ R8 h# Y8 p/ ?, f$ ~这里要解释的一个概念就是位流――bitstream。我们平常接触到的数据都是整数,最小的单位就是byte后者char。虽然我们也会用一个字节里的不同位来表示不同的含义,但总的来说,我们在出来数据的时候还是把它当作一个个字节看待。但对MP3这种数据格式来说,这是行不通的。在解码时,它的数据输入就是一个个比特流。其中一个或几个比特会是你的采样数据或者信息编码。你需要从整个MAIN_DATA里提取你所需要的以BIT为单位的参数和输入信号,从而进行解码。所以我们需要一个子程序,getbit(n),也就是从缓冲中提取所需要的位,并形成一个新的整数,作为我们的输出。
* @% l) y& m& M5 s3 ^" V7 ?7 t, _  G. u; l; P- N  Q
C,LAME标签帧
- M  N7 ?& s. }$ j/ I6 n2 X* d8 {1 M5 `0 p  q3 x8 X2 X% T
可是,当你真的打开一个MP3文件的时候,你会发现,很奇怪,很多时候第一个数据帧的帧头后面的32个字节居然都为0,这是为什么呢,这么奇怪的解码信息该如何解释?找到MP3 INFO TAG REV SPECIFICATION的网站,我才明白,原来第一帧并不是真正的数据帧,而是LAME编码的标志帧。 1 L5 I7 H+ n% ~2 m
1 y& n1 G( d/ j+ a  b
这里又要牵涉到两个概念:CBR和VBR。CBR表示比特率不变,也就是每帧的长度是一致的,它以字符串“INFO”为标记。VBR是Variable BitRate的简称,也就是每帧的比特率和帧的长度是变化的,它以字符串“Xing”为标记。同时,它还存放了MP3文件里帧的总个数,和100个字节的播放总时间分段的帧的INDEX,还有其他一些参数,这被称为Zone A,传统Xing VBR标签数据,共120个字节。
6 c5 U' H: T$ O5 a+ K, o
$ |0 h& k( R5 s+ h, J( s4 F5 W" _+ n在二进制文本编辑器里我们还可看到一个字符串“LAME”,并且后面清楚地跟着版本号。这就是20个字节的Zone B初始LAME信息,表示该文件是用LAME编码技术。接下来一直到该帧结束就是Zone C-LAME标签。 7 \0 h6 f( q  s
& k% d  g" Y' B, a
3,      相关资料 : c& m' y/ @# S

, H; d6 y1 A# _× Mp3 Info Tag rev 1 specifications - draft 03 D3 G. R1 l+ u% I, e: _( `
http://gabriel.mp3-tech.org/mp3infotag.html
2 s) \3 h' b, S5 Q( X1 b
2 X" j6 ?% p, x: P4 ~8 ?( j7 {) h× MP3 文件格式 ! p3 j0 s1 P4 X" R
http://bbs.gliet.edu.cn/bbs/inde ... post&id=1813051
+ P0 ?0 y. p* K! X+ K! h& Z  n2 u. |! m4 A' ^8 D
× MP3 SPEC-IS0 11172-3 AUDIO PART / m2 g' Y8 Q: }/ X, Z( k" N
http://www.ece.cmu.edu/~ece796/documents/MPEG-1_Audio_CD.doc
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-9-28 02:14 PM , Processed in 0.169010 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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