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

📄 glllsound.as

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

package com.ll19.sound {
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.IOErrorEvent;
	import flash.events.ProgressEvent;
	import flash.media.Sound;
	import flash.media.SoundChannel;
	import flash.media.SoundLoaderContext;
	import flash.media.SoundTransform;
	import flash.net.URLRequest;
	
	import com.ll19.util.GlllStringUtil;
	import com.ll19.util.GlllToolTip;
	import com.ll19.util.map.IMap;	

	/**
	 * - GL'LL. - 
	 * 
	 * 声音类
	 * 
	 * @author <a href="http://www.LL19.com/">LL19.com</a>
	 * 
	 */
	public class GlllSound extends Sound {

		public static var myChannel:SoundChannel;

		public static var mySound:Sound = null;

		public static var myLoaderContext:SoundLoaderContext = null;

		public static var myTransform:SoundTransform = null; 

		public static var myReq:URLRequest;

		private static var myWave:GlllSoundWave = null;

		private static var myLrc:GlllLrc = null;

		private static var songTotal:Number = 0;

		private static var thisNum:Number = 0;

		private static var playInfo:String = "";

		private static var playTitle:String = "";

		private static var myObject:MovieClip = null;

		private static var map:IMap = null;

		private static var ITip:GlllToolTip = null;

		private static var IButton:Object = null;

		private static var listTarget:MovieClip = null;

		private static var volume:Number = 1;

		public static var myPosition:Number = 0;

		function GlllSound() {
		}

		/**
		 * @param lrcButton 歌词显示的影片
		 * @param Lyricsitems LRC影片
		 * @param myMap 解析之后的XML
		 * @param myTip 提示工具类
		 * @param num 当前的歌曲ID
		 * @param target 正在播放的歌曲影片
		 * @param thisObject this
		 * @param waveTarget 波谱所在的影片位置
		 */
		public static function soundPlay(myMap:IMap,num:Number,waveTarget:MovieClip,thisObject:MovieClip,myTip:GlllToolTip,lrcButton:Object,Lyricsitems:MovieClip,target:MovieClip):void {
			if (myObject != null) {
				myObject = null;
			}
			myObject = thisObject;
			if (map != null) {
				map = null;
			}
			map = myMap;
			if (ITip != null) {
				ITip = null;
			}
			ITip = myTip;
			if (IButton != null) {
				IButton = null;
			}
			IButton = lrcButton;
			if (listTarget != null) {
				listTarget = null;
			}
			listTarget = target;
			songTotal = Number(myMap.get("songTotal"));
			thisNum = num;
	
			if(mySound != null) {
				myChannel.stop();
				try {
				//mySound.close();
				}catch(e:Error) {
					throw e;
				}
				mySound = null;
			}	
			if (myReq != null) {
				myReq = null;
			}
			mySound = new GlllSound();
			myReq = new URLRequest(myMap.get("urlList")[num]);
			if (myLoaderContext != null) {
				myLoaderContext = null;
			}
			myLoaderContext = new SoundLoaderContext();
			myLoaderContext.bufferTime = 10000;
			mySound.load(myReq, myLoaderContext);
			if (myChannel != null) {
				myChannel = null;
			}
			myChannel = mySound.play(myPosition);
			myPosition = 0;
			thisObject.button525.button5z.width = 1;
			if (myTransform != null) {
				myTransform = null;
			}
			myTransform = myChannel.soundTransform;
			myTransform.volume = volume;
			myChannel.soundTransform = myTransform;
			myChannel.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler);
			thisObject.addEventListener(Event.ENTER_FRAME, playInfoTime);
			
			if (myWave != null) {
				myWave.removeListener = true;
				myWave = null;
			}
			if (myLrc != null) {
				myLrc.removeListener = true;
				myLrc = null;
			}
			myWave = new GlllSoundWave(waveTarget);
			myLrc = new GlllLrc(myMap.get("lrcList")[num], Lyricsitems, myMap.get("typeList")[num], myMap.get("fontList")[num], myTip, lrcButton);
			function soundCompleteHandler(e:Event):void {
				e.currentTarget.removeEventListener(Event.SOUND_COMPLETE, soundCompleteHandler);
				thisNum == Number(songTotal - 1) ? thisNum = 0 : thisNum++;
				removeListener();
				myPosition = 0;
				soundPlay(myMap, thisNum, waveTarget, thisObject, myTip, lrcButton, Lyricsitems, target);
				MovieClip(target.getChildByName("playing")).musicTitle.htmlText = "<b><u>" + MovieClip(target.getChildByName("list" + thisNum.toString())).musicTitle.text + "</u></b>";
				MovieClip(target.getChildByName("playing")).musicTitle.textColor = "0xCC0000";
				MovieClip(target.getChildByName("playing")).musicTitle.backgroundColor = "0xFFFFFF";
				MovieClip(target.getChildByName("playing")).x = MovieClip(target.getChildByName("list" + thisNum.toString())).x;
				MovieClip(target.getChildByName("playing")).y = MovieClip(target.getChildByName("list" + thisNum.toString())).y;
				MovieClip(target.getChildByName("playing")).visible = true;
			}
			
			thisObject.button1.gotoAndStop(1);
			thisObject.button2.gotoAndStop(1);
		}

		public static function removeListener():void {
			myObject.removeEventListener(Event.ENTER_FRAME, playInfoTime);
		}

		public static function playInfoTime(event:Event):void {
			if (String(map.get("titleList")[thisNum]).length > 12) {
				playTitle = String(map.get("titleList")[thisNum]).substr(0, 9) + "...";
			}
					else {
				playTitle = String(map.get("titleList")[thisNum]);
			}
			myObject.button525.button5z.width = Number(mySound.bytesLoaded) / Number(mySound.bytesTotal) * 217;
			playInfo = GlllStringUtil.getUnitTransform(mySound.bytesLoaded) + "/" + GlllStringUtil.getUnitTransform(mySound.bytesTotal) + " ( <font color=\"#CC0000\">" + int(Number(mySound.bytesLoaded) / Number(mySound.bytesTotal) * 100) + "%</font> ) | -= <u> " + (thisNum + 1).toString() + ". " + playTitle + "</u> =-";
			
			myObject.button525.button5z1.width = Number(myChannel.position) / (Number(mySound.bytesTotal) * mySound.length / Number(mySound.bytesLoaded)) * 217;
			myObject.button525.button5a.x = Number(myChannel.position) / (Number(mySound.bytesTotal) * mySound.length / Number(mySound.bytesLoaded)) * 217;
			myObject.playInfo.htmlText = "* <font color=\"#CC0000\">GL`LL.</font> | " + GlllStringUtil.convertMillToTime(myChannel.position) + " / " + GlllStringUtil.convertMillToTime(Number(mySound.bytesTotal) * mySound.length / Number(mySound.bytesLoaded)) + "- " + playInfo;
		}

		/**
		 * 继续播放
		 */
		public static function playMusic():void {
			if(mySound != null && myPosition != 0) {
				removeListener();
				soundPlay(map, thisNum, myObject.zwave.z, myObject, ITip, IButton, myObject.Lyricsitems, listTarget);
				MovieClip(listTarget.getChildByName("playing")).musicTitle.htmlText = "<b><u>" + MovieClip(listTarget.getChildByName("list" + thisNum.toString())).musicTitle.text + "</u></b>";
				MovieClip(listTarget.getChildByName("playing")).musicTitle.textColor = "0xCC0000";
				MovieClip(listTarget.getChildByName("playing")).musicTitle.backgroundColor = "0xFFFFFF";
				MovieClip(listTarget.getChildByName("playing")).x = MovieClip(listTarget.getChildByName("list" + thisNum.toString())).x;
				MovieClip(listTarget.getChildByName("playing")).y = MovieClip(listTarget.getChildByName("list" + thisNum.toString())).y;
				MovieClip(listTarget.getChildByName("playing")).visible = true;
			}
		}

		/**
		 * 根据时间继续播放
		 */
		public static function playMusicTime(time:Number):void {
			if(mySound != null && myPosition != 0) {
				myPosition = time;
				removeListener();
				soundPlay(map, thisNum, myObject.zwave.z, myObject, ITip, IButton, myObject.Lyricsitems, listTarget);
				MovieClip(listTarget.getChildByName("playing")).musicTitle.htmlText = "<b><u>" + MovieClip(listTarget.getChildByName("list" + thisNum.toString())).musicTitle.text + "</u></b>";
				MovieClip(listTarget.getChildByName("playing")).musicTitle.textColor = "0xCC0000";
				MovieClip(listTarget.getChildByName("playing")).musicTitle.backgroundColor = "0xFFFFFF";
				MovieClip(listTarget.getChildByName("playing")).x = MovieClip(listTarget.getChildByName("list" + thisNum.toString())).x;
				MovieClip(listTarget.getChildByName("playing")).y = MovieClip(listTarget.getChildByName("list" + thisNum.toString())).y;
				MovieClip(listTarget.getChildByName("playing")).visible = true;
			}
		}

		/**
		 * 改变音量
		 */
		public static function setVolume(num:Number):void {
			if(mySound != null) {
				volume = num;
				myTransform.volume = volume;
				myChannel.soundTransform = myTransform;
			}
		}

		/**
		 * 暂停播放
		 */
		public static function stopMusic():void {
			if(mySound != null) {
				myPosition = myChannel.position;
				myChannel.stop();
			}
		}

		/**
		 * 停止播放
		 */
		public static function closeMusic():void {
			if(mySound != null) {
				myPosition = 0;
				myChannel.stop();
			}
		}

		/**
		 * 播放下一首
		 */
		public static function playNextMusic():void {
			if(mySound != null) {
				removeListener();
				thisNum == Number(songTotal - 1) ? thisNum = 0 : thisNum++;
				myPosition = 0;
				soundPlay(map, thisNum, myObject.zwave.z, myObject, ITip, IButton, myObject.Lyricsitems, listTarget);
				MovieClip(listTarget.getChildByName("playing")).musicTitle.htmlText = "<b><u>" + MovieClip(listTarget.getChildByName("list" + thisNum.toString())).musicTitle.text + "</u></b>";
				MovieClip(listTarget.getChildByName("playing")).musicTitle.textColor = "0xCC0000";
				MovieClip(listTarget.getChildByName("playing")).musicTitle.backgroundColor = "0xFFFFFF";
				MovieClip(listTarget.getChildByName("playing")).x = MovieClip(listTarget.getChildByName("list" + thisNum.toString())).x;
				MovieClip(listTarget.getChildByName("playing")).y = MovieClip(listTarget.getChildByName("list" + thisNum.toString())).y;
				MovieClip(listTarget.getChildByName("playing")).visible = true;
			}
		}

		/**
		 * 播放前一首
		 */
		public static function playPreviousMusic():void {
			if(mySound != null) {
				removeListener();
				thisNum == 0 ? thisNum = Number(songTotal - 1) : thisNum--;
				myPosition = 0;
				soundPlay(map, thisNum, myObject.zwave.z, myObject, ITip, IButton, myObject.Lyricsitems, listTarget);
				MovieClip(listTarget.getChildByName("playing")).musicTitle.htmlText = "<b><u>" + MovieClip(listTarget.getChildByName("list" + thisNum.toString())).musicTitle.text + "</u></b>";
				MovieClip(listTarget.getChildByName("playing")).musicTitle.textColor = "0xCC0000";
				MovieClip(listTarget.getChildByName("playing")).musicTitle.backgroundColor = "0xFFFFFF";
				MovieClip(listTarget.getChildByName("playing")).x = MovieClip(listTarget.getChildByName("list" + thisNum.toString())).x;
				MovieClip(listTarget.getChildByName("playing")).y = MovieClip(listTarget.getChildByName("list" + thisNum.toString())).y;
				MovieClip(listTarget.getChildByName("playing")).visible = true;
			}
		}

		/**
		 * 关闭音量
		 */
		public static function closeVolume():void {
			if(mySound != null && myTransform.volume != 0) {
				volume = myTransform.volume;
				myTransform.volume = 0;
				myChannel.soundTransform = myTransform;
			}
		}

		/**
		 * 打开音量
		 */
		public static function openVolume():void {
			if(mySound != null) {
				myTransform.volume = volume;
				myChannel.soundTransform = myTransform;
			}
		}

		/**
		 * 改变波谱类暂未实现
		 * 以后会加入SoundMixer.computeSpectrum()方法的波形
		 */
		public static function changeMusicWave():void {
			trace("changeMusicWave");
		}
	}
}

⌨️ 快捷键说明

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