发新帖  新投票  回帖 
526260个阅读者,232条回复 | 打印 | 订阅 | 收藏
梦回轻狂

发表时间:2013-8-19 08:42

梦回AS2纯代码卡拉OK效果同步歌词条MP3列表播放器(附源码下载)[原创]



梦回轻狂 发表在 音乐播放器 华声论坛 http://bbs.voc.com.cn/forum-344-1.html















**** 本内容跟帖回复才可浏览 *****

[本帖最后由 梦回轻狂 于 2013-8-19 09:08 编辑]




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

  能跑的不如能吃的,能吃的不如能睡的;睡觉是头等大事,吃饭是二等大事,运动是三等大事,其余的都是小事。


  中医认为药物和食物是同源的,自古就秉持“寓医于食”的防病治病理念。《黄帝内经》云:“大毒治病十去其六;常毒治病十去其七,小毒治病十去其八,无毒治病十去其九”,“先进厨房,后进药房”的说法在民间更是广为流传。

  食园有路心作引,厨海无涯汗推舟……

 
司马有道

回复时间:2013-8-19 08:56
谢谢楼主分享!

 
漂来风

回复时间:2013-8-19 10:10
as2代码和as3有很多是相通的。谢谢提供!

 
jy02453368

回复时间:2013-8-19 10:12
谢谢楼主分享!

 
kellyxwj

回复时间:2013-8-19 11:32
强大强大强大,感谢一叶老师




----------------------------------------------
人生很短,请珍惜这一路的友情、爱情和亲情,于千万人之中遇见不易,一旦擦身,相逢便是无期!
 
whlbliss

回复时间:2013-8-19 13:10
真是好东西啊,谢谢分享!

 
jsjcyg

回复时间:2013-8-19 18:44
精彩制作,谢谢分享。

 
枳橘吟

回复时间:2013-8-20 00:54
  梦回君 一直在前行。
  收藏。
  感谢。

 
wu2011

回复时间:2013-8-20 03:20
原来不用遮罩是这个技巧啊,学习一下。

分析歌词是简洁了,很有特色,始终觉得不完整,接着下来就要需左拆右拆、转换,所以后期工作量还需很大,比如对比字符串,实际也是对比时间,这肯定需转换的,呵呵只是个人看法而已。

 
zsctqz

回复时间:2013-8-20 05:35
强大的技术帖!谢谢强大的老师。

 
梦回轻狂

回复时间:2013-8-20 07:44

原帖由 wu2011 于 2013-8-20 03:20 发表
原来不用遮罩是这个技巧啊,学习一下。

分析歌词是简洁了,很有特色,始终觉得不完整,接着下来就要需左拆右拆、转换,所以后期工作量还需很大,比如对比字符串,实际也是对比时间,这肯定需转换的,呵呵只是个人看法而已。



W君说得也有道理。

先拆分左右,需要添加两个数组(时间标签+对应歌词),这样做可以;
使用对比时即时拆分左右,也可以(因为只有几个或者十几个字符,也不费CPU,极快的)

只是把时间转换成字符串,需要使用一个函数,
//将时间数值(毫秒)转换成字符格式的时间标签
function getTimeStr(theTime:Number):String {
var sec = Math.floor(theTime/1000)%60;
sec<10 ? sec="0"+sec : null;
var min = Math.floor(Math.floor(theTime/1000)/60);
min<10 ? min="0"+min : null;
return min+":"+sec;
}


计算两个时间标签(字符格式)之间的时间间隔也需要一个函数
//转换一个字符格式的时间标签,到毫秒数值
function getTimeMS(timeStr:String):Number {
return (Number(timeStr.split(":")[0])*60+Number(timeStr.split(":")[1])+Number(timeStr.split(".")[1])/10)*1000;
}




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

  能跑的不如能吃的,能吃的不如能睡的;睡觉是头等大事,吃饭是二等大事,运动是三等大事,其余的都是小事。


  中医认为药物和食物是同源的,自古就秉持“寓医于食”的防病治病理念。《黄帝内经》云:“大毒治病十去其六;常毒治病十去其七,小毒治病十去其八,无毒治病十去其九”,“先进厨房,后进药房”的说法在民间更是广为流传。

  食园有路心作引,厨海无涯汗推舟……

 
梦回轻狂

回复时间:2013-8-20 07:46
一并感谢楼上各位朋友的支持,问好!




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

  能跑的不如能吃的,能吃的不如能睡的;睡觉是头等大事,吃饭是二等大事,运动是三等大事,其余的都是小事。


  中医认为药物和食物是同源的,自古就秉持“寓医于食”的防病治病理念。《黄帝内经》云:“大毒治病十去其六;常毒治病十去其七,小毒治病十去其八,无毒治病十去其九”,“先进厨房,后进药房”的说法在民间更是广为流传。

  食园有路心作引,厨海无涯汗推舟……

 
wu2011

回复时间:2013-8-20 10:31

原帖由 梦回轻狂 于 2013-8-20 07:44 发表

原帖由 wu2011 于 2013-8-20 03:20 发表
原来不用遮罩是这个技巧啊,学习一下。

分析歌词是简洁了,很有特色,始终觉得不完整,接着下来就要需左拆右拆、转换,所以后期工作量还需很大,比如对比字符串,实际也是对比时间,这肯定需转换的,呵呵只是个人看法而已。



W君说得也有道理。

先拆分左右,需要添加两个数组(时间标签+对应歌词),这样做可以;
使用对比时即时拆分左右,也可以(因为只有几个或者十几个字符,也不费CPU,极快的)

只是把时间转换成字符串,需要使用一个函数,
//将时间数值(毫秒)转换成字符格式的时间标签
function getTimeStr(theTime:Number):String {
var sec = Math.floor(theTime/1000)%60;
sec<10 ? sec="0"+sec : null;
var min = Math.floor(Math.floor(theTime/1000)/60);
min<10 ? min="0"+min : null;
return min+":"+sec;
}


计算两个时间标签(字符格式)之间的时间间隔也需要一个函数
//转换一个字符格式的时间标签,到毫秒数值
function getTimeMS(timeStr:String):Number {
return (Number(timeStr.split(":")[0])*60+Number(timeStr.split(":")[1])+Number(timeStr.split(".")[1])/10)*1000;
}



有个疑问:

"function getTimeMS(timeStr:String):Number {
return (Number(timeStr.split(":")[0])*60+Number(timeStr.split(":")[1])+Number(timeStr.split(".")[1])/10)*1000;
}"

这个function,如果是仅仅显示歌词可能无问题,但是滚动或卡拉OK效果,要是差了[length-1]的时间和sound.length之间的时间,那了最后一句,会出现播放还没真正结束,卡拉OK效果没卡拉OK效果,滚动的也不再滚动了

 
寒江雪润

回复时间:2013-8-20 11:17
看看。

 
梦回轻狂

回复时间:2013-8-20 11:51

原帖由 wu2011 于 2013-8-20 10:31 发表

题,但是滚动或卡拉OK效果,要是差了[length-1]的时间和sound.length之间的时间,那了最后一句,会出现播放还没真正结束,卡拉OK效果没卡拉OK效果,滚动的也不再滚动了


是的,最后一句没有KLOK效果。

要完美,可以特殊处理,探明当前curLrcId==lrcItem.length-1时,用MP3总时间,与当前时间标签计算出的时间数值相减




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

  能跑的不如能吃的,能吃的不如能睡的;睡觉是头等大事,吃饭是二等大事,运动是三等大事,其余的都是小事。


  中医认为药物和食物是同源的,自古就秉持“寓医于食”的防病治病理念。《黄帝内经》云:“大毒治病十去其六;常毒治病十去其七,小毒治病十去其八,无毒治病十去其九”,“先进厨房,后进药房”的说法在民间更是广为流传。

  食园有路心作引,厨海无涯汗推舟……

 
枳橘吟

回复时间:2013-8-20 23:08
  给 梦回君 几点建议。
  花了不少时间,琢磨梦回君的佳作。褒奖的话就不说了。建议是否正确、合理,烦 梦回君 查核。

  1、“第二部分:解析LRC文件的功能”,在 “ var lrcLine:Array = lrcStr.split("\n");” 之后,增加一个处理:
    “删除空白行”为好,防止含空行的情况。我的歌词文件,常为方便校对,空了行,完成后没有删除空行。网上下载lrc文件偶尔也会遇到。

  2、“第二部分:解析LRC文件的功能”,得到的是“单时间标签”的歌词行,“lrcItem”数组。
    在这一部分,再进一步,将“lrcItem”数组处理为“时间数组”和“歌词数组”,在后面的同步调用时就是直接的,不需要再作于下表达的处理。
    “lrcItem[curLrcId+1].slice(0,7)”;

  3、时间值不必判断7位、5位,因为一般标准的lrc文件,时间值表示为:[02:30.54],读出后换算成 151 (秒)或 1505 (0.1秒)
    这样处理后,解析才算是“彻底”完成,最后得到于下两个数组。明了,用起来也直接、方便。
    lrctime = [5, 10, 15, 30];
    lrctext = ["我们", "都是", "好朋友", ""];
    当然,这两个数组的内容是“看不见”的。

  4、wu2011君 提到的最后一句没有盖字效果的问题,在时间数组的最后增加一个时间值(如:比歌曲总时长少1秒左右),歌词为空即可。
    这样,数组统一了,也不必再设置判断或“特殊处理”。

  5、“第三部分:显示LRC歌词的功能”中,函数“getTimeMS”,第三项为重复计算,“timeStr”中的“小数”在第二项已参与计算过了。

  专此。

[本帖最后由 枳橘吟 于 2013-8-21 18:12 编辑]

 
梦回轻狂

回复时间:2013-8-21 09:03

原帖由 枳橘吟 于 2013-8-20 23:08 发表
  给 梦回君 几点建议。
  花了不少时间,琢磨梦回君的佳作。褒奖的话就不说了。建议是否正确、合理,烦 梦回君 查核。

  1、“第二部分:解析LRC文件的功能”,得到的是“单时间标签”的歌词行。
    在这一部分,再进一步,将单行内容处理为“时间数组”和“歌词数组”,在后面的同步调用时就是直接的,不需要再作于下表达的处理。
    “lrcItem[curLrcId+1].slice(0,7)”;

  2、时间值不必判断7位、5位,因为一般标准的lrc文件,时间值表示为:[02:30.54],读出后换算成 151 (秒)或 1505 (0.1秒)
    这样处理后,解析才算是“彻底”完成,最后得到于下两个数组。明了,用起来也直接、方便。
    lrctime = [5, 10, 15, 30];
    lrctext = ["我们", "都是", "好朋友", ""];
    当然,这两个数组的内容是“看不见”的。

  3、wu2011君 提到的最后一句没有盖字效果的问题,在时间数组的最后增加一个时间值(如:比歌曲总时长少1秒左右),歌词为空即可。
    这样,数组统一了,也不必再设置判断或“特殊处理”。

  专此。

[本帖最后由 枳橘吟 于 2013-8-21 08:30 编辑]



感谢枳老,确实三条都是非常好的处理方法。

我有时间修改一下这几个方面,真正把LRC解析到位


另外如有精力和能力,也尝试一下用AS3来写,现在大家都钟情于AS3啊,呵呵




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

  能跑的不如能吃的,能吃的不如能睡的;睡觉是头等大事,吃饭是二等大事,运动是三等大事,其余的都是小事。


  中医认为药物和食物是同源的,自古就秉持“寓医于食”的防病治病理念。《黄帝内经》云:“大毒治病十去其六;常毒治病十去其七,小毒治病十去其八,无毒治病十去其九”,“先进厨房,后进药房”的说法在民间更是广为流传。

  食园有路心作引,厨海无涯汗推舟……

 
枳橘吟

回复时间:2013-8-21 09:33
  谢谢 梦回君 回复。
  有些问题,属“观点”性质,不能用“对错”来界定。“聊聊”而已。

  对于CS3,一直“耿耿于怀”,有心杀贼,无力回天。
  在AS2的环境下长大,习惯于犯点小错,“无拘无束”。进入CS3,首先就得规规矩矩的命名对象,乱不得一点。好在软件的检测功能很强,能给予提示,并且也较明确。侦测函数无处不在,这个可比AS2烦人多了。虽不复杂,但有点“八股”,得照着格式写。还有类文档,总有个规定格式的开篇。至今不明白“空”函数做什么用(建一个函数,里面仅一句:return)。对象的分类与AS2也有许多不同,有时好半天也找不到相应条目。创建类文档,常先导入“类”,用于继承,这得熟悉对象的归属,不然只能“油多不坏菜”,多用*号。当然也可在提示“找不到”时再去补充。
  原因就是自己不行。

  问好。

[本帖最后由 枳橘吟 于 2013-8-21 09:35 编辑]

 
墨染琴音

回复时间:2013-8-21 15:01
强大的技术帖!谢谢强大的老师。

 
hzqfhy

回复时间:2013-8-22 01:15
这个歌词显示效果很有感觉!喜欢!谢谢分享!

 
发新帖 新投票
 回帖
查看积分策略说明快速回复主题
你的用户名: 密码:   免费注册(只要30秒)


启用 Html 代码
使用个人签名
(请您文明上网理性发言!并遵守相关规定
   



Processed in 0.035992 s, 8 q - 无图精简版,sitemap,