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:
Código :
package { //Importamos las clases a utilizar import flash.display.Sprite; import flash.events.*; import flash.media.Sound; import flash.media.SoundChannel; import flash.media.SoundTransform; import flash.media.SoundMixer; import flash.net.URLRequest; import flash.utils.Timer; import flash.utils.ByteArray; }
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:
computeSpectrum(outputArray:ByteArray, FFTMode:Boolean = false, stretchFactor:int = 0):void
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
http://www.aai.com.ve/tools/soundMixer/
espero que les sirva
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Por Freddie el 30 de Octubre de 2006
Realmente un gran tip
Por emalandia el 02 de Noviembre de 2006
lo probaré y seré felíz!
Por Yranac el 02 de Noviembre de 2006
Por Ed el 02 de Noviembre de 2006
Yranac :
Por Yranac el 02 de Noviembre de 2006
Ed :
Yranac :
Por Yranac el 02 de Noviembre de 2006
Ed :
Yranac :
Por Dailion el 05 de Noviembre de 2006
jeje
Interesante As3 tuto
Por Matias el 10 de Noviembre de 2006
Por Freddie el 10 de Noviembre de 2006
Matias_blog :
Por Raul Narvaez el 07 de Diciembre de 2006
Raul Narvaez
Por eduardo el 27 de Marzo de 2007
quiero saber como ?? gracias
Por Mundix el 11 de Abril de 2007
Por Marijo el 20 de Abril de 2007
Por Ed el 20 de Abril de 2007
Marijo_blog :
Por Mundix el 09 de Junio de 2007
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 maria el 24 de Agosto de 2007
Por PatoC el 27 de Septiembre de 2007
Por carlos el 28 de Octubre de 2007
Por Ludicabcn el 17 de Junio de 2008
¿como puedo cambiar la barra por otro elemento distinto?
¿ademas tendria que duplicar el código cuantas barras necesite?
Gracias
Por tity la de la tele el 10 de Julio de 2008
Por prisila el 10 de Julio de 2008
Por gabriel el 15 de Enero de 2009
Por abarabar el 26 de Marzo de 2009
NO HAY NADA...
LO PUEDEN VOLVER A SUBIR??? O MANDENME UN URL A [email protected]
GRACIAs!!!!!
Por abarabar el 26 de Marzo de 2009
jejejjeje
Por leonardo el 07 de Septiembre de 2009
Por shogoki el 07 de Octubre de 2009
Por www.metroflog.com/as el 19 de Octubre de 2009
Por Link muertos el 10 de Diciembre de 2009
Por guaso69 el 26 de Diciembre de 2009
Por oscargim el 01 de Marzo de 2010
Creo el archivo .swf con con el destino fla pero no si tengo q dibujar el equializador y como tendria que hacerlo, Gracias!
Por lucasmoyano el 01 de Marzo de 2010
Por eduardo el 28 de Enero de 2011
Por dany el 28 de Febrero de 2011
Por andrea el 15 de Octubre de 2011
Por Morgan el 26 de Octubre de 2011
Por juanito el 23 de Enero de 2013
Por Ricardo el 27 de Febrero de 2019