Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

MP3文件格式解析3

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-4-11 05:01:07 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
III, 数据帧
/ _; j$ }: `* `3 r5 x
9 [1 Z( t" t8 G* ]& C1 n1 {数据帧往往有多个,至于有多少,由文件大小和帧大小来决定。每个帧都有一个四字节长的帧头,接下来可能有两个字节的CRC校验,其存在由帧头中的具体信息决定。接着就是帧的实体数据,也就是MAIN_DATA了。
3 Q1 O2 Y! Y" W$ ~' `+ F7 [6 L1 n1 |2 {, W6 F2 z9 X
A,帧头结构如下:
2 y9 k# s) K" y' h" a9 E$ N" d% {, N! r! o; P
位置     长度     描述
; M) X6 X% ]' r$ u5 [(BIT)  (BITS)! ^7 ~0 o0 o  W
————————————————————————————4 R# [" v. j6 v$ U
31-19   12       Frame sync(0xFFF)& v% K7 Z7 r# @
18/17    2        Layer, 00 – reserved, 01 – Layer III! J8 ^+ l4 L( C3 a8 x$ p9 f
                         10 – Layer II, 11 - Layer I
* M2 B! `. F; v. x16       1         protection_bit, 0 意味着受CRC保护,帧头后面跟16位的CRC。' F. ~; o: q# |: u$ D
15-12    4        bitrate_index, 比特率) }1 T6 F% b# k6 r
11-10    2        sampling_frequency,    00 – 44.1KHz, 01 – 48KHz
4 p$ ^0 ~7 c( c- d                                         10 – 32 KHz,  11 – 保留+ k/ P7 `7 w( v. z# D1 t: _; t+ `
9        1        padding_bit,1 意味着帧里包含padding位,仅当采样频率为44.1KHz时发生。9 U! o0 w  H( t9 N
8        1        private_bit) f- q- A, P  Y3 [5 @8 I6 e8 x
7-6     2        mode,    00-stereo,       01-joint stereo(intensity stereo and/or ms_stereo)" `6 A  F! D/ G
                           11- dual_channel, 11 – single_channel
- z* ~; x% X$ w9 Y% f" y6 T, g5-4      2        mode_extension,在Layer III中表示使用了哪一种joint stereo编码方式。
9 x( `  X$ P6 y- t( b$ I4 [& y- o/ A                            Intensity_stereo   ms_stereo
. @6 a2 {3 {, a; i( u8 _                   00            off                off2 |9 N0 [  F3 q& d
                   01            on                 off
* O. D0 E! ], X: m( F                   10            off                on) \$ c9 I1 j( O6 J2 J' Y, T# d
                   11            on                 on. Y+ x0 k' e; d$ M( M
3        1        copyright,1 表示受版权保护。
$ ]. d9 m  ]  D+ {8 u- U2        1        original,0表示该bitstream是一个copy,1表示是original.: s7 s* B. s. U! H, H
1-0      2        emphasis,表示会使用哪一种de-emphasis。) t  o6 c( L: u4 @+ a, O) v
                   00 - no emphasis,     01 – 50/15 microsec. Emphasis
3 p2 T) ~' u  B6 w& I9 t- D                   10 – reserved,        11 – CCITT J.17
; |% S: H  X1 `* p4 K
+ I+ m5 w3 Z# M6 G1 {1)      无论帧长是多少,每帧的播放时间都是26ms * ?6 W* l# D8 N9 _* Q9 A# X

; u# I5 h+ I7 @! @& y7 m2)      数据帧大小:
# Q5 S% I0 ], q  Q/ V
  f3 K8 b! |4 T9 ^FrameSize = 144 * Bitrate / SamplingRate + PaddingBit(bytes)6 C/ g) e5 C# I: p& J" X/ R6 j
当144 * Bitrate / SamplingRate不能被8整除,则加上相应的paddingBit. % o. C: K5 A8 t0 N" e
" ~, }5 p  Y% u* Q& ^. o: d# V/ r

# O' ^$ [( h4 ]: h- B% w7 m% AB,MAIN_DATA: 9 {5 `6 g7 R1 z% J) N+ h0 x
  [, @6 I( ?; Z
MP3的granule包含18 * 32个subband采样。每个数据帧含有两个granule的数据,其内容结如下:
! b: R( N& m& s3 D1 N" K       - main_data_end pointer
  H( {2 g& o, \* V8 v       - side info for both granules (scfsi)& H; R  }) }$ j% a9 `: w6 `
       - side info granule 1
& F/ K& e+ ]8 x; p       - side info granule 2
' T/ n6 z# s0 o( _/ p# H. |2 A$ m       - scalefactors and Huffman code data granule 1
" n' w+ C" P5 o! v1 M( v2 E       - scalefactors and Huffman code data granule 2
. H. L" I; P  ~! C7 o1 F
6 _( k8 p) W5 _1 w" e7 b, p主要数据里包含了scalefactors, Huffman encoded data和ancillary information。其内容不再详叙,可以参考MP3 SPEC-IS0 11172-3 AUDIO PART。我们一般用的都是立体声,scfsi的长度为32个字节。 ' U. H* t" q$ B# c) M
. `) Z- ^* T' V" i/ @, V
这里要解释的一个概念就是位流――bitstream。我们平常接触到的数据都是整数,最小的单位就是byte后者char。虽然我们也会用一个字节里的不同位来表示不同的含义,但总的来说,我们在出来数据的时候还是把它当作一个个字节看待。但对MP3这种数据格式来说,这是行不通的。在解码时,它的数据输入就是一个个比特流。其中一个或几个比特会是你的采样数据或者信息编码。你需要从整个MAIN_DATA里提取你所需要的以BIT为单位的参数和输入信号,从而进行解码。所以我们需要一个子程序,getbit(n),也就是从缓冲中提取所需要的位,并形成一个新的整数,作为我们的输出。
2 r& D6 e& J) T+ l% X  u! H7 H8 c* A8 x+ i
C,LAME标签帧 $ G7 ]) c2 y( O: o: c" n9 x% p1 M

" b; N: J, c, G( W. w# o) }" g可是,当你真的打开一个MP3文件的时候,你会发现,很奇怪,很多时候第一个数据帧的帧头后面的32个字节居然都为0,这是为什么呢,这么奇怪的解码信息该如何解释?找到MP3 INFO TAG REV SPECIFICATION的网站,我才明白,原来第一帧并不是真正的数据帧,而是LAME编码的标志帧。
$ S5 i& K+ g3 H, [3 B! M& ^5 n7 p: p- @& [* ]7 [
这里又要牵涉到两个概念:CBR和VBR。CBR表示比特率不变,也就是每帧的长度是一致的,它以字符串“INFO”为标记。VBR是Variable BitRate的简称,也就是每帧的比特率和帧的长度是变化的,它以字符串“Xing”为标记。同时,它还存放了MP3文件里帧的总个数,和100个字节的播放总时间分段的帧的INDEX,还有其他一些参数,这被称为Zone A,传统Xing VBR标签数据,共120个字节。 2 W9 C6 e. L* M' B
! G0 b3 r* b! ^* d% \  Z
在二进制文本编辑器里我们还可看到一个字符串“LAME”,并且后面清楚地跟着版本号。这就是20个字节的Zone B初始LAME信息,表示该文件是用LAME编码技术。接下来一直到该帧结束就是Zone C-LAME标签。
6 Q2 s* g: g! Y( N& A4 f
7 p. n% {) D6 g4 w+ l0 @$ {+ U3,      相关资料 . i% r  c4 ?" T; r0 R( y* H8 {8 L
1 K6 U6 P* o7 Y" L. ?' [: j
× Mp3 Info Tag rev 1 specifications - draft 06 j* [7 c" _- s5 I2 G* {5 D# k0 R. h2 c
http://gabriel.mp3-tech.org/mp3infotag.html . ?! P' D4 g& Z1 P

1 [' R4 }$ k* l  a5 x× MP3 文件格式
! `1 D$ A9 L+ k4 N) qhttp://bbs.gliet.edu.cn/bbs/inde ... post&id=1813051
3 s9 q+ a* T+ q2 d7 U
  y# S8 {* j5 @* k. k  J- C× MP3 SPEC-IS0 11172-3 AUDIO PART
& C5 x; ?% O8 {2 M+ @8 Hhttp://www.ece.cmu.edu/~ece796/documents/MPEG-1_Audio_CD.doc
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

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

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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