home *** CD-ROM | disk | FTP | other *** search
/ 404 Jogos / CLJG.iso / Diversos / beauty_resort.swf / scripts / classes / basic / Sound / TFSoundChannel.as < prev    next >
Encoding:
Text File  |  2008-09-04  |  9.9 KB  |  326 lines

  1. package classes.basic.Sound
  2. {
  3.    import classes.basic.Events.TFEvent;
  4.    import classes.basic.StateMachine.*;
  5.    import flash.events.Event;
  6.    import flash.media.Sound;
  7.    import flash.media.SoundChannel;
  8.    import flash.media.SoundTransform;
  9.    
  10.    public class TFSoundChannel
  11.    {
  12.       
  13.       private static var iNumChannels:Number = 0;
  14.       
  15.       internal static var EVENT_STOP:String = "EVENT_STOP";
  16.       
  17.       private static var MAX_CHANNELS:Number = 32;
  18.       
  19.       public static var TYPE_MUSIC:Number = 0;
  20.       
  21.       internal static var ST_STOPPED:String = "ST_STOPPED";
  22.       
  23.       internal static var ST_PLAYING:String = "ST_PLAYING";
  24.       
  25.       public static var TYPE_SFX:Number = 1;
  26.       
  27.       internal static var ST_FADINGOUT:String = "ST_FADINGOUT";
  28.       
  29.       internal static var EVENT_PLAY:String = "EVENT_PLAY";
  30.       
  31.       internal static var ST_FADINGIN:String = "ST_FADINGIN";
  32.        
  33.       
  34.       private var iType:Number;
  35.       
  36.       private var pSoundChannel:SoundChannel;
  37.       
  38.       private var iFadeInDuration:Number;
  39.       
  40.       private var iCurrentVolume:Number;
  41.       
  42.       private var elapsedFadeTime:Number;
  43.       
  44.       private var iVolume:Number;
  45.       
  46.       private var bLoop:Boolean;
  47.       
  48.       private var iFakeFadeOutDuration:Number;
  49.       
  50.       private var pEventCallback:Function;
  51.       
  52.       private var iFakeFadeInDuration:Number;
  53.       
  54.       private var stMachine:TFStateMachine;
  55.       
  56.       private var iFadeOutDuration:Number;
  57.       
  58.       private var pSound:Sound;
  59.       
  60.       public function TFSoundChannel(param1:Sound, param2:Number, param3:Function = null, param4:Boolean = false, param5:Number = 0, param6:Number = 0)
  61.       {
  62.          super();
  63.          stMachine = new TFStateMachine(null);
  64.          stMachine.createEvent(EVENT_PLAY,null);
  65.          stMachine.createEvent(EVENT_STOP,null);
  66.          stMachine.createState(ST_FADINGIN,false,this,startFadeIn,processFadeIn,null);
  67.          stMachine.createState(ST_PLAYING,false,this,null,processPlay,null);
  68.          stMachine.createState(ST_FADINGOUT,false,this,startFadeOut,processFadeOut,null);
  69.          stMachine.createState(ST_STOPPED,false,this,startStopped,null,null);
  70.          stMachine.createTransition(ST_STOPPED,EVENT_PLAY,ST_FADINGIN);
  71.          stMachine.createTransition(ST_FADINGIN,EVENT_STOP,ST_STOPPED);
  72.          stMachine.createTransition(ST_FADINGIN,EVENT_PLAY,ST_PLAYING);
  73.          stMachine.createTransition(ST_PLAYING,EVENT_STOP,ST_FADINGOUT);
  74.          stMachine.createTransition(ST_FADINGOUT,EVENT_STOP,ST_STOPPED);
  75.          stMachine.createTransition(ST_PLAYING,EVENT_PLAY,ST_PLAYING);
  76.          stMachine.initialize(ST_STOPPED);
  77.          this.iType = param2;
  78.          this.bLoop = param4;
  79.          this.iFadeInDuration = param5;
  80.          this.iFadeOutDuration = param6;
  81.          this.pEventCallback = param3;
  82.          pSound = param1;
  83.          pSoundChannel = null;
  84.          iVolume = 0;
  85.          iCurrentVolume = 0;
  86.          elapsedFadeTime = 0;
  87.       }
  88.       
  89.       private function applyVolumeToChannel(param1:Number) : *
  90.       {
  91.          var _loc2_:SoundTransform = null;
  92.          if(pSoundChannel == null)
  93.          {
  94.             return;
  95.          }
  96.          _loc2_ = pSoundChannel.soundTransform;
  97.          _loc2_.volume = param1;
  98.          pSoundChannel.soundTransform = _loc2_;
  99.       }
  100.       
  101.       public function stop() : Boolean
  102.       {
  103.          if(pSoundChannel == null)
  104.          {
  105.             return false;
  106.          }
  107.          return stMachine.receiveEvent(EVENT_STOP);
  108.       }
  109.       
  110.       private function startStopped() : *
  111.       {
  112.          if(pSoundChannel)
  113.          {
  114.             pSoundChannel.stop();
  115.             pSoundChannel = null;
  116.             --iNumChannels;
  117.          }
  118.          if(pEventCallback != null)
  119.          {
  120.             pEventCallback(new TFEvent(TFEvent.EVENT_STOP,this));
  121.          }
  122.       }
  123.       
  124.       private function startFadeIn() : *
  125.       {
  126.          pSoundChannel = pSound.play(0,bLoop == true ? 9999999 : 1);
  127.          ++iNumChannels;
  128.          if(pSoundChannel != null)
  129.          {
  130.             pSoundChannel.addEventListener(Event.SOUND_COMPLETE,soundCompleteHandler,false,0,true);
  131.             if(iFadeInDuration == 0)
  132.             {
  133.                if(pEventCallback != null)
  134.                {
  135.                   pEventCallback(new TFEvent(TFEvent.EVENT_FADEINBEGIN,this));
  136.                }
  137.                if(pEventCallback != null)
  138.                {
  139.                   pEventCallback(new TFEvent(TFEvent.EVENT_FADEINEND,this));
  140.                }
  141.                applyVolumeToChannel(iVolume / 100);
  142.                stMachine.receiveEvent(EVENT_PLAY);
  143.             }
  144.             else
  145.             {
  146.                applyVolumeToChannel(0);
  147.                elapsedFadeTime = 0;
  148.                if(pEventCallback != null)
  149.                {
  150.                   pEventCallback(new TFEvent(TFEvent.EVENT_FADEINBEGIN,this));
  151.                }
  152.             }
  153.             return;
  154.          }
  155.          soundCompleteHandler(null);
  156.       }
  157.       
  158.       private function processFadeIn(param1:Object) : *
  159.       {
  160.          elapsedFadeTime += param1.time;
  161.          if(elapsedFadeTime >= iFadeInDuration)
  162.          {
  163.             if(pEventCallback != null)
  164.             {
  165.                pEventCallback(new TFEvent(TFEvent.EVENT_FADEINEND,this));
  166.             }
  167.             applyVolumeToChannel(iVolume / 100);
  168.             stMachine.receiveEvent(EVENT_PLAY);
  169.          }
  170.          else
  171.          {
  172.             applyVolumeToChannel(elapsedFadeTime * iVolume / iFadeInDuration / 100);
  173.          }
  174.       }
  175.       
  176.       private function processFadeOut(param1:Object) : *
  177.       {
  178.          elapsedFadeTime -= param1.time;
  179.          if(elapsedFadeTime <= 0)
  180.          {
  181.             pSoundChannel.removeEventListener(Event.SOUND_COMPLETE,soundCompleteHandler);
  182.             pSoundChannel.stop();
  183.             pSoundChannel = null;
  184.             --iNumChannels;
  185.             if(pEventCallback != null)
  186.             {
  187.                pEventCallback(new TFEvent(TFEvent.EVENT_FADEOUTEND,this));
  188.             }
  189.             stMachine.receiveEvent(EVENT_STOP);
  190.          }
  191.          else
  192.          {
  193.             applyVolumeToChannel(elapsedFadeTime * iVolume / iFadeOutDuration / 100);
  194.          }
  195.       }
  196.       
  197.       private function soundCompleteHandler(param1:Event) : *
  198.       {
  199.          if(stMachine.getCurrentState().getName() == "ST_PLAYING")
  200.          {
  201.             stMachine.receiveEvent(EVENT_STOP);
  202.          }
  203.       }
  204.       
  205.       public function getState() : String
  206.       {
  207.          return stMachine.getCurrentState().getName();
  208.       }
  209.       
  210.       public function setVolume(param1:Number) : *
  211.       {
  212.          iVolume = param1;
  213.          if(Boolean(pSoundChannel) && stMachine.getCurrentState().getName() == ST_PLAYING)
  214.          {
  215.             applyVolumeToChannel(iVolume / 100);
  216.          }
  217.       }
  218.       
  219.       public function execFadeOut(param1:Number) : *
  220.       {
  221.          elapsedFadeTime = param1;
  222.          this.iFakeFadeOutDuration = param1;
  223.       }
  224.       
  225.       public function setFadeOutDuration(param1:Number) : *
  226.       {
  227.          this.iFadeOutDuration = param1;
  228.       }
  229.       
  230.       private function processPlay(param1:Object) : *
  231.       {
  232.          if(iFakeFadeInDuration > 0)
  233.          {
  234.             elapsedFadeTime += param1.time;
  235.             if(elapsedFadeTime >= iFakeFadeInDuration)
  236.             {
  237.                applyVolumeToChannel(iVolume / 100);
  238.                iFakeFadeInDuration = 0;
  239.             }
  240.             else
  241.             {
  242.                applyVolumeToChannel(elapsedFadeTime * iVolume / iFakeFadeInDuration / 100);
  243.             }
  244.          }
  245.          else if(iFakeFadeOutDuration > 0)
  246.          {
  247.             elapsedFadeTime -= param1.time;
  248.             if(elapsedFadeTime <= 0)
  249.             {
  250.                applyVolumeToChannel(0);
  251.                iFakeFadeOutDuration = 0;
  252.             }
  253.             else
  254.             {
  255.                applyVolumeToChannel(elapsedFadeTime * iVolume / iFakeFadeOutDuration / 100);
  256.             }
  257.          }
  258.          if(iFadeOutDuration > 0 && !bLoop)
  259.          {
  260.             if(pSoundChannel.position >= pSound.length - iFadeOutDuration)
  261.             {
  262.                stMachine.receiveEvent(EVENT_STOP);
  263.             }
  264.          }
  265.       }
  266.       
  267.       private function startFadeOut() : *
  268.       {
  269.          if(iFadeOutDuration == 0)
  270.          {
  271.             pSoundChannel.removeEventListener(Event.SOUND_COMPLETE,soundCompleteHandler);
  272.             pSoundChannel.stop();
  273.             pSoundChannel = null;
  274.             --iNumChannels;
  275.             if(pEventCallback != null)
  276.             {
  277.                pEventCallback(new TFEvent(TFEvent.EVENT_FADEOUTBEGIN,this));
  278.             }
  279.             if(pEventCallback != null)
  280.             {
  281.                pEventCallback(new TFEvent(TFEvent.EVENT_FADEOUTEND,this));
  282.             }
  283.             stMachine.receiveEvent(EVENT_STOP);
  284.          }
  285.          else
  286.          {
  287.             if(pEventCallback != null)
  288.             {
  289.                pEventCallback(new TFEvent(TFEvent.EVENT_FADEOUTBEGIN,this));
  290.             }
  291.             elapsedFadeTime = iFadeOutDuration;
  292.          }
  293.       }
  294.       
  295.       public function getType() : Number
  296.       {
  297.          return iType;
  298.       }
  299.       
  300.       public function execFadeIn(param1:Number) : *
  301.       {
  302.          elapsedFadeTime = 0;
  303.          this.iFakeFadeInDuration = param1;
  304.       }
  305.       
  306.       public function play() : Boolean
  307.       {
  308.          if(pSoundChannel != null || iNumChannels >= MAX_CHANNELS)
  309.          {
  310.             return false;
  311.          }
  312.          return stMachine.receiveEvent(EVENT_PLAY);
  313.       }
  314.       
  315.       public function process(param1:Object) : *
  316.       {
  317.          stMachine.process(param1);
  318.       }
  319.       
  320.       public function setFadeInDuration(param1:Number) : *
  321.       {
  322.          this.iFadeInDuration = param1;
  323.       }
  324.    }
  325. }
  326.