什么是ID3(v1)?
音频格式MPEG layer I, layer II和layer III (MP3)除了一些简单的yes/no参数如"private"(私人的),"copyrighted"(有版权的),"original home"(原始的,表明这是原始的文件而非拷贝)外,本身没有保存关于内容信息的方法。1996年Eric Kemp(别名NamkraD)的程序 "Studio3" 提出了一种解决此问题的方法。通过在文件的尾部加入一小部分额外的数据可以使MP3文件携带关于音频的信息而不仅是音频数据本身。
这些数据被称为标签(tag),其位置应尽可能选在不干扰解码器(decoder)的地方。为方便检测,选用128字节的固定大小。标签结构如下 (同下边的图解):
Song title(歌曲标题) | 30 字节 |
Artist(艺术家) | 30 字节 |
Album(专辑) | 30 字节 |
Year(年代) | 4 字节 |
Comment(注释) | 30 字节 |
Genre(风格) | 1 字节 |
具有ID3v1标签的文件的内部结构
如果你计算所有这些项的长度,我们看到 30+30+30+4+30+1等于125字节而不是128字节。丢失的3个字节可在"song title(歌曲标题)"之前、标签的最开头找到。这3个字节总是"TAG",它是确定ID3标签的标志。查找ID3v1/1.1标签最简单的方法,是在文件尾部倒数第128个字节开始查找字符 "TAG"。
由于所有artist(艺术家)的名字都没有30个字节长,因此输入这项信息后,会有一些字节没有被用到。这些字节应当用二进制值0来填充。你还会觉得在仅有1字节大的genre(风格)项中没法写入很多。但实际上情况好的多,你在genre(风格)中输入的值应当对应于一个预先定义好的列表。Eric Kemp创建的这个列表有80个条目,从0到79。
什么是 ID3v1.1?
ID3v1对于程序员来说很好实现,但对于那些有自己的创新思想的人来说是令人沮丧的。由于ID3v1标签拥有一个固定大小,并且没有标明"保留供未来使用"的空间,因此如果你想要保持与现存软件的兼容,改进的空间并不大。
Michael Mutschler发现了一个对ID3v1很巧妙的改进方法。由于所有未被使用的字节都必须用字节0来填充,因此当ID3v1读取器在遇到一个字节0后会停止读取当前项目是一个很好的假设。如果某一项的倒数第二个字节为0,而最后一个字节不为0,我们就有一个额外的字节来填充信息。由于在comment(注释)项中写下的有用信息都很简短,因此ID3v1.1标准声明comment(注释)项应当为28个字节,下一个字节应当总为0,在genre(风格)前的最后一个字节应当包含这首音乐来自CD的哪个音轨(track)。
具有ID3v1.1标签的文件的内部结构
=========================================================
翻译作者:David
原网址:http://www.id3.org/id3v1.html
=========================================================
音频格式MPEG layer I, layer II和layer III (MP3)除了一些简单的yes/no参数如"private"(私人的),"copyrighted"(有版权的),"original home"(原始的,表明这是原始的文件而非拷贝)外,本身没有保存关于内容信息的方法。1996年Eric Kemp(别名NamkraD)的程序 "Studio3" 提出了一种解决此问题的方法。通过在文件的尾部加入一小部分额外的数据可以使MP3文件携带关于音频的信息而不仅是音频数据本身。
这些数据被称为标签(tag),其位置应尽可能选在不干扰解码器(decoder)的地方。为方便检测,选用128字节的固定大小。标签结构如下 (同下边的图解):
Song title(歌曲标题) | 30 字节 |
Artist(艺术家) | 30 字节 |
Album(专辑) | 30 字节 |
Year(年代) | 4 字节 |
Comment(注释) | 30 字节 |
Genre(风格) | 1 字节 |

具有ID3v1标签的文件的内部结构
如果你计算所有这些项的长度,我们看到 30+30+30+4+30+1等于125字节而不是128字节。丢失的3个字节可在"song title(歌曲标题)"之前、标签的最开头找到。这3个字节总是"TAG",它是确定ID3标签的标志。查找ID3v1/1.1标签最简单的方法,是在文件尾部倒数第128个字节开始查找字符 "TAG"。
由于所有artist(艺术家)的名字都没有30个字节长,因此输入这项信息后,会有一些字节没有被用到。这些字节应当用二进制值0来填充。你还会觉得在仅有1字节大的genre(风格)项中没法写入很多。但实际上情况好的多,你在genre(风格)中输入的值应当对应于一个预先定义好的列表。Eric Kemp创建的这个列表有80个条目,从0到79。
什么是 ID3v1.1?
ID3v1对于程序员来说很好实现,但对于那些有自己的创新思想的人来说是令人沮丧的。由于ID3v1标签拥有一个固定大小,并且没有标明"保留供未来使用"的空间,因此如果你想要保持与现存软件的兼容,改进的空间并不大。
Michael Mutschler发现了一个对ID3v1很巧妙的改进方法。由于所有未被使用的字节都必须用字节0来填充,因此当ID3v1读取器在遇到一个字节0后会停止读取当前项目是一个很好的假设。如果某一项的倒数第二个字节为0,而最后一个字节不为0,我们就有一个额外的字节来填充信息。由于在comment(注释)项中写下的有用信息都很简短,因此ID3v1.1标准声明comment(注释)项应当为28个字节,下一个字节应当总为0,在genre(风格)前的最后一个字节应当包含这首音乐来自CD的哪个音轨(track)。

具有ID3v1.1标签的文件的内部结构
=========================================================
翻译作者:David
原网址:http://www.id3.org/id3v1.html
=========================================================
回复Comments
{commenttime}{commentauthor}
{CommentUrl}
{commentcontent}