Flex4 制作歌词同步

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
creationComplete="application1_creationCompleteHandler(event)" width="576" height="420">
<fx:Script>
<![CDATA[
import flash.display.Sprite;
import flash.events.Event;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.system.System;

import mx.events.EffectEvent;
import mx.events.FlexEvent;

private var LRCarray:Array=new Array();
private var sc:SoundChannel;
private var timer:Timer;
private var preLrc:String;
private var curLrc:String;
[Embed(source='1524407_1200x1000_0.jpg')]
private var bgImg:Class;
[Embed(source='chunwenyiaiqing.mp3')]
private var QHC:Class;
protected function application1_creationCompleteHandler(event:FlexEvent):void
{
System.useCodePage=true;
lrc_txt.text="正在加载歌词...";
preLrc = "正在加载歌词...";
curLrc = "正在加载歌词...";
var loader:URLLoader=new URLLoader();
loader.load(new URLRequest("cwyan.lrc"));
loader.addEventListener(Event.COMPLETE,LoadFinish);
//LoadFinish(new Event(Event.COMPLETE));
var sound:Sound=new QHC();
sc=sound.play();
timer = new Timer(50);
timer.addEventListener(TimerEvent.TIMER,SoundPlaying);
timer.start();
m.duration = 500;
m.yFrom = 300;
m.yTo = 29;
m.stop();
m.play();
}
private function SoundPlaying(evt:Event):void {
if(curLrc != preLrc){
var alpha:uint = Math.round(Math.random()*255);
var red:uint = Math.round(Math.random()*255);
var green:uint = Math.round(Math.random()*255);
var blue:uint = Math.round(Math.random()*255);
var c:uint = alpha << 24 | red << 16 | green << 8 | blue;
lrc_txt.setStyle("color",c);
m.duration = 800;
m.yFrom = 300;
m.yTo = 29;
m.stop();
m.play();
preLrc = curLrc;
}
for (var i:int=1; i < LRCarray.length; i++) {
if (sc.position < LRCarray[i].timer) {
lrc_txt.text=LRCarray[i-1].lyric;
break;
}
lrc_txt.text=LRCarray[LRCarray.length-1].lyric;
}
curLrc = lrc_txt.text;

}
/**
*解析lrc 文件内容成数组数据
*/
private function LoadFinish(evt:Event):void {
var list:String=evt.target.data;
//var list:String=GeCi.lrcTxt;
var listarray:Array=list.split("\n");
var reg:RegExp=/\[[0-5][0-9]:[0-5][0-9].[0-9][0-9]\]/g;
for (var i:int=0; i < listarray.length; i++) {
var info:String=listarray[i];
var len:int=info.match(reg).length;
var timeAry:Array=info.match(reg);
var lyric:String=info.substr(len*10);
for (var k:int=0; k < timeAry.length; k++) {
var obj:Object=new Object();
var ctime:String=timeAry[k];
var ntime:Number=Number(ctime.substr(1,2))*60+Number(ctime.substr(4,5));
obj.timer=ntime*1000;
obj.lyric=lyric;
LRCarray.push(obj);
}
}
LRCarray.sort(compare);
}
/**
*歌词顺序按播放时间排序
*/
private function compare(paraA:Object,paraB:Object):int {
if (paraA.timer > paraB.timer) {
return 1;
} if (paraA.timer < paraB.timer) {
return -1;
}
return 0;
}

]]>
</fx:Script>
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
<s:Move target="{lrc_txt}" id="m"/>
</fx:Declarations>
<mx:Image source="{bgImg}" width="100%" height="100%"/>
<s:Label x="-1" y="11" id="lrc_txt" width="576" height="29" color="#FA0707" verticalAlign="middle" textAlign="center" fontFamily="宋体" fontWeight="bold" fontSize="14"/>
</s:Application>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值