Comunidad de diseño web y desarrollo en internet online

retardo de audio en AS3

Citar            
MensajeEscrito el 20 Ago 2009 03:18 pm
Buenas a todos,

Tengo un sonido de un "clic" asociado a un evento de raton.Ocurre que hay un desincronizacion como de un segundo.He leido en otros post que esto depende un poco del procesador del ordenador,pero me parece una tonteria,sino,me pasaria con mas paginas ,pienso.Quizas haya algun paramentro que controle esto.Este es el codigo:

botonentrar.addEventListener(MouseEvent.MOUSE_OVER,entrar)
function entrar(){
var sonidoenviar:Sonidoenviar=new Sonidoenviar();
var req:URLRequest = new URLRequest("Audio/sonidoenviar.mp3");
var canal:SoundChannel = new SoundChannel();
canal = sonidoenviar.play();
}

Gracias!

Por muse

50 de clabLevel



 

msie8
Citar            
MensajeEscrito el 20 Ago 2009 04:13 pm
Para que usas la variable req?? por como veo que creas el sonido lo tienes en tu biblioteca no es cierto?? el retraso no es un silencio dentro del sonido original??

Por que pregunto tanto??..jajajaj.

Por Angel Roberto

Claber

248 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 Ago 2009 04:35 pm
mm me imagino que ese boton tiene una animacion para sus "estados" en la animacion over agrega el sonido desde la barra de propiedades o , por que no cargas todos los sonidos fuera de la funcion que responde al listener , asi nada mas al hacer over deberia estar ya cargado tu sonido, bueno es mi humilde opinion.. :)
Saludos.

Jonathan

Por maneuver

243 de clabLevel



Genero:Masculino  

Mexico City

chrome
Citar            
MensajeEscrito el 20 Ago 2009 06:32 pm
Gracias Angel,tienes razon con lo de la URL,supongo que soy un poco zote con esto del as.He comprobado que no tiene silencio.

Gracias Jonathan,he probado como me has explicado,y no funciona.Este es el codigo:



var sonidoenviar:Sound = new Sound();

public function Main() {

var req:URLRequest = new URLRequest("Audio/sonidoenviar.mp3");
sonidoenviar.load(req);

botonentrar.addEventListener(MouseEvent.MOUSE_OVER,entrar)
function entrar()
{
sonidoenviar.play()
}
}


var sonidoenviar:Sound = new Sound();

public function Main() {

var req:URLRequest = new URLRequest("Audio/sonidoenviar.mp3");
sonidoenviar.load(req);

botonentrar.addEventListener(MouseEvent.MOUSE_OVER,entrar)
function entrar()
{
sonidoenviar.play()
}
}

Por muse

50 de clabLevel



 

msie8
Citar            
MensajeEscrito el 20 Ago 2009 07:51 pm
El retraso ocurre todas las veces?? o solo la primera vez??. Si es solo la primera entonces debe ser lo que te dice muse al momento de entrar no esta totalmente cargado (no se si te marque error un play sin sonido cargado,tendria que probar).

La funcion Main en que momento la mandas llamar??

Nota: Pega tu codigo dentro de estas etiquetas

Código ActionScript :

 para que salga formateado
ej:

Código ActionScript :

//Codigo
....//Codigo

Por Angel Roberto

Claber

248 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 Ago 2009 07:53 pm
Rayos no se ven las etiquetas son estas:[ as][ /as] despues del corchete elimina el espacio :).

Por Angel Roberto

Claber

248 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 Ago 2009 04:35 am
Ok muse , de una clase que haye en decabeza.net simplemente agrege una cuantas lineas para el sonido , para implementarla solamente debes usarla como clase o base, o bien como clase, previamente si tu MovieClip "boton", en la animacion tenia stop() para definir los estados quitaselos y deja una sola animacion sin stop la clase se encarga de eso :wink: bueno el codigo es el siguiente:

Código ActionScript :

package 
{
   import flash.display.MovieClip;
   import flash.events.MouseEvent;
   import flash.events.Event;
   import flash.media.Sound;
   import flash.media.SoundChannel;
   
   public class ButtonClass extends MovieClip
   {
      private var snd:Sound; 
      private var channel:SoundChannel;
      
      public function ButtonClass()
      {
         init();
      }
      
      private function init():void
      {
         /*SoundLoop es el nombre de clase que le di ami sonido, que ovio esta en
         la libreria por lo que no hay que usar URLRquest*/
         snd = new SoundLoop(); 
         channel = new SoundChannel();
         
         this.buttonMode = true;
         this.stop();
         this.addEventListener(MouseEvent.ROLL_OVER,onButtonOver);
         this.addEventListener(MouseEvent.ROLL_OUT,onButtonOut);
      }
      
      private function onButtonOver(evt:MouseEvent):void
      {
         channel = snd.play();
         this.removeEventListener(Event.ENTER_FRAME,onBackFrameLoop);
         this.addEventListener(Event.ENTER_FRAME,onFrameLoop);
      }
      
      private function onButtonOut(evt:MouseEvent):void
      {
         channel.stop();
         this.removeEventListener(Event.ENTER_FRAME,onFrameLoop);
         this.addEventListener(Event.ENTER_FRAME,onBackFrameLoop);
      }
      
      private function onFrameLoop(evt:Event):void
      {
         if(this.currentFrame < this.totalFrames)
         {
            this.nextFrame();
         }else {
            this.removeEventListener(Event.ENTER_FRAME,onFrameLoop);
         }
      }
      
      private function onBackFrameLoop(evt:Event):void
      {
         if(this.currentFrame > 1)
         {
            this.prevFrame();
         }else {
            this.removeEventListener(Event.ENTER_FRAME,onBackFrameLoop);
         }
      }
   }
}


prove la clase y funciona no hay retardos , ni conflictos con las animaciones del boton espero te sirva :)

Jonathan

Por maneuver

243 de clabLevel



Genero:Masculino  

Mexico City

chrome
Citar            
MensajeEscrito el 21 Ago 2009 11:05 am
Hola Jonathan ,muchas gracias por darme en bandeja este codigo,pero aun asi..no consigo hacer que me funcione.

He creado una nueva clase que se llama ButtonClass.as y la he importado en main.as.

En mi biblioteca tengo archivado misonido.mp3 .
En el escenario tengo un Clip de pelicula con instancia miboton.Y luego en AS creo un evento a la instancia para que cuando haga "mouseover" se reproduzca el sonido.

He probado a exportar mi archivo misonido.mp3 a AS.Sin tener muy claro que clase y clase base debo poner.En teoria pense que ButtonClass,pero luego me marca error con SoundLoop en el ButtonClass.as.

vamos que me estoy haciendo un lio de tres pares..

Por muse

50 de clabLevel



 

msie8
Citar            
MensajeEscrito el 21 Ago 2009 05:08 pm
ok esa clase ButtonClass no es necesario importarla ala clase Main, tu boton que me imagino es un movieclip, debe de estar en la libreria ,ahora has lo siguiente:
1. selecciona el simbolo osea tu boton en la libreria.
2. seleccionado , da click derecho sobre este, y se despliega un tooltip.
3. en ese tooltip , da click en linkage o propiedades , te aparece un cuadro de dialogo.
4. ahora marca la casilla exportar para actionscript .
5.ahora simplemente en Base Class sustituye flash.display.MovieClip, por ButtonClass, y listo

Ahora has lo mismo con tu sonido en la libreria, pero ha este en Base Class no sustituyas nada, pero en Class si, ahi sustituye por SoundLoop , das ok yte aparece un warning ignoralo pulsando ok otra ves, y creo eso es todo..si no pudes
te recomiendo le des una leida a este tip

Jonathan

Por maneuver

243 de clabLevel



Genero:Masculino  

Mexico City

chrome
Citar            
MensajeEscrito el 21 Ago 2009 07:11 pm
Ok,He probado en un archivo unico y funciona perfectamente.Y por ultimo,lo que intento ahora es importarla desde la clase main,para intentar dejar solo en este archivo los movimientos principales,¿que tendria que modificar para conseguir esto?

Por muse

50 de clabLevel



 

msie8
Citar            
MensajeEscrito el 22 Ago 2009 05:07 pm
pues depende de que lo que quieres hacer pero como tu boton esta exportado para actionscript en mi caso le puse como nombre de clase ButtonEntrar y en clase base le deje la que puse anteriormente "ButtonClass" y en la clase Main bastaria con que pusieras :

Código ActionScript :

package
{
   import flash.display.*;
   import flash.events.*;
   
   public class Main extends Sprite
   {
      private var botonEntrar:ButtonEntrar;
      
      public function Main()
      {
         initApp();
      }
      
      private function initApp():void
      {
         botonEntrar = new ButtonEntrar();
         addChild(botonEntrar);
         botonEntrar.addEventListener(MouseEvent.CLICK, onButtonClick);
      }
      
      private function onButtonClick(evt:MouseEvent):void
      {
         //
      }
   }
   
}

es eso alo que te refires o tal vez no te entendi :?
Saludos.

Jonathan

Por maneuver

243 de clabLevel



Genero:Masculino  

Mexico City

chrome
Citar            
MensajeEscrito el 24 Ago 2009 09:57 am
Muchisimas gracias Jonathan , me entendiste bien.

Ahora tengo la class ButtonClass asociada a la principal,y el sonido funciona perfect.Al final elimine la funcion "mouse out"
para que no cortara el sonido.

Muchas gracias de nuevo y
hasta otra!

Por muse

50 de clabLevel



 

msie8

 

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