MP3标签 ID3v1,ID3v2,APETAGEX [转]

转自:https://blog.csdn.net/liuyan4794/article/details/7747769

MP3文件的数据结构以及为mp3内嵌歌词的代码

  MP3文件是由帧构成,帧是 MP3文件的最小组成单位。根据帧性质的不同,文件大体分为四个部分:ID3v2标签帧、数据帧、APEV2标签帧、ID3v1标签帧,而只有数据帧才是必需的。

  数据帧包含了歌曲的压缩数据。标签帧提供了歌曲的演唱者、歌名、专辑、年份等信息。

  ID3v1 在文件结尾,以字符串“TAG”为标识,其长度是固定的 128 个字节。

  ID3v2 在文件头,以字符串“ID3”为标识,长度不固定,扩展了 ID3V1 的信息量。

  APEV2 是最新出现的一种标签,以字符串“APETAGEX”为标识,长度不固定,位置也不固定,可能在文件末尾也可能在文件头,比较常见的是位于文件尾部, 但在 ID3v1 之前。

  值得一提的是 Lyrics3v2,它是千千静听播放器发明的一种独立帧,位于 ID3v1 之前,APEV2 之后(如果有 APEV2 的话),它专用于内嵌 Lrc 类型的歌词文件。

一、ID3V1

表1:ID3V1结构

--------------------------------------------------------------------

名称 字节   说明

--------------------------------------------------------------------

Tag   3   ID3V1标识符“TAG”的Ascii码

Title  30  歌曲名

Artist  30  歌手名

Album  30  专辑名

Year   4   日期信息

Comment 28  注释信息,有时为30字节

Reserved 1   =0说明有音轨,下一字节就是音轨;≠0表示注释是30个字节

Track  1   音轨(字节型数值),歌曲在专辑里的序号 

Genre  1   歌曲风格(字节型数值)

--------------------------------------------------------------------

说明:

  ①如果MP3的注释=30字节,那么就要占用 Reserved 和 Track 两个字节,这要看 Reserved 是否=0,如果=0,那么注释有 28 个字节。如果不是,那么注释有 30 个字节。当注释=30 个字节的时候,那就没有 Track 了。

  ②如果 MP3 文件后面虽然有“TAG”三个字母,但字母后面全是0,那就不是一个合法的 ID3V1 信息,应该认为没有 ID3V1 信息。

  ③ID3V1 的各项信息都是顺序存放,没有任何标识将其分开,一般用 0补足规定的长度。比如歌曲名有 20 个字节,则在歌曲名后要补足 10 个 0,否则将造成信息错误。

  ④歌曲风格共 148 种,用编号表示,表2列出了前 30 种的风格与编号对照,详情可上网查询。

表2:30种歌曲风格与编号对照

---------------------------

编号 风格名称  中译义

---------------------------

00 Blues    布鲁斯

01 ClassicRock 古典摇滚

02 Country   乡村

03 Dance    舞曲

04 Disco    迪斯科

05 Funk     伤感爵士

06 Grunge    垃圾摇滚

07 Hip-Hop   饶舌

08 Jazz     爵士

09 Metal    金属

0A NewAge    前卫

0B Oldies    怀旧

0C Other    其他

0D Pop     流行

0E R&B     摇滚布鲁斯

0F Rap     说唱

10 Reggae    雷盖扭摆舞

11 Rock     摇滚

12 Techno    电子流行乐

13 Industrial  工业

14 Alternative 多变

15 Ska     斯卡

16 DeathMetal  重金属

17 Pranks    恶作剧

18 Soundtrack  电影配音

19 Euro-Techno 神游舞曲

1A Ambient   流行

1B Trip-Hop   迷幻舞曲

1C Vocal    非纯音乐

1D Jazz+Funk  爵士摇滚

1E Fusion    合成音乐

---------------------------

二、ID3V2

  ID3V2 与 ID3V1 的作用差不多,也是记录 mp3 的有关信息,但 ID3V2 的结构比 ID3V1 要复杂得多,而且可以伸缩和扩展。ID3V2 到现在一共有 4 个版本,但流行的播放软件一般只支持第 3 版,既ID3V2.3。由于ID3V1记录在 MP3 文件的末尾,ID3V2 就只好记录在 MP3 文件的首部了。

  每个 ID3V2.3 的标签都一个标签头和若干个标签帧或一个扩展标签头组成。歌曲的信息如标题、作者等都存放在不同的标签帧中,扩展标签头和标签帧并不是必要的,但每个标签至少要有一个标签帧。对于 VB 爱好者来说,你可以把 ID3V2 看作是一个对象,而把标签帧看作是 ID3V2 的一个属性,那么,标签帧的标识符就可以看作是属性名了。

1.D3V2标签头

  一首MP3如果有ID3V2.3的话,那么ID3V2.3的标签头占用文件最前面的10个字节,其数据结构如下:

表3:ID3V2.3标签头结构

--------------------------------------------------------------------

名称  字节  说明

--------------------------------------------------------------------

Header  3    ID3V2.3标识符"ID3"的Ascii码,否则认为没有ID3V2.3

Ver    1  版本号,=03

Revision 1  副版本号,=00

flag   1  标志字节,一般没意义,=00

Size   4  标签内容长度,高位在前,不包括标签头的10个字节

---------------------------------------------------------------------

说明:

  ①Size 字段的计算公式如下(从左至右):

size =字节1的值×&H200000+字节2的值×&H4000+字节3的值×&H80+字节4的值

  ②如果所有标签帧的总长度<标签内容长度,则须用0填满。

2.D3V2标签帧 

  标签内容由若干个标签帧组成。每个标签帧都由一个10个字节的帧头和至少 1个字节的不固定长度的帧内容组成,它们顺序存放在文件中。

  每个帧都由帧头和帧内容组成,数据结构如下:

表4:标签帧的结构

----------------------------------------------------------

名称  字节  说明

----------------------------------------------------------

FrameID 4    帧标识符的Ascii码,常用标识符的意义见表5

Size   4    帧内容及编码方式的合计长度,高位在前

Flags  2    标志,只使用了6位,详见表6,一般均=0

encode  4    帧内容所用的编码方式。许多帧没有此项

帧内容      至少 1 个字节

----------------------------------------------------------

说明:

  ①Size的计算同上。

  ②标签帧之间没有特殊的分隔符,要得到一个完整的标签帧内容必须先从帧头中得到帧内容长度。

    ③encode 有 4 个可能值:

       0:表示帧内容字符用 ISO-8859-1 编码;

       1:表示帧内容字符用 UTF-16LE 编码;

       2:表示帧内容字符用 UTF-16BE 编码;

       3:表示帧内容字符用 UTF-8 编码(仅ID3V2.4才支持)

  但经常看到的是"eng"这样的字符形式,它表示帧内容所使用的自然语言为英语。也许 D3V2 标签帧进化到现在,encode 已经用“自然语言”取代了“编码方式”。

  ⑤帧内容均为字符串,常以 00 开头。

表5:标签帧标识符的意义

---------------------------------------

名称  意义

---------------------------------------

AENC: 音频加密技术

APIC: 附加描述

COMM: 注释,相当于ID3v1的Comment

COMR: 广告

ENCR: 加密方法注册

ETC0: 事件时间编码

GEOB: 常规压缩对象

GRID: 组识别注册

IPLS: 复杂类别列表

MCDI: 音乐CD标识符

MLLT: MPEG位置查找表格

OWNE: 所有权

PRIV: 私有

PCNT: 播放计数

POPM: 普通仪表

POSS: 位置同步

RBUF: 推荐缓冲区大小

RVAD: 音量调节器

RVRB: 混响

SYLT: 同步歌词或文本

SYTC: 同步节拍编码

TALB: 专辑,相当于ID3v1的Album

TBPM: 每分钟节拍数 

TCOM: 作曲家 

TCON: 流派(风格),见表2

TCOP: 版权

TDAT: 日期

TDLY: 播放列表返录 

TENC: 编码 

TEXT: 歌词作者 

TFLT: 文件类型 

TIME: 时间

TIT1: 内容组描述 

TIT2: 标题,相当于ID3v1的Title 

TIT3: 副标题

TKEY: 最初关键字 

TLAN: 语言 

TLEN: 长度 

TMED: 媒体类型 

TOAL: 原唱片集 

TOFN: 原文件名 

TOLY: 原歌词作者

TOPE: 原艺术家

TORY: 最初发行年份 

TOWM: 文件所有者(许可证者) 

TPE1: 艺术家相当于ID3v1的Artist 

TPE2: 乐队

TPE3: 指挥者

TPE4: 翻译(记录员、修改员) 

TPOS: 作品集部分 

TPUB: 发行人 

TRCK: 音轨(曲号),相当于ID3v1的Track

TRDA: 录制日期 

TRSN: Intenet电台名称 

TRSO: Intenet电台所有者 

TSIZ: 大小  

TSRC: ISRC(国际的标准记录代码) 

TSSE: 编码使用的软件(硬件设置) 

TYER: 年代,相当于ID3v1的Year

TXXX: 年度

UFID: 唯一的文件标识符

USER: 使用条款

USLT: 歌词 

WCOM: 广告信息

WCOP: 版权信息

WOAF: 官方音频文件网页

WOAR: 官方艺术家网页

WOAS: 官方音频原始资料网页

WORS: 官方互联网无线配置首页

WPAY: 付款

WPUB: 出版商官方网页

WXXX: 用户定义的URL链接 

---------------------------------------

说明:

  ①帧内容是数字的,都用 Ascii 字符表示。

  ②有的 TCON(风格、流派)的帧内容是直接用字符串表示的,如“genre”,而有的则是用编号表示的,如“28 31 32 29”就是用字符串“(12)”表示 12 号风格,我们在解析的时候要注意。

  ③TRCK(音轨)的帧内容格式是:N/M。其中,分母表示专辑中共有 M 首歌曲,分子表示专辑中的第 N 首曲。

表6:标签帧中Flags标志的意义

----------------------------------------------------

位址 意义

----------------------------------------------------

0  标签保护标志,如设置表示此帧作废

1  文件保护标志,如设置表示此帧作废

2  只读标志,如设置表示此帧不能修改

3  压缩标志,如设置表示1个字节存放2个BCD码表示数字

4  加密标志

5  组标志,如设置表示此帧和其它的某帧是一组

----------------------------------------------------

三、APEV2

  APEV2 的特点是:字符串用 UTF-8 编码;允许给帧标识自由命名。

表7:APEv2标签结构

-------------

名称   字节

-------------

标签头  32

标签帧1  

标签帧2  

...    

标签尾  32  

-------------

说明:个别 APEV2 没有标签尾。

表8:APEV2标签头结构

------------------------------------------------------

名称   字节  说明

------------------------------------------------------

headerID 8   “APETAGEX”的Ascii码

version  4   APEV版本,现在常用APEV2(D0 07 00 00)

Size   4   所有标签帧和标签尾的总长度,低位在前

Count   4   标签帧个数,低位在前

flags   4   填充标记(00 00 00 A0)

reserved 8   保留,全为0

------------------------------------------------------

表9:APEV2标签尾结构

---------------------------------------------------------

名称   字节  说明

---------------------------------------------------------

headerID 8   “APETAGEX”的Ascii码

version  4   APEV版本,现在常用APEV2(D0 07 00 00)

Size   4   标签帧总长度(包括标签尾本身),低位在前

Count   4   标签帧个数,低位在前

flags   4   填充标记(00 00 00 80)

reserved 8   保留,全为0

---------------------------------------------------------

表10:APEV2标签帧结构

-------------------------------------------

名称   字节  说明

-------------------------------------------

Size   4    帧内容长度,低位在前

flags   4    填充标记

ID         帧标识,长度不固定

Pre    1    帧标识的结束字符,恒为0

Value       帧内容,长度由Size确定

-------------------------------------------

说明:APEV2 中,帧内容均为字符串,且均使用 UTF-8 编码。

表11:常用帧标识的意义

-----------------------------

名称     意义

-----------------------------

Album      专辑名

Artist      歌手名

Comment     注释

Composer     作曲家

Copyright    版权

Encoder     编码类型

Genre      风格

Lyric      歌词

Orchestra    乐队

Title      歌曲名

Track      音轨号

WM/AuthorWebpaga 作者网页

WM/BPM

WM/CodedBy    编码依据

WM/EncodedBy   英文编码依据

WM/FileWebpage  文件网页

WM/GenreID    风格编号

WM/OrigArtist  原创艺术家

WM/PromotionURL 推销URL

WM/URL

WM/Writer    作者

WMFSDKVersion  发行版本

WMFSDKNeeded   发行必需

Year       发行日期

-----------------------------

说明:Lyric 帧可以储存带时间参数的歌词,格式为:“[时:分:秒] 歌词 换行符”(类似于 Lrc歌词文件),时和分可以省略,秒可以用小数。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343