1、FLASH CS4 制作音频播放器FLASH CS4 制作音频播放器在制作音频播放器时,可以通过外部XML文件载入音乐的名称和地址。然后再将名称添加到动态生成的组件中,并为其添加事件,实现鼠标单击播放。另外,还可以通过自定义的各种按钮控制音乐的播放、停止、暂停以及播放上一首和播放下一首等,如图14-12所示。图14-12 音频播放器设计过程:1设计界面与列表(1)新建main.fla文件,设置影片背景颜色为“黑色”,并导入播放器背景的素材图像,如图14-13所示。图14-13 导入背景图像(2)制作各种播放器的按钮,以及音量滑块和播放进度条,如图14-14所示。图14-14 制作各种按钮和进度
2、条音频播放器的按钮主要包括跳转上一首歌(lastbtn)、播放(playbtn)、跳转下一首歌(nextbtn)、停止(stopbtn)、暂停(nextbtn)、静音(mutebtn)、开启声音(unmutebtn)、打开/关闭播放列表(listbtn)、关闭播放列表(closelist)等按钮。(3)新建“playlist”元件,根据素材图像制作播放列表的背景,如图14-15所示。图14-15 制作播放列表背景(4)用记事本新建xml文件,并编写歌曲列表。其代码如下: 2加载xml列表(1)新建script.as文件,将其保存在影片目录下的action文件夹中。在影片的【属性检查器】中设置【
3、类】为action.script,如图14-16所示。图14-16 设置外部类(2)在script.as中创建名为action的包,并导入各种外部类。其代码如下:package action import flash.display.Sprite; /导入显示基类 import flash.display.MovieClip; /导入影片剪辑类 import flash.display.Bitmap; /导入位图类 import flash.display.BitmapData; /导入位图数据类 import flash.events.Event; /导入普通事件类 import flash
4、.events.MouseEvent; /导入鼠标事件类 import .URLLoader; /导入加载对象类 import .URLRequest; /导入加载对象请求类 import flash.display.SimpleButton; /导入自定义按钮类 import flash.text.TextField; /导入文本域类 import flash.text.TextFormat; /导入文本格式类 import flash.media.Sound; /导入声音类 import flash.media.SoundChannel; /导入声音声道类 import flash.med
5、ia.SoundLoaderContext; /导入声音加载环境类 import flash.media.SoundTransform; /导入声音转换类 import flash.media.SoundMixer; /导入声音混成器类 import flash.media.ID3Info; /导入音乐附加信息类 import flash.utils.ByteArray; /导入二进制数组类 import flash.filters.GlowFilter; /导入发光滤镜类 import flash.display.Shape; /导入图形元件类(3)自定义script类,并创建歌曲列表的相关
6、全局变量,然后自定义loadXMLList()函数,添加加载XML的事件。其代码如下:public class script extends Sprite public var musicListURL:String=xml/list.xml;/实例化歌曲列表XML的路径 public var musicListRequest:URLRequest=new URLRequest(musicListURL); /实例化加载歌曲列表的需求 public var musicListLoader:URLLoader=new URLLoader(musicListRequest); /实例化歌曲列表的X
7、ML public var symbolArray:Array=new Array ();/实例化歌曲音轨的数组 public var nameArray:Array=new Array (); /实例化歌曲名称数组 public var urlArray:Array=new Array (); /实例化歌曲路径数组 public var currentMusic:int=2; /定义当前应播放的歌曲编号public function loadXMLList():void /自定义loadXMLList()函数,加载XML musicListLoader.addEventListener(Ev
8、ent.COMPLETE,listLoadComplete);/监听加载完成事件 (4)自定义listLoadComplete()函数,将XML中的数据追加到相应的数组中。其代码如下所示:public function listLoadComplete(event:Event):void var list:XML=XML(event.target.data); var i:int=0; for each (var listElement:XML in list.elements() symbolArray.push(String(listElement.symbol); nameArray.p
9、ush(String(listElement.name); urlArray.push(String(listElement.url); loadListText(); loadSound();(5)根据数组和当前应播放的歌曲编号,自定义loadSound()函数,加载声音。其代码如下:public function loadSound():void musicURL=urlArraycurrentMusic; musicRequest=new URLRequest(musicURL); music=new Sound (); music.load(musicRequest,musicBuff
10、er); music.addEventListener(Event.ID3,outputID3);(6)自定义loadListText()函数,用于动态生成显示歌曲名称的组件,并通过其在数组中的索引号判断其在歌曲列表背景图像中的位置。其代码如下:public function loadListText():void if (nameArray.length!=0) /判断如果XML中数据不为空 for (var i:int=0; inameArray.length; i+) /开始循环 var listText:TextField=new TextField (); /实例化文本域 listT
11、ext.doubleClickEnabled=true; /设置文本域允许被双击 listText.maxChars=9; /设置文本域最大字符数 listText.height=18; listText.width=105; /设置文本域大小 listText.text=nameArrayi; /设置文本域中显示的文本 if (i=4&i=8&i=12&i16) listText.x=110; listText.y=-55+(i-12)*18; /根据歌曲的编号判断文本域位置 listText.addEventListener(MouseEvent.MOUSE_OVER,overList);
12、 listText.addEventListener(MouseEvent.MOUSE_OUT,outList); listText.addEventListener(MouseEvent.CLICK,choiceMusic); listText.addEventListener(MouseEvent.DOUBLE_CLICK,playMusic); /为文本域添加鼠标事件 listText.selectable=false; listTextArray.push(listText); /将文本域追加到数组中。 playList.addChild(listText); /设置文本域在播放列表背
13、景中显示 (7)自定义overList()、outList()、choiseMusic()以及playMusic()等函数,用于实现歌曲列表的相关鼠标事件。其代码如下:public function overList(event:MouseEvent):void /鼠标滑过歌曲列表的事件 if (event.target.background=false) event.target.background=true; event.target.backgroundColor=0x66FF00; /改变歌曲列表文本域的背景颜色public function outList(event:MouseE
14、vent):void /鼠标离开歌曲列表的事件 if (event.target.backgroundColor=0x66FF00) event.target.background=false; /取消歌曲列表文本域的背景颜色public function choiceMusic(event:MouseEvent):void /鼠标单击歌曲列表的事件 for (var i:int=0; ilistTextArray.length; i+) /用循环取消歌曲列表的背景颜色 listTextArrayi.background=false; event.target.background=true;
15、 event.target.backgroundColor=0xCCFF00; /改为新的背景颜色 currentMusic=listTextArray.indexOf(event.target);/根据当前音乐编号判断 loadSound();/加载声音 stage.addChild(musicInfo); stage.addChild(musicInfoShadow); /显示音乐的信息public function playMusic(event:MouseEvent):void /播放选中的音乐 if (onPause=false) /判断是否暂停状态 channel=music.pl
16、ay(); stage.addEventListener(Event.ENTER_FRAME,movePlayBlock);/进度条开始 else /处于暂停状态 channel=music.play(playPosition); /按照已有进度播放音乐 stage.addEventListener(Event.ENTER_FRAME,movePlayBlock); onPlay=true; onPause=false;/当前状态(8)自定义buttonsSet()函数,为各种按钮添加鼠标事件。其代码如下:public function buttonsSet():void playBtn.ad
17、dEventListener(MouseEvent.CLICK,playMusic);/播放按钮 lastBtn.addEventListener(MouseEvent.CLICK,lastMusic);/上一首歌按钮 nextBtn.addEventListener(MouseEvent.CLICK,nextMusic);/下一首歌按钮 closeList.addEventListener(MouseEvent.CLICK,showList);/关闭列表按钮 listBtn.addEventListener(MouseEvent.CLICK,showList);/开启列表按钮 pauseBt
18、n.addEventListener(MouseEvent.CLICK,pauseMusic);/暂停按钮 stopBtn.addEventListener(MouseEvent.CLICK,stopMusic);/停止按钮 muteBtn.addEventListener(MouseEvent.CLICK,muteMusic);/静音按钮 unmuteBtn.addEventListener(MouseEvent.CLICK,unmuteMusic);/开启声音按钮(9)自定义showList()、listDown()以及listUp()函数,根据列表的开关情况执行相应指令。其代码如下:pu
19、blic function showList(event:MouseEvent):void /自定义函数,用于显示/隐藏列表 if (playList.visible=true) /判断,如已显示 stage.addEventListener(Event.ENTER_FRAME,listDown);/执行隐藏列表的函数 else /否则 stage.addEventListener(Event.ENTER_FRAME,listUp);/执行显示列表的函数 public function listUp(event:Event):void /自定义函数,用于显示列表 playList.y-=11;
20、/列表弹出的速度 if (playList.y=200) /如果列表隐藏到200像素以下 playList.y=200;/将列表固定 playList.visible=false; /列表状态更改为隐藏 stage.removeEventListener(Event.ENTER_FRAME,listDown);/中止执行函数 (10)自定义movePlayBlock(),用于使音乐播放进度的滑块运动。其代码如下:public function movePlayBlock(event:Event):void /自定义函数,用于移动进度滑块 playPosition=channel.positio
21、n; /获取当前播放进度 playBlockMap.x=playPosition/music.length*500+25;/计算进度条移动的速度 if (playBlockMap.x520) /当播放完成时 stage.removeEventListener(Event.ENTER_FRAME,movePlayBlock);/停止进度条滑块移动 playBlockMap.x=25;/进度条滑块归零 playPosition=channel.position; /重新获取当前播放进度 onPlay=false;/当前状态为停止播放 (11)自定义muteMusic()和unmuteMusic()
22、函数,用于实现静音和打开音量。其代码如下:public function muteMusic(event:MouseEvent):void /自定义函数,用于响应静音按钮 var musicTransform:SoundTransform=new SoundTransform ();/重新实例化声音转换对象 muteBtn.visible=false;/隐藏静音按钮 unmuteBtn.visible=true;/显示开启声音按钮 musicTransform.volume=0;/音量设置为0 SoundMixer.soundTransform=musicTransform;/将音量值赋给声音
23、混合器 volumeBlockMap.x=25;/音量滑块归零public function unmuteMusic(event:MouseEvent):void /自定义函数,用于响应开启声音按钮 var musicTransform:SoundTransform=new SoundTransform ();/重新实例化声音转换对象 muteBtn.visible=true;/显示静音按钮 unmuteBtn.visible=false;/隐藏开启声音按钮 musicTransform.volume=0FLASH CS4;/音量设置为0FLASH CS4 SoundMixer.soundTr
24、ansform=musicTransform;/将音量值赋给声音混合器 volumeBlockMap.x=130;/音量滑块移动(12)自定义lastMusic()函数,用于跳转到前一首音乐中。其代码如下:public function lastMusic(event:MouseEvent):void /自定义函数,用于响应跳转上一首音乐按钮 if (currentMusic0) /当前非第一首音乐时 stage.removeEventListener(Event.ENTER_FRAME,movePlayBlock);/停止进度条 for (var i:int=0; i30&mouseX240) /判断当鼠标横坐标属于音量条的范围内 volumeBlockMap.x=mouseX; /音量滑块的横坐标与鼠标横坐标相等 var musicTransfor
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1