Laan's steps..

Feed Rss

歌词解析

10.12.2008, 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,

歌词解析 有 3 条回应

  1. 搜索到这,非常有用。
    Thanks

    回复
  2. 这也是我的博客

    回复

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>