mp3播放音频文件为什么不显示歌词

怎样在播放歌曲时同步显示歌词_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
怎样在播放歌曲时同步显示歌词
阅读已结束,下载本文需要
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢用qq音乐播放音乐,车载屏幕可以显示歌词了【新途观吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:12,390贴子:
用qq音乐播放音乐,车载屏幕可以显示歌词了
用手机蓝牙连接车载导航,然后用qq音乐播放音乐,可以显示歌词了
德系多功能SUV柯珞克,现已正式上市.即日起符合条件购车,可享受5大上市礼遇.配备全景大天窗,455L-1543L宽大可扩展实用后备厢,全家出行不用愁.
本来就可以……
本来就可以
我用qq音乐下载的歌在U盘里就不行。看不了歌词!求解
用蓝牙连接用酷狗播放器怎么没有歌词?QQ音乐播放器播放有歌词吗?
楼主怎么弄,步骤是么样的?我用手机蓝牙匹配车载导航,但是酷狗放歌没有声音
连接QQ音乐自动显示歌词吗?
你王叔叔当初就该把你射你母亲的嘴巴里
略屌 以前没去注意 多谢楼主
冠道破局SUV市场,搭载Sport Turbo及全新底盘技术,拥有2820轴距宽享空间越级科技配置
天天动听以前就可以
我火星了。。。。。。
网易云音乐可以吗
你王叔叔当初就该把你射你母亲的嘴巴里
请求把楼上@帅的惊动拉登永封
我的为什么没有歌词,也是QQ音乐
想问一下怎么连接蓝牙,我真不会链接
找这贴找半天
为什么我都按你说的做了,还是没有歌词,难道我的导航不是原装的吗
我的也是,显示不了
以前可以显示 今天突然不行了
我从不看歌词
酷狗可以吗?
那一年,我9岁,她11岁,我告诉我将来要娶她,她也很调皮的回答我:“好啊”! 那一年,我12岁,她14岁,她高我一头,我抬着头说我喜欢她,她怔怔听着,没说话,便转过头去,不再望我。 那一年,我18岁,她20岁,我已经在外工作一年了,她还上着重点大学,我再也说不出口我喜欢她,因为我觉得自己根本配 不上她,我把想对她说的话,留给了自己,等我配上她的时候,再全部告诉她。 后来四年里,我再没有机会见过她,听说她已经工作了,我更关心的是,她是否已为人妻,已为人母,我的事业渐渐走向正轨,再也不为钱所窘迫,当我再次见到她时,是在东莞,昏黄的房间,只有我们两个人,沉默了良久,她开口了:“八百,看你是熟人,就收你五百”。我尽量让自己不再颤抖,我说:“跟我走吧”,她目光呆滞了一下,随即闪烁了一下,然后又像 一团火熄灭了一样,说:“我配不上你,我只是一位小姐,我还有客人,没什么事 ,我先走了”。她就匆忙的离去了。 后来,我在电视上看到了她,她被两名民警押着,一脸惊恐与不堪,电视甚至没有给她遮住脸,任由她在我面前晃着,任由她在我心中撞着、撞着、直至粉碎! 最后一次见她,是她找我去的,当时她在楼顶 ,我在楼下抬头望她,就这样望着,许久,他走了,没留下一句话。. 再有她的消息是一年后,是她妈妈给我打的电话,说她病了,没法治疗,说想最后见我一面。我有点接受不了,反正觉得很压抑。到了医院,在她的病床前,看着她苍白的脸,比以前消瘦了许多。我对她笑了笑,那笑容有多丑我不知道,她也对我笑,像七岁那年,笑的那么天真。她抬起了手,我赶紧过去握住她的手,泪水终忍不住往下掉,她用低沉的浯气说: “我....我想要个赞。”
试了,很好
请问怎么去掉 不想它显示歌词
贴吧热议榜
使用签名档&&
保存至快速回贴百度拇指医生
&&&普通咨询
您的网络环境存在异常,
请输入验证码
验证码输入错误,请重新输入对Mp3内嵌歌词的研究
我的图书馆
对Mp3内嵌歌词的研究
最近在研究播放器和音频格式(所以最近的文章基本都是这方面的了)。然后就好奇怎么内嵌歌词。一般我们经常用到的应该都是lrc格式的外置歌词。有的播放器是不支持这种外置歌词的,比如zune,还有些手机应用,貌似苹果的一些设备也不支持(只是听说,没用过)。下面搜的文章:
---------------------------------
虽然一早已经知道MP3标签(ID3v1、ID3v2、APEv2),但之前完全不清楚有Lyrics3v2的存在。
MP3文件的歌词分为两种:外置歌词文件和内嵌的歌词。
外置的歌词主要指.lrc格式的文本文件;
而内嵌歌词包括ID3v2 Synchronized Lyrics、ID3v2 Unsynchronized
Lyrics、Lyrics3v2
开始只是无意间发现凡是用千千静听内嵌歌词的MP3文件,到Winamp里都不能正常显示APEv2
Tag,后来因千千静听的强制弹出广告而转用foobar2000,发现foobar2000中也无法显示同步歌词,放到MP3随身听中也一样,可在千千
静听里查看又明明是有“LYRICS”字段。抱着试验心态清除标签再重新用foobar2000编写标签,将修改后的文件放入MP3随身听中可以正常显示
同步歌词。当时也没多想,觉得反正也是要换掉千千静听,不用管这个问题。直到昨天朋友从MSN发送了一首MP3文件给我,foobar2000完全显示不
了朋友一口咬定的内嵌歌词(P.S.朋友用的是千千静听),好奇用Mp3tag查看发现有个叫“Lyrics3v2”的标签。
Google得知Lyrics3v2和ID3v2两者(ID3v2 Synchronized Lyrics、ID3v2
Unsynchronized
Lyrics)不同,是以歌词信息的形式单独出现的,并不依附于某个MP3标签。Lyrics3v2位置在APEv2标签(P.S.如果有的话)之后、
ID3v1之前;开头标记是"LYRICSBEGIN"、结束标记
为"LYRICS200"。Lyrics3v2网络上说很少有播放器支持,搞不懂千千怎么想的。
------------------------
------------------------
内嵌歌词的方法:
http://tieba.baidu.com/p/&
(百度的帖子,没验证
下面是比较全面的方法,应该可以:
MP3越积越多,关联的歌词同样多不胜数,原来的做法是歌词集中放置以方便管理,无奈重名的歌曲或多个版本不可避免。后来因为使用BenQ的MP3这才注
意到可以把歌词嵌入到MP3文件中。歌词嵌入MP3中,不止使歌词能跟随MP3文件自由移动,更方便了管理,节约了空间,如果需要独立的歌词文件随时还可
因为使用Foobar2000 + MiniLyrics的组合,有了意外的收获--可以制作MP3歌词的双语同播效果。
一般工序和工具
主要工具:千千静听、Foobar2000、迷你歌词(MiniLyrics)
⑴编辑MP3的标签--千千静听
好的标签可以方便千千静听等软件在播放MP3文件时搜索并下载正确的歌词,另外,即使不需要额外的软件支持,仅在Windows
XP的资源管理器中就能显示标签信息。
尽管可以使用ASCII的ID3v1标签,但仍强烈建议写入类型使用ID3v2 &
APEv2,编码使用UTF-16,据说UTF-8不被有些播放器识别。
如果需要的话同时还可以插入专辑的图片,要求小于40KB。
标签修改软件的比较
Foobar2000目前使用ID3v2.4版本的标签。如果使用Foobar2000来修改,就必须添加APEv2标签,否则回到千千静听中将看不到标
签信息,这是因为在Foobar2000中,Tagging-&MP3 TAG
Type…的默认选项只有ID3v2,同时选中APEv2进行更新就可以了,每个文件都是如此。在实践中APEv2标签并不是必须的,因为资源管理器优先
识别ID3v1,其次是ID3v2,只有UFT-16的ID3v2标签才能被三方同时识别!Foobar2000的标签常常不被资源管理器和千千静听识
别,应该是未使用UTF-16编码的缘故。通过插件功能的实现,在制作标签时还可以进行编码的选择和转换。
如果使用千千静听修改标签,可以选择使用UTF-16编码(最优),同时写入ID3v2 &
APEv2(实际只写入ID3v2,Foobar2000中查看MP3文件属性时已确认。)尽管Foobar2000的标签编辑能力更强,但推荐使用千千
静听修改,原因在于包括添加静态歌词在内,使用千千静听修改后不会造成动态歌词的丢失。静态歌词要在标签修改确认以后再添加,同步歌词更是要放在最后,否
则一切全白忙。
由于ID3v1不支持Unicode的编码,所以有些字符在使用它后变为乱码,又因为在多数情况下它被优先显示,所以它的存在反而不利。而如果使用第3种同步歌词的话会自动换为ID3v1标签,也就容易出现乱码了。
⑵下载并编辑歌词--千千静听或MiniLyrics
如果标签编辑的好,千千静听和MiniLyrics都可自动搜索匹配的歌词,如果找不到还可以自己google。
有关歌词主要是编辑LRC文件,纯文本,Unicode(推荐)或UTF-8编码。难点在于日文和韩文歌词,由于编码问题可能不能被正确保存和辨识。
在使用Winamp的时代,记录和播放歌词都需要使用外挂程序,最早的LRC编辑器现在已经不再使用,不止是因为它不支持Unicode的编码,更为重要
的原因是千千静听本身的功能已经足够强大,歌词自动下载,时码记录和修改同样便捷。在千千静听中,因为Unicode的支技(建议使用UTF-16),可
以多语言混排,MiniLyrics如果使用了UTF-8,几乎是无法更改的,而UTF-8常显示乱码。
在制作LRC文件方面,迷你歌词有更大的优势,如果仅是中文歌词(包括英文),可以直接用它编辑、修改和记录时码--已经确认在Foobar2000中搜索歌曲时不会影响到新插入时码的准确度。
How do I use Lyrics Editor to create LRC lyrics? 'Lyrics Editor'
will help you to create or edit the synchronized lyrics.
Windows Media Player, foobar2000 is suggested to be
used, when you create synchronized lyrics. If you use
Winamp, please don't seek or jump music, or the timeline will
become imprecise.
自始至终无所停顿的记时码是很难做到的,所以说MiniLyrics更有优势,它可以随时停下来修改,而不必从头开始。但是,保存并不是很方便,因为在播放MP3文件的同时并不能写入其中,所以如果有修改还是应该保存为LRC文件,以防止修改无效。
LRC文件中尽管可以保存多版不同语言的歌词,但在使用千千静听关联播放时,只播放放在后面的语言版。但还是建议将不同的语言版本保存在同一个文件中,分
段存放;不建议使用压缩方式。在使用Mini歌词的播放器中两个语言的歌词会因为时间相同所以会被同时送屏,而千千静听中只显示最后的版本。
⑶将歌词插入音频文件
千千静听、Foobar2000、MiniLyrics(迷你歌词)、BenQ的Q-Music等都可以插入歌词,后两者插入动态歌词(或称同步歌词)不经任何外挂或插件即能被Windows
Media Player识别和播放,同样支持Unicode编码。
MiniLyrics supports to save/load ID3v2 synchronized lyrics and
ID3v2 unsynchronized lyrics, Lyrics3v2 lyrics, So you could
歌词的正确导入顺序:
①千千静听中先把外文版的LRC歌词(Unicode编码)保存到MP3文件中。Foobar2000的属性中手动添加UNSYNED
LYRICS也有成功的时候。千千静听中LYRICS及UNSYNED
LYRICE两个字段在高级模式下都可见!
②打开挂有迷你歌词的播放器(这里可以是Foobar2000),通过歌词播放窗口将歌词保存为同步歌词。
③回到千千静听中把中文版的歌词保存到MP3中。当然也可以直接在MiniLyrics中编辑替换掉同步歌词。
无论静态或动态都可以保存多个版本的,在使用Q-Music时“语言”(编码)选择也是必要的,这在迷你歌词中也有所体现,只是会有混乱的情况存在,如果
不经千千静听而直接存入动态歌词更是如此。不要使用迷你歌词写入静态歌词,因为无论是否能跟记时码,通过它写入后都没有了时间,完全静态了;但
Foobar2000的属性中写入成功,记得同时更新APEv2标签。Foobar2000的标签编辑能力更强,但很多字段需要自己添加,包括
UNSYNED LYRICS。
双语歌词的同播
双语同播一直没有好的方法,从网上下载的文件在做双语的时候也都是一行写两种语言。不喜欢看这种长句,试过分成两块时码区,一区放一种语言的,然而在千千静听中只能显示最后的区块,迷你歌词可以同时显示,但仍不是我所希望的效果。
双语同播,这是一个意外的收获。其实只要按上述的步骤修改过MP3文件,而且静态歌词和动态歌词分别是两种不同语言的话,只要在Windows
Player中播放该文件,加上正在运行的迷你歌词你就能看到双语歌词在同一时间里播放。当然,此时用迷你歌词播放LRC文件也是可行的。这两个软件也都
可以选择字幕(歌词)的语言。因为静态歌词的更新会冲掉动态歌词,所以其它可变动的信息可以写入动态歌词,也就是说建议动态歌词保存中文版。
先确定标签再插入歌词,建议使用UTF-16编码的标签,因为ASCII码的标签仅能保持英文件内容不变。
因此,应当使用ID3v2 &
APEv2的写入方式,因为ID3v1不支持Unicode的编码。
必须先有静态歌词才能添加动态歌词,动态歌词编辑时可换作其它语言版本。
迷你歌词中的静态歌词是指不带时码的一种歌词,所以它的导出是没有意义的。
如果MP3文件确认已经修改完毕,强烈建议把它的属性改为只读。
静态歌词同样可以包含时码,但通过MiniLyrics存入的静态歌词是铁定不含时码信息的,所以在使用MiniLyrics修改过静态歌词后记得一定要先保存为LRC文件或复制全部,然后再到千千静听或Foobar2000中导入。
如果能熟练使用Foobar2000,则可以完全摆脱千千静听的使用。现在之所以没有完全放弃千千静听还是因为UTF-16编码的问题,Foobar2000等变更编码不是很有效。同时使用该两播放器的时候曾两度死机,尽管不是经常发生,但总是不爽。
本文难免纰漏,所以会有修改的情况。
****************
刚才试了下,验证了文章一。还有ipod和iTunes貌似不支持同步歌词(...不知道为什么),WMP支持内嵌同步歌词,以上都是用的是ID3V2标签类型。果然lyrics3V2支持的话需要特殊对待。
这个插件下载:http://www.crintsoft.com/zh_CN/MiniLyrics_download.htm
当然了,用这个也存在缺点,就是不利于网络传输,貌似歌词加在数据的末尾。
--------------
ID3v1.1, ID3v2.2, ID3v2.3 and
ID3v2.4 tags区别
ID3v1 & ID3v1.1
  MP3格式标准里并没有特别定义储存曲目相关讯息的结构,于是1996年有人提出了一种解决办法,即在mp3档案末尾新增一些额外的数据(128
byte)来储存曲名、演唱者、专辑名等讯息,这就是ID3(v1)。
  ID3v1的字列(field)名称和每个字列的大小都是类BIOS的,如下所显示
Song title——30 characters&
Artist——30 characters&
Album——30 characters&
Year——4 characters&
Comment——30 characters&
Genre—— byte
   ID3v1.1和ID3v1唯一区别就是多了个Album
track字列,实际上是从上面说的Comment字列末尾抽出两个字符用来存放Album
track讯息。ID3v1(v1.1)大家一定很熟悉,因为MP3中早已经广泛的使用ID3,甚至很多人误以为这是mp3原有的的标准(事实上mp3格
式标准里并不包含ID3)。虽然广为使用,但ID3v1,ID3v1.1有明显缺陷。字列名和字列长度都是类BIOS死的,不可增强,缺乏灵活性。而且
30个字符实在十分有限,想必很多人碰到过title或者artist太长被截断的情况吧。所以有人提出新的ID3v2格式,试图解决这些问题,增强
ID3的功能。
  虽然从名称上ID3v2好像只是ID3v1的一个升级,实际在格式定义上ID3v2和
ID3v1完全不同,ID3v2应该算一个全新的tag系统。如果用过WINAMP的ID3 tag
editor,就知道ID3v2和ID3v1最直观的区别是新增加了一些文本字列,譬如composer、conductor、media
type、copyright
message等等。但这不是重点,相较于ID3v1,ID3v2最大的改进应该是极大的增强了灵活性和可括展性,不仅每个字列的长度是可增强的(再也不
必为ID3v1 30个字符的限制而烦恼了),而且用户还可以很容易的新增自订字列。
tag支持unicode,可以包含歌词(包括同步讯息),曲目的volume、balance、equalizer、reverb设定讯息,甚至可以插
入图片,支持连接外部讯息和网页……还有很多,有兴趣的可以看这里([url]http://www.id3.org
/frames.html[/url])。
  看上去ID3v2功能强大,真是不错,不过凡事都有两面性,ID3v2繁多的功能也带来一个
负面问题,就是使得ID3v2太过复杂,实现起来比较困难,一个单纯实现所有ID3v2标准功能的程序就得100多K(FB2K主程序也就200多K)。
而且有些功能也并不十分合适,譬如把图片嵌入到音濒档案中就不是一个好主意,你需要另外编写程序从音濒档案中提取图片,而且也造成播放音濒档案时更容易出
  还有一点值得注意的,ID3v2不像ID3v1储存于在档案末尾,而是插入到音濒档案的最开头。原本的初衷是考虑网络上播放档案时可以先接收到相应tag讯息。实际套用时却发现这么处理是弊大于利。
  1、兼容性变差。时常看到有人反映因为插入ID3v2 tag而造成音濒档案不能正常播放的。
  2、写入tag速度慢。由于tag放在档案开头,所以第一次插入tag必须得重写整个档案,严迭影响速度,虽然ID3v2采取了的一些方法,避免每次修改tag都必须重写整个档案(大多数情况下不会,某些情况下还是有可能),但同时也增加了程序处理的复杂度。
  3、耗费临时空间。由于插入tag得重写整个档案,如果你向一个大档案新增ID3v2
tag,必须得有充足的磁盘空间,否则就会写入失败,甚至会造成源文件的损坏。
  (注:最新的ID3v2.4标准已经可以选项把tag存放在档案末尾。)
   所以,ID3v2虽然初看起来不错,但并不受欢迎,在Hydrogenaudio
Forums上用ID3v2做关键词搜寻一下就知道了,很多人毫不吝惜的把「SHIT」的光荣称号授予了ID3v2。事实上目前流行的音濒格式(无论有损
无损),只要有自己的tag标准定义的,没有一个选项ID3v2;标准版Foobar2000也不支持ID3v2,不过倒是有个第三方插件可以读写MP3
和AAC的ID3v2 tag。
尽管如此,ID3v2在硬件支持上还是颇具优势,目前绝大多数MP3随身听只支持ID3v1和ID3v2,如果你有这样的便携式硬设备,那ID3v2几乎是你的唯一选项。
目前tag格式没有一个统一标准,不同音濒格式使用的tag也不尽相同。现在比较流行的tag格式有ID3和APE(这个APE和平常说的无损音濒格式APE可不一样),它们各自也还有不同的版本,下面分别做简要介绍。
●APEv1 & APEv2
  APE也是一种tag格式,如果我没搞错,应该是Monkey's
Audio的APE最先采用,是不是因此而得名我就不太清楚了。APE用的是APEv1,后来在APEv1基础上改进又有了APEv2,主要区别就是两点:
  1、APEv2标准里增加了一个APE Tags Header
  2、APEv2采用UTF-8编码,使得可以实现unicode支持
tag具有与ID3v2一样的灵活性和可括展性,字列名可自订,字列长度可增强,同时格式定义又不像ID3v2那么繁琐。APE
tag的格式很简单,实现起来也很方便,tag存放位置是可选的,既可以在档案头也可以在档案尾(推荐在档案尾),所以有不少人对APEv2比较倾瞇。譬
如,MPC(MusePack)把ID3v1和APEv2作为标准支持的tag,Foobar2000也把APEv2作为标准的tag系统。
7.4.3 ID3V2标签
年,ID3V2作为新的标准诞生了,尽管其沿用了"ID3"的名称,但是ID3V2和ID3V1并没有太多联系。ID3V2定义在MP3文件的头部,这与
ID3V1不同。ID3V2是变长的,这一特性使ID3V2具有良好的扩展性,甚至个人也可以定义ID3V2中的帧,只要符合ID3V2的布局即可。
ID3V2的结构图如图7-8所示,其中深色标识的结构是可选的。在ID3V2中,比特顺序采用Big
endian方式排列,也就是高字节存储在高位。ID3V2的结构相对于ID3V1复杂很多,这里重点介绍ID3V2头和ID3V2帧。
图7-8 ID3V2的结构图
1. ID3V2头
ID3V2头(Header)的长度是固定的,共10个字节,其布局如图7-9所示。
ID3V2头的布局前3个字节总是"ID3",可以通过检查这个文件标识来判断是否是ID3V2头。随后2个字节是ID3V2的版本,其中第4个字节代表
ID3V2的主版本号,第5个字节代表ID3V2的修订版本号。目前ID3V2的2.3和2.4版本应用最广泛。随后的一个字节是标志位,目前此字节的前
4位在使用,其他位为0,标志位的第2比特标识了ID3V2头后面是否有扩展头,标志位的第4位标志了ID3V2最后是否含有Footer。最后的4个字
节标识了ID3V2的大小,其中包括10个字节的ID3V2头。由于每个字节的第1位永远是0,因此只有28个字节用来表示大小。计算大小时可以采用下面
int tagSize = (header[9] & 0xff) + ((header[8]
& 0xff) &&7)
+ ((header[7] & 0xff)
&&14) + ((header[6] &
0xff) &&21);
扩展头(Extended
Header)包含了更多的数据信息,这些数据是对ID3V2头的补充,但是并非解析MP3文件的关键数据。
3. ID3V2 帧
个ID3V2标签含有一个或者多个ID3V2帧,每个帧由ID3V2帧头和帧体构成。ID3V2帧头由4个字节的帧ID、4个字节的大小标志和2个字节的
标志位组成,共计10个字节。帧头的布局如图7-10所示。其中帧ID由4个字符组成,字符可以是0~9和A~Z,例如TIT2、TALB等。紧随其后是
4个字节的尺寸标识,4个字节的每个比特都可以使用,共计32位用来表示帧的大小。需要注意的是,这个大小表示的是帧体的大小,不包括帧头的10个字节,
因此整个尺寸应该是帧体的大小加上10个字节。标签帧并没有固定的顺序要求,TIT2可以出现在TALB前面,也可以出现在TALB的后面。
图7-10 ID3V2帧头的布局
ID3V2的帧体由字节数组构成,其内容一般是与帧ID对应的。例如,TIT2帧体内存储了歌曲的标题,TALB帧体内存储了歌曲的专辑信息。帧体的第1个字节标识了字符的编码方式,目前有4种编码方式可用。
代表字符使用ISO-8859-1编码方式;
代表字符使用UTF-16编码方式;
代表字符使用 UTF-16BE编码方式;
代表字符使用UTF-8编码方式。
在读取帧体内容时,应该按照上面的编码对应表首先确定编码方式,然后再生成相关的字符串。对于TIT2和TALB等帧ID来说,读取其内容比较简单。对于USLT(对应歌曲的歌词信息)等结构较复杂的帧,需要仔细研究其格式才能将内容从帧体中读取出来。
ID3V2帧后面可以存放填充(Padding)位,填充位的值只能是0。填充位使得ID3V2帧的大小比ID3V2计算得到的大小要小一些,也就是说,
留下了一些空白的空间,这些空间可以用来增加一些额外的帧信息。由于增加的信息写在一些空白的空间内,因此无须重写整个文件,这也就是填充存在的重要意
5. ID3V2尾
尾(Footer)是可选的,有时候可能需要从MP3文件的尾部向前搜索ID3V2的位置,这时候ID3V2的存在就可以大大地加快搜索的速度。ID3V2
尾和ID3V2 头的内容是一致的,只是文件标识部分由"ID3"改成了"3DI"。
的结构相对要复杂一些,在设计ID3V2类时,主要考虑了ID3V2的大小和ID3V2帧。ID3V2的大小可以帮助我们快速定位到MP3帧的起始位
置,ID3V2帧内存储了MP3文件的元数据,包括歌曲名称、歌手和专辑等。ID3V2类定义了一个HashMap类型的成员变量,用来存储ID3V2帧
数据,以ID3V2帧ID为键,以帧的内容为值。
 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]*0x + 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个字节。
TA的最新馆藏[转]&[转]&[转]&[转]&[转]&[转]&
喜欢该文的人也喜欢}

我要回帖

更多关于 录音电话软件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信