解决方法
具体讨论成业原创,转载说明出处 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测试。我们将依次听到上面的三首歌