Laan's steps..

Feed Rss

歌词解析

10.12.2008, 3 条评论, flash, by .

[ar:歌手名]
[ti:歌曲名]
[al:专辑]
[by:歌词作者]
[offset:时间补偿值] 其单位是毫秒,正值表示整体提前,负值相反。这是用于总体调整显示快慢的
[key:加密后的编码,由编辑器自行加入]

以下列出了开发支持LRC格式的软件时应遵守的一些标准。

无论是否在行首,行内凡具有“[*:*]”形式的都应认为是标签。(此冒号为半角字符)
凡是标签都不应显示。
凡是标签,且被冒号分隔的两部分都为非负数,则应认为是时间标签。
因此,对于非标准形式的时间标签也应能识别(如“[0:0]”)。
凡是标签,且非时间标签的,应认为是标识标签。
标识名中大小写等价。
为了向后兼容,应对未定义的标签作忽略处理。另应对注释标签([:])同一行内容作忽略处理。
应允许一行中存在多个标签,并能正确处理。
应能正确处理未排序的标签。

package com.sogou.lrc.data
{
/**
* 歌词解析器
*
*
* @author laan
* @createTime 2008.9
*
*/
public class LRCDecoder
{
/**
* 解析歌词
*
* @param value
* @return
*
*/
public static function decode(value:String):Object {
var lrc:Array = new Array();

value = value.replace(/[rn]+/sg, “r”);
value = “r” + value + “r”;

//去除注释
value = value.replace(/[:][^r]*r/sg, “”);

var reg:RegExp;
var result:Object;
var regStr:String;

function getInfo(regg:RegExp, str:String):String {
var regResult:Object = regg.exec(str);

if (regResult) {
str = regResult.toString();
return str.substring(str.indexOf(“:”) + 1, str.indexOf(“]”));
}

return null;
}

//获取歌词信息
var info:String = “”;

reg = /[ti:[^]]*]/si;
result = getInfo(reg, value);
if (result) info += result;

reg = /[ar:[^]]*]/si;
result = getInfo(reg, value);
if (result) info += ” 作者:” + result;

reg = /[by:[^]]*]/si;
result = getInfo(reg, value);
if (result) info += ” 歌词作者:” + result;

reg = /[al:[^]]*]/si;
result = getInfo(reg, value);
if (result) info += ” 专辑:” + result;

//歌词时间补偿
var timeOffSet:Number = 0;
reg = /[offset:[^]]*]/si;
result = getInfo(reg, value);
if (result) timeOffSet = Number(result);

info = info.replace(/^s+/sg, “”);
info = info.replace(/s+$/sg, “”);
lrc.push({time:0 + timeOffSet, lrc:info});

//分析歌词

reg = /[^r]+r/sg;

result = reg.exec(value);

while(result) {
var item:String = result.toString();

var contentStr:String = item.substr(item.lastIndexOf(“]”) + 1,

1:官方帮助文档是最好的资料。当然,要适当的也敲敲代码,做做它提供的代码。
这个说起来容易啊,做起来比较难。特别是flex的帮助。本人曾有N次要啃掉它,结果总是夭折。

2:千万别买中国人写的书。80%是翻译帮助文档,甚至直接copy;19%是讲得肤浅得要命。
这一点本人深有体会啊。大学期间学flash时,几乎把图书馆里面与flash相关的书都翻了一遍。最后对那些名叫flash特效100例,手把手教你 flash之类的书可谓是深恶痛疾!!!!! 此类书只会教人写代码,而不是其原理。其中只有一本书,让我觉得很好——一个外国人写的。

3:早点接触as设计模式,早点接触flash的安全策略、程序域、代码优化等比较深的内容。不然也就只能停留在半山腰。呵呵,本人正在半山腰处努力爬啊~~~~
这个需要很多的经验。多做做项目吧。

4:谦虚、好学、执着钻研。这个是每个开发人员需要的品质;也是我大学里面体会最深的几个词了。
本人可是苦日子过过来的啊。大学学flash时没电脑,天天跑机房,早上出门买上午餐,然后到晚上还依依不舍的回到宿舍;跑到图书馆借书,仔细地抄录,遇 到实在不明白处就跑到复印室复印下来慢慢研究。导致本人的游戏天赋完全埋没,大学就会玩拳皇97!哎,想起来还真的走了很多弯路。
谦虚是很重要的。有的时候一个人总会因为一些事,感到很骄傲,然后慢慢自满。这个时候是需要读读书的,修生养性,重拾自我。有句话一定要记住:熟练五十载,深练需一生。天外有天,人外有人啊。

间启用第一天。感谢很多人,首先是潘伟,给我技术支持啊。然后是陈力,给我信心。

dami的博客:http://www.demi8.cn

呵呵呵呵,附上一个拼图原型:


参数设定:我和demi | 潘伟,demi和王雁 | 50 | 100