智慧 + 毅力 = 无所不能

正确性、健壮性、可靠性、效率、易用性、可读性、可复用性、兼容性、可移植性...

导航

AS3版MP3播放器核心

Posted on 2009-12-01 18:04  Bill Yuan  阅读(1196)  评论(0编辑  收藏  举报
代码

package  {
        
import flash.media.Sound;
        
import flash.media.SoundChannel;
        
import flash.media.SoundLoaderContext;
        
import flash.media.SoundMixer;

        
public class MediaPlayerCore {
                
private var sound:Sound;
                
private var soundCh:SoundChannel;
                
private var soundCon:SoundLoaderContext;
                
private var position:Number;
                
private var isPlaying:Boolean;
                
private var isPause:Boolean;
                
private static var BUFFERTIME:Number = 10000;
                        
                
public function MediaPlayerCore()
                {
                        isPause 
= false;
                        isPlaying 
= false;
                        SoundMixer.bufferTime 
= BUFFERTIME; 
                }
               
//创建一个声音对象
                 
//@param url 媒体地址
                 
// @param playNow 是否马上播放,默认为真      
                public function createSound(url:String,playNow:Boolean = true):void
                {                        
                        dispose();
                        sound 
= new Sound();
                        sound.load(
new URLRequest(url));
                        sound.addEventListener(IOErrorEvent.IO_ERROR,errorHandler);             
                        
if(playNow)
                                play();                            
                }
                
//播放
                  
//@param offset 声音从哪开始      
                public function play(offset:Number = 0):void
                {
                        
if(isPause)
                                soundCh 
= sound.play(position);
                        
else
                                soundCh 
= sound.play(offset);
                        isPlaying 
= true;
                        isPause 
= false;
                }
               
//暂停        
                public function pause():void
                {
                        
if(isPlaying)
                        {                        
                                position 
= soundCh.position;
                                stop();        
                                isPause 
= true;
                        }
                }
                
//停止        
                public function stop():void
                {
                        
if(isPlaying)
                        {
                                soundCh.stop();
                                isPlaying 
= false;                                
                        }
                }
                
//播放位置        
                public function get Position():Number
                {
                        
if(soundCh == null)
                                
return 0;                    
                        
return Math.round(soundCh.position);
                }
                
//声音对象长度        
                public function get Length():Number
                {
                        
if(sound == null)
                                
return 0;
                        
return Math.round(sound.length*sound.bytesTotal/sound.bytesLoaded);
                }
                
//声音对象总共字节        
                public function get BytesTotal():Number
                {
                        
if(sound == null)
                                
return 0;
                        
return sound.bytesTotal;
                }
                
//声音对象加载字节        
                public function get BytesLoaded():Number
                {
                        
if(sound == null)
                                
return 0;
                        
return sound.bytesLoaded;
                }
                
//设置缓冲时间        
                public function set BufferTime(time:Number):void
                {
                        SoundMixer.bufferTime
=time;
                }
               
//中途换歌的时候用的
                private function dispose():void
                {
                        
if(sound == null)
                                
return ;
                        
if(sound.isBuffering)
                                sound.close();
                        stop();                 
                        sound 
= null;
                }
               
// 处理错误用
                private function errorHandler(e:IOErrorEvent):void
                {
                        sound.removeEventListener(IOErrorEvent.IO_ERROR,errorHandler);
                        sound 
= null;
                }                
        }