MP3文件的ID3V1信息与ID3V2信息结构的分析

MP3文件分析之ID3v2.3版本 所有的分析都基于ID3官方网站www.id3.org.同时所有的代码都在我的github中,我将它们用闭包集成在了一起,可以直接使用,非常方便,地址:https://github.com/jslinuxboy/ID3MusicDealer MP3的ID3v2.3版本文件基本分为两部分,一个为标签,其它的为数据。文件标签分为标签头和标签帧11.标签头而标签头有十个字节,即在文件最开始的1010个字节, 阅读详情
MP3文件的ID3V1信息与ID3V2信息结构的分析

 

——吴俊涛2005/05/05

E-mail:bo_tao@126.com  QQ:29248671

主 页:http://wjt276.home4u.china.com(有源代码)

 本人是一位编程爱好者,想通过VB。NET编写一个可以读取MP3文件的信息的不程序,可以不知道文件结构,呀我在网上找了好长时间(好几个月)都没有找到VB的。后来看到一个VC的,还附有结构分析,太好了,动手了。

一:“ID3v1”信息的分析

MP3的基本歌曲信息存在了MP3文件的最后128个字节里,其结构是:
Public Structure ID3v1Info

Dim ID3v1TAG As String 'TAG三个字母,ID3V1的标识

Dim Title As String '存储标题信息,30个字节

Dim Artist As String '存储歌手信息,30个字节

Dim Album As String '存储专辑信息,30个字节

Dim Year As String '存储年代信息,4个字节

Dim Comments As String '存储备注信息,28个字节(有时为30字节)

Dim Genre As String '存储音乐风格信息,保留位,1个字节 

Dim Reserved As String '保留位,1个字节(有时没有意思

Dim Track As String '音轨(曲号)保留位,1个字节(有时没有)

End Structure

ID3V1信息存储结构如下(如图1):

图 1 一个MP3文件的ID3v1信息


1-3 TAG

4-33 歌曲名(Take Me To Your Heart )

34-63 歌手名(Michael Learns to Rock)

64-93 专辑名(Take Me to Your Heart)

94-97 年(2004)

98-125 备注 (http://www.uptu.com)

126 保留位,这时为0,则说明有音轨,下一位就是音轨

127 保留位,为音轨(第几首歌)(OC)

128 保留位 (风格)(66)

 

而在Winamp的ID3v1歌曲信息里(如图1),我们看到的是他都包括:
Title(歌曲名)
Artist(歌手名)
Album(专辑名)
Year(年)
Comment(备注)
Genre(歌曲风格)注,见下面有详细的列表
Track#(歌曲在专辑里的顺序,就是我们经常说的“第几首”)

  Title,Artist,Album,Year,Comment我们都是可以在那个128个字节里得到,Genre和Track哪里去了呢? 有的朋友都重视了那128字节信息的前125个信息了,而这两个信息是却放在了最后的126-128字节里。其实,127那处就是Track信息,而128处就是Genre信息。他们的存储方式都不是字符,我们提取他们的时候需要注意,他们都是数字。比如,就如我们看到的这首歌的126处是0x0D,那么很显然,他就是13。也就是第13号歌曲风格,Pop流行( 下面列表)。

这时,你也该猜到了,127和128都是有意义的,自然126处也是有其意义!ID3v1信息的Comment(注释)一共占用28个字节。这个说法并不是完全的正确。准确的说应该是正确了一部分。有的时候注释也可以超过这个数字的。ID3v1要求注释最多可以到30个字节。那么有的读者会问“MP3的ID3v1就是得有130个字节的信息了嘛?”不是,当然不是。ID3v1是固定的128个字节,这个你不用担心。其实ID3v1是这样安排的:如果MP3的注释是大于28个字节的,那么就要借用126-127两个字节。所以ID3v1的注释部分可能是28个字节也可能是30个字节。那么,怎么区分到底是28个字节还是30个字节呢?很简单,126处就是管这个的,我们只要看看126处是不是0x00,如果是0x00那么注释就有28个字节。如果不等于0x00,那么就是说注释是30个字节。同时别忘了,由于第127字节存储了Track信息,那么如果注释是30个字节的时候,这首歌的ID3v1里的那个127处的信息自然就不是Track信息了。Track自然就是没有地方存了,所以127处变的没有Track意义了,它只是Comment的一部分了。在你决定制作读取ID3v1的程序的时候,请特别注意一下。

我们最终知道了126处是ID3v1信息的注释部分到底是28个字节还是30个字节的标志位。127处是音轨信息(Track),而Reserved3则是歌曲风格(Genre)。现在我们重新再写一次结构

原理2:MP3文件有没有ID3v1信息的错误理解
  那就是到底什么能叫做“MP3文件没有ID3v1信息”。检测的方法是先提取指定的MP3文件的最后128字节信息,然后确定这128个字节的前3个字节是“TAG”。很多朋友都会同意这个方法没有问题的。可是,实际上问题并不是那么简单。

  Winamp或者其他的MP3播放相关的软件都有MP3信息的写入和读取的功能,然而这些写入ID3v1的软件都会不自觉的当你一打开这个MP3文件就会给它加上这128个字节的信息。也就是说当我们用这种软件打开MP3文件的时候,这些软件就会自动的在这个MP3文件尾端添加了一个128字节的ID3v1结构,而且还是以“TAG”开头!(如图3)。那么很显然,光靠检测那“TAG”三个字节的信息,还是不能完全确定MP3到底有没有ID3v1信息的。我们还要确定这“TAG”后的125字节是不是正确的信息。一般情况下,这类软件产生的ID3v1结构都是由一堆00,或者一堆空格组成的,所以我们要判断一下是不是ID3v1的信息是一堆00或者一堆空格。如果是,那么MP3文件虽然有这“TAG”三个字母,却仍然不是一个合法的ID3v1信息。MP3文件仍然应该认为没有ID3v1信息。我觉得这个东西有必要特别提醒大家注意。

二:ID3v2信息的提取
MP3文件的“ID3v1信息”。这个信息结构提取起来非常容易,写入到文件也不是什么难事。但是它的信息安排和可扩展性却非常之差(只能128个字节)。就如你所知,MP3文件还有另外的一个信息结构,这个结构具有更好的可扩展性,而且存储的容量也不受限制(也就是总长度不固定)。这个信息就是ID3v2信息(相对ID3v1而言)。由于ID3v1信息存储在了文件的最后128个字节里,那么ID3v2就不得不放弃选择存储在文件的末尾了,于是它被存储在了文件的起始位置。

ID3v2信息的存储和读取远远要比ID3v1信息复杂的多。这是因为ID3v2信息不再固定,而且由于这段信息存储在了文件的首端,所以重新写入的时候也远比ID3v1麻烦的多。

我用尽可能清楚而且简练的话,给大家讲一下ID3v2信息的读取方法。ID3v2到现在一共有4个版本,不过比较流行的MP3播放软件一般只支持第3版,即ID3v2.3。我们要读取的就是ID3v2.3信息。ID3v2信息包括两个部分,一个部分是标头信息,另一个部分是标体信息。其中标头信息占固定的十个字节,

 每个ID3V2的标签部一个标签头和若干个标签帧或一个扩展标签组成关于曲目的信息如标题、作者等都放在在不同的标签帧中,扩展标签头和标签帧关不是必要的,但每个标签至少要有一个标签头和标签帧一直顺序存放在MP3文件首部。

它的结构如下:

(一)、标签头

Private Structure ID3v2Header

  Dim Header() As Byte'ID3v2标识位,应该是“ID3”三个字母为对

  Dim Ver As Byte'版本号ID3V2就记录3

  Dim Revision As Byte’副版本号此版本记录为0

  Dim Flag As Byte‘存放标志的字节,这个版本只定义了三位,稍后详细解说

  Dim Size() As Byte’标签大小,不包括标签头的10个字节(但是有的文章说包括)我是通过核实 才这样说的,看看源代码就知道了

End Structure

这十个字节的信息作用:

1、Header(2),一般为“ID3”,否则没有ID3V2信息

2、Flag 标志字节:标志字节一般为0,字义为abc00000

a-表示是否使用Unsynchronisation

b-表示是否有扩展头部,一般没有(WINAMP也没有)所以一般不设置

 c-表示是否为测试标签(99.9%的标签都不是测试用的,所以一般不设置)

3、Sixe(3) 标签大小:一共四个字节,但每个字节只使用7位,最高位不使用恒为0,所以格式如下:

  0xxxxxxx 0xxxxxxx 0xxxxxxx 0xxxxxxx

 计算大小时要将0去掉,得到一个28位的二进制数,就是标签的大,计算公式如下

   ①、VC的:ID3size =(Size[0]&0x7F)*0x200000 +(Size[1]&0x7F)*0x400 +(Size[2]&0x7F)*0x80 +(Size[3]&0x7F);

②、VB的:ID3size =Size(0) * (2 ^ 21) + Size(1) * (2 ^ 14) + Size(2) * (2 ^ 7) + Size(3) * (2 ^ 0)

VB的我已在类中声明了一个函数ByteToLong,很方便,直调用就OK了。

通过解析这段标头信息我们可以知道一个MP3文件是不是有ID3v2信息,如果有我们就知道了ID3v2的数据体的总长度。

(二)、标签帧

  接下来我们要解析ID3v2的 标签帧,别担心,虽然复杂,但也没你想象的那么的痛苦。ID3v2的数据体又分为很多相同的数据结构。

  每个标签帧都有一个10个字节的帧头和至少一个字节的不固定长度的内容组成,它们也是顺序存放在文件中,和标签头和其他的标签帧也没有特殊的字符分隔,得到一个完整的帧的内容只有从帧头中的到内容大小 后才能读出,读取时要注意大小,不要将其它的帧的内容或帧头读入。帧的定义如下:

Private Structure ID3v2Frame

  Dim FrameID As String‘用4个字符标识一个帧,说明其内容,常用的标识对照表见附表

  Dim Size() As Byte’4个字节 帧内容的大小,不包括帧头,不得小于1,计算时也用上面的公式计算

  Dim Flags() As Byte’2个字节 存放标志,只定义了6位,稍后详细解说

End Structure 

 1、FrameID 帧标:用四个字符标识一个帧的内容含义,常用的对照如下:

TEXT: 歌词作者 TENC: 编码
WXXX: URL链接(URL) TCOP: 版权(Copyright)
TOPE: 原艺术家 TCOM: 作曲家
TDAT: 日期 TPE3: 指挥者
TPE2: 乐队 TPE1: 艺术家相当于ID3v1的Artist
TPE4: 翻译(记录员、修改员) TYER: 年代相当于ID3v1的Year
USLT: 歌词 TALB: 专辑相当于ID3v1的Album
TIT1: 内容组描述 TIT2: 标题相当于ID3v1的Title
TIT3: 副标题 TCON: 流派(风格)相当于ID3v1的Genre见下表
TBPM: 每分钟节拍数 COMM: 注释相当于ID3v1的Comment
TDLY: 播放列表返录 TRCK: 音轨(曲号)相当于ID3v1的Track
TFLT: 文件类型 TIME: 时间 
TKEY: 最初关键字 TLAN: 语言
TLEN: 长度 TMED: 媒体类型
TOAL: 原唱片集 TOFN: 原文件名
TOLY: 原歌词作者 TORY: 最初发行年份
TOWM: 文件所有者(许可证者) TPOS: 作品集部分
TPUB: 发行人 TRDA: 录制日期
TRSN: Intenet电台名称 TRSO: Intenet电台所有者
TSIZ: 大小   TSRC: ISRC(国际的标准记录代码)
TSSE: 编码使用的软件(硬件设置) UFID: 唯一的文件标识符
AENC: 音频加密技术    

   其中要说明的是这个FrameID,在ID3v1里我们是根据每一个信息所占用的固定的字节数和位置来判断他是哪个信息的。而ID3v2为了提供更好的可扩展性,把这些信息变得“动态”化了,因为长度并不是预先设定好的,而是在size[4]里存储的。这样长度就可以不再固定了。我觉得在我们自己定义文件的时候ID3v2和ID3v1也是值得我们考虑的一个方面。如果结构很小而且存储的量也不大,我们可以采用ID3v1的信息存储方式。如果存储的信息不固定,而且要求有很好的可扩展性,那么ID3v2当然成了首选。实际上,现在很多格式的文件的存储方式都是ID3v2的存储方式非常接近的。

2、Size() 帧内容大小:不再是总标头那样的每个字节只取后7位了,它是按照正常的8位存储的。得到帧内容的大小的格式如下 :

xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx

 计算成整形,公式如下:

   ①、VC的: FSize = Size[0]*0x100000000 + Size[1]*0x10000 + Size[2]*0x100 + Size[3];

②、VB的:ID3size =Size(0) * (2 ^ 21) + Size(1) * (2 ^ 14) + Size(2) * (2 ^ 7) + Size(3) * (2 ^ 0)

VB的我已在类中声明了一个函数ByteToLong,很方便,直调用就OK了。

3、Flags() 标志:只定义了6位,另外10位为0 但大部分的情况下16位都为0就可以了,格式如下:

 a-标签保护标志,设置时认为此帧作废

b-文件保护标志,设置时认为此帧作废

c-只读标志,设置时认为此帧不能修改(目前好像没有看到过)

i-压缩标志,设置时一个字节存放两个BCD码表示数字

j-加密标志(好像不太实用)

k-组标志,设置时说明此帧和其它的某帧是一组。


  详细你可能到www.ID3.org去了解一下。

4、帧内容(数据体)


  标头后面就是数据体了,我们提取数据体的前十个字节,我们知道了这个数据结构存储的FrameID是TIT2,查上面的表,说明这个数据结构存储的是歌曲名信息。大小是00 00 00 17,换成十进制就是23。也就是歌曲名是这个子标头后的23个字节的信息。也就是:“Take Me To Your Heart ”。接下来的一个数据结构的FrameID是TPE1,说明是歌手名,而大小是00 00 00 17,说明这个数据体有23个字节,也就是:“Michael Learns to Rock”。依次类推。这里需要大家知道的是一个汉字占用两个字节。在写入时,要计算字节数,我已编写了一个函数ByteSize,大家可以直接使用了。

  还有特别要提醒大家的是,ID3v2的注释信息(FrameID是COMM)的数据体的前四(但经我测试为前5个字节)个字节,并不是注释内容,而是注释使用的自然语言,这个例子里我们看到是:”eng/0”,我们要跳过这四个字节的信息进行解析。此外ID3v2的歌曲类型Genre(FrameID是TCON)的存储也不太一样的。由于很多MP3播放器的写入方式并不是非常一致,而在Genre写入的也不一致。比如,这首歌的ID3v2的Genre是Classic Rock,其实有的还会写入成:(1),或者1,还有(1)Classic Rock,所以格式五花八门,我们要在解析的时候注意一下。还有,值得一提的是winamp在保存和读取帧内容的时候会在内容前面加个'/0',并把这个字节计算在帧内容的大小中。所以前面提到的歌手名“Michael Learns to Rock”本身应该22个字节,可是却占了23个字节。

源代码已发布,你可以到本站点的主页去下载,如有什么问题,请一定联系我呀,不要客气轼呀

您如有什么问题,可以发E-MAIL给我,我们一起来讨论,主页里有源代码和实例,有兴趣的朋友不访去看看 http://wjt276.home4u.china.com

作者:吴俊涛   时间:2005/05/05    

QT 读取mp3ID3V2 获取mp3专辑图片、专辑名称、标题、作者(二)   这篇承接上篇,主要记录的是代码,关于mp3ID3V2的简要介绍可以跳转到上一篇: QT 读取mp3ID3V2 获取mp3专辑图片、专辑名称、标题、作者(一) 前提说明:没有使用任何的外部库,纯代码实现的,根据网上主流的c语言代码提取mp3id3v2标签信息,结合QT修改的 一、头文件 1.1、申明两个结构体,存放相关信息 #ifndef MP3TAGLIB_H #define M... 阅读详情

相关推荐

浅谈如何使用代码为MP3文件写入ID3Tags

做了三年左右的Android开发,一直没写过博客,最近正好打算换工作,算是闲一些,就将以前开发所遇到的一些有趣的问题及解决方法写出来,以供他人借鉴。   MP3作为音频领域应用最广的压缩方式之一想必大家都有所了解,本篇博文探究的不是MP3著名的压缩方式,而是如何为MP3文件写入ID3Tags。

u013182263的博客 4904

Java 修改 mp3 的标签(ID3V1 和 ID3V2)

修改 mp3 的标签(ID3V1 和 ID3V2)

禽兽先生不禽兽 3056

c语言之minimp3获取mp3信息(比特率\采样率\时长)(亲测可用)

【代码】c语言之minimp3获取mp3信息(比特率\采样率\时长)(亲测可用)

我不是码农的博客~~~ 917

MP3 ID3v1 & ID3v2 &APEv2 标准总结

MP3是現在相當流行的一種音樂格式,全名為Moving Picture Experts Group Audio Layer III(MPEG-1 Audio Layer 3)。MP3使用失真壓縮的方式大幅降低儲存音訊資料所需的空間,大大增加它的可攜性。不過,雖然MP3採用失真壓縮,它還是保留了一定程度的音質,因此相當受大眾歡迎。然而,MP3的音訊編碼訊息,並沒有包含額外的文字資訊,我們只能從中得知...

thomasyuan8的专栏 1万+

Seedance 2.5、HappyHorse 1.1与豆包Seed 2.1:一周内三大模型技术参数分析

音频生成延续原生音画同步架构,将文本、画面、音频统一序列建模,生成过程同步产出匹配口型的原声音频,支持中、英、日、韩、德、法、阿拉伯7种语言唇形对齐,无需二次调音。从行业趋势看,30秒直出、4K分辨率、7语种唇形同步正在成为视频生成的标配,编程Agent化和多模态理解正在成为语言模型的标配。技术狂奔的同时,监管在同步收紧。我理解这里的关键在于,视频生成模型的商业化落地不仅取决于生成质量,更取决于推理效率——生成一段15秒1080P视频需要多少秒、消耗多少算力,直接决定了模型的商用可行性。

lichunchuan1的博客 326

别再死磕MuJoCo了!用PyBullet+Stable-Baselines3搞定机械臂强化学习(保姆级环境配置)

本文详细介绍了如何使用PyBullet和Stable-Baselines3构建机械臂强化学习系统,绕过昂贵的MuJoCo许可壁垒。通过实战指南,包括环境配置、机械臂Gym环境构建、训练策略与调优技巧,帮助开发者快速掌握机器人强化学习技术,提升智能控制效率。

weixin_42667269的博客 265

【转】MP3文件头格式

MP3文件大体分为三部分: TAG_V2(ID3V2),Frame, TAG_V1(ID3V1) ID3V2 包含了作者,作曲,专辑等信息,长度不固定,扩展了ID3V1的信息量。 Frame 一系列的帧,个数由文件大小和帧长决定 每个FRAME的长度可能不固定,也可能固定,由位率bitrate决定 每个FRAME又分为帧头和数据实体两部分 帧头记录了mp3的位率,采样率,版本等信息,每个帧之间相互独立 ID3V2 包含了作者,作曲,专辑等信息,长度为128BYTE。 /*~~~~~~~~~~~~~*/ M

qq_38350702的博客 2756

狗都能看懂的MAML原理讲解和代码实现

meta-leaning指的是元学习,元学习是深度学习的一个分支,一个好的元模型(meta-learner)应该具备对新的、少量的数据做出快速而准确的学习。通俗的来讲, 对于人来说,给几张橘猫的图片让看一下,再给你几张没见过的英短猫图片,你一定能很快识别出来都是猫。但是对于神经网络来说,并非如此。如果让一个小汽车分类网络去识别不同的大货车,那效果肯定很差。而传统的CNN网络都是输入大量的数据,然后进行分类的学习。但是这样做的问题就是,神经网络的通用性太差了,根本达不到“智能”的标准。而人类的认知系统,可以通

个人学习笔记 6万+

MP3文件ID3信息编辑器代码开源 - 开源研究系列文章 - 个人小作品

  上次把磁性窗体的源码开源了,这次就开源另一个程序源码:MP3文件ID3信息编辑器。这个源码也比较简单,关键在于获取和写入MP3文件的这个ID3的信息即可。   1、 项目目录;      2、 源码介绍;   这个操作信息编辑的就封装在MP3ID3.bas文件中。 这里定义了类型ID3,因为ID3v1的信息是一个固定长度的文本串,所以通过这个类型我们...

lzhdim的专栏 694

【达梦8】多实例监视集群的部署测试

确认监视器具有状态确认和自动接管两个功能。在数据守护系统的故障自动切换模式下,必须部署一个确认监视器,否则在出现数据库故障时,会导致数据库服务中断。DM 提供了两种确认监视器的配置形式,分别为单实例和多实例。但是当单实例确认监视器故障时,无法继续进行集群的故障自动接管和备库故障确认,影响正常使用,故提供了多实例确认监控器来进一步提高集群的高可用性。在多实例确认监视器中,只有一个实例作为确认监视器提供服务,其它实例作为备库存在而不提供服务。

weixin_45335507的博客 1675

android 运动目标检测_MindSpore应用案例:AI对篮球运动员目标的检测

MindSpore作为一个端边云协同的开源的全场景AI框架,今年3月份开源以来,受到了业界的广泛关注和应用,欢迎大家参与开源贡献、模型众智合作、行业创新与应用、学术合作等,贡献您在云侧、端侧 (HiMindSpore 应用程序)、边侧以及安全领域的应用案例。MindSpore与您在AI领域共同成长,让AI使能千行百业,释放出强大的生产力。本文讲述的是MindSpore对篮球运动员目标的检测应用,通...

weixin_33603813的博客 835

java 获取mp3 id3v2_MP3文件的ID3V1信息与ID3V2信息结构的分析

MP3文件的ID3V1信息与ID3V2信息结构的分析——吴俊涛2005/05/05E-mail:bo_tao@126.com  QQ:29248671主 页:http://wjt276.home4u.china.com(有源代码)本人是一位编程爱好者,想通过VB。NET编写一个可以读取MP3文件的信息的不程序,可以不知道文件结构,呀我在网上找了好长时间(好几个月)都没有找到VB的。后来看到一个VC...

weixin_34675395的博客 482

Windows沙盒神器Sandboxie Plus保姆级教程:从安装到实战测试可疑软件

本文详细介绍了Windows沙盒神器Sandboxie Plus的安装、配置与实战应用,帮助用户安全测试可疑软件。从系统要求、安装步骤到核心功能如多沙盒管理、文件共享和快照恢复,全面解析了这款轻量级沙盒工具的优势与使用技巧,特别适合需要隔离运行未知程序的用户。

weixin_29323049的博客 1157

MP3 文件的ID3V1信息与ID3V2信息结构的分析

MP3文件的ID3V1信息与ID3V2信息结构的分析原作者:  吴俊涛2005/05/05E-mail:bo_tao@126.com  QQ:29248671主 页:http://wjt276.home4u.china.com(有源代码)======================================= 一:“ID3v1”信息的分析MP3的基本歌曲信息存在了

1163

win11 使用 QEMU 配置龙芯 3A5000 虚拟环境

win11 使用 QEMU 配置龙芯 3A5000 虚拟环境

一朵花开的时间 6156

嵌入式工程师成长之路(10)——项目举例

送给大学毕业后找不到奋斗方向的你(每周不定时更新)

云轩阁 5万+

声音文件读取(未实现)--MP3 文件的ID3V1信息与ID3V2信息结构的分析

MP3文件的ID3V1信息与ID3V2信息结构的分析 原作者:  吴俊涛2005/05/05 E-mail:bo_tao@126.com  QQ:29248671 主 页:http://wjt276.home4u.china.com(有源代码) ======================================= 一:“ID3v1”信息的分析 MP3的基本歌曲信息

数学屌丝走在it的道路上 1695

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

C#读取MP3文件的专辑图片和ID3V2Tag信息(带代码)

说明:①帧内容是数字的,都用 Ascii 字符表示。②有的 TCON(风格、流派)的帧内容是直接用字符串表示的,如“genre”,而有的则是用编号表示的,如“28 31 32 29”就是用字符串“(12)”表示 12 号风格,我们在解析的时候要注意。③TRCK(音轨)的帧内容格式是:N/M。其中,分母表示专辑中共有 M 首歌曲,分子表示专辑中的第 N 首曲。

lwqamm的博客 3978

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C++读取音频文件mp3、flac的曲名、歌手、专辑等ID3v2标签(使用libzplay)

C++读取音频文件mp3、flac的曲名、歌手、专辑等ID3v2标签 (libzplay) 音乐的标签信息,以前用ID3v1来储存,直接存放文件最后128字节里,每一个属性的空间是固定大小的。现在的ID3v2则把标签存放在文件开头,每一属性的大小不固定;所以音频文件可以存下封面图片、歌词……这些容量大的东西。因此,程序读写v2标签变得很麻烦。 libzplay这个体积不大但功能强大的window...

weixin_44629023的博客 4650

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

MP3文件头部信息解码- ID3V1

MP3文件头部信息解码 mp3解码的课题断断续续做了一年多了,这是我学习c语言之后想自己写的第一个课题,如果时光倒退,冒出这个想法的第一时间,我会给自己一个嘴巴子,搞搞贪吃蛇、五子棋什么的不好,非要搞mp3解码,为了这个,这一年我都忘记自己看了多少论文了。

兔子别跑的博客 1577

C语言解析mp3 ID3V1信息

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

BPC's Domain 3570

MP3信息格式 ID3v1和ID3v2

mp3歌曲的信息所存放的位置: Mp3文件包含一个叫做ID3的标签。其实有两个标签,一个叫做ID3v1,另外一个叫做ID3v2。 ID3V1结构比较简单,存放在MP3文件的末尾的128个字节,数据结构定义如下: 名称              位置              长度              内容 Header           1-3                3

分享建筑软件的乐趣 1850

Java 实现MP3文件信息读取

前言: 最近在做实训,写一个音乐播放器,将文件存储在服务端,然后将相应的数据信息添加到数据库中。不想一个个手动添加,所以在百度之后发现MP3文件本身是只带这些信息的。 更新因为目前mp3文件中ID3v1的信息较少导致下述代码不能正常获取相关信息. 我对下述代码进行了改进. 具体项目代码地址 主要变动. 1. 使用由获取ID3v1中的信息变成了获取,ID3v2中的信息. ...

遇见1995 1万+

Mp3标签IDV1以及ID3V2的解析类

    MP3文件的ID3V1比较简单,相应的规则在网上到处都可以找到,这里就不在啰唆了,下面给出ID3V1版本的解析类,对于ID3V2比较复杂,不过经过仔细的研究也给出了解析类呵呵,可以到官方网站上查找信息www.id3.org。对于ID3V2的结构这里就不做文字说明了,在解析类的头文件中有简单的介绍,更加详细的信息在网上搜索吧,到处都是呵呵。特别的说明下,由于ID3V1比较简单这里给出了修改的

WeroCPP的专栏 4561
上一篇: ID3V2.3详解
下一篇: 对于M抽头的一般FIR Filter的伪代码实现
xiaomantoubaba
博客等级 码龄23年 75粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值