多媒体交互应用基础(10)

来源:互联网 发布:跟兄弟连学php下载 编辑:程序博客网 时间:2024/06/05 09:25

问题一,如何加载外部声音,并实现播放 停止 及循环?

步骤:

第一步:导入媒体包

              import flash.media.Sound;

              import flash.media.SoundChannel;

如果有需要还可以调用SoundTransform 等类来实现实现其他功能

第二步:创建声音对象,通过对象调用load方法加载实现外部声音,load方法会引发错误。因此要注意

错误的捕捉和监听以防程序错误

第三步:可以尝试指定音乐的播放次数

  1.    
  2. package 
  3. {   import flash.media.SoundChannel;
  4.     import flash.media.Sound;
  5.     import flash.net.URLRequest;
  6.     import flash.events.*;    
  7. public class Music extends Sound
  8.     {
  9.         private var _sound:Sound;
  10.         private var timeNums:int;
  11.         private var channel:SoundChannel;
  12.         private var Isfinish:Boolean=false;
  13.         public function Music()
  14.         {
  15.             _sound=new Sound();
  16.         }
  17.         public function LoadMusic(songPath:String=null):void
  18.         {
  19.             _sound.load(new URLRequest(songPath));
  20.             _sound.addEventListener(Event.COMPLETE,LoadComplete); //声音加载完成的调度 
  21.             _sound.addEventListener(IOErrorEvent.IO_ERROR, LoadError);// 加载错误调度 
  22.         }
  23.         public function LoadComplete(e:Event):void
  24.         {
  25.             StartMusic();
  26.         }
  27.         public function StartMusic(timeNums:int=0):void
  28.         {//播放音乐
  29.             channel=_sound.play(0,timeNums);//指定播放声音的次数  ,并返回channel的对象回放声音
  30.             channel.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler);//声音完成时候调度事件 
  31.         }
  32.         private function soundCompleteHandler(e:Event):void
  33.         {
  34.             StopMusic();
  35.             this.dispatchEvent(new Event("MusicComplete"));//声音播放完毕分派一个自定义完成事件
  36.         }
  37.         public function StopMusic():void
  38.         { //停止音乐
  39.             channel.stop();//声音停止 
  40.         }
  41.         private function LoadError(e:IOErrorEvent):void
  42.         {
  43.             trace("cuowu");
  44.         }
  45.     }
  46. }

上面是一代已经封装好的声音类,当然还可以加强这样的类实现更多的功能,如缓冲,声道混合等等

 

实现上面的类,我们可以在类中

var song:Music=new Music();

song.LoadMusic(声音文档的路径);

 

如果不希望一加载完就播放音乐。我们还可以对程序进行修改 如加载完之后给一个开关给它。

  1. public function LoadComplete(e:Event):void
  2.         {
  3.                     Isok=true;           
  4.         }
  5.         public function StartMusic(timeNums:int=0):void
  6.         {   if(Isok)
  7.             {
  8.               channel=_sound.play(0,timeNums);
  9.              channel.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler);
  10.             }        
  11. }

这样我们就可以程序调用的时候改成这样

var song:Music=new Music();

song.LoadMusic(声音文档的路径);

song.StartMusic();//

如果希望指定播放次数,可以将其 变成

song.StartMusic(输入播放次数);

 

由于我们希望循环使用音乐,我们可以进行事件监听

song.addEventListener("MusicComplete", finish);

function finish(e:Event):void

{

 

song.StartMusic();//再次播放音乐

 

}

 

上面所写的类仍然可以扩展起来。这里不作介绍

原创粉丝点击