home *** CD-ROM | disk | FTP | other *** search
- package uk.kerb.utils.sound
- {
- import flash.events.TimerEvent;
- import flash.media.Sound;
- import flash.media.SoundChannel;
- import flash.media.SoundTransform;
- import flash.utils.Timer;
- import flash.utils.getTimer;
-
- public class ExtendedSound extends Sound
- {
-
- private static const TIMER_UPDATE_RATE:Number = 20;
-
-
- private var fadeStartVolume:Number;
-
- private var fadeEndVolume:Number;
-
- private var panStartPosition:Number;
-
- private var panDuration:Number;
-
- private var panEndPosition:Number;
-
- private var fadeTimer:Timer;
-
- private var panTimer:Timer;
-
- private var fadeDuration:Number;
-
- private var panStartTime:Number;
-
- private var fadeStartTime:Number;
-
- private var soundChannel:SoundChannel;
-
- public function ExtendedSound()
- {
- super();
- }
-
- public function fadeIn(param1:Number = 0, param2:Number = 1, param3:Number = 0, param4:int = 0, param5:Number = 0) : SoundChannel
- {
- fadeStartVolume = Math.max(0,Math.min(1,param1));
- soundChannel = super.play(param5,param4,new SoundTransform(fadeStartVolume));
- if(param3 > 0)
- {
- fadeStartTime = getTimer();
- fadeDuration = param3;
- fadeEndVolume = Math.max(0,Math.min(1,param2));
- startFade();
- }
- return soundChannel;
- }
-
- public function stop() : void
- {
- if(soundChannel != null)
- {
- soundChannel.stop();
- }
- }
-
- public function fadeOut(param1:Number = 0) : void
- {
- if(param1 > 0)
- {
- fadeStartTime = getTimer();
- fadeDuration = param1;
- fadeStartVolume = soundChannel.soundTransform.volume;
- fadeEndVolume = 0;
- startFade();
- }
- else
- {
- stop();
- }
- }
-
- protected function stopPan() : void
- {
- if(panTimer != null && panTimer.running)
- {
- panTimer.reset();
- }
- }
-
- protected function updatePan(param1:TimerEvent) : void
- {
- var _loc2_:Number = NaN;
- var _loc3_:Number = (getTimer() - panStartTime) / panDuration;
- if(_loc3_ >= 1)
- {
- stopPan();
- _loc2_ = panEndPosition;
- }
- else if(_loc3_ > 0)
- {
- _loc2_ = _loc3_ * (panEndPosition - panStartPosition) + panStartPosition;
- }
- var _loc4_:Number = soundChannel.soundTransform.volume;
- soundChannel.soundTransform = new SoundTransform(_loc4_,_loc2_);
- }
-
- public function setPan(param1:Number) : void
- {
- var _loc2_:Number = NaN;
- if(soundChannel != null)
- {
- param1 = Math.max(-1,Math.min(1,param1));
- _loc2_ = soundChannel.soundTransform.volume;
- soundChannel.soundTransform = new SoundTransform(_loc2_,param1);
- stopPan();
- }
- }
-
- protected function stopFade() : void
- {
- if(fadeTimer != null && fadeTimer.running)
- {
- fadeTimer.reset();
- }
- }
-
- public function setVolume(param1:Number) : void
- {
- var _loc2_:Number = NaN;
- if(soundChannel != null)
- {
- param1 = Math.max(0,Math.min(1,param1));
- _loc2_ = soundChannel.soundTransform.pan;
- soundChannel.soundTransform = new SoundTransform(param1,_loc2_);
- stopFade();
- }
- }
-
- protected function updateFade(param1:TimerEvent) : void
- {
- var _loc2_:Number = NaN;
- var _loc3_:Number = (getTimer() - fadeStartTime) / fadeDuration;
- if(_loc3_ >= 1)
- {
- stopFade();
- _loc2_ = fadeEndVolume;
- }
- else if(_loc3_ > 0)
- {
- _loc2_ = _loc3_ * (fadeEndVolume - fadeStartVolume) + fadeStartVolume;
- }
- var _loc4_:Number = soundChannel.soundTransform.pan;
- soundChannel.soundTransform = new SoundTransform(_loc2_,_loc4_);
- }
-
- protected function startPan() : void
- {
- if(panTimer == null)
- {
- panTimer = new Timer(TIMER_UPDATE_RATE);
- panTimer.addEventListener(TimerEvent.TIMER,updatePan);
- }
- stopPan();
- panTimer.start();
- }
-
- public function panTo(param1:Number, param2:Number) : void
- {
- if(param2 > 0)
- {
- panStartTime = getTimer();
- panDuration = param2;
- panStartPosition = soundChannel.soundTransform.pan;
- panEndPosition = param1;
- startPan();
- }
- else
- {
- setPan(param1);
- }
- }
-
- override public function play(param1:Number = 0, param2:int = 0, param3:SoundTransform = null) : SoundChannel
- {
- soundChannel = super.play(param1,param2,param3);
- return soundChannel;
- }
-
- protected function startFade() : void
- {
- if(fadeTimer == null)
- {
- fadeTimer = new Timer(TIMER_UPDATE_RATE);
- fadeTimer.addEventListener(TimerEvent.TIMER,updateFade);
- }
- stopFade();
- fadeTimer.start();
- }
- }
- }
-