Flash 与课件制作:Mp3播放

本文介绍了一个简单的Mp3播放器实现过程,包括播放、暂停、停止等功能,并详细讲解了如何通过AS3进行交互设计,如进度条拖动、音量调节等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今晚随手写一个简单Mp3播放,功能非常简单,没有用到很完善的类库,单独写在一个类没有对其进行分开。可以当课件使用。制作这个主要目的就是播放一首Mp3。播放Mp3已经不是什么新鲜的事情。今天只是结合到一些交互使用来完成这个超级简单的Mp3的播放。

首先在文档里面制作我们所需的元件,包括播放按钮,进度条,音量调节,暂停,等按钮。

1 、制作播放按钮

使用一个影片剪辑完成,当中里面设置两帧,一帧是用于放置播放按钮,一帧是用于显示暂停按钮,并为两帧设置标签。

一个可以切换播放或者暂停按钮的元件已经完成了。

当中,会使用到跳帧的方法切换按钮状态。所以在帧上里面写上了标签。有了这个后可以进行跳帧了,控制mc里面的元件显示。

2、制作停止按钮

制作停止按钮的时候,只是需要画图工具,绘制一个圆角和矩形组合即可。

3、制作可以拖放进度条

制作这个元件的时候,需要制作两个元件MC,一个用来显示底部(深绿色),一个用来显示进度(橙色)。

并为这橙色元件改名 controlBar,设置宽度为1。(一会用来显示进度)

完成之后,可以进行。

4、一些基本的方法:

在as3 cookbook 里面已经有很多关于mp3玩法。功能 是大同小异。

基本上功能有 播放,暂停,停止,拖放进度,静音,音量控制。主要的涉及到这些。

下面涉及到一些基本方法说明:

position 是位置记录。

播放音乐

channel=sound.play(position); 播放

停止音乐

channel.stop();停止

暂停的时候,先记录位置,再停止

position=channel.position;//记录当时的播放位置
channel.stop();

恢复播放的时候,利用这个位置Postion进行播放。

channel=sound.play(position); 播放

5、进度条交互

进度条的拖放交互,使用的鼠标按下,鼠标移动,鼠标松开的组合方式交互。

当鼠标按下的时候,可以让进度条宽度改变,产生进度改变。

progressBar.controlBar.width=progressBar.mouseX;

在鼠标移动的时候,使用鼠标坐标改变进度条的宽度。这样子进度条就像被拖放一样,实际上是改变了控制条的宽度。

progressBar.controlBar.width=progressBar.mouseX;

鼠标松开的时候,删除移动的监听事件

stage.removeEventListener(MouseEvent.MOUSE_UP,onMouseUPHandler);

完整代码:

一些说明:

当中一些跳转的帧,如

volumeBtn.gotoAndStop("stop"); 需要在元件里面设置帧标签。(volumeBtn 为音量控制按钮,用于静音设置)

volumeBar :音量控制条

progressBar:进度显示条

stopBtn:停止按钮

playBtn:播放按钮

package { import flash.display.Sprite; import flash.display.MovieClip; import flash.events.*; import flash.net.*; import flash.media.*; import flash.geom.*; import flash.display.SimpleButton; public class Main extends Sprite { private var position:Number=0;//播放位置 private var channel:SoundChannel; private var sound:Sound; private var songUrl:String="1.mp3";//mp3的路径 private var isPlay:Boolean=false;//是否播放 public function Main() { init(); } private function init():void { //加载音乐 sound=new Sound(); sound.addEventListener(IOErrorEvent.IO_ERROR,onErrorHandler); sound.addEventListener(Event.COMPLETE,onLoadSoundComplete); sound.load(new URLRequest(songUrl)); playBtn.stop(); volumeBtn.stop(); playBtn.buttonMode=true; stopBtn.buttonMode=true; progressBar.controlBar.mouseEnabled=false; volumeBar.controlBar.mouseEnabled=false; progressBar.buttonMode=true; volumeBtn.buttonMode=true; volumeBar.buttonMode=true; volumeBar.controlBar.width=volumeBar.width; //trace(volumeBar.width) //开始按钮,停止按钮,进度条监听鼠标事件 playBtn.addEventListener(MouseEvent.CLICK,onPlaySoundHandler); stopBtn.addEventListener(MouseEvent.CLICK,onStopSoundHandler); progressBar.addEventListener(MouseEvent.MOUSE_DOWN,onStartDragBarHandler); volumeBtn.addEventListener(MouseEvent.CLICK,onMuteSoundHandler); volumeBar.addEventListener(MouseEvent.MOUSE_DOWN,onStartDragVolomeBarHandler); } private function onErrorHandler(event:Event):void { trace("发生错误"); } private function onLoadSoundComplete(event:Event):void { sound.removeEventListener(Event.COMPLETE,onLoadSoundComplete); channel=sound.play(position);//开始播放 playBtn.gotoAndStop("pause"); isPlay=true; addEventListener(Event.ENTER_FRAME,onProgressHandler); } private function onProgressHandler(event:Event):void { if (channel==null)return; if (isPlay) { progressBar.controlBar.width=channel.position/sound.length*progressBar.width;//让进度条产生宽度变化 } if (progressBar.controlBar.width<=progressBar.width && progressBar.controlBar.width>=progressBar.width-2) { stopSound(); } } //播放和暂停处理 private function onPlaySoundHandler(event:MouseEvent):void { if (playBtn.currentLabel=="start") { if (isPlay==false) { isPlay=true; playBtn.gotoAndStop("pause"); playSound(); } } else { if (isPlay) { isPlay=false; playBtn.gotoAndStop("start"); pauseSound(); } } } private function onStopSoundHandler(event:MouseEvent):void { stopSound(); } private function onStartDragBarHandler(event:MouseEvent):void { channel.stop(); playBtn.gotoAndStop("pause"); progressBar.controlBar.width=progressBar.mouseX; event.updateAfterEvent(); position=progressBar.controlBar.width/progressBar.width*sound.length; channel=sound.play(position); progressBar.addEventListener(MouseEvent.MOUSE_MOVE,onMouseMoveHandler); stage.addEventListener(MouseEvent.MOUSE_UP,onMouseUPHandler); } private function onMouseMoveHandler(event:MouseEvent):void { channel.stop(); progressBar.controlBar.width=progressBar.mouseX; position=progressBar.controlBar.width/progressBar.width*sound.length; channel=sound.play(position); event.updateAfterEvent(); } private function onMouseUPHandler(event:MouseEvent):void { if (progressBar.hasEventListener(MouseEvent.MOUSE_MOVE)) { progressBar.removeEventListener(MouseEvent.MOUSE_MOVE,onMouseMoveHandler); } if (volumeBar.hasEventListener(MouseEvent.MOUSE_MOVE)) { volumeBar.removeEventListener(MouseEvent.MOUSE_MOVE,onChangeVolumeHandler); } stage.removeEventListener(MouseEvent.MOUSE_UP,onMouseUPHandler); } //静音处理 private function onMuteSoundHandler(event:MouseEvent):void { if (channel==null)return; if (volumeBtn.currentLabel=="start") { volumeBtn.gotoAndStop("stop"); channel.soundTransform=new SoundTransform(0); } else { volumeBtn.gotoAndStop("start"); channel.soundTransform=new SoundTransform(1); } } //拖动声音控制 private function onStartDragVolomeBarHandler(event:MouseEvent):void { volumeBar.controlBar.width=volumeBar.mouseX; var volume:Number=volumeBar.controlBar.width/volumeBar.width; channel.soundTransform=new SoundTransform(volume); event.updateAfterEvent(); volumeBar.addEventListener(MouseEvent.MOUSE_MOVE,onChangeVolumeHandler); stage.addEventListener(MouseEvent.MOUSE_UP,onMouseUPHandler); } //改音乐 private function onChangeVolumeHandler(event:MouseEvent):void { volumeBar.controlBar.width=volumeBar.mouseX; trace(progressBar.controlBar.width); var volume:Number=volumeBar.controlBar.width/volumeBar.width; channel.soundTransform=new SoundTransform(volume); event.updateAfterEvent(); stage.addEventListener(MouseEvent.MOUSE_UP,onMouseUPHandler); } //停止播放音乐 private function stopSound():void { if (channel==null)return; channel.stop(); playBtn.gotoAndStop("start"); position=0; isPlay=false; progressBar.controlBar.width=1; } //播放音乐 private function playSound():void { if (channel==null)return; channel=sound.play(position); } //暂停音乐 private function pauseSound():void { if (channel==null)return; position=channel.position;//记录当时的播放位置 channel.stop(); } } }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值