自己提取没有元数据的 mp3 文件相当容易。
ID3v1
元数据是文件的最后 128 个字节。如果存在,元数据总是以 3 个字节的“TAG”开头。忽略这最后的 128 字节。
ID3v2
元数据可以存储在文件的开头或结尾。大多数实现只支持开始。ID3v2 有一个存储大小的标头。标头始终位于元数据的开头。有一个可选的页脚,它是元数据末尾页眉的副本。如果元数据位于文件末尾,则需要页脚。
标头具有以下形式
ID3v2/file identifier "ID3"
ID3v2 version $04 00
ID3v2 flags %abcd0000
ID3v2 size 4 * %0xxxxxxx
页脚具有以下形式
ID3v2/file identifier "3DI"
ID3v2 version $04 00
ID3v2 flags %abcd0000
ID3v2 size 4 * %0xxxxxxx
d 位表示页脚是否存在。大小是在没有页眉和页脚的情况下测量的。大小的每个字节总是设置最高位。所以实际的 32 位中只有 28 位代表大小。
只需计算文件的哪一部分不是元数据,然后将其用于您的散列。
请注意,如果 ID3v1 和 ID3v2 都位于文件末尾,则 ID3v1 位于 IDv2 后面
该规范可以在http://www.id3.org/id3v2.4.0-structure找到。