/src/com/cw/control/loaders/MP3LoadQueue.as

https://bitbucket.org/404assassin/musicplayer · ActionScript · 150 lines · 91 code · 2 blank · 57 comment · 13 complexity · 7ae0271c9f006873445acc5a0e9c2127 MD5 · raw file

  1. ////////////////////////////////////////////////////////////////////////////////
  2. // Christian Worley Development & Design
  3. // Copyright 2012 Christian Worley Development & Design
  4. // All Rights Reserved.
  5. ////////////////////////////////////////////////////////////////////////////////
  6. //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  7. // Package Declaration
  8. //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  9. package com.cw.control.loaders {
  10. /**
  11. * :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  12. * class description: MP3LoadQueue
  13. * language version: ActionScript 3.0
  14. * player version: Flash 10.0
  15. * author: christian
  16. * created: Jan 5, 2012
  17. * TODO:
  18. * :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  19. */
  20. //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  21. // Imports
  22. //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  23. import com.cw.control.observer.IObserver;
  24. import com.cw.control.observer.ISubject;
  25. import com.cw.control.observer.InvokedObserver;
  26. import com.cw.control.loaders.fontSWFLoader.FontSWFLoader;
  27. import com.greensock.events.LoaderEvent;
  28. import com.greensock.loading.CSSLoader;
  29. import com.greensock.loading.LoaderMax;
  30. import com.greensock.loading.MP3Loader;
  31. import com.greensock.loading.SelfLoader;
  32. import com.greensock.loading.XMLLoader;
  33. import flash.display.Sprite;
  34. //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  35. // Class characteristics
  36. //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  37. public class MP3LoadQueue implements ISubject {
  38. //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  39. // Private Variables
  40. //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  41. private var fontLoadObserver:ISubject = new InvokedObserver();
  42. private var loadSWFFonts:FontSWFLoader = new FontSWFLoader();
  43. private var observer:ISubject;
  44. private var queue1:LoaderMax;
  45. private var currentAmount:Number = 0;
  46. //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  47. // Constructor
  48. //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  49. public function MP3LoadQueue () {}
  50. //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  51. // Public Interfaces
  52. //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  53. public function initMP3LoadQueue ():void {
  54. loadFont();
  55. loadMp3();
  56. }
  57. /**
  58. * InvokedObserver interface, reference update, and subscription with
  59. * updated observer and adding subscription with addObserver(this).
  60. */
  61. public function addObserver (observer:ISubject):void {
  62. this.observer = observer;
  63. observer.addObserver(this);
  64. }
  65. /**
  66. * InvokedObserver notification
  67. */
  68. public function notifyObservers (infoObject:String):void {
  69. observer.notifyObservers(infoObject);
  70. }
  71. /**
  72. * remove an observer refrence from InvokedObserver
  73. */
  74. public function removeObserver (observer:ISubject):void {
  75. }
  76. public function update (infoObject:String):void {
  77. if(hasOwnProperty(infoObject)){
  78. this[infoObject]();
  79. }
  80. }
  81. //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  82. // Private Methods
  83. //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  84. /**
  85. * Load external fonts. Must match font used in CSS doc.
  86. */
  87. private function loadFont ():void {
  88. loadSWFFonts.fontSWFLoaderInterface('./fonts/fontENTrebuchetMS.swf');
  89. loadSWFFonts.observableInstanceRef(fontLoadObserver);
  90. }
  91. private function loadMp3 ():void {
  92. LoaderMax.activate([MP3Loader, CSSLoader, XMLLoader]);
  93. queue1 = new LoaderMax({name:"mainQueue", onProgress:progressHandler, onComplete:completeHandler, onError:errorHandler, auditSize:true});
  94. queue1.append(new CSSLoader("./css/flashSiteStyles.css", {name:"flashStyleSheet", alternateURL:"http://worleydev.com/css/flashSiteStyles.css"}));
  95. queue1.append(new XMLLoader("./xml/mp3List.xml", {}));
  96. queue1.load();
  97. }
  98. private function onChildOpenHandler (event:LoaderEvent):void {
  99. if(event.target.name == 'track1') {
  100. notifyObservers('firstTractLoading');
  101. }
  102. }
  103. private function progressHandler (event:LoaderEvent):void {
  104. // trace("main progress: " + event.target.progress);
  105. }
  106. private function onChildProgressHandler (event:LoaderEvent):void {
  107. // trace(" ::::::::::: MP3LoadQueue.onChildProgressHandler(event) "+event.target.progress);
  108. if((event.target.progress >= .1) && (event.target.name == 'track1')) {
  109. notifyObservers('play');
  110. }
  111. if(currentAmount == 1) {
  112. currentAmount = 0;
  113. }
  114. // trace("child progress current amounts: " + '\n' + currentAmount + '\n' + event.target.progress + '\n' + event.target.name.substring(0, 5));
  115. if((event.target.name.substring(0, 5) == 'track') && (currentAmount < event.target.progress)) {
  116. // trace("child progress: " + event.target.progress);
  117. currentAmount = event.target.progress
  118. notifyObservers('childProgress' + event.target.progress as String);
  119. }
  120. }
  121. private function completeHandler (event:LoaderEvent):void {
  122. var mp3Array:Array;
  123. mp3Array = queue1.getChildren(true, true);
  124. // trace(" ::::::::::: MP3LoadQueue.completeHandler(event) " + '\n' + event.target.name + '\n' + mp3Array + '\n' + mp3Array.length);
  125. var queue2:LoaderMax = LoaderMax.getLoader("mp3Queue");
  126. queue2.addEventListener(LoaderEvent.COMPLETE, mp3QueueCompleteHandler);
  127. queue2.addEventListener(LoaderEvent.CHILD_PROGRESS, /*mp3QueueProgressHandler*/onChildProgressHandler);
  128. queue2.addEventListener(LoaderEvent.CHILD_OPEN, onChildOpenHandler);
  129. queue2.addEventListener(LoaderEvent.CHILD_COMPLETE, onChildCompleteHandler);
  130. queue2.load();
  131. }
  132. private function mp3QueueProgressHandler(event:LoaderEvent):void{
  133. // trace(" ::::::::::: MP3LoadQueue.mp3QueueProgressHandler(event) " + '\n' + event.target.progress + '\n' );
  134. }
  135. private function onChildCompleteHandler (event:LoaderEvent):void {
  136. if(event.target.name == 'track1') {
  137. notifyObservers('firstTractLoaded');
  138. notifyObservers('play');
  139. }
  140. }
  141. private function mp3QueueCompleteHandler(event:LoaderEvent):void{
  142. // trace(" ::::::::::: MP3LoadQueue.completeHandler(event) " + '\n' + event.target.name + '\n' );
  143. }
  144. private function errorHandler (event:LoaderEvent):void {
  145. // trace(" ::::::::::: MP3LoadQueue.errorHandler(event) " + '\n' + event);
  146. }
  147. }
  148. }