前文提到解析MP3标签,程序源码中也已经出现了调用解析MP3标签、打印MP3文件信息的功能,这儿先说说MP3文件信息的解析。
解析MP3的文件信息对MP3解码器来说只是一个附加功能,如果不加入这部分源码,同时删除掉前文源码中的相关调用,不影响解码播放。如果你想编写“迷你”型的MP3解码器,可以忽略这些附加的功能。
MP3的标签信息位于文件开始处或结尾处,用于表达MP3文件的相关信息,常见的有ID3、APE等。
ID3 V1 位于文件最后的128字节,如果读取的是网络文件而服务器又不支持随机读取的话,意味着不对对其解析这部分信息。这128字节共表示7个信息:
[0..2] 3 bytes: ID3 v1标识 -- 'TAG'
[3..32] 30 bytes: 标题
[33..62] 30 bytes: 艺术家
[63..92] 30 bytes: 专辑名
[93..96] 4 bytes: 发行年份
[97..126] 30 bytes: v1.0 -- 注释/附加/备注信息
v1.1 -- 前29 bytes注释/附加/备注信息,最后1 byte音轨信息
[127] 1 byte : 流派
从“标题”开始,每部分内容之间用'\0'(字符串结束标志)或'\20'(空格)隔开。
ID3 V2 表示的信息更丰富,结构更复杂,位于文件开始处或位于APE标签之后。ID3 V2的详细内容请参见http://www.id3.org/id3v2.3.0
APE V1 & V2 位于文件开始处或ID3 V2之后。详细内容请参见http://cn.bing.com/reference/semhtml/APE_tag (External links下的链接就是APE V2)。有很多MP3的标签信息很混乱,内容重复。由于APE标签出现并在MP3中大量应用得比ID3晚,MP3文件的“有利”位置都被ID3占用,所以APE标签位于文件中的位置让人捉摸不透,情况很复杂,对网络文件来说,判断APE标签的位置要反复在文件中定位,况且有的服务器根本就不支持随机访问,所以我这儿就放弃了对APE的解析,尽管APE的解析过程并不复杂。
本文只解析ID3 V1的具有的那几项简单的内容,JAVA的字符集转换很方