APEV
1, 帧头:
APEV标签位置不固定,可能在文件末尾也可能在文件头,比较常见的存放位置为 ID3V1之前;
位置查找:
1,文件尾查找, 如果文件有ID3V1,则 文件指针向前移动128+32=160个字节,如果文件没有ID3V1,则向前移动32字节
原因为APEV标签的标签头和标签尾都是32个字符:
2,文件头查找, 如果有ID3V2,则文件指针向后移动ID3V2帧内容大小,如果没有ID3V2,则在文件头查找;
APEV2 帧头结构:
char header[8] /*APEV关键字 "APETAGEX",如果没有则表示不存在 APEV2信息*/
char version[4] /*APEV版本,如现在常用的APEV2*/
char tagSize[4] /*APEV 标签大小,包含标签尾,但不包含标签头, little endian */
char itemCount[4] /*标签元素个数, little endian */
char tagflags[4] /*填充*/
char reserved[8] /*标签保留,值全部为\0*/
标签帧信息格式:
char itemValSize[4] /*标签内容大小, little endian */
char itemflags[4] /*填充*/
char itemID /*标签内容标示,如Year(发行日期),Track 音轨号.大小不固定*/
char itemPre[1] /*标签ID与标签内容之间的间隔,值为\0*/
char itemValue /*标签内容,占itemValSize[4]字节*/
注:itemValue 一般用UTF-8编码存储:
常用帧标示:
Year 发行日期
Genre 流派
Track 音轨号
Album 专辑名
Title 歌曲名
Artist 歌手名
Encoder 编码类型
Composer 作曲家
Orchestra 乐队
1, 帧头:
APEV标签位置不固定,可能在文件末尾也可能在文件头,比较常见的存放位置为 ID3V1之前;
位置查找:
1,文件尾查找, 如果文件有ID3V1,则 文件指针向前移动128+32=160个字节,如果文件没有ID3V1,则向前移动32字节
原因为APEV标签的标签头和标签尾都是32个字符:
2,文件头查找, 如果有ID3V2,则文件指针向后移动ID3V2帧内容大小,如果没有ID3V2,则在文件头查找;
APEV2 帧头结构:
char header[8] /*APEV关键字 "APETAGEX",如果没有则表示不存在 APEV2信息*/
char version[4] /*APEV版本,如现在常用的APEV2*/
char tagSize[4] /*APEV 标签大小,包含标签尾,但不包含标签头, little endian */
char itemCount[4] /*标签元素个数, little endian */
char tagflags[4] /*填充*/
char reserved[8] /*标签保留,值全部为\0*/
标签帧信息格式:
char itemValSize[4] /*标签内容大小, little endian */
char itemflags[4] /*填充*/
char itemID /*标签内容标示,如Year(发行日期),Track 音轨号.大小不固定*/
char itemPre[1] /*标签ID与标签内容之间的间隔,值为\0*/
char itemValue /*标签内容,占itemValSize[4]字节*/
注:itemValue 一般用UTF-8编码存储:
常用帧标示:
Year 发行日期
Genre 流派
Track 音轨号
Album 专辑名
Title 歌曲名
Artist 歌手名
Encoder 编码类型
Composer 作曲家
Orchestra 乐队