功能简述】:LRCParser组件是用来解析lrc歌词文件的代码类组件。
【运行平台】:Flash CS3,ActionScript3,Flash Player 9 +
【功能演示】: 【调用接口】:
【使用说明】:
1、使用前提条件:
安装了Flash CS3软件;
安装了 Adobe Extension Manager 1.8扩展管理器,如果没有请先到这里下载: http://www.adobe.com/cn/exchange/em_download/;
下载了LRCParser组件安装包文件: LRCParser.mxp
2、打开LRCParser组件安装包,将LRCParser组件安装到Flash CS3里;
3、将LRCParser组件拖到正在打开的fla文件的场景或库里,然后在调用代码(或类)的上面加上“import com.klstudio.media.LRCParser;”一行代码就可以了,接下来就"按照上面的接口和参考下面的调用实现"来调用这个解析器了。
【调用实例】:
package project.test
{
import flash.display.*;
import flash.events.*;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.text.*;
import flash.filters.*;
import flash.net.URLRequest;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.utils.Timer;
//导入系统组件;
import fl.controls.Button;
//导入LRCParser类;
import com.klstudio.media.LRCParser;
public class Test4 extends Sprite
{
//定义解析器;
private var parser:LRCParser;
//定义声音对象;
private var snd:Sound;
//定义声音播放频道;
private var channel:SoundChannel;
//歌词序号;
private var id:uint = 0;
//定时器;
private var timer:Timer;
//显示平台;
private var base:Sprite;
//歌词显示;
private var bmp:Bitmap;
//播放按钮;
private var button:Button;
private var preWidth:uint;
private var preHeight:uint;
private var copyright:TextField;
public function Test4()
{
preWidth = 400;
preHeight = 100;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.showDefaultContextMenu = false;
//显示平台;
base = new Sprite();
addChild(base);
//初始化解析器;
parser = new LRCParser();
parser.addEventListener(Event.COMPLETE, completeHandler);
parser.addEventListener(ErrorEvent.ERROR, errorHandler);
parser.load("/demo/test/爱情转移.lrc");
//初始化定时器;
timer = new Timer(50);
timer.addEventListener(TimerEvent.TIMER, timerHandler);
//初始化声音对象;
snd = new Sound();
snd.load(new URLRequest("/demo/test/爱情转移.mp3"));
//copyright;
copyright = new TextField();
copyright.autoSize = TextFieldAutoSize.LEFT;
copyright.selectable = false;
copyright.defaultTextFormat = new TextFormat("Verdana", 9, 0xFFFFFF, true, null, null, "http://www.klstudio.com", "_blank");
copyright.text = "POWERED BY KINGLONG";
copyright.x = preWidth - copyright.width - 5;
copyright.y = preHeight - copyright.height - 5;
var filter:BitmapFilter = getBitmapFilter();
copyright.filters = [filter];
copyright.alpha = 0.8;
addChild(copyright);
//显示平台;
base.graphics.lineStyle(1, 0x666666);
base.graphics.beginFill(0xF4F4F4);
base.graphics.drawRect(0, 0, preWidth, preHeight - copyright.height - 10);
base.graphics.lineStyle(1, 0x999999);
base.graphics.moveTo(0, 25);
base.graphics.lineTo(preWidth, 25);
base.graphics.moveTo(150, 1);
base.graphics.lineTo(150, 25);
base.graphics.moveTo(250, 1);
base.graphics.lineTo(250, 25);
base.addChild(getTextField("title", "歌名:", new Rectangle(3, 3, 147)));
base.addChild(getTextField("artist", "歌手:", new Rectangle(153, 3, 97)));
base.addChild(getTextField("special", "专辑:", new Rectangle(253, 3, 147)));
bmp = new Bitmap(new BitmapData(preWidth - 4, preHeight - 54, false, 0));
bmp.x = 2;
bmp.y = 27;
addChild(bmp);
button = new Button();
button.x = (preWidth - button.width) / 2;
button.y = 40;
button.label = "PLAY MUSIC";
button.enabled = false;
button.addEventListener(MouseEvent.CLICK, clickHandler);
addChild(button);
}
//按钮点击事件;
private function clickHandler(event:MouseEvent):void
{
//声音播放频道
if (channel != null)
{
channel.removeEventListener(Event.SOUND_COMPLETE, soundCompleteHandler);
channel = null;
}
channel = snd.play();
channel.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler);
timer.start();
button.visible = false;
}
//获得文本框;
private function getTextField(name:String, lbl:String, rect:Rectangle, clr:uint = 0x666666):TextField
{
var txf:TextField = new TextField();
txf.width = rect.width;
txf.selectable = false;
txf.defaultTextFormat = new TextFormat("Courier New", 12, clr);
txf.name = name;
txf.text = lbl;
txf.x = rect.x;
txf.y = rect.y;
return txf;
}
//定时器间隔事件;
private function timerHandler(event:TimerEvent):void
{
//获取歌词列表;
var arr:Array = parser.getList();
if (id < arr.length)
{
//时间数;
//要显示的歌词时间数是播放器时间数+歌词偏移量;
var point:int = int(channel.position + parser.getOffset());
if (point <= arr[id + 1].time)
{
drawLyric(arr[id].lyric);
}
else
{
id++;
}
}
}
//光晕滤镜;
private function getBitmapFilter():BitmapFilter
{
var color:Number = 0x000000;
var alpha:Number = 0.8;
var blurX:Number = 2;
var blurY:Number = 2;
var strength:Number = 6;
var inner:Boolean = false;
var knockout:Boolean = false;
var quality:Number = BitmapFilterQuality.HIGH;
return new GlowFilter(color, alpha, blurX, blurY, strength, quality, inner, knockout);
}
//lrc文件加载完成事件;
private function completeHandler(event:Event):void
{
trace("completeHandler>>" + event);
var title:TextField = base.getChildByName("title") as TextField;
var artist:TextField = base.getChildByName("artist") as TextField;
var special:TextField = base.getChildByName("special") as TextField;
title.text = "歌名:" + parser.getTitle();
artist.text = "歌手:" + parser.getArtist();
special.text = "专辑:" + parser.getSpecial();
button.enabled = true;
}
//显示歌词;
private function drawLyric(lyric:String):void
{
var txf:TextField = getTextField("lyric", lyric, new Rectangle(0, 0, 380), 0xFFCC00);
bmp.bitmapData.applyFilter(bmp.bitmapData, new Rectangle(0, 0, bmp.width, bmp.height), new Point(0, 0), new ColorMatrixFilter([1, 0, 0, 0, -5, 0, 1, 0, 0, -5, 0, 0, 1, 0, -5, 0, 0, 0, 1, 0]));
bmp.bitmapData.applyFilter(bmp.bitmapData, new Rectangle(0, 0, bmp.width, bmp.height), new Point(0, 0), new BlurFilter(12, 12));
var matrix:Matrix = new Matrix();
matrix.translate(10, 13);
bmp.bitmapData.draw(txf, matrix, null, BlendMode.SCREEN);
}
//lrc文件加载失败事件;
private function errorHandler(event:ErrorEvent):void
{
trace("errorHandler>>" + event);
}
//歌曲播放完成事件;
private function soundCompleteHandler(event:Event):void
{
trace("soundCompleteHandler: " + event);
if (timer.running)
{
timer.stop();
}
bmp.bitmapData.fillRect(new Rectangle(0, 0, bmp.width, bmp.height), 0);
id = 0;
button.visible = true;
}
}
}
【运行平台】:Flash CS3,ActionScript3,Flash Player 9 +
【功能演示】: 【调用接口】:
1 public interface com.klstudio.media.LRCParser {
2 //获取lrc的偏移量(单位为毫秒数);
3 public function getOffset():int;
4
5 //设置lrc的偏移量;
6 public function setOffset(offset:int):void;
7
8 //获取lrc的歌名;
9 public function getTitle():String;
10
11 //获取lrc的歌手名;
12 public function getArtist():String;
13
14 //获取lrc的专辑名;
15 public function getSpecial():String;
16
17 //获取lrc文件的作者名;
18 public function getAuthor():String;
19
20 //获取lrc的歌词列表;
21 public function getList():Array;
22
23 //加载lrc文件,默认字符编码为GB2312;
24 public function load(url:String,charset:String="gb2312"):void;
25 }
26
2 //获取lrc的偏移量(单位为毫秒数);
3 public function getOffset():int;
4
5 //设置lrc的偏移量;
6 public function setOffset(offset:int):void;
7
8 //获取lrc的歌名;
9 public function getTitle():String;
10
11 //获取lrc的歌手名;
12 public function getArtist():String;
13
14 //获取lrc的专辑名;
15 public function getSpecial():String;
16
17 //获取lrc文件的作者名;
18 public function getAuthor():String;
19
20 //获取lrc的歌词列表;
21 public function getList():Array;
22
23 //加载lrc文件,默认字符编码为GB2312;
24 public function load(url:String,charset:String="gb2312"):void;
25 }
26
【使用说明】:
1、使用前提条件:
安装了Flash CS3软件;
安装了 Adobe Extension Manager 1.8扩展管理器,如果没有请先到这里下载: http://www.adobe.com/cn/exchange/em_download/;
下载了LRCParser组件安装包文件: LRCParser.mxp
2、打开LRCParser组件安装包,将LRCParser组件安装到Flash CS3里;
3、将LRCParser组件拖到正在打开的fla文件的场景或库里,然后在调用代码(或类)的上面加上“import com.klstudio.media.LRCParser;”一行代码就可以了,接下来就"按照上面的接口和参考下面的调用实现"来调用这个解析器了。
【调用实例】:
package project.test
{
import flash.display.*;
import flash.events.*;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.text.*;
import flash.filters.*;
import flash.net.URLRequest;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.utils.Timer;
//导入系统组件;
import fl.controls.Button;
//导入LRCParser类;
import com.klstudio.media.LRCParser;
public class Test4 extends Sprite
{
//定义解析器;
private var parser:LRCParser;
//定义声音对象;
private var snd:Sound;
//定义声音播放频道;
private var channel:SoundChannel;
//歌词序号;
private var id:uint = 0;
//定时器;
private var timer:Timer;
//显示平台;
private var base:Sprite;
//歌词显示;
private var bmp:Bitmap;
//播放按钮;
private var button:Button;
private var preWidth:uint;
private var preHeight:uint;
private var copyright:TextField;
public function Test4()
{
preWidth = 400;
preHeight = 100;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.showDefaultContextMenu = false;
//显示平台;
base = new Sprite();
addChild(base);
//初始化解析器;
parser = new LRCParser();
parser.addEventListener(Event.COMPLETE, completeHandler);
parser.addEventListener(ErrorEvent.ERROR, errorHandler);
parser.load("/demo/test/爱情转移.lrc");
//初始化定时器;
timer = new Timer(50);
timer.addEventListener(TimerEvent.TIMER, timerHandler);
//初始化声音对象;
snd = new Sound();
snd.load(new URLRequest("/demo/test/爱情转移.mp3"));
//copyright;
copyright = new TextField();
copyright.autoSize = TextFieldAutoSize.LEFT;
copyright.selectable = false;
copyright.defaultTextFormat = new TextFormat("Verdana", 9, 0xFFFFFF, true, null, null, "http://www.klstudio.com", "_blank");
copyright.text = "POWERED BY KINGLONG";
copyright.x = preWidth - copyright.width - 5;
copyright.y = preHeight - copyright.height - 5;
var filter:BitmapFilter = getBitmapFilter();
copyright.filters = [filter];
copyright.alpha = 0.8;
addChild(copyright);
//显示平台;
base.graphics.lineStyle(1, 0x666666);
base.graphics.beginFill(0xF4F4F4);
base.graphics.drawRect(0, 0, preWidth, preHeight - copyright.height - 10);
base.graphics.lineStyle(1, 0x999999);
base.graphics.moveTo(0, 25);
base.graphics.lineTo(preWidth, 25);
base.graphics.moveTo(150, 1);
base.graphics.lineTo(150, 25);
base.graphics.moveTo(250, 1);
base.graphics.lineTo(250, 25);
base.addChild(getTextField("title", "歌名:", new Rectangle(3, 3, 147)));
base.addChild(getTextField("artist", "歌手:", new Rectangle(153, 3, 97)));
base.addChild(getTextField("special", "专辑:", new Rectangle(253, 3, 147)));
bmp = new Bitmap(new BitmapData(preWidth - 4, preHeight - 54, false, 0));
bmp.x = 2;
bmp.y = 27;
addChild(bmp);
button = new Button();
button.x = (preWidth - button.width) / 2;
button.y = 40;
button.label = "PLAY MUSIC";
button.enabled = false;
button.addEventListener(MouseEvent.CLICK, clickHandler);
addChild(button);
}
//按钮点击事件;
private function clickHandler(event:MouseEvent):void
{
//声音播放频道
if (channel != null)
{
channel.removeEventListener(Event.SOUND_COMPLETE, soundCompleteHandler);
channel = null;
}
channel = snd.play();
channel.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler);
timer.start();
button.visible = false;
}
//获得文本框;
private function getTextField(name:String, lbl:String, rect:Rectangle, clr:uint = 0x666666):TextField
{
var txf:TextField = new TextField();
txf.width = rect.width;
txf.selectable = false;
txf.defaultTextFormat = new TextFormat("Courier New", 12, clr);
txf.name = name;
txf.text = lbl;
txf.x = rect.x;
txf.y = rect.y;
return txf;
}
//定时器间隔事件;
private function timerHandler(event:TimerEvent):void
{
//获取歌词列表;
var arr:Array = parser.getList();
if (id < arr.length)
{
//时间数;
//要显示的歌词时间数是播放器时间数+歌词偏移量;
var point:int = int(channel.position + parser.getOffset());
if (point <= arr[id + 1].time)
{
drawLyric(arr[id].lyric);
}
else
{
id++;
}
}
}
//光晕滤镜;
private function getBitmapFilter():BitmapFilter
{
var color:Number = 0x000000;
var alpha:Number = 0.8;
var blurX:Number = 2;
var blurY:Number = 2;
var strength:Number = 6;
var inner:Boolean = false;
var knockout:Boolean = false;
var quality:Number = BitmapFilterQuality.HIGH;
return new GlowFilter(color, alpha, blurX, blurY, strength, quality, inner, knockout);
}
//lrc文件加载完成事件;
private function completeHandler(event:Event):void
{
trace("completeHandler>>" + event);
var title:TextField = base.getChildByName("title") as TextField;
var artist:TextField = base.getChildByName("artist") as TextField;
var special:TextField = base.getChildByName("special") as TextField;
title.text = "歌名:" + parser.getTitle();
artist.text = "歌手:" + parser.getArtist();
special.text = "专辑:" + parser.getSpecial();
button.enabled = true;
}
//显示歌词;
private function drawLyric(lyric:String):void
{
var txf:TextField = getTextField("lyric", lyric, new Rectangle(0, 0, 380), 0xFFCC00);
bmp.bitmapData.applyFilter(bmp.bitmapData, new Rectangle(0, 0, bmp.width, bmp.height), new Point(0, 0), new ColorMatrixFilter([1, 0, 0, 0, -5, 0, 1, 0, 0, -5, 0, 0, 1, 0, -5, 0, 0, 0, 1, 0]));
bmp.bitmapData.applyFilter(bmp.bitmapData, new Rectangle(0, 0, bmp.width, bmp.height), new Point(0, 0), new BlurFilter(12, 12));
var matrix:Matrix = new Matrix();
matrix.translate(10, 13);
bmp.bitmapData.draw(txf, matrix, null, BlendMode.SCREEN);
}
//lrc文件加载失败事件;
private function errorHandler(event:ErrorEvent):void
{
trace("errorHandler>>" + event);
}
//歌曲播放完成事件;
private function soundCompleteHandler(event:Event):void
{
trace("soundCompleteHandler: " + event);
if (timer.running)
{
timer.stop();
}
bmp.bitmapData.fillRect(new Rectangle(0, 0, bmp.width, bmp.height), 0);
id = 0;
button.visible = true;
}
}
}