//var ArrS:Array=["[]两种悲剧 完整版 许嵩 未知.mp3","星座书上.mp3"];//音乐源; var ArrS:Array=["周杰伦_晴天.mp3"];//音乐源; var sound:Sound;//申请一个声音; var index:int=0;//动态改变的声音地址; var channel:SoundChannel=new SoundChannel();//申请一个声音通道; var position:Number=0;//随时保存声音播放的位置变量 var trans:SoundTransform;//声音通道里改变声音大小的对象;// var numT:int; var getName:String; //---------加载index歌曲----------------------、、 function jiazai(){ if(index>=ArrS.length){ index=0; } if(index<0){ index=ArrS.length-1; }//------------判断限定index---------------- sound=new Sound();//实例化声音(); trans=new SoundTransform(1,0);//实例化声音大小1代表声音大小,0代表左右声道平衡; sound.load(new URLRequest(ArrS[index]));//加载声音; sound.addEventListener(Event.COMPLETE,compeleteHd);//加载完成要做的事情// sound.addEventListener(ProgressEvent.PROGRESS,progressHd);//加载正在进行要做的事情// sound.addEventListener(Event.ID3,id3Hd); //获取歌曲名称; sound.addEventListener(IOErrorEvent.IO_ERROR,errorHd); } function compeleteHd(event:Event){ channel=sound.play(0,0,trans); //加载完成后开始播放// } function progressHd(event:ProgressEvent){ var zdx=sound.bytesTotal; var yxz=sound.bytesLoaded; //trace(yxz/zdx*100+"%");//正在进行trace加载了多少; } function id3Hd(event:Event){ //song_name.text=sound.id3.songName; getName=ArrS[index].substring(0,ArrS[index].length-4);//截取到除.mp3的字符,保存在getName变量里,getName在最上面申请了变量,以便在moveTHd里能访问;//再这里面申请是不能被别的{}以外的函数访问的 var myT:Timer=new Timer(800);//申请一个timer每隔800毫秒 myT.start(); myT.addEventListener(TimerEvent.TIMER,moveTHd);//每隔800毫秒执行moveTH函数; } function moveTHd(event:TimerEvent){ if(numT>=getName.length){ numT=0; } song_name.text=getName.substring(numT,getName.length)+" "+getName.substring(0,getName.length) numT++;//通过numT的不同song_name的字符也就不同了, } function errorHd(event:IOErrorEvent){ song_name.htmlText="文件不存在"; } play_btn.removeEventListener(MouseEvent.CLICK,playHd);//在播放声音之前先remove 播放按纽; jiazai();//初始化播放; stop_btn.addEventListener(MouseEvent.CLICK,stopHd);//停止按纽, play_btn.addEventListener(MouseEvent.CLICK,playHd);//播放按纽 pause_btn.addEventListener(MouseEvent.CLICK,pauseHd);//暂停按纽; pre_btn.addEventListener(MouseEvent.CLICK,preHd);//上一首按纽 next_btn.addEventListener(MouseEvent.CLICK,nextHd);//下一首按纽 mark_mc.addEventListener(MouseEvent.MOUSE_DOWN,dragHd);//按下鼠标滑块开始拖动 mark_mc.addEventListener(MouseEvent.MOUSE_UP,stopDragHd);//松开停止拖动 addEventListener(Event.ENTER_FRAME,enterHd);//时时刻改变滑块的位置; click_mc.addEventListener(MouseEvent.CLICK,changeMarkX);//单击改变滑块的位置; //--播放事件-----、、、 function playHd(event:MouseEvent){ play_btn.removeEventListener(MouseEvent.CLICK,playHd);//防止播放以后再播放。。也就是remove play_btn事件; pause_btn.addEventListener(MouseEvent.CLICK,pauseHd);//按下以后就可以使用暂停按纽; stop_btn.addEventListener(MouseEvent.CLICK,stopHd);//按下以后就可以使用停止按纽; channel=sound.play(position); //从暂停时保存的歌曲位置position开始播放 } //--暂停事件----- function pauseHd(event:MouseEvent){ stop_btn.addEventListener(MouseEvent.CLICK,stopHd); pause_btn.removeEventListener(MouseEvent.CLICK,pauseHd); play_btn.addEventListener(MouseEvent.CLICK,playHd); position=channel.position;//保存当前播放位置,以便play时调用; channel.stop();//声音停止 } //--停止事件----- function stopHd(event:MouseEvent){ stop_btn.removeEventListener(MouseEvent.CLICK,stopHd); play_btn.addEventListener(MouseEvent.CLICK,playHd); channel.stop();//先停止这一首歌曲声音//(为next_btn调用做准备) channel=sound.play(0);//并且播放到0;并重新注册当前歌曲声音通道; channel.stop(); //停止当前声音通道; position=0;//让随时保存声音播放的位置变量为0;(以便play调用时不出错) } //--上一首 function preHd(event:MouseEvent){ stopHd(new MouseEvent("")); index--; jiazai(); stop_btn.addEventListener(MouseEvent.CLICK,stopHd); } //--下一首 function nextHd(event:MouseEvent){ stopHd(new MouseEvent(""));//一单击后就执行一次停止事件; 因为每一个函数如果本身有参数的话(MouseEvent.CLICK),在实例化时stopHd()里面也要有参数,但是我们又不要事件,那就让里面的参数()为空(new MouseEvent("")) index++; jiazai(); stop_btn.addEventListener(MouseEvent.CLICK,stopHd);//单击下一首后可以使用stop按纽 } //----拖动时的事件-------------- function dragHd(event:MouseEvent){ removeEventListener(Event.ENTER_FRAME,enterHd);//停止enterFrame事件调用 mark_mc.startDrag(false,new Rectangle(line_mc.x,line_mc.y-mark_mc.height/4,line_mc.width,0))//限定拖动的范围; }; function stopDragHd(event:MouseEvent){ channel.stop();////先停止这一首歌曲声音 channel=sound.play(0);//并且播放到0;并重新注册当前歌曲声音通道; channel.stop();//停止当前声音通道; addEventListener(Event.ENTER_FRAME,enterHd);//开始enterFrame事件调用 var markW=mark_mc.x-line_mc.x; var cdb= markW/line_mc.width;//计算出mark所占的长度比 channel=sound.play(cdb*sound.length);//注册到声音通道,播放到长度比*声音总长度; mark_mc.stopDrag(); } function enterHd(event:Event){ var sjb= channel.position/sound.length; mark_mc.x=sjb*line_mc.width+line_mc.x;//mark_mc,x位置等于当前播放的时间比*总长度(line_mc.width)+本来的X:line_mc.x; channel.addEventListener(Event.SOUND_COMPLETE,sound_completeHd);//时时监听歌曲有没有播放完 var fen=String(100+channel.position/(1000*60)); var miao=String(100+(channel.position/1000)%60) var zfen=String(100+sound.length/(1000*60)); var zmiao=String(100+(sound.length/1000)%60); //fen.substr(1,2); time_txt.text=fen.substr(1,2)+":"+miao.substr(1,2); zsj_txt.text=zfen.substr(1,2)+":"+zmiao.substr(1,2); drawWave(); } function sound_completeHd(event:Event){ trace(1233); nextHd(new MouseEvent(""));//一首歌播完开始下一首 } function changeMarkX(event:MouseEvent){ mark_mc.x=event.stageX; //单击到哪,mark_mc.x到哪; stopDragHd(new MouseEvent(""));//再次执行一下拖动停止时的函数; } //-------------------------volume声间------------------ volume_mc.gotoAndStop(5);//默认亮到第5个小灯; volume_mc.mouseEnabled=false;//小灯不接受鼠标事件,这样的话可以让在它下面的S1‘S2.....可以接受鼠标事件; S5Hd(new MouseEvent("")); S1.addEventListener(MouseEvent.CLICK,S1Hd); function S1Hd(event:MouseEvent){ volume_mc.gotoAndStop(1);//亮到第一个小灯; trans.volume=0.1;//把声音大小调到0.1; channel.soundTransform=trans;//把声音大小的值传给channel; } S2.addEventListener(MouseEvent.CLICK,S2Hd); function S2Hd(event:MouseEvent){ volume_mc.gotoAndStop(1); trans.volume=0.2; channel.soundTransform=trans; } S3.addEventListener(MouseEvent.CLICK,S3Hd); function S3Hd(event:MouseEvent){ volume_mc.gotoAndStop(2); trans.volume=0.3; channel.soundTransform=trans; } S4.addEventListener(MouseEvent.CLICK,S4Hd); function S4Hd(event:MouseEvent){ volume_mc.gotoAndStop(3); trans.volume=0.4; channel.soundTransform=trans; } S5.addEventListener(MouseEvent.CLICK,S5Hd); function S5Hd(event:MouseEvent){ volume_mc.gotoAndStop(4); trans.volume=0.5; channel.soundTransform=trans; } S6.addEventListener(MouseEvent.CLICK,S6Hd); function S6Hd(event:MouseEvent){ volume_mc.gotoAndStop(5); trans.volume=0.6; channel.soundTransform=trans; } S7.addEventListener(MouseEvent.CLICK,S7Hd); function S7Hd(event:MouseEvent){ volume_mc.gotoAndStop(6); trans.volume=0.7; channel.soundTransform=trans; } S8.addEventListener(MouseEvent.CLICK,S8Hd); function S8Hd(event:MouseEvent){ volume_mc.gotoAndStop(7); trans.volume=0.8; channel.soundTransform=trans; } S9.addEventListener(MouseEvent.CLICK,S9Hd); function S9Hd(event:MouseEvent){ volume_mc.gotoAndStop(8); trans.volume=0.9; channel.soundTransform=trans; } bigV_mc.addEventListener(MouseEvent.CLICK,StopAll); var tempS:Number; function StopAll(event:MouseEvent){ if(bigV_mc.currentFrame==1){//如是当前帧为1则值行下在的函数; tempS=channel.soundTransform.volume;//保存关闭声音前的音量大小; bigV_mc.gotoAndStop(2);//转到第二帧, trans.volume=0;//把声音大小设为0 channel.soundTransform=trans;//把声音大小传入channel }else{//如是当前帧为2则值行下在的函数(只有1,2);所以用else bigV_mc.gotoAndStop(1); trans.volume=tempS;//再次单击时,把声音大小设为上次单击保存的值; channel.soundTransform=trans;//把声音大小再传入channel } } //stage.scaleMode="noscale"; //stage.align="T";//StageAlign.TOP; max_btn.addEventListener(MouseEvent.CLICK,maxHd); function maxHd(event:MouseEvent){ fscommand("fullscreen", "true"); } min_btn.addEventListener(MouseEvent.CLICK,minHd); function minHd(event:MouseEvent){ fscommand("fullscreen", "false"); } quit_btn.addEventListener(MouseEvent.CLICK,quitHd); function quitHd(event:MouseEvent){ fscommand("quit" ); } ////图像---------------波动------; var wave:Sprite=new Sprite();//申请一个画波浪的容器; addChildAt(wave,this.numChildren-1)//把它放在最上面显示; wave.y=198;//指定容器的位置; wave.x=210; ///---------------------画波浪的函数--------------------------、、、、、 function drawWave(){ var hight:uint=40;//波浪的高度; var channelNum:uint=256;//左声音道 var bytes:ByteArray=new ByteArray();//申请一个放随机的声音快照数组 SoundMixer.computeSpectrum(bytes,true,7);//把声音快照放在数组里;soundMixer//声音混合器,computeSpectrum//电脑声音波形的快照,用bytes 存取快照数据,true是频谱而不是原始声音波形,0,代表要不要放大 var g:Graphics=this.wave.graphics;//把this.wave.graphics减写为g; g.clear();//清除上次绘制的内容; g.lineStyle(1,0xff0000,0);//设置线样式,1,代表精细,0xff000代表颜色,0,代表透明度,取值为0到1,0代表完全透明 g.beginFill(0x00ffff,0.9);//设置填充的颜色; g.moveTo(0,-30);//从X为0,y为30开始绘制//!!注意这的坐标是相对于它父亲wave的原点,不是舞台原点; var n:Number=0; //申请一个保存数据的变量 ///用for 循环开始一次绘制--- for(var i:int=0;i