ID3格式介绍

摘要:在做音频项目开发时,经常会和音频打交道,会涉及到很多音频的基础知识。如音频格式,编解码,采样率、A/D,D/A转换等。本文旨在介绍歌曲ID3信息。如有错误,欢迎指正。

什么是ID3?

ID就是身份的意思,ID3就是表示MP3的身份。ID3是一种metadata容器,多应用于MP3格式的音频文件中。它可以将相关的曲名、演唱者、专辑、音轨数等信息存储在MP3文件中。 ID3,一般是位于一个mp3文件的开头或末尾的若干字节内,附加了关于该mp3的歌手,标题,专辑名称,年代,风格等信息,该信息就被称为ID3信息。

为什么要ID3?

试想一下,如果没有ID3,那么我们如何判断一首歌的内容是什么呢?也许你会想到文件名。那又怎么知道这首歌演唱者和专辑名称等信息呢?不可能每首歌的演唱者和专辑名称都能记住。ID3就是做这样的事情,把歌曲名、演唱者、专辑等信息保存在MP3文件中。ID3就是MP3曲目的标签,有时也会把ID3称之为ID3Tags,其中的“Tag”在英文中名词的一个意思是“标签”,所以“ID3Tags”也就是“MP3文件曲目标签”的意思。

ID3的版本

ID3信息分为两个版本,V1和V2版本。其中V2有4个版本,最常用的是V2.3

V1和V2的区别:
a,V2版一般位于mp3的开头,V1版的ID3在mp3文件的末尾128字节
b,V2是以ID3三个字符开头,V1以TAG三个字符开头
c,V2可以存储文字信息,和专辑图片等大容量信息。V1只能存储文字信息。
d,V2版本的ID3信息可以支持Unicode编码,V1版本是ANSI编码

ANSI编码:ID3v1中保存的字符串多采用ANSI编码。因此根据系统语言的不同所使用的编码是不同的。如果是简体中文系统使用的是GB2312,繁体中文就是BIG5,日文操作系统下面又是JIS编码。所以,如果MP3中仅有ID3v1的信息,那在不同语言的操作系统中的播放器里面显示的信息会是乱码。或者在windows里面正常的在linux系统下面就会是乱码。因为linux系统下面一般使用UTF-8编码。

现在我们听的歌曲一般都是ID3 V2版本,互联网时代,现在听歌都是走流媒体,如果还是ID3 V1版本,曲目的ID3相关信息,得听到歌曲末尾才能显示出来。这也是ID3 V2版本的ID3信息放在文件开头的原因

ID3格式介绍

ID3 V1格式

ID3v1保存在mp3尾部,固定为128字节,以TAG这三个字符开头。格式如下:

char Header[3]; 标签头必须是"TAG"否则认为没有标签
char Title[30]; 标题
char Artist[30]; 作者
char Album[30]; 专集
char Year[4]; 出品年代
char Comment[30]; 备注
char Genre; 类型/曲风

ID3 V1的信息都是按顺序存放,没有任何标识将其分开,比如标题、作者等信息不足30个字节,则使用’\0’补足,否则将造成信息错误。Genre使用原码表示,对照表如下:
其中0~79是标准的Genre,80至147是扩展的Genre
在这里插入图片描述
本文使用asfview.exe工具查看曲目的详细信息,主要是方便对MP3格式不熟的同学,也可以直接用支持十六进制显示的工具打开歌曲。后面也会介绍
如下是一个ID3 V1版本的例子:
在这里插入图片描述

ID3 V2格式

MP3的ID3v2.3版本文件基本分为两部分,一个为标签,其它的为数据。
文件标签分为标签头和标签帧

ID3 V2标签头

标签头有10个字节:
即在文件最开始的10个字节,它的数据结构如下:
char Header[3];//这个字符串一定为"ID3"
char version;//版本号
char revision;//副版本号,好像一直都是0,没看到过它有变过
char flags;//一些特殊的消息标记,只会使用此字节的高3位,其它的五位并没有什么用
char size[4];//代表整个标签帧的大小,但是不包括这开始的10个字节,所以这里得到的size需要加上10才代表整个标签帧的大小
在这里插入图片描述

ID3 V2标签帧

帧头的定义
帧标识:char ID[4];//用四个字符标识一个帧,表明这个帧的内容是什么
帧大小:char size[4];//帧内容的大小,不包括帧头
帧标记:char flags[2];//特殊的消息标记
常见的帧标识:
TIT2:歌曲标题名字
TPE1:作者名字
TALB:作品专辑
TYER:作品产生年代
COMM:备注信息
APIC:专辑图片
帧标记说明:只定义了6位,另外的10位为0,一般这些标记也不用,通常为0。格式如下:
flags %abc00000 ijk00000
a – 标签保护标志,设置时认为此帧作废
b – 文件保护标志,设置时认为此帧作废
c – 只读标志,设置时认为此帧不能修改
i – 压缩标志,设置时一个字节存放两个BCD 码表示数字
j – 加密标志(没有见过哪个MP3 文件的标签用了加密)
k – 组标志,设置时说明此帧和其他的某帧是一组

以TIT2帧标识为例:
第一部分为1个字节,这个字节一定是[0x00,0x01,0x02,0x03]中的一种,0x00代表这个标签帧后续的数据为ISO-8859-1编码,0x01则是utf-16LE编码,0x02则是utf-16BE编码,0x03则是utf-8编码。

ISO-8859-1编码的歌曲在这里插入图片描述
UTF-8编码的歌曲
在这里插入图片描述

用UltraEdit软件查看歌曲信息

在这里插入图片描述

ID3官网

想更详细了解ID3信息,请参考ID3官网:
https://id3.org/

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值