Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

MP3文件格式解析3

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-4-11 05:01:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
III, 数据帧
0 p: R7 {* \( a" L: z8 _1 Q( T6 }1 Z- n4 C( ]; t, }
数据帧往往有多个,至于有多少,由文件大小和帧大小来决定。每个帧都有一个四字节长的帧头,接下来可能有两个字节的CRC校验,其存在由帧头中的具体信息决定。接着就是帧的实体数据,也就是MAIN_DATA了。
; C! |* G- o6 ?/ b' f+ g2 a; }/ @4 G+ Q& _  f( c) u2 K
A,帧头结构如下:
8 s4 j; f( Z8 ~# S% `" y$ i4 W# }: {0 }  ^, _# A
位置     长度     描述
0 y# `( X. }4 z3 I3 s. T(BIT)  (BITS)2 V2 `: m( g9 l( T1 ]
————————————————————————————* J9 \) p) }* B$ b6 L* a' v/ R
31-19   12       Frame sync(0xFFF)
4 j! F4 g4 ]' D18/17    2        Layer, 00 – reserved, 01 – Layer III1 Q) H9 Y3 s! D9 |( f% T
                         10 – Layer II, 11 - Layer I( }  E8 ^- C$ C- q0 P
16       1         protection_bit, 0 意味着受CRC保护,帧头后面跟16位的CRC。9 R" [: b* T! L1 r
15-12    4        bitrate_index, 比特率
0 a" |7 i  H4 g11-10    2        sampling_frequency,    00 – 44.1KHz, 01 – 48KHz6 W% G( F# X8 ~& u$ A' g
                                         10 – 32 KHz,  11 – 保留% o' v9 f9 f% d! w
9        1        padding_bit,1 意味着帧里包含padding位,仅当采样频率为44.1KHz时发生。
) D9 d5 S6 h3 R/ r6 j8        1        private_bit% v6 k& z. m1 O( ~! w6 F
7-6     2        mode,    00-stereo,       01-joint stereo(intensity stereo and/or ms_stereo)
5 M; [+ t7 \" Y7 j9 j! ?2 B1 ?                           11- dual_channel, 11 – single_channel
5 K5 G0 V# G( g7 H5-4      2        mode_extension,在Layer III中表示使用了哪一种joint stereo编码方式。6 S5 C9 R3 B5 e& U- I
                            Intensity_stereo   ms_stereo3 ?+ B4 R6 z- @# q
                   00            off                off
0 Z1 Z: ~- a4 V1 E                   01            on                 off
3 p! m+ a9 L5 V6 {                   10            off                on
. k! v; ^/ e" ^2 T: F2 Q+ B                   11            on                 on* U. O! B. V! B' b: S. Z
3        1        copyright,1 表示受版权保护。
1 ^4 P& \0 _8 j+ j1 ^: i+ N7 [7 x2        1        original,0表示该bitstream是一个copy,1表示是original.+ c7 i9 _' U3 A* x+ K
1-0      2        emphasis,表示会使用哪一种de-emphasis。6 v. `: @' H" Y- x6 N% S+ T0 ?2 D
                   00 - no emphasis,     01 – 50/15 microsec. Emphasis
  V6 r0 N% H8 _. {                   10 – reserved,        11 – CCITT J.17
$ h0 S' B. w3 Z# J* Z& x, [
7 e4 f' Q. `5 \/ w$ q# `1)      无论帧长是多少,每帧的播放时间都是26ms 4 Y4 v6 ]* u0 l; ?
$ B7 q6 r9 S1 k$ |) d- V3 {) t
2)      数据帧大小: & a% j( Z9 l- ]

( {$ ]4 Z' s- a: x  |FrameSize = 144 * Bitrate / SamplingRate + PaddingBit(bytes)$ X% S% Q& ~" _7 p
当144 * Bitrate / SamplingRate不能被8整除,则加上相应的paddingBit.
0 q2 V9 C1 T8 I9 Z  @3 y5 p1 R: g" ^8 L: r$ \1 B: V' H" o
# N  F5 Q/ X; Q& l+ s0 B! [
B,MAIN_DATA:
) t9 ^# `' p) u
/ g+ P) p/ M) U( w* qMP3的granule包含18 * 32个subband采样。每个数据帧含有两个granule的数据,其内容结如下:
/ g- X" H- k4 A) Y$ M. m       - main_data_end pointer8 K- C0 ~( V" f, y/ a$ I+ o
       - side info for both granules (scfsi)
3 ?' A0 K6 }) z) Q8 h" i# A       - side info granule 1
8 ~# g# U2 ?/ o+ ^+ t       - side info granule 2" x2 J: d6 _! a* y; V9 ^
       - scalefactors and Huffman code data granule 1
' t. s& Q0 v* R+ u       - scalefactors and Huffman code data granule 2
9 q  P  H8 a( `% ?  ?7 f  b1 f) t. T1 p7 o4 g8 f8 D4 M2 \, T
主要数据里包含了scalefactors, Huffman encoded data和ancillary information。其内容不再详叙,可以参考MP3 SPEC-IS0 11172-3 AUDIO PART。我们一般用的都是立体声,scfsi的长度为32个字节。 5 g# P3 B+ @4 L  R" S1 e- i2 ~

2 w+ f7 I# }7 @. ~1 _; L这里要解释的一个概念就是位流――bitstream。我们平常接触到的数据都是整数,最小的单位就是byte后者char。虽然我们也会用一个字节里的不同位来表示不同的含义,但总的来说,我们在出来数据的时候还是把它当作一个个字节看待。但对MP3这种数据格式来说,这是行不通的。在解码时,它的数据输入就是一个个比特流。其中一个或几个比特会是你的采样数据或者信息编码。你需要从整个MAIN_DATA里提取你所需要的以BIT为单位的参数和输入信号,从而进行解码。所以我们需要一个子程序,getbit(n),也就是从缓冲中提取所需要的位,并形成一个新的整数,作为我们的输出。 6 M8 |* u# `/ m* T$ P- g2 ]2 o4 o4 T% j
& T7 l  D$ S7 i# y6 q5 y
C,LAME标签帧
3 U# D! A4 D  j% g& k
, m& V1 a, u3 D8 r& _" b可是,当你真的打开一个MP3文件的时候,你会发现,很奇怪,很多时候第一个数据帧的帧头后面的32个字节居然都为0,这是为什么呢,这么奇怪的解码信息该如何解释?找到MP3 INFO TAG REV SPECIFICATION的网站,我才明白,原来第一帧并不是真正的数据帧,而是LAME编码的标志帧。
9 Y" H2 l$ ^7 G# X) ^# @; _; v: E- t! v  M
这里又要牵涉到两个概念:CBR和VBR。CBR表示比特率不变,也就是每帧的长度是一致的,它以字符串“INFO”为标记。VBR是Variable BitRate的简称,也就是每帧的比特率和帧的长度是变化的,它以字符串“Xing”为标记。同时,它还存放了MP3文件里帧的总个数,和100个字节的播放总时间分段的帧的INDEX,还有其他一些参数,这被称为Zone A,传统Xing VBR标签数据,共120个字节。
0 I0 i5 P( `$ S7 ]4 P$ P9 [) {4 K6 p8 m1 |& Z) x8 e# _/ ?4 k
在二进制文本编辑器里我们还可看到一个字符串“LAME”,并且后面清楚地跟着版本号。这就是20个字节的Zone B初始LAME信息,表示该文件是用LAME编码技术。接下来一直到该帧结束就是Zone C-LAME标签。 ; d# p, l  {  l# p3 C+ V- Z1 X
4 h2 [; X5 Q, U) Z1 w# I
3,      相关资料 $ m; E+ g6 V" N) Y$ t$ O# r# ]
2 B4 |2 h* K/ G. P
× Mp3 Info Tag rev 1 specifications - draft 0
" H1 r6 c! t  R1 T: yhttp://gabriel.mp3-tech.org/mp3infotag.html & K$ M4 ~3 D) i2 v7 H

( _  s& v6 B  K, R$ s* v× MP3 文件格式 * p3 o' n$ e- ]$ T, }: ^
http://bbs.gliet.edu.cn/bbs/inde ... post&id=1813051) w% b) B$ w0 D
+ o, ?5 d; S0 L% d, _9 m, E0 Z
× MP3 SPEC-IS0 11172-3 AUDIO PART
+ ]: }$ ~6 o3 M: L2 d$ {http://www.ece.cmu.edu/~ece796/documents/MPEG-1_Audio_CD.doc
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-9-28 10:16 AM , Processed in 0.163009 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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