Comunidad de diseño web y desarrollo en internet online

galeria con flash

Citar            
MensajeEscrito el 26 Dic 2011 03:00 am
hola soy nuevo en esto, estoy haciendo una galeria de fotos en flash, y al hacer click en esas fotos se reproduce una cancion y se muestran otros datos cargados externamente desde un xml, bueno el problema que tengo es que al reproducir otra cancion, no deja de sonar la primera y el sonido queda muy mal, pero también quiero hacer un botón de siguiente canción y anterior canción, además de subir y bajar volumen pero no puedo, les adjunto mi clase Main en la que tengo todo. Desde ya muchas gracias

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

Por andres95

0 de clabLevel



 

chrome
Citar            
MensajeEscrito el 27 Dic 2011 11:26 pm
¿290 líneas de código? Quizás si pones solo la parte relevante a tu pregunta mejores las posibilidades de obtener respuesta

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 29 Dic 2011 07:16 pm
Hola, no controlo el tema música pero algo de loads se... además de lo de Jorge XD

Veo que so_bucle crea el New Sound(...), pero en ningún lugar lo destruye, me refiero a que cada vez que le das a next le sumas un new sound y así hasta que te quedas sordo además de mezclar canciones.

No se pero faltaria un musica.stop(); musica=null; digo yo...

Ejemplo

Por redkram

17 de clabLevel



Genero:Masculino  

ASP,SQL,CSS,JQUERY y más

chrome

 

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