MP3文件格式说明

上传人:豆浆 文档编号:11122327 上传时间:2017-10-12 格式:DOC 页数:4 大小:36.50KB
返回 下载 相关 举报
MP3文件格式说明_第1页
第1页 / 共4页
MP3文件格式说明_第2页
第2页 / 共4页
MP3文件格式说明_第3页
第3页 / 共4页
MP3文件格式说明_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《MP3文件格式说明》由会员分享,可在线阅读,更多相关《MP3文件格式说明(4页珍藏版)》请在金锄头文库上搜索。

1、用一个二进制查看器(比如 Ultra-Edit)打开一个 MP3 文件,就能看到一大堆看似杂乱无序的数据。但只要用心了解就会知道,其实,这一切都是有规律可循的。MP3 文件是由帧(frame)构成,帧是 MP3 文件的最小组成单位。每帧都包含帧头,并可以计算帧的长度。根据帧的性质不同,文件主要分为三个部分,ID3v2 标签帧,数据帧和 ID3v1 标签帧。并非每个MP3 文件都有 ID3v2,但是数据帧和 ID3v1 帧是必须的。ID3v2 在文件头,以字符串“ID3”为标志,包含了演唱者,作曲,专辑等信息,长度不固定,扩展了 ID3V1 的信息量。ID3v1 在文件结尾,以字符串“TAG”为

2、标记,其长度是固定的 128 个字节,包含了演唱者、歌名、专辑、年份等信息。I. ID3V2ID3V2 到现在一共有四个版本,但流行的播放软件一般只支持第三版,既 ID3V2.3。每个 ID3V2.3 的标签都一个标签头和若干个标签帧或一个扩展标签头组成。关于曲目的信息如标题、作者等都存放在不同的标签帧中,扩展标签头和标签帧并不是必要的,但每个标签至少要有一个标签帧。标签头和标签帧一起顺序存放在 MP3 文件的首部。标签头长度为 10 个字节,位于文件首部,其数据结构如下:char Header3; /* 字符串 ID3 */char Ver; /* 版本号 ID3V2.3 就记录 3 */c

3、har Revision; /* 副版本号此版本记录为 0 */char Flag; /* 存放标志的字节,这个版本只定义了三位,很少用到,可以忽略 */char Size4; /* 标签大小,除了标签头的 10 个字节的标签帧的大小 */标签大小为四个字节,但每个字节只用低 7 位,最高位不使用,恒为 0,其格式如下:0xxxxxxx 0xxxxxxx 0xxxxxxx 0xxxxxxx计算公式如下:ID3V2_frame_size = (int)(Size0 & 0x7F) 21| (int)(Size1 & 0x7F) 14| (int)(Size2 & 0x7F) 7| (int)(S

4、ize3 & 0x7F) + 10;标签帧每个标签帧都有一个 10 字节的帧头和至少一个字节的不固定长度的内容组成。它们是顺序存放在文件中,由各自特定的标签头来标记帧的开始。其帧的结构如下:char FrameID4; /*用四个字符标识一个帧,说明其内容 */char Size4; /* 帧内容的大小,不包括帧头,不得小于 1 */char Flags2; /* 存放标志,只定义了 6 位,此处不再说明 */常用帧标识:TIT2:标题TPE1:作者TALB:专辑TRCK: 音轨,格式: N/M,N 表示专辑中第几首,M 为专辑中歌曲总数TYER:年份TCON:类型COMM:备注,格式:“en

5、g0 备注内容”,其中 eng 表示所使用的语言帧大小为四个字节所表示的整数大小。II. ID3V1其数据结构如下:char Header3; /* 标签头必须是 TAG否则认为没有标签 */char Title30; /* 标题 */char Artist30; /* 作者 */char Album30; /* 专集 */char Year4; /* 出品年代 */char Comment28; /* 备注 */char reserve; /* 保留 */char track; /* 音轨 */char Genre; /* 类型 */其实,关于最后 31 个字节还存在另外一个版本,就是 30

6、 个字节的 Comment 和一个字节的 Genre.有了上述的这些信息,我们就可以自己写代码,从 MP3 文件中抓取信息以及修改文件名了。但是,如果真的想写一个播放软件,还是需要读它的数据帧,并进行解码。III. 数据帧数据帧往往有多个,至于有多少,由文件大小和帧大小来决定。每个帧都有一个四字节长的帧头,接下来可能有两个字节的 CRC 校验,其存在由帧头中的具体信息决定。接着就是帧的实体数据,也就是MAIN_DATA 了。A,帧头结构如下:位置 长度 描述(BIT) (BITS)3119 12 Frame sync(0xFFF)18/17 2 Layer, 00 reserved, 01 L

7、ayer III10 Layer II, 11 Layer I16 1 protection_bit, 0 意味着受 CRC 保护,帧头后面跟 16 位的 CRC。15-12 4 bitrate_index, 比特率11-10 2 sampling_frequency, 00 44.1KHz, 01 48KHz10 32 KHz, 11 保留9 1 padding_bit,1 意味着帧里包含 padding 位,仅当采样频率为 44.1KHz 时发生。8 1 private_bit76 2 mode, 00stereo, 01-joint stereo(intensity stereo and

8、/or ms_stereo)11- dual_channel, 11 single_channel5-4 2 mode_extension,在 Layer III 中表示使用了哪一种 joint stereo 编码方式。Intensity_stereo ms_stereo00 off off01 on off10 off on11 on on3 1 copyright,1 表示受版权保护。2 1 original,0 表示该 bitstream 是一个 copy,1 表示是 original.1-0 2 emphasis,表示会使用哪一种 de-emphasis。00 no emphasis,

9、 01 50/15 microsec. Emphasis10 reserved, 11 CCITT J.171) 无论帧长是多少,每帧的播放时间都是 26ms2) 数据帧大小:FrameSize = 144 * Bitrate / SamplingRate + PaddingBit当 144 * Bitrate / SamplingRate 不能被 8 整除,则加上相应的 paddingBit. B,MAIN_DATA:MP3 的 granule 包含 18 * 32 个 subband 采样。每个数据帧含有两个 granule 的数据,其内容结如下:- main_data_end point

10、er- side info for both granules (scfsi)- side info granule 1- side info granule 2- scalefactors and Huffman code data granule 1- scalefactors and Huffman code data granule 2主要数据里包含了 scalefactors, Huffman encoded data 和 ancillary information。其内容不再详叙,可以参考 MP3 SPECIS0 11172-3 AUDIO PART。我们一般用的都是立体声,scf

11、si 的长度为 32 个字节。这里要解释的一个概念就是位流bitstream。我们平常接触到的数据都是整数,最小的单位就是byte 后者 char。虽然我们也会用一个字节里的不同位来表示不同的含义,但总的来说,我们在出来数据的时候还是把它当作一个个字节看待。但对 MP3 这种数据格式来说,这是行不通的。在解码时,它的数据输入就是一个个比特流。其中一个或几个比特会是你的采样数据或者信息编码。你需要从整个MAIN_DATA 里提取你所需要的以 BIT 为单位的参数和输入信号,从而进行解码。所以我们需要一个子程序,getbit(n) ,也就是从缓冲中提取所需要的位,并形成一个新的整数,作为我们的输出

12、。C,LAME 标签帧可是,当你真的打开一个 MP3 文件的时候,你会发现,很奇怪,很多时候第一个数据帧的帧头后面的 32个字节居然都为 0,这是为什么呢,这么奇怪的解码信息该如何解释?找到 MP3 INFO TAG REV SPECIFICATION 的网站,我才明白,原来第一帧并不是真正的数据帧,而是 LAME 编码的标志帧。这里又要牵涉到两个概念:CBR 和 VBR。CBR 表示比特率不变,也就是每帧的长度是一致的,它以字符串“INFO”为标记。VBR 是 Variable BitRate 的简称,也就是每帧的比特率和帧的长度是变化的,它以字符串“Xing”为标记。同时,它还存放了 MP3 文件里帧的总个数,和 100 个字节的播放总时间分段的帧的 INDEX,还有其他一些参数,这被称为 Zone A,传统 Xing VBR 标签数据,共 120 个字节。在二进制文本编辑器里我们还可看到一个字符串“LAME”,并且后面清楚地跟着版本号。这就是 20 个字节的 Zone B 初始 LAME 信息,表示该文件是用 LAME 编码技术。接下来一直到该帧结束就是 Zone CLAME 标签。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号