Comunidad de diseño web y desarrollo en internet online

Controlar sonidos desde una clase

Citar            
MensajeEscrito el 01 Jul 2008 07:29 am
Hola a todos/as! :cool:

Estoy cargando sonidos utilizando una clase y me gustaría incorporar dentro de esa misma clase unos eventlisteneres para teclado con los que poder, por ejemplo, pausar la reproducción.
La cuestión está en que no hay manera... :crap:
Si añado el eventlistener al soundchannel, no hace nada.
Si lo añado a stage me dice que stage no ha sido definido (aunque puse al principio "import flash.display.Stage").
¿Alguien me puede decir algún tutorial bueno o ponerme un cachito de código que sea revelador?


Código :

   public class playSoundNow{
   public var soundchann:SoundChannel = new SoundChannel;
   public var sound:Sound = new Sound();
   public var pausedd:Number = 0;
   public var cue:Number = 0;
   public var init:int = 0;
   public var inst:int = 0;
   public var order:int = 0;
   private var interval:Timer;
   public var url:String = new String();
                public.var pausedd:int = 0;
   
      public function playSoundNow()
      {
      }
         public function loadSound(url)
         {
         
         
            var req:URLRequest = new URLRequest(url);
            var buffer:SoundLoaderContext = new SoundLoaderContext(3000, true);
            sound.load(req, buffer);
            return true;
            }
               if(loadSound(url)!=true)
               {
                  interval = new Timer(1000);
                  interval.addEventListener(TimerEvent.TIMER, retry);
                  interval.start();
                  function retry(event:TimerEvent):void
                  { 
                     if(loadSound(url)==true)
                     {
                     interval.stop();                                       soundchann = s.play();
                     }
                  }
               }
               else
               {
                  soundchann = sound.play();
               }
            }
         }
         stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressedDown);
         function keyPressedDown(event:KeyboardEvent):void 
         {
            if (event.charCode == 46){
               if(pausedd == 0){
               cue = soundchann.position;
               soundchann.stop();
               pausedd = 1;
               }
               else
               {
               soundchann = sound.play(cue);
               pausedd = 0;
               
             }
      }
   }
}

Por PrincesaLeya

39 de clabLevel



Genero:Femenino  

msie
Citar            
MensajeEscrito el 01 Jul 2008 10:18 am
Al stage no accedes directamente, sino como propiedad de algún objeto del displayList. Le podrías pasar una referencia en el constructor, suponiendo que tuvieras un MC llamado miMC en el displayList, podrías hacer:

Código :

private var stage:Stage

public function playSoundNow(s:Stage)
      {
        stage = s
      }
//Para instanciarlo
var mySound:PlaySoundNow = new playSoundNow(miMC.stage)


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 01 Jul 2008 02:24 pm
Me temo que no va a ser tan fácil...

La clase playSoundNow no está llamada desde la película, sino desde otra clase que le pasa una serie de parámetros. Lo que yo quiero es poder pausar o subir y bajar el volumen de los MP3 que son cargados con la clase playSoundNow usando mi teclado, por ejemplo:
tecla 1 = PAUSE;
tecla 2 = PLAY;
tecla 3 = subir volumen;
tecla 4= bajar volumen;

Con la información que me das quizá otro/a más listo pueda trabajar, yo estoy perdida...
:oops:

Por PrincesaLeya

39 de clabLevel



Genero:Femenino  

msie
Citar            
MensajeEscrito el 01 Jul 2008 02:54 pm
Básicamente necesitas una referencia al displayList par pillar el stage, búscala en la clase que lo instancia, sigue la cadena hacia atrás hasta que encuentres donde puedes poner la referencia

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 01 Jul 2008 03:39 pm
He encontrado una manera mucho más sencilla de hacerlo.
En la función playSoundNow al crear las variables:

Código :

   public var soundchann:SoundChannel = new SoundChannel;
   public var sound:Sound = new Sound();

las creo en relación de la clase myVars, que contiene globales:

Código :

myVars.Vars.soundchann = new SoundChannel();
myVars.Vars.sound = new Sound();

Luego puedo controlarlas desde la película principal sin problemas:

Código :

myVars.Vars.soundchann = sound.stop();

Tan sólo tengo una pregunta.
¿hay alguna manera de preguntarle a SoundChannel (igual que se le puede preguntar "position" ) que sonido está reproduciendo en el momento?
(Tengo un array de sonidos)

Por PrincesaLeya

39 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 02 Jul 2008 09:33 am
Cuidado: mientras lo primero es un buen intento de aislar tu código y seguir un camino OOP, lo segundo es simplemente tirar cosas en un espacio global para que funcionen. Si lo que estás haciendo es medianamente simplito no hay problemas, pero el costo de las malas prácticas, sobre todo en los "arreglos rápidos" se pagan si el desarrollo va a mas
Source no figura entre las propiedades de SoundChannel

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

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