在Flash中用as实现lrc歌词动态显示

Winplay中可以使用LRC插件来实现歌词的动态显示,在FLASH中也可以[演示],选择一首排行版的歌曲,比较容易看到。
如果你细心,用记事本打开一个LRC文件,他的文件格式如下:

[ti:东风破]
[ar:周杰伦]
[al:叶惠美]
[by:叶泽生]
[offset:500]
[00:00.00]东风破
[00:03.22]
[00:05.46]周杰伦
[00:07.37]詞:方文山 曲:周杰伦
[00:10.27]LRC:叶泽生
[00:12.45]
[00:13.88]一盏离愁孤单伫立在窗口
[00:20.20]我在门后假装你人还没走
[00:26.52]旧地如重游月圆更寂寞
[00:32.98]夜半清醒的烛火不忍苛责我
[00:40.04]一壶漂泊浪迹天涯难入喉
[00:46.47]你走之后酒暖回忆思念瘦
[00:52.93]水向东流时间怎么偷
[00:59.28]花开就一次成熟我却错过
[01:06.31]
[03:50.68][02:58.31][01:09.30]谁在用琵琶弹奏一曲东风破
[03:57.23][03:04.88][01:16.23]岁月在墙上剥落看见小时候
[04:03.55][03:11.11][01:22.58]犹记得那年我们都还很年幼
[04:10.30][03:17.62][01:28.87]而如今琴声幽幽我的等候你没听过
[04:17.07][03:24.50][01:36.08]谁在用琵琶弹奏一曲东风破
[04:23.67][03:30.95][01:42.30]枫叶将故事染色结局我看透
[04:30.02][03:37.35][01:48.88]篱笆外的古道我牵着你走过
[04:36.69][01:55.52]荒烟漫草的年头就连分手都很沉默
[05:01.62][02:07.25][02:15.36]
[02:27.75]一壶漂泊浪迹天涯难入喉
[02:35.15]你走之后酒暖回忆思念瘦
[02:41.54]水向东流时间怎么偷
[02:48.06]花开就一次成熟我却错过
[05:09.43][04:49.63][02:57.23]
[03:43.97]荒烟漫草的年头就连分手都

这个东西如果FLASH读比较麻烦,但如果的VBS的正则表达式就比较方便,将结果输出成下面的样子:

<?xml version="1.0" encoding="GB2312" standalone="yes"?>
<!DOCTYPE MUSIC [
<!ELEMENT MUSIC (ARTIST, TITLE, ALBUM, LANGUAGE, EDITER, OFFSET, LYRICS)>
<!ELEMENT ARTIST (#PCDATA)>
<!ELEMENT TITLE (#PCDATA)>
<!ELEMENT ALBUM (#PCDATA)>
<!ELEMENT LANGUAGE (#PCDATA)>
<!ELEMENT EDITER (#PCDATA)>
<!ELEMENT OFFSET (#PCDATA)>
<!ELEMENT LYRICS (LRC)*>
<!ELEMENT LRC (#PCDATA)>
<!ATTLIST LRC
TAG CDATA #REQUIRED>
]>
<MUSIC>
<ARTIST>周杰伦</ARTIST>
<TITLE>东风破</TITLE>
<ALBUM>叶惠美</ALBUM>
<LANGUAGE></LANGUAGE>
<EDITER>叶泽生</EDITER>
<OFFSET>500</OFFSET>
<LYRICS>
<LRC TAG="0">东风破</LRC>
<LRC TAG="3220"></LRC>
<LRC TAG="5460">周杰伦</LRC>
<LRC TAG="7370">詞:方文山 曲:周杰伦 </LRC>
<LRC TAG="10270">LRC:叶泽生</LRC>
<LRC TAG="12450"></LRC>
<LRC TAG="13880">一盏离愁孤单伫立在窗口</LRC>
<LRC TAG="20200">我在门后假装你人还没走</LRC>
<LRC TAG="26520">旧地如重游月圆更寂寞</LRC>
<LRC TAG="32980">夜半清醒的烛火不忍苛责我</LRC>
<LRC TAG="40040">一壶漂泊浪迹天涯难入喉</LRC>
<LRC TAG="46470">你走之后酒暖回忆思念瘦</LRC>
<LRC TAG="52930">水向东流时间怎么偷</LRC>
<LRC TAG="59280">花开就一次成熟我却错过</LRC>
<LRC TAG="66310"></LRC>
<LRC TAG="69300">谁在用琵琶弹奏一曲东风破</LRC>
<LRC TAG="76230">岁月在墙上剥落看见小时候</LRC>
<LRC TAG="82580">犹记得那年我们都还很年幼</LRC>
<LRC TAG="88870">而如今琴声幽幽我的等候你没听过</LRC>
<LRC TAG="96080">谁在用琵琶弹奏一曲东风破</LRC>
<LRC TAG="102300">枫叶将故事染色结局我看透</LRC>
<LRC TAG="108880">篱笆外的古道我牵着你走过</LRC>
<LRC TAG="115520">荒烟漫草的年头就连分手都很沉默</LRC>
<LRC TAG="127250"></LRC>
<LRC TAG="135360"></LRC>
<LRC TAG="147750">一壶漂泊浪迹天涯难入喉</LRC>
<LRC TAG="155150">你走之后酒暖回忆思念瘦</LRC>
<LRC TAG="161540">水向东流时间怎么偷</LRC>
<LRC TAG="168060">花开就一次成熟我却错过</LRC>
<LRC TAG="177230"></LRC>
<LRC TAG="178310">谁在用琵琶弹奏一曲东风破</LRC>
<LRC TAG="184880">岁月在墙上剥落看见小时候</LRC>
<LRC TAG="191110">犹记得那年我们都还很年幼</LRC>
<LRC TAG="197620">而如今琴声幽幽我的等候你没听过</LRC>
<LRC TAG="204500">谁在用琵琶弹奏一曲东风破</LRC>
<LRC TAG="210950">枫叶将故事染色结局我看透</LRC>
<LRC TAG="217350">篱笆外的古道我牵着你走过</LRC>
<LRC TAG="223970">荒烟漫草的年头就连分手都</LRC>
<LRC TAG="230680">谁在用琵琶弹奏一曲东风破</LRC>
<LRC TAG="237230">岁月在墙上剥落看见小时候</LRC>
<LRC TAG="243550">犹记得那年我们都还很年幼</LRC>
<LRC TAG="250300">而如今琴声幽幽我的等候你没听过</LRC>
<LRC TAG="257070">谁在用琵琶弹奏一曲东风破</LRC>
<LRC TAG="263670">枫叶将故事染色结局我看透</LRC>
<LRC TAG="270020">篱笆外的古道我牵着你走过</LRC>
<LRC TAG="276690">荒烟漫草的年头就连分手都很沉默</LRC>
<LRC TAG="289630"></LRC>
<LRC TAG="301620"></LRC>
<LRC TAG="309430"></LRC>
</LYRICS>
</MUSIC>

采用FLASH的XML读取,他将十分的便捷。

Music_word_arr = new Array();
//新的数组,存放歌词
Music_word_xml = new XML();
//新的XML对象,也就是存放上面所说的XML
Music_word_xml.ignoreWhite = true;
Music_word_xml.onLoad = function(success) {
if (success) {
var tracks_xml = Music_word_xml.firstChild;
var LRC = tracks_xml.childNodes[tracks_xml.childNodes.length-1];
for (var i = 0; i<LRC.childNodes.length; i++) {
var time = LRC.childNodes[i].attributes.TAG;
//获取时间
var geci = LRC.childNodes[i].childNodes;
//获取歌词
Music_word_arr.push({Time:time, Word:geci});
//将时间信息及歌词存在Music_word_arr数组中
}
Show_Word();
//输出
} else {
trace("Error loading MusicWord.");
//如果没有加载,则显示错误
}
delete Music_word_xml;
//删除XML对象
};
Music_word_xml.load(URL);

现在我们该说说如何让歌词与歌曲同步。

还是看代码吧,代码说明一切:

function Show_Word() {
t = 0;
Word.text = "";
music_word = new Object();
//循环对象
music_word.interval = function() {
var zs = mySound.position/100;
if (int(Music_word_arr[t].Time/100) == int(zs)) {
if (Music_word_arr[t].Word == "" || Music_word_arr[t].Word == null) {
Word.text = "";
} else {
Word.text = Music_word_arr[t].Word;
}
t++;
}
if (int(Music_word_arr[t].Time/100)<int(zs)) {
t++;
}
};
music_word_n = setInterval(music_word, "interval", 10);
}

应该很容易看懂,因为不长,值得注意的地方有一个:
if (int(Music_word_arr[t].Time/100)<int(zs)) {
t++;
}

这行代码有什么用?他主要用来解决歌曲播放了,而歌词还没有加载,在这个时候,他就负责让歌词追上歌曲播放进度,而不要让歌曲等他。其实他还有一个更重要的功能,我想做过播放器的人应该都会知道,在这里我就不说了,你自己想想吧,哈哈~~~~~(好象有些不对??¥%¥# 有不明物体降落……啊~!!!!!)

(0)

相关推荐

  • 将酷狗krc歌词解析并转换为lrc歌词php源码

    最近在进行一次对酷狗音乐歌词采集时发现酷狗音乐的歌词直接浏览都是"乱码",自己平时所见的歌词都是lrc格式的文本,这种酷狗专用的krc格式的显然是经过特别处理过的,平时用酷狗听音乐也没仔细看他的歌词有什么不同,只是与天天静听等不同的是可以逐字高亮显示歌词. 对酷狗的flash播放器进行反编译,发现这段krc解密的ActionScript代码: public function loaderCompleteHandler(param1:ByteArray) : void{ this.new

  • 从千千静听歌词服务器获取lrc歌词示例分享

    $name为输出歌曲名字 复制代码 代码如下: <?phperror_reporting(0);function ConvertUrlEncode($text){$textUrl = htmlspecialchars(urlencode($text));return $textUrl;}$Type=substr($name,-4);$name1=str_replace($Type,"",$name);$name2=str_replace("-","&

  • 在Flash中用as实现lrc歌词动态显示

    Winplay中可以使用LRC插件来实现歌词的动态显示,在FLASH中也可以[演示],选择一首排行版的歌曲,比较容易看到. 如果你细心,用记事本打开一个LRC文件,他的文件格式如下: [ti:东风破][ar:周杰伦][al:叶惠美][by:叶泽生][offset:500][00:00.00]东风破[00:03.22][00:05.46]周杰伦[00:07.37]詞:方文山 曲:周杰伦 [00:10.27]LRC:叶泽生[00:12.45][00:13.88]一盏离愁孤单伫立在窗口[00:20.2

  • AJAX集天气\IP\多国语言翻译MP3(可同步LRC歌词显示)\万年历查询通

    '转发时请保留此声明信息,这段声明不并会影响你的速度! '****天枫AJAX集天气\IP\多国语言翻译MP3(可同步LRC歌词显示)\万年历查询通******** '作者:天枫 '网站:http://www.52515.net '电子邮件:chenshaobo@gmail.com 'WEB开发群:4635188 19182747 'QQ:76994859 '版权声明:版权所有,源代码公开,各种用途均可免费使用,但是修改后必须把修改后的文件 '发送一份给作者.并且保留作者此版权信息 '*****

  • python中使用百度音乐搜索的api下载指定歌曲的lrc歌词

    这次这个真的是干货哦,昨晚弄了半晚上,,,,从8点吃完饭就开始写,一直到了快12点才弄好,,,新手,伤不起呀.... 先简单的说下吧,百度提供了一个音乐搜索的api,你想百度请求类似于 http://box.zhangmen.baidu.com/x?op=12&count=1&title=最佳损友$$陈奕迅$$$$ 的地址,百度会给你返回一段xml,如下所示 This XML file does not appear to have any style information associ

  • 浏览器跨域获取Lrc歌词数据的解决办法

    获取同一个域的数据,可以通过XMLHTTP组件或IFRAME来实现,不存在跨域访问的权限问题,因此比较简单.     但如果要访问不同域的数据时,由于浏览器的安全设置,XMLHTTP没有权限获取数据,而IFRAME没有权限将获取的数据传递给父窗口,似乎没有其它解决办法. 顿悟--     网页内引用不同域的脚本并不会提示权限不足,对了,就是它没错! 解决方法找到了,现在来简单测试一下: 首先在51js.com服务器上新建一页面(Test.html). Over-Domain Data Fetch

  • 用javascript实现的支持lrc歌词的播放器

    支持lrc歌词,IE only 代码未加密且有详细注释,希望对做音乐页面的朋友有帮助. 如果大家还有什么好多播放器,告诉我,我好参考学习一下. 本播放器特点: 1.歌曲地址及歌词地址均在通用的xml文件中,更新.修改方便. 2.歌词通过xmlhttp异步获取,不会阻塞假死. 3.不管lrc层大小.位置如何设置,歌词始终在正中. 不足: 1.歌词过度没有平滑效果,是直接到达的. 2.由于现在ff,op在客户端不能用js控制改变歌曲地址,所以没有办法,本播放器只支持IE. 本件下载

  • C#解析Lrc歌词文件过程详解

    看到很多人解析歌词文件时写了一大片的字符处理代码,而且看得不是很明白,所以自己研究了一下,  首先来了解下Lrc文件  时间格式:  1.标准格式: [分钟:秒.毫秒] 歌词  注释:括号.冒号.点号全都要求英文输入状态:  2.其他格式①:[分钟:秒] 歌词:  3.其他格式②:[分钟:秒:毫秒] 歌词,与标准格式相比,秒后边的点号被改成了冒号. 标准格式:  其格式为"[标识名:值]".大小写等价.以下是预定义的标签. [ar:艺人名] [ti:曲名] [al:专辑名]  [by:

  • 比较完整的android MP3 LRC歌词滚动高亮显示(附源码)

    1.以前的滚动只是安行来刷新,现在不是按行来滚动了,其实就是在一定时间内整体往上移动,比如说在1S内刷新10次,由于认得肉眼看起来像是滚动. 关键代码如下: 复制代码 代码如下: float plus = currentDunringTime == 0 ? 30                : 30                        + (((float) currentTime - (float) sentenctTime) / (float) currentDunringTim

  • 正则表达式应用之提炼百度歌词的实现代码

    这里的歌词一般都是LRC格式的,是有时间的,如果想用作文本没有时间的话,文本里面的时间段就会成为了干扰障碍. 下面是一首歌的Lrc歌词 复制代码 代码如下: [ti:听说] [ar:刘若英] [al:我的失败与伟大] [by:活在当下] [00:01.22]刘若英 - 听说 [00:03.79]专辑名称:听说? [00:06.73]作词:葛大为 作曲:林健华 [00:09.74] [00:10.79]lrc制作:卜超 QQ:6313827 [00:25.13] [00:27.08]听说 你身边有

随机推荐