AS3 - SoundMixer.computeSpectrum();
Les dejo esta pequeña clase donde se hace uso del método computeSpectrum() de la clase SoundMixer en modo FFT (Fast Fourier Transform). Por medio del método computeSpectrum() se puede tomar la onda de un sonido que se está reproduciendo., y lluego almacenarla dentro de un ByteArray. Teniendo acceso al mismo, podemos generar representaciones visuales de dichas ondas. Este es un sencillo ejemplo que desarrollé a modo de clase para que sea personalizable, escalable y reutilizable; verán al descargar los archivos que no es de gran complejidad, y lo más interesante es la sencillez de su implementación; modificando algunos parámetros, podemos lograr distintos gráficos, que con un poco de ingenio e imaginación, se pueden adaptar a cualquier proyecto.
click aca para descargar los archivos!
(eliminé el MP3 del .rar para facilitar la descarga. Para que puedas ver el ejemplo en funcionamiento, mové un mp3 a la carpeta sound, y renombrarlo como song.mp3)
index.fla:
Hay cuatro bloques de código:
En primer lugar, importamos la clase:
import com.FrequencyVisualization;
Luego cargamos de manera externa un sonido:
var soundReq=new URLRequest(”sound/song.mp3″);
var typeSound = new Sound();
typeSound.load(soundReq);
typeSound.play(0);
A continuación, creamos un objeto al cual le vamos a asignar una serie de propiedades, y que usaremos para enviarle a la clase. Las propiedades de dicho objeto se van a tener en cuenta dentro de la clase a la hora de dibujar (y redibujar) los contenidos del espectro de sonidos. Se le pueden agregar unos cuantos parámetros más, pero con estos poquitos a mi me alcanzó (al menos hasta ahora) para poder aplicarlo prácticamente a cualquier desarrollo sin tener que hacer grandes modificaciones: Los parámetros a enviar son el color de las barras del espectro (barFill), la cantidad de barras (barsNumber), el ancho de las mismas y su separación (barWidth y barsSeparation) y por último, un valor alpha (barAlpha). Más abajo hay algunas imágenes para ver como combinando distintos valores para estas propiedades, podemos obtener resultados considerablemente distintos.
var visObj:Object = new Object();
visObj.barFill = 0xff0066;
visObj.barsNumber=10;
visObj.barWidth = 2;
visObj.barsSeparation = 2;
visObj.barAlpha = 0;
Para concluir, creamos una instancia de la clase FrequencyVisualization, y le pasamos como parámetro el objeto que acabamos de crear:
var eVis:FrequencyVisualization=new FrequencyVisualization(visObj);
eVis.x=250;
eVis.y=stage.stageHeight-30;
stage.addChild(eVis);
Eso es todo
Los programadores tienen con qué entretenerse dentro de la clase FrequencyVisualization, y quienes no tengan interés en entender códigos ni enredarse en su lógica, tienen un modo sencillo e intuitivo para que en cuatro pasos puedan contar con su ecualizador…
Algunas alternativas:
Modificando los distintos valores de las propiedades que asignamos al objeto que enviamos como parámetro a la clase, obtenemos diversos resultados:
var visObj:Object = new Object();
visObj.barFill = 0xff0066;
visObj.barsNumber=10;
visObj.barWidth = 2;
visObj.barsSeparation = 2;
visObj.barAlpha = 0;
var visObj:Object = new Object();
visObj.barFill = 0xff0066;
visObj.barsNumber=50;
visObj.barWidth = 2;
visObj.barsSeparation = 1;
visObj.barAlpha = 1;
var visObj:Object = new Object();
visObj.barFill = 0×00ff00;
visObj.barsNumber=10;
visObj.barWidth = 2;
visObj.barsSeparation = 2;
visObj.barAlpha = 1;
var visObj:Object = new Object();
visObj.barFill = 0×000000;
visObj.barsNumber=5;
visObj.barWidth = 1;
visObj.barsSeparation = 3;
visObj.barAlpha = 1;
var visObj:Object = new Object();
visObj.barFill = 0xFF9900;
visObj.barsNumber=10;
visObj.barWidth = 10;
visObj.barsSeparation = 2;
visObj.barAlpha = 1;
var visObj:Object = new Object();
visObj.barFill = 0×339999;
visObj.barsNumber=10;
visObj.barWidth = 10;
visObj.barsSeparation = 2;
visObj.barAlpha = 0.2;
NOTA: Al trabajar sobre esta clase, establecí el modo FFT (Fast Fourier Transform) debido al tipo de espectro de sonido que debía representar. El método FFT nos devuelve datos del espectro de frecuencias en lugar de datos de forma de onda. En breve voy a escribir un post con clases y ejemplos de representaciones visuales de datos de forma de onda, en lugar de espectros de frecuencia…veremos que se pueden lograr otras animaciones realmente interesantes.
Saludos!
Comments
Leave a Reply





