再学AS3(六)——音乐播放器8:组装
难点:把前面的各段代码进行整合
1、新建FLASH CS3文档,保存名为“音乐播放器”,保存在存有音乐的文件夹内。设置文档大小:252×114像素,帧频:24fps。
2、第一层名为“播放器背景”,在该层画一个播放器背景。
3、新建图层,名为“播放进度框”,画一个无边框的圆角矩形,边角半径为8,宽202高6,填充颜色为#006600,使其垂直水平于舞台。
4、新建图层,名为“播放进度背景”,画一个无边框的圆角矩形,边角半径为8,宽200高4,从上到下填充#99CC00到#55802B渐变色,使其垂直水平于舞台。
5、新建图层,名为“播放进度条”,画一个无边框的圆角矩形,边角半径为0,宽202高6,从上到下填充#00CCFF到#0066FF渐变色,使其垂直水平于舞台,转换为名为“播放进度条”的影片剪辑。在场景中的实例名为“bfjdt_mc”。
6、新建图层,名为“播放进度条遮罩”,把“播放进度背景”图层上帧复制并粘贴到“播放进度条遮罩”图层上,右键选择“遮罩层”。
7、新建图层,名为“进度控制”,画一个无边框的圆角矩形,边角半径为0,宽200高6,填充颜色任意,使其垂直水平于舞台,转换为名为“进度控制”的按钮元件,并将“弹起”帧上的图形拖到“点击”帧上。在场景中的实例名为“jdcz_btn”。
8、新建图层,名为“按钮”,放七个按钮(菜单、退出、停止、上一首、下一首、播放、暂停),实例名分别为“cd_btn”、“quit_btn”、“tz_btn”、“sys_btn”、“xys_btn”、“bf_btn”“zt_btn”。
(1)画一个三角形,转换为按钮元件,在“指针经过”的帧上打上文字“MENU”(即“菜单”),把该按钮放在场景中的左上角,其实例名为“cd_btn
”。
(2)画一个三角形,转换为按钮元件,在“指针经过”的帧上打上文字“QUIT”(即“退出”),把该按钮放在场景中的右上角,其实例名
为“quit_btn”。
(3)画一个矩形,再在中心画一个停止的标志形状,转换为按钮元件,把该按钮放在场景中的左下角,其实例名为“tz_btn”。
(4)画一个矩形,再在中心画一个上一首的标志形状,转换为按钮元件,把该按钮放在场景中的左下角,前一个按钮后,其实例名为“sys_btn”。
(5)画一个矩形,再在中心画一个下一首的标志形状,转换为按钮元件,把该按钮放在场景中的左下角,前一个按钮后,其实例名为“xys_btn”。
(6)画一个圆形,再在中心画一个暂停的标志形状,转换为按钮元件,把该按钮放在场景中的中下方,其实例名为“zt_btn”。
(7)画一个圆形,再在中心画一个播放的标志形状,转换为按钮元件,把该按钮放在场景中的中下方,与前一个按钮大小坐标相同,其实例名为“bf_btn”。
以上按钮在场景中的分布如下图所示:
9、新建图层,名为“音量框”,画一个无边框的矩形,边角半径为0,宽67高6,填充颜色为#006600,X:159、Y:81。
10、新建图层,名为“音量背景”,画一个无边框的矩形,边角半径为0,宽65高4,从上到下填充#99CC00到#55802B渐变色,X:160、Y:82。
11、新建图层,名为“音量条”,画一个无边框的圆角矩形,边角半径为0,宽65高4,从上到下填充#00CCFF到#0066FF渐变色,坐标X:160、Y:82。转换为名为“音量条”的影片剪辑(注册点在左上角)。在场景中的实例名为“ylt_mc”。
12、新建图层,名为“音量控制”,画一个无边框的矩形,边角半径为0,宽65高4,填充颜色任意,坐标X:160、Y:82。转换为名为“音量控制”的按钮元件,并将“弹起”帧上的图形拖到“点击”帧上。在场景中的实例名为“ylcz_btn”。
13、新建图层,名为“歌名”,拉一个动态文本,宋体、12、黑色,在场景中的实例名为“gm_txt”。
14、创建两个矩形按钮,一个是“添加本地歌曲”,另一个是“显示歌曲列表”,并且分别打上文字“添加本地歌曲”和“显示歌曲列表”;新建影片剪辑,名为“cd_mc”,在该剪辑中画一个矩形作为背景,并把刚才制作的两个按钮拖进来,其实例名分别为“tjgq_btn”、“lbxs_btn”;从库中把名为“cd_mc”的影片剪辑拖入到场景合适的位置上,实例名为“cd_mc”。
15、新建图层,名为“歌曲列表背景”,把第一层的播放器背景复制到该图层上,并转换为影片剪辑,在场景中的实例名为“gqlbbj_mc”;双击该影片剪辑,在其中新建图层名为“收起按钮”,画一个三角形,转换为按钮元件,在“指针经过”的帧上打上文字“RETRACT”(即“收起”),把该按钮放在播放器背景的中底部,其实例名为“sqlb_btn”。
16、新建图层,名为“AS”,在帧上写如下代码:
stage.scaleMode=StageScaleMode.NO_SCALE;
var _sound:Sound;
var _channel:SoundChannel=new SoundChannel();
var yl:Number=1;
var yinliang:SoundTransform;
var dzarr:Array=new Array();
var dizhi:URLRequest=new URLRequest();
var bxzr:Sprite=new Sprite();
addChildAt(bxzr,1);
var bx:Sprite=new Sprite();
bxzr.addChild(bx);
var _arr:ByteArray = new ByteArray();
var n:Number=0;
var loaded:int;
var total:int;
var _length:int;
var position:int;
var hcbfb:Number;
var bfjdbfb:Number;
var _playing:Boolean=true;
var _stoping:Boolean=false;
var file:FileReferenceList;
var p:uint=0;
var m2:int;
bfjdt_mc.visible=false;
gqlbbj_mc.visible=false;
cd_mc.visible=false;
var gqlb_mc:Sprite=new Sprite();
addChild(gqlb_mc);
gqlb_mc.visible=false;
//弹出菜单
cd_btn.addEventListener(MouseEvent.CLICK,xscd);
function xscd(e:MouseEvent):void {
cd_mc.visible=true;
}
//收起歌曲列表
gqlbbj_mc.sqlb_btn.addEventListener(MouseEvent.CLICK,sqlb);
function sqlb(e:MouseEvent):void {
gqlbbj_mc.visible=false;
gqlb_mc.visible=false;
}
//菜单的可见与不可见
cd_mc.addEventListener(MouseEvent.MOUSE_OVER,jgcd);
function jgcd(e:MouseEvent):void {
cd_mc.visible=true;
}
cd_mc.addEventListener(MouseEvent.MOUSE_OUT,yccd);
function yccd(e:MouseEvent):void {
cd_mc.visible=false;
}
//浏览文件按钮
cd_mc.tjgq_btn.addEventListener(MouseEvent.CLICK,lldj);
function lldj(e:MouseEvent):void {
cd_mc.visible=false;
file = new FileReferenceList();
file.addEventListener(Event.SELECT,select);
file.browse([new FileFilter("mp3文件","*.mp3")]);
}
function select(e:Event):void {
zt_btn.visible=true;
bf_btn.visible=false;
removeChild(gqlb_mc);
gqlb_mc=new Sprite();
addChild(gqlb_mc);
gqlbbj_mc.visible=false;
gqlb_mc.visible=false;
p=0;
_channel.stop();
dzarr.splice(0,dzarr.length);
dzarr=new Array();
var f:FileReference;
for (var m:int = 0; m < e.target.fileList.length; m++) {
f = FileReference(e.target.fileList[m]);
dzarr.push(f.name);
}
if (dzarr.length>10) {
dzarr.splice(10);
}
dizhi=new URLRequest(dzarr[0]);
_sound=new Sound();
_sound.load(dizhi);
_channel=_sound.play();
for (m2 = 0; m2 < dzarr.length; m2++) {
var txt:TextField=new TextField();
txt.width=112;
txt.height=18;
txt.selectable=false;
gqlb_mc.addChildAt(txt,m2);
txt.x=(m2%2)*120+10;
txt.y=int(m2/2)*20+4;
txt.text=(m2+1)+"."+dzarr[m2].replace(".mp3","");
txt.addEventListener(MouseEvent.CLICK,xzgq);
txt.addEventListener(MouseEvent.MOUSE_OVER,jggqlbx);
txt.addEventListener(MouseEvent.MOUSE_OUT,ycgqlbx);
txt.name="txt"+m2;
}
//添加监听事件
addEventListener(Event.ENTER_FRAME,yx);
cd_mc.lbxs_btn.addEventListener(MouseEvent.CLICK,xsgqlb);
}
//不断更新
function yx(event:Event):void {
gm_txt.text=dzarr[p].slice(0,-4);
loaded=_sound.bytesLoaded;
total=_sound.bytesTotal;
_length=_sound.length;
position=_channel.position;
if (_stoping) {
position=0;
} else {
position=_channel.position;
}
if (total > 0) {
bfjdt_mc.visible=true;
hcbfb=loaded / total;
_length/=hcbfb;
bfjdbfb=position / _length;
bfjdt_mc.scaleX=bfjdbfb;
//频谱——跳动柱形
bx.graphics.clear();
SoundMixer.computeSpectrum(_arr,true,0);//将当前声音输出为ByteArray
for (var i=0; i <200; i=i+5) {
n = _arr.readFloat()*20;//把数据流读取成浮点数并扩大其值
bx.graphics.lineStyle(3,0xFFFFFF,0.4,true,"noSacle","none");
bx.graphics.moveTo(27+i,50);
bx.graphics.lineTo(27+i,50-n);
}
}
//音量
yl=ylt_mc.scaleX;
yinliang= _channel.soundTransform;
yinliang.volume = yl;
_channel.soundTransform. = yinliang;
//添加循环播放监听事件
_channel.addEventListener(Event.SOUND_COMPLETE,xhbf);
//添加与删除下一首上一首监听事件
if (p==0) {
sys_btn.removeEventListener(MouseEvent.CLICK,sys);
} else {
sys_btn.addEventListener(MouseEvent.CLICK,sys);
}
if (p==dzarr.length-1) {
xys_btn.removeEventListener(MouseEvent.CLICK,xys);
} else {
xys_btn.addEventListener(MouseEvent.CLICK,xys);
}
}
//显示歌曲列表
function xsgqlb(e:MouseEvent):void {
cd_mc.visible=false;
gqlbbj_mc.visible=true;
gqlb_mc.visible=true;
}
//鼠标经过歌曲列表项
function jggqlbx(e:MouseEvent):void {
e.target.textColor=0x006600;
}
//鼠标移出歌曲列表项
function ycgqlbx(e:MouseEvent):void {
e.target.textColor=0x000000;
}
//鼠标点击列表项选择歌曲
function xzgq(e:MouseEvent):void {
zt_btn.visible=true;
bf_btn.visible=false;
gqlbbj_mc.visible=false;
p=int(e.target.name.substr(3));
gqlb_mc.visible=false;
_channel.stop();
dizhi=new URLRequest(dzarr[p]);
_sound=new Sound();
_sound.load(dizhi);
_channel=_sound.play(0);
}
//播放进度控制
jdcz_btn.addEventListener(MouseEvent.CLICK,jdcz);
function jdcz(e:MouseEvent):void {
_stoping=false;
_playing=true;
zt_btn.visible=true;
bf_btn.visible=false;
_channel.stop();
bfjdbfb=(mouseX-26)/200;
position =_length*bfjdbfb;
_channel=_sound.play(position);
}
//音量大小控制
ylcz_btn.addEventListener(MouseEvent.CLICK,ylcz);
function ylcz(e:MouseEvent):void {
ylt_mc.scaleX=(mouseX-160)/65;
}
//暂停播放与停止音乐
zt_btn.visible=false;
bf_btn.visible=true;
zt_btn.addEventListener(MouseEvent.CLICK,zt);
function zt(e:MouseEvent):void {
_playing=false;
zt_btn.visible=false;
bf_btn.visible=true;
position=_channel.position;
_channel.stop();
}
bf_btn.addEventListener(MouseEvent.CLICK,bf);
function bf(e:MouseEvent):void {
_stoping=false;
_playing=true;
_channel.stop();
zt_btn.visible=true;
bf_btn.visible=false;
_channel=_sound.play(position);
}
tz_btn.addEventListener(MouseEvent.CLICK,tz);
function tz(e:MouseEvent):void {
_stoping=true;
_playing=false;
zt_btn.visible=false;
bf_btn.visible=true;
_channel.stop();
}
//上一首下一首
function sys(event:Event):void {
zt_btn.visible=true;
bf_btn.visible=false;
xys_btn.addEventListener(MouseEvent.CLICK,xys);
_channel.stop();
if (p>0) {
p--;
if (p==0) {
p=0;
sys_btn.removeEventListener(MouseEvent.CLICK,sys);
}
}
dizhi=new URLRequest(dzarr[p]);
_sound=new Sound();
_sound.load(dizhi);
_channel=_sound.play(0);
}
function xys(event:Event):void {
zt_btn.visible=true;
bf_btn.visible=false;
sys_btn.addEventListener(MouseEvent.CLICK,sys);
_channel.stop();
if (p<dzarr.length-1) {
p++;
if (p==dzarr.length-1) {
p=dzarr.length-1;
xys_btn.removeEventListener(MouseEvent.CLICK,xys);
}
}
dizhi=new URLRequest(dzarr[p]);
_sound=new Sound();
_sound.load(dizhi);
_channel=_sound.play(0);
}
//循环播放
function xhbf(event:Event):void {
p++;
if (p==dzarr.length) {
p=0;
}
dizhi=new URLRequest(dzarr[p]);
_sound=new Sound();
_sound.load(dizhi);
_channel=_sound.play(0);
}
//退出播放器
quit_btn.addEventListener(MouseEvent.CLICK,gb);
function gb(e:MouseEvent):void {
fscommand("quit");
}
17、用“FlashPacker”(下载地址:http://www.zineage.com/products/)将该发布的SWF进行打包成EXE文件(EXE文件与音乐放在一起),进行如下图所示的有关设置:
*********初学FLASH的人,都想制作一个MP3播放器。到现在为止,你的梦想成真了。本教程难免有很多出入,请大家斧正!