admin管理员组文章数量:1568304
2024年6月6日发(作者:)
MP3文件格式解析
MP3文件数据由多个帧组成,帧是MP3文件最小组成单位。每个帧又由帧头、附加信息和声音数据组成。
每个帧播放时间是0.026秒,其长度随位率的不同而不等。有些MP3文件末尾有些额外字节存放非声音数据的说
明信息。MP3文件结构如图1所。
(44.1kHz,64bps)
210字节
4B
32B
附加
128B
帧头
声音
„ ID3
信息
数据
第1帧
第2帧
图1 MP3文件结构
1.1 帧头格式
帧头长4字节,对于固定位率的MP3文件,所有帧的帧头格式一样其数据结构如下:
typedef FrameHeader {
unsigned int sync: 11;
unsigned int layer: 2;
//同步信息
//版本
//层
// CRC校验
//位率
//帧长调节
//保留字
//声道模式
//扩充模式
// 版权
//原版标志
//强调模式
unsigned int version: 2;
unsigned int error protection: 1;
unsigned int bitrate_index: 4;
unsigned int padding: 1;
unsigned int private: 1;
unsigned int mode: 2;
unsigned int sampling_frequency: 2; //采样频率
unsigned int mode extension: 2;
unsigned int copyright: 1;
unsigned int original: 1;
unsigned int emphasis: 2;
}HEADER, *LPHEADER;
帧头4字节使用说明见表1。
MP3帧长取决于位率和频率,计算公式为:
. mpeg1.0 layer1 : 帧长= (48000*bitrate)/sampling_freq + padding
layer2&3: 帧长= (144000*bitrate)/sampling_freq + padding
. mpeg2.0 layer1 : 帧长= (24000*bitrate)/sampling_freq + padding
layer2&3 : 帧长= (72000*bitrate)/sampling_freq + padding
例如:位率为64kbps,采样频率为44.1kHz,padding(帧长调节)为1时,帧长为210字节。
帧头后面是可变长度的附加信息,对于标准的MP3文件来说,其长度是32字节,紧接其后的是压缩的声音
数据,当解码器读到此处时就进行解码了。
名称
同步信息
版本
层
CRC校验
位长
11
第
2
1、2
2
字
1
节
4
表1 MP3帧头字节使用说明
说 明
所有位均为1,第1字节恒为FF。
00-MPEG 2.5 01-未定义 10-MPEG 2 11-MPEG 1
00-未定义 01-Layer 3 10-Layer 2 11-Layer 1
0-校验 1-不校验
取样率,单位是kbps,例如采用MPEG-1 Layer 3,64kbps是,值为0101。
bits V1,L1 V1,L2 V1,L3 V2,L1 V2,L2
0000 free free free free free
0001 32 32 32 32(32) 32(8)
0010 64 48 40 64(48) 48(16)
0011 96 56 48 96(56) 56(24)
0100 128 64 56 128(64) 64(32)
0101 160 80 64 160(80) 80(40)
0110 192 96 80 192(96) 96(48)
0111 224 112 96 224(112) 112(56)
1000 256 128 112 256(128) 128(64)
1001 288 160 128 288(144) 160(80)
1010 320 192 160 320(160) 192(96)
1011 352 224 192 352(176) 224(112)
1100 384 256 224 384(192) 256(128)
1101 416 320 256 416(224) 320(144)
1110 448 384 320 448(256) 384(160)
1111 bad bad bad bad bad
V1 - MPEG 1 V2 - MPEG 2 and MPEG 2.5
L1 - Layer 1 L2 - Layer 2 L3 - Layer 3
"free" 表示位率可变 "bad" 表示不允许值
V2,L3
free
8 (8)
16 (16)
24 (24)
32 (32)
64 (40)
80 (48)
56 (56)
64 (64)
128 (80)
160 (96)
112 (112)
128 (128)
256 (144)
320 (160)
bad
位率
第3
字
节
采样频率,对于MPEG-1: 00-44.1kHz 01-48kHz 10-32kHz 11-未定义
采样频率 对于MPEG-2: 00-22.05kHz 01-24kHz 10-16kHz 11-未定义
对于MPEG-2.5: 00-11.025kHz 01-12kHz 10-8kHz 11-未定义
帧长调节
1
用来调整文件头长度,0-无需调整,1-调整,具体调整计算方法见下文。
1
保留字 没有使用。
声道模式
2
表示声道, 00-立体声Stereo 01-Joint Stereo 10-双声道 11-单声道
2
当声道模式为01是才使用。
Value
强度立体声 MS立体声
00 off off
扩充模式
01 on off
第4
10 off on
字
11 on on
节
1
版权 文件是否合法,0-不合法 1-合法
原版标志
1
是否原版, 0-非原版 1-原版
2
用于声音经降噪压缩后再补偿的分类,很少用到,今后也可能不会用。
强调方式
00-未定义 01-50/15ms 10-保留 11-CCITT J.17
对于固定位率(CBR,Constant Bitrate)的MP3文件,并不是所有的帧都是等长的,有的帧可能多一个或几个字
2
节。还有一种可变位率(VBR, Variable Bitrate)的MP3文件,是为了使MP3文件长度最小同时又保证声音质量,与CBR
文件相比,除了第一帧不同外,其余的都一样。VBR的第一帧不包含声音数据,其长度是156个字节,用来存放标准
的声音帧头(4字节)、VBR文件标识、帧数、文件字节数等信息,具体结构说明见表2。
表2 VBR文件第一帧结构
字 节
1-4
说 明
与CBR相同的标准声音帧头
存放VBR文件标识“Xing”(58 69 6E 67),此标识具体位置视采用的MPEG标准和声道模式而
定。标识的前后字节没有使用。
36-39 MPEG-1和非单声道(常见)
21-24 MPEG-1和单声道
21-24 MPEG-2和非单声道
13-16 MPEG-2和单声道
5-40
41-44
45-48
49-52
53-152
153-156
标志,说明是否存储了帧数、文件长度、目录表和VBR规模信息,如果存储了,则01 02 04 08。
帧数(包括第一帧)
文件长度
目录表,用来按时间进行字节定位。
VBR规模,用于位率变动
1.2 ID3标准
MP3帧头中除了存储一些象private、copyright、original的简单音乐说明信息以外,没有考虑存放歌名、作者、专
辑名、年份等复杂信息,而这些信息在MP3应用中非常必要。1996年,FricKemp在“Studio 3”项目中提出了在MP3
文件尾增加一块用于存放歌曲的说明信息,形成了ID3标准,至今已制定出ID3 V1.0,V1.1,V2.0,V2.3和V2.4标准。
版本越高,记录的相关信息就越丰富详尽。
ID3 V1.0标准并不周全,存放的信息少,无法存放歌词,无法录入专辑封面、图片等。V2.0是一个相当完备的标
准,但给编写软件带来困难,虽然赞成此格式的人很多,在软件中真正实现的却极少。绝大多数MP3仍使用ID3 V1.0
标准。此标准是将MP3文件尾的最后128个字节用来存放ID3信息,这128个字节使用说明见表3。
表3 ID3 V1.0文件尾说明
字节
1-3
4-33
34-63
64-93
94-97
98-127
128
长度 (字节)
3
30
30
30
4
30
1
说 明
存放“TAG”字符,表示ID3 V1.0标准,紧接其后的是歌曲信息。
歌名
作者
专辑名
年份
附注
MP3音乐类别,共147种。
表4 MP3音乐类别:
20 'Alternative'
21 'Ska'
22 'Death Metal'
23 'Pranks'
24 'Soundtrack'
25 'Euro-Techno'
26 'Ambient'
27 'Trip-Hop'
28 'Vocal'
29 'Jazz+Funk'
30 'Fusion'
31 'Trance'
32 'Classical'
33 'Instrumental'
34 'Acid'
35 'House'
36 'Game'
37 'Sound Clip'
38 'Gospel'
39 'Noise'
81 Folk/Rock
85 Bebob
89 Bluegrass
93 Psychadelic Rock
97 Chorus
101 Speech
105 Sonata
40 'AlternRock'
41 'Bass'
42 'Soul'
43 'Punk'
44 'Space'
45 'Meditative'
46 'Instrumental Pop'
47 'Instrumental Rock'
48 'Ethnic'
49 'Gothic'
50 'Darkwave'
51 'Techno-Industrial'
52 'Electronic'
53 'Pop-Folk'
54 'Eurodance'
55 'Dream'
56 'Southern Rock'
57 'Comedy'
58 'Cult'
59 'Gangsta'
82 National Folk
86 Latin
90 Advantgarde
94 Symphonic Rock
98 Easy Listening
102 Chanson
106 Symphony
60 'Top 40'
61 'Christian Rap'
62 'Pop/Funk'
63 'Jungle'
64 'Native American'
65 'Cabaret'
66 'New Wave'
67 'Psychadelic'
68 'Rave'
69 'Showtunes'
70 'Trailer'
71 'Lo-Fi'
72 'Tribal'
73 'Acid Punk'
74 'Acid Jazz'
75 'Polka'
76 'Retro'
77 'Musical'
78 'Rock & Roll'
79 'Hard Rock'
83 Swing
87 Revival
91 Gothic Rock
95 Slow Rock
99 Acoustic
103 Opera
107 Booty Bass
0 'Blues'
1 'Classic Rock'
2 'Country'
3 'Dance'
4 'Disco'
5 'Funk'
6 'Grunge'
7 'Hip-Hop'
8 'Jazz'
9 'Metal'
10 'New Age'
11 'Oldies'
12 'Other'
13 'Pop'
14 'R&B'
15 'Rap'
16 'Reggae'
17 'Rock'
18 'Techno'
19 'Industrial'
80 Folk
84 Fast-Fusion
88 Celtic
92 Progressive Rock
96 Big Band
100 Humour
104 Chamber Music
108 Primus 109 Porn Groove
112 Club 113 Tango
Any other value should be considered as 'Unknown'
110 Satire
114 Samba
111 Slow Jam
115 Folklore
1.3 文件实例
在VC++中打开一个名为3文件,其内容如下:
000000 FF FB 52 8C 00 00 01 49 09 C5 05 24 60 00 2A C1
000010 19 40 A6 00 00 05 96 41 34 18 20 80 08 26 48 29
000020 83 04 00 01 61 41 40 50 10 04 00 C1 21 41 50 64
„„
0000D0 FE FF FB 52 8C 11 80 01 EE 90 65 6E 08 20 02 30
0000E0 32 0C CD C0 04 00 46 16 41 89 B8 01 00 08 36 48
0000F0 33 B7 00 00 01 02 FF FF FF F4 E1 2F FF FF FF FF
„„
0001A0 DF FF FF FB 52 8C 12 00 01 FE 90 58 6E 09 A0 02
0001B0 33 B0 CA 85 E1 50 01 45 F6 19 61 BC 26 80 28 7C
0001C0 05 AC B4 20 28 94 FF FF FF FF FF FF FF FF FF FF
„„
001390 7F FF FF FF FD 4E 00 54 41 47 54 45 53 54 00 00
0013A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
„„
0013F0 00 00 00 00 04 19 14 03 00 00 00 00 00 00 00 00
001400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
001410 00 00 00 00 00 00 4E
该文件长度1416H(5.142K),帧头为:FF FB 52 8C,转换成二进制为:
11111111 11111011
01010010 10001100
对照表1可知,3帧头信息见表5。
表5 3文件帧头信息
名称 位值 说 明
同步信息
第1字节恒为FF,11位均为1。
11 MPEG 1
版本
01 Layer 3
层
CRC校验
1
不校验
0101 64kbps
位率
00 44.1kHz
频率
帧长调节
1
调整,帧长是210字节。
0
保留字 没有使用。
声道模式
10
双声道
扩充模式
00
未使用。
1
版权 合法
原版标志
1
原版
强调方式
00
未定义
第1397H开始的三个字节是54 41 47,存放的是字符“TAG”,表示此文件有ID3 V1.0信息。
139AH开始的30个字节存放歌名,前4个非00字节是54 45 53 54,表示“TEST”;
13F4H开始的4个字节是04 19 14 03,存放年份“04/25/2003”;
最后1个字节是4E,表示音乐类别,代号为78,即“Rock&Roll”;
其它字节均为00,未存储信息。
版权声明:本文标题:MP3文件格式解析 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1717669157a596843.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论