分析ID3格式

前言:本篇只是起mark作用,表示学到了这儿,还并没有学完。正在参考的链接和工具先share出来。后面学习后再继续更新

一、ID3是什么

ID3 是一种 metadata 容器,多应用于MP3格式的音频文件中。
ID3,一般是位于一个mp3文件的开头或末尾的若干字节内,附加了关于该mp3的歌手,标题,专辑名称,年代,风格等信息,该信息就被称为ID3信息,ID3信息分为两个版本,v1和v2版。 其中:v1版的ID3在mp3文件的末尾128字节,以TAG三个字符开头,后面跟上歌曲信息。 v2版一般位于mp3的开头,可以存储歌词,该专辑的图片等大容量的信息。

二、怎么看ID3(ID3格式)

ID3查看的工具:AFinst
用例:我要你
这里写图片描述
TSSE
COMM: 备注
TALB:专辑
TIT2:表示这首歌的标题。
TPE1:作者
TRCK:音轨。 格式:N/M 其中N为专集中的第N首,M为专集中共M首,N和M为ASCII码表示的数字
APIC:APIC=attached picture(专辑封面)

三、ID3V1和V2分析实例

1 . ID3V1.1

ID3 V1是一组附加在音乐文件后面的数据,它的长度是固定的128字节。
其中流派一共定义了79种,流行的播放软件Winamp则把它扩展到了125种,从Blues到Noise到Dance Hall,非常丰富。Genre使用原码表示,对照表http://wiki.gimoo.net/view/10352.html
ID3V1.1的数据结构如下:
这里写图片描述
一个英文字母一个字节,一个中文两个字节。 ID3V1的各项信息都是顺序存放,没有任何标识将其分开,比如标题信息不足30个字节,则使用’\0’补足,否则将造成信息错误。
这里写图片描述

TAG:固定字段。”544147”
花火:Title。” BBA8BBF0”,不足30个字节,用0补充。
丁当(叮当):Aritist。” B6A1B5B128B6A3B5B129”,不足30个字节,用0补充。
夜猫:Album。” D2B9C3A8”,不足30个字节,用0补充。
2009:Year。” 32303039”,4个字节。
WWW.TOP100.CN巨鲸音乐网:” 5757572E544F503130302E434EBEDEBEA8D2F4C0D6CDF8”
Genre:2020202000010C

2 .ID3v2

ID3V2到现在一共有4个版本,但流行的播放软件一般只支持第3版,既ID3v2.3。
每个ID3V2.3的标签都是一个标签头和若干个标签帧或一个扩展标签头组成。关于曲目的信息如标题、作者等都存放在不同的标签帧中,扩展标签头和标签帧并不是必要的,但每个标签至少要有一个标签帧。标签头和标签帧一起顺序存放在MP3文件的首部。
2.1 标签头
在文件的首部顺序记录10个字节的ID3V2.3的头部。
这里写图片描述
这里写图片描述
ID3:必须为“ID3”。“494433”。
Ver:版本号。“03”
COMM:Flag,表示Comments。“434F4D4D”。

2.1.1 标志字节Flag
标志字节一般为0,定义如下:
  abc00000
  a – 表示是否使用Unsynchronisation(这个一般不设置)
  b – 表示是否有扩展头部,一般没有(至少Winamp没有记录),所以一般也不设置
  c – 表示是否为测试标签(99.99%的标签都不是测试用的,所以一般也不设置)
3.1.2标签大小Size[4]
一共四个字节,但每个字节只用7位,最高位不使用恒为0。所以格式如下
  0xxxxxxx 0xxxxxxx 0xxxxxxx 0xxxxxxx
计算大小时要将0去掉,得到一个28位的二进制数,就是标签大小。计算公式如下:
  int total_size;
  total_size = (Size[0]&0x7F)*0x200000
  +(Size[1]&0x7F)*0x4000
  +(Size[2]&0x7F)*0x80
  +(Size[3]&0x7F)

3.2 标签帧
标签帧=10字节的帧头+至少不固定字节长度的内容。
顺序存放在文件中,标签帧和标签头以及标签帧和其他的标签帧之间没有特殊的字符分隔。得到一个完整的帧的内容只有从帧头中得到内容大小后才能读出,读取时要注意大小,不要将其他帧的内容或帧头读入。
3.2.1 帧头(10字节)
帧头的定义如下:
这里写图片描述
A. FrameID[4]帧标识
用四个字符标识一个帧,说明一个帧的内容含义,常用的对照如下:
TIT2=标题
TPE1=作者
TALB=专集
TRCK=音轨 (格式:N/M 其中N为专集中的第N首,M为专集中共M首,N和M为ASCII 码表示的数字)
TYER=年代 是用ASCII码表示的数字
TCON=类型 直接用字符串表示
COMM=备注 格式:”eng\0备注内容”,其中eng表示备注所使用的自然语言
附:帧标识的含义http://wiki.gimoo.net/view/10352.html
B. Size[4]帧内容大小
每个字节的8位全用,格式如下
  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx
算法如下:
  int FSize;
  FSize = Size[0]*0x1000000
  +Size[1]*0x10000
  +Size[2]*0x100
  +Size[3];
C. Flags[2]存放标志
只定义了6位,另外的10位为0,但大部分的情况下16位都为0就可以了。格式如下:
  abc00000 ijk00000
  a – 标签保护标志,设置时认为此帧作废
b – 文件保护标志,设置时认为此帧作废
c – 只读标志,设置时认为此帧不能修改(但我没有找到一个软件理会这个标志)
i – 压缩标志,设置时一个字节存放两个BCD码表示数字
j – 加密标志,(没有见过哪个MP3文件的标签用了加密)
k – 组标志,设置时说明此帧和其他的某帧是一组
  值得一提的是winamp在保存和读取帧内容的时候会在内容前面加个’\0’,并把这个字节计算在帧内容的大小中。
 这里写图片描述 

TIT2:帧标识(4个字节)。“54495432”。
5:帧大小(4个字节)。“00000005”。
存放标志:“0000”。
花火:帧内容(长度=帧大小,即5个字节)。“00BBA8BBF0”
同理可分析其他ID3v2标签帧,比如Year。

四、参考链接

http://www.microsoft.com/en-us/download/confirmation.aspx?id=12826
http://www.codeproject.com/Articles/17890/Do-Anything-With-ID3
http://id3.org/Home
http://baike.baidu.com/view/66078.htm
https://en.wikipedia.org/wiki/ID3
http://id3.org/id3guide#Padding
http://www.xuebuyuan.com/93735.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值