Flex简单的Mp3播放器。

这两天学习了下Flex3,至于为何不是4呢,这个原因没想过,呵呵,
自己尝试着写了很简单的Mp3播放器,虽然网上这类资源很多,但是大多数都有错误,或不完整,自己写的这个放在这里一是做个标记,方便以后自己学习,而是抛砖引玉,大家共同学习学习。

功能如下:

             1,播放远程mp3文件:请大家在URL中添加自己要试听歌曲的URL,这里看了两天神话,就用的《星月神话》

             2,暂停

             3,继续播放

             4,停止

             5,从网络上下载歌曲的进度显示

             6,歌曲播放进度显示

             7,支持歌曲播放进度的拉动播放

             8,音乐大小的调整
代码如下:

            

<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
     layout="absolute" creationComplete="init()" 
>
    <mx:Script>
        <![CDATA[
            import mx.core.SoundAsset;
            import flash.media.*;
            import mx.controls.Alert;
            import flash.net.*;
            import flash.utils.Timer;


           public var myurl:String = "http://joy.online.sh.cn/joys/gb/images/site1/20091229/90e6ba45adf30ca3abfe28.mp3";
           public var request:URLRequest = new URLRequest(myurl);
           public var mySong:SoundAsset  = new SoundAsset();
            public var channel:SoundChannel;
            public var temp:Number = 0;
            [Bindable]
            public var tempper:Number = 0;
            public var timer:Timer;
            public var soundtransform:SoundTransform = new SoundTransform(0.5,0);
            private var myTimer:Timer = new Timer(10, 0);
            //标志当前是否继续播放,0 播放 1,不播放
            public var flag:Number;

     		public function init():void{
     			//加载远程URL,
     		     mySong.load(request);
     		    //   mybar.source = loader;
     		   //创建侦听器, 小括号内的第二个参数就是下面将要重复执行的函数
    		 myTimer.addEventListener(TimerEvent.TIMER, timerHandler);
    		 myTimer.start();

     		}
    		 private function timerHandler(event:TimerEvent):void{

    	 //功能: 显示音乐的播放进度, 进度条会随着音乐的继续播放而向右缓缓移动; 
    	 //播放进度条的值=(当前音乐播放时间/音乐的总时间)*100  百分比显示
  
     		 tempper = (channel.position/mySong.length)*100;
			 myprocess.value = tempper;

    		 }
     	
            //播放按钮
            public function play():void 
            {
                // 先 停止
                stop();
                // 在播放
                channel = mySong.play(0,int.MAX_VALUE);
            }
            //停止按钮
            public function stop():void 
            {
                // 停止
                if ( channel != null ) channel.stop();
				temp = 0;
				flag = 1;
            }
            //暂停
            public function pause():void{
				temp = channel.position;
				channel.stop();
				flag = 0;
            }
            //继续按钮
			public function playcontinue():void{
				
				//判断是否有上次暂停的记录
				if(temp!=0){
					//判断当前是否正在播放歌曲
					   if(flag ==0){
					  		channel = mySong.play(temp,int.MAX_VALUE);
					  		flag = 1;
					 		}
					 		else {
					 		Alert.show("正在播放歌曲");
					 		}
			 } else {
			 	Alert.show("请先播放歌曲");
			 }
			}
			//结束
            public function over():void{
            	Alert.show("It's Over!");
            }
            //音量
            public function volume():void{
                soundtransform.volume = vol.value; 
                channel.soundTransform = soundtransform;	
            }
            //歌曲滑动条
            public function changeprocess():void{
					temp = (myprocess.value/100)*mySong.length;
					channel.stop();
					channel = mySong.play(temp,int.MAX_VALUE);
            }
            
        ]]>
    </mx:Script>
    <mx:Panel width="674" height="360" layout="absolute" fontSize="16" horizontalCenter="-5" verticalCenter="-5">
        <mx:Button label="暂停" click="pause();" x="208" y="42"/>
        <mx:Button label="停止" click="stop();" x="371" y="42"/>
        <mx:Button label="播放" click="play();" x="140" y="42"/>
        <mx:Button label="继续" click="playcontinue();" x="290" y="42"/>
    <mx:HSlider x="140" y="241" id="vol" allowTrackClick="true" minimum="0.5" maximum="1"
    	 snapInterval="0.1" change="volume()" labels="音量" valueCommit="channel"
    	 />
    <mx:HSlider  x="150" y="128"  minimum="0" maximum="100" id="myprocess" allowTrackClick="true" change="changeprocess()"/>
    <mx:ProgressBar x="140" y="196" direction="right" width="291" source="mySong"
    	  minimum="1" maximum="100" indeterminate="false" enabled="true" labelPlacement="center"/>
    <mx:Label id="songjindu" x="140" y="109" text="已完成:{tempper.toFixed(2)}%" height="28" />
    <mx:Label x="140" y="164" text="已下载:" width="60"/>
    </mx:Panel>

    
</mx:Application>

 截图:

        见附件

大家一起学习学习! 还有感谢Ethan 给我的学习建议---API是最好的学习资料。

你可能感兴趣的:(Flex,Flash,音乐,360,Adobe)