package
{
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.media.SoundMixer;
import flash.media.SoundTransform;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.utils.Dictionary;
/*
*使用方法:一般是直接在文档类初始化一个静态对象,比如定义为Main.soundManager
*添加一个声音:Main.soundManager.addSound(声音id,声音url地址);//通过id访问管理器中的声音
*添加并播放一个声音:Main.soundManager.addAndPlaySound(声音id,声音url地址,循环次数);//如果需要一直播放背景音,建议把循环次数设置为int.MAX_VALUE
*播放指定声音:Main.soundManager.play(声音id,循环次数);//默认为播放一次
*停止指定声音:Main.soundManager.stop(声音id);
*获得指定声音的Sound对象:Main.soundManager.getSound(声音id);
*获得指定声音的SoundChannel对象:Main.soundManager.getSoundChannel(声音id);
*移除指定声音:Main.soundManager.removeSound(声音id);
*设置音量大小:Main.soundManager.setVolume(声音大小);//0静音~1最大
*停止播放所有声音:Main.soundManager.stopAllSound();
*/
public class SoundManager extends EventDispatcher
{
private var soundDic:Dictionary;
private var soundChannelDic:Dictionary;
private var urlLoader:URLLoader;
public function SoundManager()
{
super();
init();
}
private function init():void
{
soundDic = new Dictionary ;
soundChannelDic = new Dictionary ;
urlLoader = new URLLoader ;
}
public function addSound(id:String,url:String):void
{
if (soundDic[id])
{
return;
}
var sound:Sound = new Sound ;
sound.addEventListener(Event.COMPLETE,addComplete);
sound.load(new URLRequest(url));
function addComplete(e:Event):void
{
sound.removeEventListener(Event.COMPLETE,addComplete);
soundDic[id] = sound;
}
}
public function addAndPlaySound(id:String,url:String,loops:int=0):void
{
if (soundDic[id])
{
/**如果已经有这个音乐 那么就直接播放不添加**/
soundDic[id].play();
return;
}
var sound:Sound = new Sound ;
sound.addEventListener(Event.COMPLETE,addAndPlayComplete);
sound.load(new URLRequest(url));
function addAndPlayComplete(e:Event):void
{
sound.removeEventListener(Event.COMPLETE,addAndPlayComplete);
soundDic[id] = sound;
var soundChannel:SoundChannel = sound.play(0,loops);
soundChannelDic[id] = soundChannel;
}
}
public function play(id:String,loops:int=0):void
{
if (soundDic[id])
{
if (soundChannelDic[id])
{
soundChannelDic[id].stop();
soundChannelDic[id] = soundDic[id].play(0, loops);
}
else
{
soundChannelDic[id] = soundDic[id].play(0, loops);
}
}
}
public function stop(id:String):void
{
if (soundChannelDic[id])
{
soundChannelDic[id].stop();
}
}
public function getSound(id:String):Sound
{
if (soundDic[id])
{
return soundDic[id];
}
return null;
}
public function getSoundChannel(id:String):SoundChannel
{
if (soundChannelDic[id])
{
return soundChannelDic[id];
}
return null;
}
public function removeSound(id:String):void
{
if (soundDic[id])
{
if (soundChannelDic[id])
{
soundChannelDic[id].stop();
soundChannelDic[id] = null;
delete soundChannelDic[id];
}
soundDic[id] = null;
delete soundDic[id];
}
}
public function setVolume(value:Number):void
{
SoundMixer.soundTransform = new SoundTransform(value);
}
public function stopAllSound():void
{
SoundMixer.stopAll();
}
}
}