Tuesday, September 25, 2007

Reproducir un archivo mp3 externo con actionscript 3.0

Bien primero buscamos el archivo mp3 en la red,, por ejemplo: entramos a www.altavista.com > seleccionamos mp3 audio/ buscamos algun artista por ejemplo aerosmith > buscar > y encontraremos algo como:

http://www.gamegringo.com/anna/Aerosmith%20-%20Janie's%20Got%20a%20Gun.mp3

es un archivo mp3 colgado en la red, a la que podemos llamar desde una película flash

aahora vamos con flash.

[CODIGO]
//primero declaramos nuestra variable cancion:
var cancion:Sound=new Sound();

//ahora declaramos la ubicacion
var ubicacion:URLRequest=new URLRequest("http://www.gamegringo.com/anna/Aerosmith%20-%20Janie's%20Got%20a%20Gun.mp3");

//ahora solo queda darle la ubicacion a nuestra cancion:
cancion.load(ubicacion);

//la reproducimos
cancion.play();
[/CODIGO]

,,,bien ahora algo mas completo,, pues podemos saber como va el progreso de carga, el buffer , etc.

[CODIGO]
//estas directivas por si necesitamos usar un archivo A.S 3.0
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.media.Sound;
import flash.net.URLRequest;

//creamos nuestro archivo sonido y le agregamos eventos

var s:Sound = new Sound();

//este permite saber como va el progreso de carga en porcentaje de la cancion en el buffer
s.addEventListener(ProgressEvent.PROGRESS, onLoadProgress);

//permite saber si la cancion ha sido cargado totalmente
s.addEventListener(Event.COMPLETE, onLoadComplete);

//por si hubiera un error como no entontrar el achivo mp3, etc
s.addEventListener(IOErrorEvent.IO_ERROR, onIOError);

//esto lo explique arriba
var
req:URLRequest = new URLRequest("http://www.gamegringo.com/anna/Aerosmith%20-%20Janie's%20Got%20a%20Gun.mp3");
s.load(req);

//muestra el progreso de carga
function onLoadProgress(event:ProgressEvent):void
{
var loadedPct:uint =
Math.round(100 * (event.bytesLoaded / event.bytesTotal));
trace("The sound is " + loadedPct + "% loaded.");
}

//si la cancion esta cargada completamente pone la cancion en play
function onLoadComplete(event:Event):void
{
var localSound:Sound = event.target as Sound;
localSound.play();
}

//si hubiese error
function onIOError(event:IOErrorEvent)
{
trace("The sound could not be loaded: " + event.text);
}

ARCHIVO EJEMPLO
<

DESCARGAR FLA AQUI
Usar el evento EnterFrame en action script 3.0

Bien explicaré este evento de la siguiente manera:
ANTES.- quiero hacer una animación en la que tengo un circulo y hacer que desaparezca aplicandole alpha de 100 % a 0%. Se puede hacer de dos formas:
1.-Creamos nuestro objeto circulo lo arrastramos> convertir a símbolo> y dejas que la línea de tiempo corra,,,, y empieze y termina la animación, si queremos que se detenga le pones stop(); al final del fotograma.

2.-Es a donde queremos llegar, COMO CREAMOS ESTA ANIMACION DESDE ACTION SCRIPT 3.0=? ,, y sobre todo como animarla, crear la linea de tiempo, y finalizarla aqui es donde necesitaremos usar el evento enterFrame. aqui la forma:


import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;

// Dibujar un círculo y añadirlo a el lienzo con addChild
var circle:Sprite = new Sprite();
circle.graphics.beginFill(0x990000);
circle.graphics.drawCircle(50, 50, 50);
circle.graphics.endFill();
addChild(circle);

// Cuando se inicia esta animación, se llama a esta función en cada fotograma.
// El cambio provocado por esta función (actualizado en la pantalla en cada
// fotograma) es lo que hace que se produzca esta animación.
function fadeCircle(event:Event):void
{
circle.alpha -= .05;

if (circle.alpha <= 0)
{
circle.removeEventListener(Event.ENTER_FRAME, fadeCircle);
}
}
//esta funcion startAnimacion crea el evento CLICK para que al hacer click en el circulo
//se inice el evento ENTER_FRAME
function startAnimation(event:MouseEvent):void
{
circle.addEventListener(Event.ENTER_FRAME, fadeCircle);
}

circle.addEventListener(MouseEvent.CLICK, startAnimation);

ahora si quisieramos que se inicie el evento sin hacer click en circulo, hacemos lo siguiente:
//remplazamos las 4 ultimas lineas por(quitando la funcion click):
circle.addEventListener(Event.ENTER_FRAME, fadeCircle);


aqui vemos el ejemplo


click para iniciar el evento enterFrame