as3中操作Sound

as3中操作Sound

今天了解下在ActionScript3中如何加载外部mp3并对其进行操作,主要用到了两个类:Sound,SoundChannel。

新建个Flash CS3文档,在属性中将文档类设置为:As3Sound。
拖个mp3文件至同一级目录中,取名为MySound.mp3(最好是有id3信息的mp3文件)。
在同一级目录中新建个as文档,取名为As3Sound.as,输入如下代码:

程序代码 程序代码
package
{
     import  flash. display. Sprite;
     import  flash. events.*;
     import  flash. media. Sound;
     import  flash. media. SoundChannel;
     import  flash. net. URLRequest;
     import  flash. utils. Timer;
     import  flash. text. TextField;

     public  class As3Sound  extends  Sprite
    {
         private  var  url: String =  "MySound.mp3";
         private  var soundFactory: Sound;
         private  var channel: SoundChannel;
         private  var positionTimer: Timer;
         private  var play_btn: Sprite;
         private  var stop_btn: Sprite;
         //用于记录音乐现在是否为暂停状态
         private  var bSoundStop: Boolean =  false;

         public  function As3Sound()
        {
             var mp3_request: URLRequest =  new  URLRequest( url);

            soundFactory =  new  Sound();

             //成功加载数据后
            soundFactory. addEventListener( Event. COMPLETE, completeHandler);

             //在存在可用于 MP3 声音的 ID3 数据时
            soundFactory. addEventListener( Event. ID3, id3Handler);

             //加载音乐错误时
            soundFactory. addEventListener( IOErrorEvent. IO_ERROR, ioErrorHandler);

             //音乐加载中...
            soundFactory. addEventListener( ProgressEvent. PROGRESS, progressHandler);

            soundFactory. load(mp3_request);

            channel = soundFactory. play();

             //音乐播放完成
            channel. addEventListener( Event. SOUND_COMPLETE, soundCompleteHandler);

             //用Timer监听音乐的播放进度
            positionTimer =  new  Timer(1000);
            positionTimer. addEventListener( TimerEvent. TIMER, positionTimerHandler);
            positionTimer. start();



             //创建一个按钮,用于播放音乐
            play_btn =  new  Sprite();
            play_btn. graphics. beginFill(0xCCCCCC);
            play_btn. graphics. drawRoundRect(0, 0, 80, 18, 10, 10);
            play_btn. graphics. endFill();
             var play_txt: TextField =  new  TextField();
            play_txt. text =  "         播放";
            play_txt. selectable =  false;
            play_btn. addChild(play_txt);
            play_btn. addEventListener( MouseEvent. CLICK, soundPlay);
             addChild(play_btn);

             //创建一个按钮,用于停止音乐
            stop_btn =  new  Sprite();
            stop_btn. graphics. beginFill(0xCCCCCC);
            stop_btn. graphics. drawRoundRect(0, 0, 80, 18, 10, 10);
            stop_btn. graphics. endFill();
            stop_btn.x = 100;
             var stop_txt: TextField =  new  TextField();
            stop_txt. text =  "         暂停";
            stop_txt. selectable =  false;
            stop_btn. addChild(stop_txt);
            stop_btn. addEventListener( MouseEvent. CLICK, soundStop);
             addChild(stop_btn);

        }
         //监听音乐的播放进度
         private  function positionTimerHandler( event: TimerEvent):void
        {
             var ybf: int = channel. position. toFixed(0);
             var zcd: int = soundFactory. length;
             var bfs: int =  Math. floor(ybf/zcd*100);
             trace( "音乐总长度:"+zcd,  "音乐已播放:"+ybf,  "播放进度为:"+bfs+ "%");
        }
         //加载音乐完成时
         private  function completeHandler( event: Event):void
        {
             trace( "加载音乐完成: " +  event);
        }
         //在存在可用于MP3声音的ID3数据时
         private  function id3Handler( event: Event):void
        {
             trace( "音乐的ID3信息如下:");
             for ( var s  in soundFactory. id3) {
                 trace( "/t", s,  ":", soundFactory. id3[s]);
            }
             trace( "关于ID3信息介绍,请参见Sound类-->属性-->id3");
        }
         //加载音乐错误时
         private  function ioErrorHandler( event: Event):void
        {
             trace( "加载音乐错误,错误信息如下:" +  event);
            positionTimer. stop();
        }
         //加载音乐时
         private  function progressHandler( event: ProgressEvent):void
        {
             var yjz: int =  event. bytesLoaded;
             var zcd: int =  event. bytesTotal;
             var bfs: int =  Math. floor(yjz/zcd*100);
             trace( "音乐总长度:"+zcd, "已加载: "+yjz,  "加载进度为:"+bfs+ "%");
        }
         //音乐播放完成
         private  function soundCompleteHandler( event: Event):void
        {
             trace( "音乐播放完成: " +  event);
            positionTimer. stop();
        }
         //点击播放按钮事件
         private  function soundPlay( event: MouseEvent):void
        {
             if (bSoundStop) {
                bSoundStop =  false;
                channel = soundFactory. play(channel. position. toFixed(0));
            }
        }
         //点击停止按钮事件
         private  function soundStop( event: MouseEvent):void
        {
             if (!bSoundStop) {
                bSoundStop =  true;
                channel. stop();
            }
        }
    }
}


下载文件 源文件下载 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值