//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