Cristalab

Reproducir audio mp3 en Actionscript 3

Por: Zguillez + 12.01.2007

Este es un pequeño ejemplo de cómo reproducir archivos de sonido en Flash o Flex con actionscript 3.

Esta es la clase que crearemos:

Código :

package {
   import flash.display.Sprite;
   import flash.net.URLRequest;
   import flash.media.Sound;
   import flash.media.SoundLoaderContext;
   //--------------------------
   public class Sonido extends Sprite {      
      private var so:Sound;
      private var url:URLRequest;
      private var buffer:SoundLoaderContext;
      private var ini:Number;
      private var loop:Number;
      //----------------------
      public function Sonido(qUrl:String, qBuffer:Number, qIni:Number, qLoop:Number) {
         url = new URLRequest(qUrl);
         buffer = new SoundLoaderContext(qBuffer*1000);
         ini = qIni*1000;
         loop = (qLoop >= 0) ? qLoop : int.MAX_VALUE;
         so = new Sound(url, buffer);
         so.play(ini, loop);
      }
   }
}

Debe ir en un archivo llamado "Sonido.as", situado junto a nuestro archivo .FLA

Para utilizarla colocaríamos en nuestra película flash:

Código :

import Sonido;
var so:Sonido = new Sonido("audio.mp3", 3, 0, -1);


Explicación del código:

La clase contiene 5 variables privadas, 4 de las cuales debemos introducir como parámetro a la hora de generar la instancia. Estas variables son:

url: ruta del archivo mp3
buffer: tiempo del archivo de audio que estará cargado en memoria antes de reproducirse.
ini: posición en la que se comenzará a reproducir el audio
loop: cantidad de veces que se repetirá el audio.

No hay manera de asignar un loop que se repita continuamente, pero un truco para hacer esto sería colocar un número de repeticiones muy elevado, por eso este código:

loop = (qLoop >= 0) ? qLoop : int.MAX_VALUE;

Controla que el valor que le introducimos sea mayor que cero. En caso de introducirle un valor negativo asignará el número de repeticiones al máximo posible en flash (int.MAX_VALUE) osea 2147483647.

Etiquetas actionscript_3

Comentarios | Enviar un comentario
por que heredamos de Sprite?

extends Sprite
Por: eveevans_blog
que bien, estaba buscando la manera de hacer eso, bueno, en realidad no Riendo pero si me va a ser (muy) útil en próximos proyectos en mente.

Gracias
Por: open_eye_blog
Es que no es posible encerrar

so.play(ini, loop);

en un bucle?
Por: Paulo_blog

eveevans_blog :

por que heredamos de Sprite?

Siempre que quieras colocar algo en la linea de tiempo de tu pelicula (ya sea un Movieclip, un video, un audio...) has de extender de Sprite
Por: Zguillez

Paulo_blog :

Es que no es posible encerrar

so.play(ini, loop);

en un bucle?

Al pasarle el valor de repetición ya lo estas metiendo en un bucle. Lo que no puedes definirlo como bucle infinito... pero el valor int.MAX_VALUE hace que se repita 2147483647, con lo que no creo que nadie llegue al final del bucle...
Por: Zguillez
Mmmm así no puedes acceder a las propiedades del sonido. Una opción es hacer que la clase directamente extienda a Sound, así tenemos una clase lista para cargar el sonido y totalmente funcional:

Código :

package {
   import flash.display.Sprite;
   import flash.net.URLRequest;
   import flash.media.Sound;
   import flash.media.SoundLoaderContext;
   //--------------------------
   public class Sonido extends Sound{     
      //public var so:Sound;
      private var path:URLRequest=null;
      private var buffer:SoundLoaderContext;
      private var ini:Number;
      private var loop:Number;
      //----------------------
      public function Sonido(qUrl:String, qBuffer:Number, qIni:Number, qLoop:Number) {
         path = new URLRequest(qUrl);
         buffer = new SoundLoaderContext(qBuffer*1000);
         ini = qIni*1000;
         loop = (qLoop >= 0) ? qLoop : int.MAX_VALUE;
         //so = new Sound(url, buffer);
       this.load(path, buffer)
         //so.play(ini, loop);
       this.play(ini,loop);
      }
   }
}

Por: Zah
Bien, bieeeen, muy bien, que es lo contrario de mal. Sonrisa
Por: Sisco
NO entiendo algo, he visto los codigos de As3 son TAN! complejos... no los entiendo ya no son como antes, alguien me esplica..¿Que acaso cambio el estilo de ActionScript?
En AS2 es mas simple que eso exportar un sonido...
Por: Javier_blog
Relaxxxxxxxxx Javier_Blog, jaja, aun podras usar el viejo AS2
Por: ramiro_olver@
Hola, quisiera saber si álguien puede decirme como adjuntar una canción MP3 a una animación hecha en flash, lo ignoro totalmente porque soy muy nuevo en todo ésto, pero me está volviendo loco, porque cuando elijo: Importar y selecciono la canción no me permite abrirla.
Desde ya muchas gracias.
Lomay
Por: Lomay
muy bueno el ejemplo...
Por: DevosDev_blog
como le asigno sonido a un personaje que tengo en mi pelicula flash por ejemplo:
que tenga la voz del comentario que queremos
gracias enviame la respuesta a lufealfa@gmail.com
gracias. no te demores....
Por: luifer _blog
1º Ese codigo no sirve para loops, ya que agrega ese maldito silencio al final de cada pasada. Todavia estoy buscando si hay alguna solucion para streamear loops sin la pausa.

2º Sprite es un contenedor de datos, al igual que un movieclip. La unica diferencia es que el movieclip tiene timeline y el sprite no, por ende el movieclip importa mas codigo que un sprite (el sprite es mas liviano).
Por: rOY!!!_blog
Me puede explicar mas como funciona esto es que tengo bastantes dudas, por ejemplo en que parte se coloca la URL del mp3

porque veo que hay una qURK;

que signfica

ayuda please!!!!!!!!!!!!!!!!!1
Por: carlosdj_blog
Como hay que hacer para estopear el sonido??

Mi idea es hacer un botón para on y otro para off. ¿Qué tengo que poner en el botón de off para detener el sonido?
Por: Pabloq-blog
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.