问题一,如何加载外部声音,并实现播放 停止 及循环?
步骤:
第一步:导入媒体包
import flash.media.Sound;
import flash.media.SoundChannel;
如果有需要还可以调用SoundTransform 等类来实现实现其他功能
第二步:创建声音对象,通过对象调用load方法加载实现外部声音,load方法会引发错误。因此要注意
错误的捕捉和监听以防程序错误
第三步:可以尝试指定音乐的播放次数
- package
- { import flash.media.SoundChannel;
- import flash.media.Sound;
- import flash.net.URLRequest;
- import flash.events.*;
- public class Music extends Sound
- {
- private var _sound:Sound;
- private var timeNums:int;
- private var channel:SoundChannel;
- private var Isfinish:Boolean=false;
- public function Music()
- {
- _sound=new Sound();
- }
- public function LoadMusic(songPath:String=null):void
- {
- _sound.load(new URLRequest(songPath));
- _sound.addEventListener(Event.COMPLETE,LoadComplete); //声音加载完成的调度
- _sound.addEventListener(IOErrorEvent.IO_ERROR, LoadError);// 加载错误调度
- }
- public function LoadComplete(e:Event):void
- {
- StartMusic();
- }
- public function StartMusic(timeNums:int=0):void
- {//播放音乐
- channel=_sound.play(0,timeNums);//指定播放声音的次数 ,并返回channel的对象回放声音
- channel.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler);//声音完成时候调度事件
- }
- private function soundCompleteHandler(e:Event):void
- {
- StopMusic();
- this.dispatchEvent(new Event("MusicComplete"));//声音播放完毕分派一个自定义完成事件
- }
- public function StopMusic():void
- { //停止音乐
- channel.stop();//声音停止
- }
- private function LoadError(e:IOErrorEvent):void
- {
- trace("cuowu");
- }
- }
- }
上面是一代已经封装好的声音类,当然还可以加强这样的类实现更多的功能,如缓冲,声道混合等等
实现上面的类,我们可以在类中
var song:Music=new Music();
song.LoadMusic(声音文档的路径);
如果不希望一加载完就播放音乐。我们还可以对程序进行修改 如加载完之后给一个开关给它。
- public function LoadComplete(e:Event):void
- {
- Isok=true;
- }
- public function StartMusic(timeNums:int=0):void
- { if(Isok)
- {
- channel=_sound.play(0,timeNums);
- channel.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler);
- }
- }
这样我们就可以程序调用的时候改成这样
var song:Music=new Music();
song.LoadMusic(声音文档的路径);
song.StartMusic();//
如果希望指定播放次数,可以将其 变成
song.StartMusic(输入播放次数);
由于我们希望循环使用音乐,我们可以进行事件监听
song.addEventListener("MusicComplete", finish);
function finish(e:Event):void
{
song.StartMusic();//再次播放音乐
}
上面所写的类仍然可以扩展起来。这里不作介绍