LRCParser组件

功能简述】:LRCParser组件是用来解析lrc歌词文件的代码类组件。
【运行平台】: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 

【使用说明】:
     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 ;
        }
    }

}

你可能感兴趣的:(parser)