天天看点

ActionScript3 使用sound类(e文翻译)——声音播放结束消息

  当我们播放音乐以后,想知道声音何时播放结束。(成业注:当我们播放完一首歌曲后想播放器自动切换到下一首,这时就需要音乐播放结束的消息)

解决方法

       侦听soundComplete事件

具体讨论成业原创,转载说明出处 http://hi.baidu.com/flash_as3

       有很多时候我们需要知道音乐在什么时候播放结束。比如:在正式的内容开始之前,我们想让用户先听完一段介绍,那么就需要获取介绍是否播放结束的信息;再比如:有个带索音乐列表的播放器,当一首歌播放完毕之后要自动切换到下一首,就需要获取当前的歌是否已经播放结束。

       成业原创,转载说明出处 http://hi.baidu.com/flash_as3

       这一节中我们开始讨论另外一个类,它叫做flash.media.SoundChannel。当我们调用sound对象的play()方法的时候,它返回一个SoundChannel对象。各种声音在swf文件中播放都有唯一的一个SoundChannel对象代表,所有的这些SoundChannel混合在一起构成了最终的音频输出。

成业原创,转载说明出处 http://hi.baidu.com/flash_as3

       当一个声音文件播放结束的时候,和它绑定的SoundChannel对象将引发一个soundComplete事件,它被定义为:flash.events.Event.SOUND_COMPLETE.我们可以为SoundChannel对象的SOUND_COMPLETE事件添加一个事件处理函数,处理当声音播放结束的时候,程序干什么。

       成业原创,转载说明出处 http://hi.baidu.com/flash_as3

       下面的例子演示了一个简单的播放列表(a simple playlist)

package {
    import flash.display.Sprite;
    import flash.media.Sound;
    import flash.net.URLRequest;
    import flash.events.Event;
    import flash.media.SoundChannel;          
    public class PlayList extends Sprite {
       private var _sound:Sound;
        private var _channel:SoundChannel;
        private var _playList:Array;      //歌曲列表
        private var _index:int = 0;       //当前歌曲       
        public function PlayList(  ) {
            //创建歌曲列表并开始播放
            _playList = ["song1.mp3", 
                        "song2.mp3",
                        "song3.mp3"];
            playNextSong(  );
        }              
        private function playNextSong(  ):void{
            //如果列表中还有歌曲的话
            if(_index < _playList.length) {
                //创建一个新的Sound对象,加载并播放之
                // 数组_playList[_index]包含了要播放的下一首歌歌名及路径
                _sound = new Sound(  );
                _sound.load(new URLRequest(_playList[_index]));
                _channel = _sound.play(  );
                // 为_channel添加事件侦听处理函数
                _channel.addEventListener(Event.SOUND_COMPLETE,
                                        onComplete);       
                // 计数器加1
                _index++;
            }
        }              
        public function onComplete(event:Event):void{
            playNextSong(  );
        }
    }    
}      

这里,变量index从0开始计数,它将导致_playList[index]值变成为"song.mp3",这样第一个加载的歌曲是"song.mp3"。然后,index的值增加了,当soundComplete事件被引发,playNextSong()方法加载了_playList里的下一首歌,直到index的值比列表里的歌曲还大为止。成业原创,转载说明出处 http://hi.baidu.com/flash_as3

译者注:上面的这个例子的使用方法:

1,新建立一个fla文件,命名,保存;

2,找三首歌曲(mp3格式)复制到fla的那个目录里面,命名为song1.mp3,song2.mp3,song3.mp3(mp3是后缀名);

3,新建一个.as文件,把上述代码复制到其中,保存在fla同一个目录,命名为PlayList.as;

4,把fla文件的document class属性(选中舞台,打开属性面板就能看到)设置为PlayList;

5,按ctrl+enter测试。我们将依次听到上面的三首歌