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;
}
}
} 