Bueno, con la llegada del ActionScript 3 llegaron cosas nuevas, y una de ellas fue la clase Flash.media.SoundMixer; que nos permite realizar un ecualizador grafico, hoy veremos como hacerlo , para ello utilizaremos una clase que llamaremos "PlaySound" que se encargara de reproducir el sonido, y pasarnos la información del ecualizador, bien empecemos creando la clase, abre tu editor de texto preferido, crea un archivo y nombralo como "PlaySound.as", luego coloca el siguiente código:
bueno en primer instancia, importamos las clases a utilizar, de las cuales las mas importantes son flash.media.Sound; // Que nos permite cargar y reproducir un sonido flash.media.SoundChannel; //Para controlar el sonido cargado flash.media.SoundTransform; //que nos permite, asignar las propiedades de volumen y pannig al sonido flash.media.SoundMixer;//Nos devuelve los valores de la Onda de sonido o el spectro de frecuencia que usaremos para el ecualizador flash.utils.ByteArray; //Para crear un ByteArray, que es donde almacenaremos los valores del ecualizador
luego, creamos la clase en si que llamaremos PlaySound, y le asignaremos algunas variables a utilizar, y al final crearemos el constructor de la clase
Código :
public class PlaySound extends Sprite {
private var url:String = "MySound.mp3";//Variable para almacenar el archivo a reproducir
private var song:SoundChannel;//Instancia de SoundChannell
private var soundFactory:Sound;//Instancia de Sound
private var FourierTransform:Boolean = false;//Clase que usaremos para la transformación fourier, que ya explicaremos más adelante
private var arrayMixer:ByteArray = new ByteArray();//ByteArray, para almacenar los valores del ecualizador
private var pan:int = 0; //Para el ajuste de la salida del audio
private var porcentLoad:Number = 0;
public function PlaySound() {
CargarSong();
}
}
Ok, vemos que desde el constructor llamamos a una función llamada "CargarSong", ok, vamos a crearla;
Código :
public function CargarSong():void{
SoundMixer.stopAll();//Metodo de la clase SoundMixer, que nos permite detener todos los Sonidos que se esten reproduciendo
soundFactory = new Sound();//Creamos una nueva instancia de la clase Sound
var request:URLRequest = new URLRequest(url);//Hacemos la petición del mp3
//Luego asiganmos los Listener de la clase Sound();
soundFactory.addEventListener(Event.COMPLETE, completeHandler);
soundFactory.addEventListener(ProgressEvent.PROGRESS, progressHandler);
soundFactory.load(request);//Cargamos la canción
}
Luego procedamos a realizar los manejadores de eventos para la clase Sound;
Código :
private function completeHandler(event:Event):void {
//Una Vez que la canción se halla cargado por completo la reproducimos
ReproducirSong();
}
private function progressHandler(event:ProgressEvent):void {
//Mientras se carga, acutalizamos el valor de la variable porcentLoad
porcentLoad = Math.round((event.bytesLoaded*100)/event.bytesTotal);
}
Vemos que cuando la canción se carga por completo, ejecutamos una función llamada ReproducirSong, que realmente no tiene mucha ciencia, como vemos a continuación
Código :
private function ReproducirSong():void{
song = soundFactory.play();//La ejecutamos
}
Listo, ya tenemos el codigo, que se encarga de cargar una canción, ahora bien, se preguntaran "Ok, pero, ¿Como creo el Ecualizador?", ok, vamos a ello
Código :
public function get Mixer():ByteArray{
//Llamamos al metodo estatico computeSpectrum de la clase SounMixer, y le pasamos los valores
//del ByteArray donde se almacenaran, o el raw_wave o el spectro de frecuencia
//y un valor Boolean que indica si se debe realizar la transforación Fourier o no
//Al final retornamos el ByteArray
SoundMixer.computeSpectrum(arrayMixer, FourierTransform);
return arrayMixer;
}
Listo, eso es todo lo que necesitamos para el ecualizador, solo una simple linea de condigo , vamos a explicar, el metodo "computeSpectrum" de la clase SoundMixer, posee la siguiente forma:
vemos que Recibe un ByteArray, que es el unico valor Obligatorio, luego un Booleno y un valor entero, ok!, pero que hace?, Simple, guarda en el ByteArray que le pasamos, 512 elementos, del tipo float(), que vienen a ser los valores de la onda de sonido (Sound Wave), de la reproducción acual, son 512, ya que los primeros 256 son para el parlante izquierdo, y los demas son para el parlante derecho, los valores estan comprendido desde -1.0 hasta 1.0, luego tenemos el valor booleno, si especificamos "true", ya no nos devolvera una onda de sonido, sino antes de guadar la información el ByteArray, aplicara la transformacion Fourier a la onda, y almacenara entonces un espectro de frecuencia, donde los valores del lado derecho vienen a ser ondas de alta Frecuencia, y los de la izquierda de baja Frecuencia.
Vamos a añadir una propiedad mas a la clase, que nos permitira especificar si queremos aplicar la transformación fourier o no veamos:
Código :
public function set Fourier(valor:Boolean):void{
this.FourierTransform = valor;
}
public function get Fourier():Boolean{
return FourierTransform;
}
Ya con esto tenemos creada la clase, ahora solo tienes que utilizarla, que es lo mas sencillo, y como representar el Ecualizador ya queda de parte de tu imaginación, solo tienes que saber que el ByteArray que te devuelve la propiedad Mixer de la clase que creamos, almacena 512 elementos como valores del tipo Float, y si tienes por ejemplo, 512 barras en una pelicula y quieres moverlas al ritmo de la canción solo tendrias que modificar la propiedad scaleY de cada una, con los valores del array.
aqui puedes ver como queda, y ademas descargarte el código
Wow, realmente muy buen post. Es muy interesante imaginar otras aplicaciones a nivel de interfaz de usuario que pueda tener esta nueva habilidad de Flash.
Bueno a mi parecer ahora que es el mundo de la musica es bueno que se publiquen codigos muy interesantes, para la creacion de estas mas aun en Flash, bueno esperare la version 9, atte. Raul Narvaez Por:Raul Narvaez_blog
me gustaria saber con que estan trabajando ? que programa y como hago para unirme quiero saber como ?? gracias Por:eduardo_blog
Hola , como se genera la imagen , y como se que tengo el AS 3.0 Por:Mundix_blog
Saludos , tengo varias preguntas sobre el equalizador ,
como puedo limitar el numero de barras , y si quisiera ponerlo dentro de otro simbolo?
me interesa poner las barras que salen a la derecha pegado y a la izq. al fondo en el medio y que solo me salgan 20 barras en total. Por:Mundix_blog
Tengo instalado el flash 8 e intente probar el ecualizador, pero me marco muchos errores,,que flash o librerias debo de tener para correrlo??? Por:maria_blog
Sos grande maestro ... gracias por la ayuda. Por:PatoChullo
excelente pero no esta por ahi el .fla Por:carlos_blog
Hola , varias preguntas tb sobre el ecualizador:
¿como puedo cambiar la barra por otro elemento distinto?
¿ademas tendria que duplicar el código cuantas barras necesite?
Gracias Por:Ludicabcn-blog
tu sabes sumar tu edad tu lo q tienes q aser es poner tu fecha de nasimiento y el año de haora por ejemplo: 2008 +1999 y te sale la edad q tienes Por:tity la de la tele -blog
hola me llamo prisila pero me disen titi y tu como te yamas me lo dises por favor Por:prisila-blog