ID3V2一共有四个版本,ID3V2.1/2.2/2.3/2.4,目前流行的播放软件一般只支持第三版即ID3V2.3,
由于ID3V1记录在文件的末尾处,ID3V2就只能记录在文件的首部了,也是因为这个原因,
对ID3V2的操作比ID3V1要慢,而且ID3V2的结构比ID3V1的结构复杂的多,但是ID3V2可以记录更多的信息,长度可变
ID3V2.3由一个标签头和若干个标签帧或者一个扩展标签头组成,至少要有一个标签帧,每一个标签帧记录一种信息,例如作曲、标题等
标签头格式:
char Header[3]; /*必须为“ID3”否则认为标签不存在*/
char Ver; /*版本号ID3V2.3 就记录3*/
char Revision; /*副版本号此版本记录为0*/
/* 标志字节一般为0,仅使用了 前3个bit 定义如下(111000000B)
第8位:表示是否使用Unsynchronisation
第7位:表示是否有扩展头部,一般没有,所以一般也不设置
第6位:表示是否为测试标签,99.99 % 的标签都不是测试标签,不设置
*/
unsigned char Flag;
/*标签帧大小(不包括头的大小),这个大小比较怪,每字节仅底7位有效,4个底7位拼起来
标签帧大小共四个字节,每个字节只使用低7位,最高位不使用恒为0,计算时将最高位去掉,得 到28bit的数据,计算公式如下:
Size = (Size[0] & 0x7F) * 0x200000 + (Size[1] & 0x7F) * 0x4000 + (Size[2] & 0x7F) * 0x80 + (Size[3] & 0x7F)
*/
char Size[4];
实际找的MP3测试中没有发现扩展头的情况,ID3的官方网站上不去, 不知道扩展头在标签头的后面,还是在标签帧的后面。
标签帧的格式:
/*标识帧,说明其内容,例如作者/标题等 TIT2=标题 TPE1=作者 TALB=专集*/
char ID[4];
/*帧内容的大小,不包括帧头,不得小于1 */
unsigned char Size[4];
/*标志帧,只定义了6 位 使用每个字节的高三位,其他位均为0(11100000B 11100000B)
16 -- 标签保护标志,设置时认为此帧作废
15 -- 文件保护标志,设置时认为此帧作废
14 -- 只读标志,设置时认为此帧不能修改
8 -- 压缩标志,设置时一个字节存放两个BCD 码表示数字
7-- 加密标志
6-- 组标志,设置时说明此帧和其他的某帧是一组
*/
unsigned char Flags[2];
标签帧的大小的计算方式:
int getContentSize() {
int size = 0,b=0;
b = (int)this->Size[0]; size = b ;
b = (int)this->Size[1]; size = (size << 8) + b;
b = (int)this->Size[2]; size = (size << 8) + b;
b = (int)this->Size[3]; size = (size << 8) + b;
return size;
}
标签帧的种类
FrameID |
Class Name |
2 |
3 |
4 |
|
Audio Encryption |
AENC |
AudioEncryptionFrame |
P |
P |
P |
Attached Picture |
APIC |
AttachedPictureFrame |
P |
P |
P |
Audio seek point index |
ASPI |
P |
|||
Comment |
COMM |
TextWithLanguageFrame |
P |
P |
P |
Commercial Frame |
COMR |
CommercialFrame |
P |
P |
|
Encryption Method Registraion |
ENCR |
DataWithSymbolFrame |
P |
P |
|
Equalisation (2) |
EQU2 |
P |
|||
Equalization |
EQUA |
Equalisation |
P |
P |
|
Event Timing Code |
ETCO |
EventTimingCodeFrame |
P |
P |
P |
General Encapsulated Object |
GEOB |
GeneralFileFrame |
P |
P |
P |
Group Identification Registration |
GRID |
DataWithSymbolFrame |
P |
P |
|
Involved People List |
IPLS |
TextFrame |
P |
P |
|
Linked Information |
LINK |
LinkFrame |
P |
P |
P |
Music CD Identifier |
MCDI |
BinaryFrame |
P |
P |
P |
Mpeg Location Lookup Table |
MLLT |
P |
P |