package { import br.com.stimuli.loading.*; import flash.display.*; import flash.events.*; import flash.net.*; import flash.text.*; import nu.xero.flash.*; import nu.xero.gui.*; [SWF(backgroundColor="0x000000")] public class main extends Sprite { private var fps :FlashFPS; private var av :audioVisualizer; private var theCoverflow :coverflow; private var lbl :TextField private var i :Number; private var loader :URLLoader; private var bulk :BulkLoader; private var albums :XMLList; private var albumArt :Array; public function main() { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; stage.quality = StageQuality.MEDIUM; stage.frameRate = 100; lbl = new TextField(); lbl.autoSize = TextFieldAutoSize.CENTER; lbl.multiline = true; lbl.textColor = 0xffffff; lbl.selectable = false; lbl.scaleX = lbl.scaleY = 2; lbl.x = 400; lbl.y = 200; this.addChild(lbl); loader = new URLLoader(); loader.addEventListener(IOErrorEvent.IO_ERROR, err); loader.addEventListener(Event.COMPLETE, loaded); loader.load(new URLRequest("playlist.xml")); addEventListener(Event.ENTER_FRAME, loop); } private function err(e:Event):void { lbl.textColor = 0x660000; lbl.htmlText = "error loading playlist"; } private function loaded(e:Event):void { lbl.text = 'loaded'; loader = URLLoader(e.target); //you must remember to unescape the data! var thexml:XML = new XML(unescape(loader.data)); albums = thexml.descendants("album"); bulk = new BulkLoader("mp3"); i = 0; while(i++ < albums.length()) { bulk.add(albums[i-1].img.toString()); } bulk.addEventListener(BulkLoader.PROGRESS, loading); bulk.addEventListener(BulkLoader.COMPLETE, imgsloaded); bulk.addEventListener(BulkLoader.ERROR, bulkerr); bulk.start(); } private function bulkerr(e:ErrorEvent):void { lbl.textColor = 0x660000; lbl.htmlText = "ERROR\nfailed loading images."; } private function loading(e:BulkProgressEvent):void { lbl.htmlText = "loading images: " + e.itemsLoaded + " of " + e.itemsTotal + ""; } private function imgsloaded(e:BulkProgressEvent):void { lbl.htmlText = ""; albumArt = new Array({img:Bitmap}); i = 0; while(i++ < albums.length()) { albumArt[i-1] = {img:BitmapData(BulkLoader.getLoader("mp3").getBitmapData(albums[i-1].img))}; } //create audio visualizer av = new audioVisualizer(); av.y -= 100; addChild(av); //create coverflow theCoverflow = new coverflow(albums, albumArt, stage); addChild(theCoverflow); //create debug fps = new FlashFPS(0x006600, 0x000000, 0xffffff, 0, "kb"); addChild(fps); } private function loop(e:Event):void { if(fps != null) { fps.update("rendered: " + (theCoverflow.stats.triangles + av.stats.shadedTriangles) + " triangles"); } } } }