⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gllllrc.as

📁 flex开发的音乐播放程序程序。带歌词功能
💻 AS
字号:

package com.ll19.sound {
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.filters.BlurFilter;
	import flash.text.TextFieldAutoSize;
	
	import com.ll19.util.GlllStringUtil;
	import com.ll19.util.GlllToolTip;
	import com.ll19.util.SetMyMask;
	import com.ll19.xml.GlllXML;	

	/**
	 * - GL'LL. - 
	 * 
	 *用在LRC-WAVE播放器中
	 *LRC歌词平滑滚动显示
	 * 
	 * @author <a href="http://www.LL19.com/">LL19.com</a>
	 * 
	 */
	public class GlllLrc  extends GlllXML {

		private var lrcLanguage:String = "";

		private var lrcFont:String = "";

		private var originLyrics:Array = null;

		private var originLyricsBreak:Array = null;

		private var lyricsText:Array = null;

		private var timeString:Array = null;

		private var timeValue:Array = null;

		private var myLrc:MovieClip = null;

		private var startpoint:int = 0;

		private var shownum:int = 3;

		private var initx:Number = 0;

		private var x0:Number = 0;

		private var x1:Number = 0;

		private var x2:Number = 0;

		private var lrcButton1:MovieClip = null;

		private var lrcButton2:MovieClip = null;

		private var lrcButton3:MovieClip = null;

		private var txt_blur:BlurFilter = null;

		private var txt_blur2:BlurFilter = null;

		private var pos:Number = 0;

		private var temppos:int = 0;

		private var ending:int = 0;

		private var timet:Number = 0;

		private var timen:Number = 0;

		private var alpha1:Number = 0;

		private var alpha2:Number = 0;

		private var s:Number = 0;

		private var percentage:Number = 0;

		public var removeListener:Boolean = false;

		/**
		 * @param Font 自定义的字体
		 * @param language LRC中的语言 en或者cn
		 * @param lrcButton 显示lrc的影片
		 * @param lrcLink lrc地址
		 * @param myTip TIP提示对象
		 * @param myObject this
		 * 
		 */
		function GlllLrc(lrcLink:String,Lyricsitems:MovieClip,language:String,Font:String,myTip:GlllToolTip,lrcButton:Object) {
			lrcLanguage = language;
			lrcFont = Font;
			myLrc = Lyricsitems;
			txt_blur = new BlurFilter(0, 0, 0);
			txt_blur2 = new BlurFilter(0, 0, 0);

			loadGlllXML(lrcLink);
			myLrc.addEventListener(Event.ENTER_FRAME, returnXML);
			function returnXML(event:Event):void {
				if (XMLState == "complete") {
					myLrc.removeEventListener(Event.ENTER_FRAME, returnXML);
					lrcButton1 = new lrcButton();
					lrcButton2 = new lrcButton();
					lrcButton3 = new lrcButton();
					lrcButton1.captiontxt.autoSize = TextFieldAutoSize.LEFT;
					lrcButton2.captiontxt.autoSize = TextFieldAutoSize.LEFT;
					lrcButton3.captiontxt.autoSize = TextFieldAutoSize.LEFT;
					lrcButton1.captiontxt.mouseEnabled = false;
					lrcButton2.captiontxt.mouseEnabled = false;
					lrcButton3.captiontxt.mouseEnabled = false;
					lrcButton1.captiontxt.selectable = false;
					lrcButton2.captiontxt.selectable = false;
					lrcButton3.captiontxt.selectable = false;
					if (myLrc.lrclist.getChildByName("lrcButton1")) {
						myLrc.lrclist.removeChild(myLrc.lrclist.getChildByName("lrcButton1"));
					}
					if (myLrc.lrclist.getChildByName("lrcButton2")) {
						myLrc.lrclist.removeChild(myLrc.lrclist.getChildByName("lrcButton2"));
					}
					if (myLrc.lrclist.getChildByName("lrcButton3")) {
						myLrc.lrclist.removeChild(myLrc.lrclist.getChildByName("lrcButton3"));
					}
					lrcButton1.name = "lrcButton1";
					lrcButton2.name = "lrcButton2";
					lrcButton3.name = "lrcButton3";
					myLrc.lrclist.addChild(lrcButton1);
					myLrc.lrclist.addChild(lrcButton2);
					myLrc.lrclist.addChild(lrcButton3);
					lrcButton1.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler);
					lrcButton1.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);
					lrcButton2.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler);
					lrcButton2.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);
					lrcButton3.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler);
					lrcButton3.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);
					//初始影片中 this.Lyricsitems.lrclist的X坐标 
					initx = myLrc.lrclist.x = 125;
					SetMyMask.buildMask(myLrc.lrclist, myLrc.listbg);
					loadLrcData(myXML);
					myXML = null;
				}
				if (XMLState == "error") {
					myLrc.removeEventListener(Event.ENTER_FRAME, returnXML);
					trace("Unable to load requested LRCURL.");
					myXML = null;
				}
			}
			
			function mouseOverHandler(event:MouseEvent):void {
				if (lrcLanguage == "cn") {
					myTip.showTip(" <font color=\"#CC0000\"><b> Tip </b></font>-- <font size=\"12\">" + event.currentTarget.captiontxt.text + "</font> -- ", 175, 5, " ");
				}
				else {
					myTip.showTip(" <font color=\"#CC0000\"><b> Tip </b></font>-- " + event.currentTarget.captiontxt.text + " -- ", 175, 5, " ");
				}
			}
			function mouseOutHandler(event:MouseEvent):void {
				myTip.removeTip();
			}
		}

		//解析成合适队列
		private function loadLrcData(lrcXML:XML):void {

			originLyrics = new Array;
			originLyricsBreak = new Array;
			lyricsText = new Array;
			timeString = new Array;
			timeValue = new Array;
			
			//trace (String.fromCharCode(10));
			//trace (String.fromCharCode(13));
			originLyrics = lrcXML.toString().split(String.fromCharCode(10));
			//根据换行拆分成字符串数组
			for (var j:int in originLyrics) {
				var originLyricsUnit:Array = originLyrics[j].split("]");
				for (var i:int = 0;i <= originLyricsUnit.length - 2; i++) {
					//主要是判断多个[]时候从新形成数组
					originLyricsBreak.push(originLyricsUnit[i] + "]" + originLyricsUnit[originLyricsUnit.length - 1]);
				}
			}
			originLyricsBreak.sort();
			//排序
			for (var k:int = originLyricsBreak.length - 1;k >= 0; k--) {
				var tempText:String = originLyricsBreak[k].split("]")[1];
				lyricsText.unshift(tempText);
				var tempTimeString:String = originLyricsBreak[k].split("]")[0].slice(1);
				timeString.unshift(tempTimeString);
				timeValue.unshift(GlllStringUtil.convertToTime(tempTimeString));
			}
			myLrc.addEventListener(Event.ENTER_FRAME, moveUp);
		}

		private function moveUp(event:Event):void {
			if (removeListener == true) {
				event.currentTarget.removeEventListener(Event.ENTER_FRAME, moveUp);
			}
			pos = GlllSound.myChannel.position;
			//当前播放时间
			temppos = 0;
			for (var i:int = timeValue.length - 1;i >= 0; i--) {
				if (!isNaN(timeValue[i])) {
					ending = i;
					break;
				}
			}
			for (i = 0;i <= ending; i++) {
				if (i == ending || pos <= timeValue[i + 1] * 1000) {
					temppos = i;
					break;
				}
			}
			startpoint = temppos - Math.floor(shownum / 2);

			//歌词渐进渐出
			timet = timeValue[temppos + 1] - timeValue[temppos];
			timen = timeValue[temppos + 1] - pos / 1000;
			
			lrcButton1.captiontxt.filters = [txt_blur];
			alpha1 = (100 * timen / timet) / 100;
			lrcButton1.captiontxt.alpha = alpha1;

			lrcButton3.captiontxt.filters = [txt_blur];
			alpha2 = (100 - 100 * timen / timet) / 100;
			lrcButton3.captiontxt.alpha = alpha2;
			refreshing();
			
			//移动
			s = lrcButton1.captiontxt.width;
			percentage = Math.min(1, (pos / 1000 - timeValue[temppos]) / ((isNaN(timeValue[temppos + 1]) ? (timeValue[temppos] + 1) : (timeValue[temppos + 1])) - timeValue[temppos]));
			myLrc.lrclist.x = initx - s * percentage;
			
			function refreshing():void {
				for (var i:int = 0;i <= shownum - 1; i++) {
					if (i == 0) {
						setCaption(lrcButton1, lyricsText[i + startpoint]);
					}
					if (i == 1) {
						setCaption(lrcButton2, lyricsText[i + startpoint]);
					}
					if (i == 2) {
						setCaption(lrcButton3, lyricsText[i + startpoint]);
					}
				}
			}

			function setCaption(nameNo:MovieClip,capt:String):void {
				if (capt == null) {
					capt = "<u>GLLL.Lrc.Mp3.Players~http://www.LL19.com/</u>";
				}
				//让动态文本自适应长度 并且根据其长度连续显示歌词
				//trace (String.fromCharCode(13));
				capt = GlllStringUtil.remove(capt, String.fromCharCode(13));
				x1 = lrcButton1.captiontxt.width;
				x2 = lrcButton2.captiontxt.width;
				lrcButton1.x = x0;
				lrcButton2.x = x1;
				lrcButton3.x = x1 + x2;
				capt = "  - " + capt + " -  ";
				if (lrcLanguage == "en") {
					nameNo.captiontxt.htmlText = "<b>" + capt + "</b>";
				}
			else if (lrcLanguage == "cn") {
					nameNo.captiontxt.htmlText = "<font size=\"12\">" + capt + "</font>";
					lrcButton1.y = -0.9;
					lrcButton2.y = -0.9;
					lrcButton3.y = -0.9;
				}
			else {
					nameNo.captiontxt.htmlText = capt;
				}
				if (lrcFont != "") {
					nameNo.captiontxt.htmlText = "<font " + lrcFont + ">" + capt + "</font>";
				}
			}
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -