Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

MP3文件格式解析3

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-4-11 05:01:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
III, 数据帧 1 ]* X' \% X! ?$ y2 `: @
5 d% q) N- r2 d0 r6 q% p
数据帧往往有多个,至于有多少,由文件大小和帧大小来决定。每个帧都有一个四字节长的帧头,接下来可能有两个字节的CRC校验,其存在由帧头中的具体信息决定。接着就是帧的实体数据,也就是MAIN_DATA了。 ) o" ~, }3 Z9 z
; n& X) X2 U# }
A,帧头结构如下:
2 f8 G+ v+ A+ ]; f6 X' Y; R! Z' S5 d2 a+ S
位置     长度     描述
" G8 A' d& g. @- J0 V6 e1 V% I(BIT)  (BITS)+ _8 ]+ @! c9 l4 v1 v6 q5 s
————————————————————————————! w0 }5 j5 z5 e0 J
31-19   12       Frame sync(0xFFF)
% r6 Q9 b" u2 C+ ~! M, Z8 Q18/17    2        Layer, 00 – reserved, 01 – Layer III
" g0 f) z/ u; c$ Y                         10 – Layer II, 11 - Layer I# i! O2 \9 A5 \9 P
16       1         protection_bit, 0 意味着受CRC保护,帧头后面跟16位的CRC。! x  @9 p9 K8 o
15-12    4        bitrate_index, 比特率7 J; o$ |, k1 A! M0 x$ [
11-10    2        sampling_frequency,    00 – 44.1KHz, 01 – 48KHz, i$ f1 |6 Z, }! X( \* F' }
                                         10 – 32 KHz,  11 – 保留2 f3 O% C. `2 Z5 W  @9 @5 h1 B
9        1        padding_bit,1 意味着帧里包含padding位,仅当采样频率为44.1KHz时发生。, f0 `" E* b  C9 z" h' ~: `! e
8        1        private_bit
: ]% e, E- |5 D1 o6 x/ z7-6     2        mode,    00-stereo,       01-joint stereo(intensity stereo and/or ms_stereo)# C0 M+ a( \# S( C" E+ ]
                           11- dual_channel, 11 – single_channel5 y( A( W& u; T
5-4      2        mode_extension,在Layer III中表示使用了哪一种joint stereo编码方式。5 G! ^0 t" a. I9 w, X- O: g
                            Intensity_stereo   ms_stereo
2 N3 X" K  Q2 e/ X                   00            off                off) B8 e# a* \4 |% a8 b* \% y
                   01            on                 off
. c- k% V" B0 d( s( `                   10            off                on
# o0 a2 Q& L( M5 q- y                   11            on                 on
9 V  q6 ]! i- U3        1        copyright,1 表示受版权保护。7 M( A8 W' }3 v6 c) v
2        1        original,0表示该bitstream是一个copy,1表示是original.
% @6 y2 R- T/ {7 s1 J1-0      2        emphasis,表示会使用哪一种de-emphasis。; I1 ^. z6 K" I4 V% M, O
                   00 - no emphasis,     01 – 50/15 microsec. Emphasis
/ z$ L4 g; K  r: i                   10 – reserved,        11 – CCITT J.17 4 A) k& ?2 V1 k: X0 G0 `1 @6 e: Q

4 L: C' M/ d: u6 N! Y1)      无论帧长是多少,每帧的播放时间都是26ms - ~" Y, z  F, K# Q( i# X+ q; q* g
* h, \1 B0 K( z0 x3 w! ~, u$ u
2)      数据帧大小: 6 \5 M: P$ |" c1 [7 h6 X

( |9 a. l8 e( s+ w) o* vFrameSize = 144 * Bitrate / SamplingRate + PaddingBit(bytes)
$ t: U/ M5 _% B  V3 x3 b6 F当144 * Bitrate / SamplingRate不能被8整除,则加上相应的paddingBit. % |: s' J2 v8 u6 Y4 d* K
5 Z" O% r+ W4 O2 h7 n" A

2 T' b+ s5 Y2 B  {B,MAIN_DATA: , ~, \5 d0 ^4 p

8 F2 T6 A; C7 c) S# HMP3的granule包含18 * 32个subband采样。每个数据帧含有两个granule的数据,其内容结如下:
7 P/ s' P* Z! \: b  i1 o       - main_data_end pointer
4 l4 x# Q/ \3 L" w- S0 ~% e0 W4 i       - side info for both granules (scfsi)
% P1 g- _9 M2 ~) W6 r       - side info granule 17 t6 N/ p0 @- \+ o4 H+ K3 I/ b5 u/ X! b
       - side info granule 2
# ?$ a' Q2 w& T$ y: C; f8 ]9 |       - scalefactors and Huffman code data granule 1
$ n2 R( h$ N" |" w1 w" {       - scalefactors and Huffman code data granule 2
# ~2 X$ G2 b; h
9 L1 v" R* g4 O8 }主要数据里包含了scalefactors, Huffman encoded data和ancillary information。其内容不再详叙,可以参考MP3 SPEC-IS0 11172-3 AUDIO PART。我们一般用的都是立体声,scfsi的长度为32个字节。 / _7 w, v+ x. f1 |9 v4 e$ `

) L/ b2 q$ n. ^. D% Z0 H4 O这里要解释的一个概念就是位流――bitstream。我们平常接触到的数据都是整数,最小的单位就是byte后者char。虽然我们也会用一个字节里的不同位来表示不同的含义,但总的来说,我们在出来数据的时候还是把它当作一个个字节看待。但对MP3这种数据格式来说,这是行不通的。在解码时,它的数据输入就是一个个比特流。其中一个或几个比特会是你的采样数据或者信息编码。你需要从整个MAIN_DATA里提取你所需要的以BIT为单位的参数和输入信号,从而进行解码。所以我们需要一个子程序,getbit(n),也就是从缓冲中提取所需要的位,并形成一个新的整数,作为我们的输出。 ; I1 {! j& A  P* X6 I* t) q

. M7 Z, A- k' O+ i/ }; |7 e, |2 SC,LAME标签帧
; Q2 y" n' H1 t( ]' b1 s
  [: Z$ U( [. R2 V可是,当你真的打开一个MP3文件的时候,你会发现,很奇怪,很多时候第一个数据帧的帧头后面的32个字节居然都为0,这是为什么呢,这么奇怪的解码信息该如何解释?找到MP3 INFO TAG REV SPECIFICATION的网站,我才明白,原来第一帧并不是真正的数据帧,而是LAME编码的标志帧。 # @7 a2 l* \; Z- o. [* D
2 b9 i  K* |  y, l
这里又要牵涉到两个概念:CBR和VBR。CBR表示比特率不变,也就是每帧的长度是一致的,它以字符串“INFO”为标记。VBR是Variable BitRate的简称,也就是每帧的比特率和帧的长度是变化的,它以字符串“Xing”为标记。同时,它还存放了MP3文件里帧的总个数,和100个字节的播放总时间分段的帧的INDEX,还有其他一些参数,这被称为Zone A,传统Xing VBR标签数据,共120个字节。 0 ^. r# Q# t% g8 Y4 C
& G, }6 _! y: j# U/ [7 |" t
在二进制文本编辑器里我们还可看到一个字符串“LAME”,并且后面清楚地跟着版本号。这就是20个字节的Zone B初始LAME信息,表示该文件是用LAME编码技术。接下来一直到该帧结束就是Zone C-LAME标签。
& W, e1 f1 P3 p
) j; a: j4 R2 W: M' F$ K. s) N3,      相关资料 4 ^( G- }$ {! T& m' ?1 B# ]

2 U2 k7 P* ~2 G# o8 U0 Q× Mp3 Info Tag rev 1 specifications - draft 0" u9 |; X6 e; a4 F
http://gabriel.mp3-tech.org/mp3infotag.html
; n3 D& `6 t! A
: y/ v: I; W3 |' A! e× MP3 文件格式 7 Z0 S9 a7 @  i0 S
http://bbs.gliet.edu.cn/bbs/inde ... post&id=1813051. W# Y6 ], ]5 K! J- \) W# I5 o6 Q: }5 H+ x

$ ~6 L! E2 c$ o" s× MP3 SPEC-IS0 11172-3 AUDIO PART
* N5 D5 i+ h% `- b' G) E7 Ahttp://www.ece.cmu.edu/~ece796/documents/MPEG-1_Audio_CD.doc
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-9-28 02:13 PM , Processed in 0.147008 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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