Comunidad de diseño web y desarrollo en internet online

Ayuda con este codigo (as3) y xml

Citar            
MensajeEscrito el 20 Abr 2010 02:44 pm
Buenas señores estoy intentando hacer un reproductor de mp3 cogiendo la lista de un xml (la verdad que mi nivel es basico en as3, pero hay que empezar alguna vez).

He conseguido funcionar un mp3 directamente pero no una lista a traves de xml, la verdad que voy modificando codigo entre lo poco que se y he visto por internet pero tengo por ahi algun fallo que no doy con el por si alguien me puede ayudar para que funcione. De momento solo tengo play/pause y stop. El codigo

Código ActionScript :

var myXMLLoader:URLLoader = new URLLoader();
myXMLLoader.load(new URLRequest("libXML/lista.xml"));
var sonido:Sound = new Sound();
var canalSonido:SoundChannel;
var playlist:XMLList;
var reproduciendoFlag:Boolean = false;
var mySong:Number = 0;
var posicionActual:Number = 0;
var my_total:Number;

myXMLLoader.addEventListener(Event.COMPLETE,completeHandler);
myXMLLoader.addEventListener(Event.ID3,id3Handler);


function completeHandler(evt:Event) {
   var myXML:XML = new XML(evt.target.data);
   playlist = myXML.SONG;
   my_total = playlist.length();
   posicionActual = 0;
   empezarCancion(mySong);
   myXMLLoader.removeEventListener(Event.COMPLETE, completeHandler);
   myXMLLoader = null;
}


function id3Handler(evt:Event) {
   var id3:ID3Info = ID3Info(sonido.id3);
   nombre_txt.text = id3.songName;
   autor_txt.text = id3.artist;
   anyo_txt.text = id3.album+" ("+id3.year+")";
}


function reproduciendo(evt:Event) {
   var porcentajeReproducido:Number = canalSonido.position*100/sonido.length;
   barra_mc.progreso_mc.width = barra_mc.width*porcentajeReproducido/100;
   
   tiempo_txt.text = pasarMil(canalSonido.position)+" / "+pasarMil(sonido.length);
}

function pasarMil(mili:Number) {
   var seg:Number = mili/1000;
   var min:Number = int(seg/60);
   var segReales:Number = int(((seg/60)-min)*60);
   
   var tiempo:String = min+":";
   if(segReales<10){
      tiempo+="0"+segReales;
   } else {
      tiempo+=segReales;
   }
   
   return tiempo;
}


barra_mc.bt.addEventListener(MouseEvent.CLICK,clickBarra);
function clickBarra(evt:MouseEvent) {
   var posX:Number = mouseX-barra_mc.x;
   var porcentaje:Number = posX*100/barra_mc.width;
   posicionActual = int(porcentaje*sonido.length/100);
   empezarCancion();
}

function empezarCancion(mySong):void {
   trace("DURACION: ");
   var myURL = playlist[mySong].@URL;
   if(canalSonido != null) {
      canalSonido.stop();
   }
   btplay.gotoAndStop(2);
   btstop.gotoAndStop(1);
   //sonido = new Sound();
   sonido.load(new URLRequest(myURL));
   canalSonido = sonido.play(posicionActual,1);
   canalSonido.addEventListener(Event.SOUND_COMPLETE,fincancion);
   
   reproduciendoFlag = true;
   barra_mc.addEventListener(Event.ENTER_FRAME,reproduciendo);
   
   
   
   //trace("DURACION: "+sonido.length);
   //trace("POSICION: "+canalSonido.position);
   //canalSonido.stop();
}

function fincancion(evt:Event) {
   //pasar a siguiente cancion
   barra_mc.removeEventListener(Event.ENTER_FRAME,reproduciendo);
}

btplay.addEventListener(MouseEvent.CLICK,playHandler);
btplay.buttonMode = true;
function playHandler(evt:MouseEvent) {
   if(reproduciendoFlag==true){
      reproduciendoFlag = false;
      posicionActual = canalSonido.position;
      canalSonido.stop();
      btstop.gotoAndStop(1);
      btplay.gotoAndStop(1);
   } else {
      empezarCancion();
   }
}
btstop.addEventListener(MouseEvent.CLICK,stopHandler);
btstop.buttonMode = true;
function stopHandler(evt:MouseEvent) {
   reproduciendoFlag = false;
   posicionActual = 0;
   canalSonido.stop();
   btstop.gotoAndStop(2);
   btplay.gotoAndStop(1);
}


dragvolumen_mc.addEventListener(MouseEvent.MOUSE_DOWN,downVolumen);
dragvolumen_mc.addEventListener(MouseEvent.MOUSE_UP,upVolumen);

function downVolumen(evt:MouseEvent) {
   dragvolumen_mc.addEventListener(Event.ENTER_FRAME,cambiarVolumen);
   var limites:Rectangle = new Rectangle(dragvolumen_mc.x,barravolumen_mc.y,0,barravolumen_mc.height-dragvolumen_mc.height);
   dragvolumen_mc.startDrag(false,limites);
}
function upVolumen(evt:MouseEvent) {
   dragvolumen_mc.removeEventListener(Event.ENTER_FRAME,cambiarVolumen);
   dragvolumen_mc.stopDrag();
}
function cambiarVolumen(evt:Event) {
   var total:Number = barravolumen_mc.height-dragvolumen_mc.height;
   var posY:Number = dragvolumen_mc.y-barravolumen_mc.y;
   var porcentaje:Number = 100 - (posY*100/total);
   
   var transformarSonido:SoundTransform = new SoundTransform();
   transformarSonido.volume = porcentaje/100;
   canalSonido.soundTransform = transformarSonido;
   //trace(porcentaje+"%");
}

Gracias por todo

Por LeonSoft

15 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 Abr 2010 11:58 pm
Hola,has probado a poner un trace para saber si efectivamente has pasado los datos al XMLList?

Por unodetantos

11 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 Abr 2010 12:06 am
Si he conseguido avanzar la cosa ahora tengo digamos otro problema

sonido.load(new URLRequest(myURL));
canalSonido = sonido.play(posicionActual,mySong);

en esta parte de codigo controlo el sonido con respecto a la posicion que ocupa en ese momento (tengo una barra de avanza/atras sobre la misma cancion) y la cancion que coje en el xml, la cuestion es que si pongo esto canalSonido.position funciona bien las 2 primeras canciones (cuando terminan) las siguientes canciones no coje la posicion real. Es decir canalSonido.position coje un valor mayor que la longitud incluso del sonido que esta reproduciendo en ese momento. Alguien sabe pq puede ser?

Por LeonSoft

15 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.