[AS3]as3.0的sound类常用技巧整理(8)
问题八
当我们播放音乐以后,想知道声音何时播放结束。(成业注:当我们播放完一首歌曲后想播放器自动切换到下一首,这时就需要音乐播放结束的消息)
解决方法
侦听soundComplete事件
有很多时候我们需要知道音乐在什么时候播放结束。比如:在正式的内容开始之前,我们想让用户先听完一段介绍,那么就需要获取介绍是否播放结束的信息;再比如:有个带索音乐列表的播放器,当一首歌播放完毕之后要自动切换到下一首,就需要获取当前的歌是否已经播放结束。
这一节中我们开始讨论另外一个类,它叫做flash.media.SoundChannel。当我们调用sound对象的play()方法的时候,它返回 一个SoundChannel对象。各种声音在swf文件中播放都有唯一的一个SoundChannel对象代表,所有的这些SoundChannel混 合在一起构成了最终的音频输出。
当一个声音文件播放结束的时候,和它绑定的SoundChannel对象将引发一个soundComplete事件,它被定义为: flash.events.Event.SOUND_COMPLETE.我们可以为SoundChannel对象的SOUND_COMPLETE事件添加 一个事件处理函数,处理当声音播放结束的时候,程序干什么。
下面的例子演示了一个简单的播放列表(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的值比列表里的歌曲还大为止。
译者注:上面的这个例子的使用方法:
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测试。我们将依次听到上面的三首歌
热门文章推荐
- [HLS]做自己的m3u8点播系统使用HTTP Live Streaming(HLS技术)
- [FMS]FMS流媒体服务器配置与使用相关的介绍
- [AS3]什么是M3U8,与HTML5的区别是什么
- AS2.0 让flash自适应全屏,并且不自动缩放
- [AS3]as3.0的sound类常用技巧整理
- [AS3]as3与ByteArray详解、ByteArray介绍、ByteArray用法
- 关于RTMP,RTMPT,RTMPS,RTMPE,RTMPTE协议的介绍
- [JS]分享浏览器弹出窗口不被拦截JS示例