Código ActionScript :
package { import flash.display.MovieClip; import flash.events.*; import flash.net.URLLoader; import flash.net.URLRequest; //import flash.filesystem.File; import flash.net.FileReference; import flash.display.Loader; import fl.transitions.*; import fl.transitions.easing.*; import flash.media.SoundLoaderContext; import flash.media.Sound; import flash.text.*; import flash.media.SoundChannel; import flash.media.SoundTransform; public class Main extends MovieClip { var xmlLoader:URLLoader = new URLLoader(); var xmlData:XML = new XML(); var a_titulos:Array = new Array(); var a_autores:Array = new Array(); var a_canciones:Array=new Array(); var a_sonidos:Array=new Array; var a_nombres:Array=new Array; var a_imgs:Array = new Array(); var v_cont:int = 0; var v_porX:Number; var CI:Number; var v_nombrecancion:String; var so_bucle:Sound; var url_bucle:URLRequest; var buffer_bucle:SoundLoaderContext; var ini_bucle:Number = 0; var loop_bucle:int = 1; private var v_channel:SoundChannel; private var v_transform:SoundTransform; var soundoff:Boolean; var v_volumen:Number=5; public function Main() { // constructor code v_porX = contenedorLista_mc.x; xmlLoader.addEventListener(Event.COMPLETE, f_LoadXML); xmlLoader.load(new URLRequest("discos.xml")); btnUno_mc.addEventListener(MouseEvent.CLICK, f_pasarUno); btnDos_mc.addEventListener(MouseEvent.CLICK, f_pasarDos); } private function f_pasarUno(e:MouseEvent){ if(v_porX < btnUno_mc.x + btnUno_mc.width){ v_porX = v_porX + 110; } var mover:Tween = new Tween(contenedorLista_mc, "x", None.easeInOut, contenedorLista_mc.x, v_porX, 1, true); } private function f_pasarDos(e:MouseEvent){ //var v_porX:Number = contenedorLista_mc.x - 110; if(v_porX + contenedorLista_mc.width > btnDos_mc.x){ v_porX = v_porX - 110; } var mover:Tween = new Tween(contenedorLista_mc, "x", None.easeInOut, contenedorLista_mc.x, v_porX, 1, true); } private function f_LoadXML(e:Event):void { xmlData = new XML(e.target.data); f_parseDiscos(xmlData); } private function f_parseDiscos(p_discosInput:XML):void { var i:Number = 0; i = 0; var v_imgs:XMLList = p_discosInput.disco.img; for each (var v_img:XML in v_imgs) { a_imgs[i] = v_img; i++; } //A: cambié esto, ahora después de parsear la lista de imágenes llamo a la func que parsea todo el xml f_parseDiscos2(p_discosInput); f_ponerDiscos(0); } private function f_ponerDiscos(p_cual){ var mLoader:Loader = new Loader(); var mRequest:URLRequest = new URLRequest("discos/" + a_imgs[p_cual]); mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler); mLoader.load(mRequest); } private function onCompleteHandler(e:Event){ var mc:MovieClip = new MovieClip(); contenedorLista_mc.addChild(mc); mc.addChild(e.currentTarget.content); mc.width = 100; mc.height = 100; mc.x = v_cont * 110; mc.CI = v_cont; mc.addEventListener(MouseEvent.CLICK,f_LoadXML2); mc.addEventListener(MouseEvent.CLICK,f_PlayPause); v_cont++; if(v_cont < a_imgs.length){ f_ponerDiscos(v_cont); } } function f_LoadXML2(e:MouseEvent):void { //xmlData = new XML(e.target.data); //A: cambié esto, antes desde acá llamabas a f_parseDiscos2, no es necesario parsear el xml //cada vez que querés mostrar los datos, ahora el xml lo parseo una sola vez, y desde acá //llamo directamente a f_ponerDatos2. trace("e.target.CI : " + e.target.CI); f_ponerDatos2(e.target.CI); } function f_parseDiscos2(p_discosInput:XML):void { a_titulos = new Array; a_nombres= new Array; a_autores= new Array; a_canciones= new Array; a_sonidos= new Array; var i:Number = 0; var v_nombres:XMLList = p_discosInput.disco.titulo; for each (var v_nombre:XML in v_nombres) { trace("v_nombre : " + v_nombre); a_titulos[i] = v_nombre; i++; } i = 0; var v_autores:XMLList = p_discosInput.disco.autor; for each (var v_autor:XML in v_autores) { a_autores[i] = v_autor; i++; } i = 0; var v_canciones:XMLList = p_discosInput.disco.canciones; for each (var v_cancion:XML in v_canciones) { a_canciones[i] = v_cancion; i++; } i = 0; var v_imgs:XMLList = p_discosInput.disco.img; for each (var v_img:XML in v_imgs) { a_imgs[i] = v_img; i++; } i = 0; var v_sonidos:XMLList = p_discosInput.disco.sonido; for each (var v_sonido:XML in v_sonidos){ a_sonidos[i] =v_sonido; i++; } } function f_ponerDatos2(CI){ trace("ponerDatos2"); trace("a_sonidos[CI] : " + a_sonidos[CI]); trace("a_titulos[CI] : " +a_titulos[CI]); trace("a_autores[CI] : " + a_autores[CI]); trace("a_imgs[CI] : " + a_imgs[CI]); v_nombrecancion = a_sonidos[CI]; disco_txt.text = a_titulos[CI]; autor_txt.text = String(a_autores[CI]); canciones_txt.text = a_canciones[CI]; trace("autor_txt.text : " + autor_txt.text); var mLoader2:Loader = new Loader(); var mRequest2:URLRequest = new URLRequest("discos/" + a_imgs[CI]); mLoader2.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler2); mLoader2.load(mRequest2); } function onCompleteHandler2(e:Event){ trace("onCompleteHandler2"); //A: esto lo habías puesto en otra func que no tenía nada que ver, va acá. var i:Number; for(i=0; i<contenedor_mc.numChildren; i++){ contenedor_mc.removeChildAt(i); } //A: el contenedor que estabas creando antes se llamaba contenedor_mc, pero ya tenías un contenedor_mc //en el escenario, así que le cambié el nombre al nuevo que estamos creando: var mc:MovieClip = new MovieClip(); contenedor_mc.addChild(mc); mc.addChild(e.currentTarget.content); mc.width = 300; mc.height = 300; //trace("_2_"); //trace("autor_txt.text : " + autor_txt.text); //A: //f_loadSonido(); } function f_PlayPause(e:MouseEvent) { // constructor code play_mc.visible = false; stop_mc.visible=true; play_mc.addEventListener(MouseEvent.CLICK, f_restartPlayBack); stop_mc.addEventListener(MouseEvent.CLICK, f_pausePlayBack); nextsong_mc.addEventListener(MouseEvent.CLICK,f_nextsong); prevsong_mc.addEventListener(MouseEvent.CLICK,f_prevsong); masvolumen_mc.addEventListener(MouseEvent.CLICK,f_masvolumen); menosvolumen_mc.addEventListener(MouseEvent.CLICK,f_menosvolumen); f_loadSonido_bucle(); } private function f_loadSonido_bucle(){ //esta func carga el sonido: url_bucle = new URLRequest(v_nombrecancion); buffer_bucle = new SoundLoaderContext(1000); ini_bucle = 1; so_bucle = new Sound(url_bucle, buffer_bucle); var v_volume:int = v_volumen; v_transform = new SoundTransform(v_volume); //le digo que cuando termine de cargar llame a la función f_bucle so_bucle.addEventListener(Event.COMPLETE, f_bucle); } public function f_bucle(e:Event){ //esta func le da play al sonido, y además carga el sonido en el canal //así luego puedo detener el sonido deteniendo el canal. v_channel = so_bucle.play(0, 1, v_transform); } public function f_pausePlayBack(e:MouseEvent):void { //esta func es llamada cuando hago click sobre stop_mc //toma el canal y le cambia el volumen a cero //luego aplica la transformación al canal. v_transform = v_channel.soundTransform; v_transform.volume = 0; v_channel.soundTransform = v_transform; play_mc.visible=true; stop_mc.visible=false; } public function f_restartPlayBack(e:MouseEvent){ //reinicia el sonido y vuelve a cargar el canal. v_channel = so_bucle.play(0, loop_bucle, v_transform); v_transform = v_channel.soundTransform; v_transform.volume = v_volumen; v_channel.soundTransform = v_transform; stop_mc.visible = true; play_mc.visible = false; } public function f_nextsong(e:MouseEvent):void{ url_bucle = new URLRequest(a_sonidos[CI]); buffer_bucle = new SoundLoaderContext(1000); ini_bucle = 1; so_bucle = new Sound(url_bucle, buffer_bucle); var v_volume:int = 1; v_transform = new SoundTransform(v_volume); //le digo que cuando termine de cargar llame a la función f_bucle so_bucle.addEventListener(Event.COMPLETE, f_bucle); } public function f_prevsong(e:MouseEvent):void{ } function f_masvolumen(e:MouseEvent){ v_volumen++; } function f_menosvolumen(e:MouseEvent){ v_volumen=v_volumen-1; } } }