Carga de sonidos y visualización del espectro en Actionscript 3.0

Carga de sonidos y visualización del espectro en Actionscript 3.0

Etiquetas: SoundChannel Sound ByteArray computeSpectrum

Imagen en reemplazo de flash

Con AS3 podemos visualizar el espectro de sonido de un audio. Con unas pocas lineas de código, podemos hacer cosas impensables con anteriores versiones del lenguaje. Este es el resumen del código:

-Creo un objeto de tipo Sound() y cargo en él archivo mp3:

  1.  
  2. sonido = new Sound(); 
  3. var request:URLRequest = new URLRequest(url); 
  4. sonido.addEventListener(Event.COMPLETE, sonidoCargado);
  5. sonido.load(request);
  6.  

-Programo la carga para que cuando termine se ejecute la función sonidoCargado. En esta función reproduzco el sonido (canal = sonido.play(0,1000);) y añado un evento para que se pinte el espectro de sonido (addEventListener(Event.ENTER_FRAME,mover)).

-La función mover es la encargada de "Pintar" el espectro. El espectro se almacena en la variable arrayMixer en forma de matriz de bits. Los elementos de esta matriz pueden ser 1 o 0. Resumiendo, podemos decir que cuantos más 1 haya, más "alto suena el sonido". Recorro la matriz y sumo todos esos 1, para ver como de grande tengo que pintar la barra de volumen. Cuando tengo ese valor lo almaceno en la matriz de volúmenes. Depués de esto, recorro toda la matriz de volúmenes y pinto una barra para cada valor almacenado.

El código completo:

  1.  
  2. package {
  3. 	import flash.display.*;
  4. 	import flash.events.*;
  5. 	import flash.media.*;
  6. 	import flash.utils.ByteArray;
  7. 	import flash.net.*;
  8. 	public class CargadorSonidos extends Sprite {
  9. 		var url:String = "sonido.mp3";
  10. 		var canal:SoundChannel;
  11. 		var sonido:Sound;
  12. 		var fourierTransform:Boolean = false;
  13. 		var arrayMixer:ByteArray = new ByteArray();
  14. 		var volumenes:Array = new Array();
  15. 		public function CargadorSonidos():void {
  16. 			cargarSonido();
  17. 		}
  18. 		function cargarSonido():void {
  19. 			SoundMixer.stopAll();
  20. 			sonido = new Sound();
  21. 			var request:URLRequest = new URLRequest(url);
  22. 			sonido.addEventListener(Event.COMPLETE, sonidoCargado);
  23. 			sonido.load(request);
  24. 		}
  25. 		function sonidoCargado(event:Event):void {
  26. 			canal = sonido.play(0,1000);
  27. 			addEventListener(Event.ENTER_FRAME,mover);
  28. 		}
  29. 		function mover(e:Event):void {
  30. 			SoundMixer.computeSpectrum(arrayMixer, true);
  31. 			var c = 0;
  32. 			for (var i = 0; i < arrayMixer.length; i++) {
  33. 				c += arrayMixer[i];
  34. 			}
  35. 			volumenes.push(c);
  36. 			if (volumenes.length > 400) {
  37. 				volumenes.splice(0,1);
  38. 			}
  39. 			graphics.clear();
  40. 			graphics.lineStyle(1, 0x000000);
  41. 			graphics.beginFill(0x000000);
  42. 			for (var j = 0; j < volumenes.length; j++) {
  43. 				graphics.lineTo(j,100+volumenes[j]/1200);
  44. 				graphics.lineTo(j,100-volumenes[j]/1200);
  45. 				graphics.moveTo(j,100);
  46. 			}
  47. 			graphics.lineTo(volumenes.length,100);
  48. 			graphics.lineTo(0,100);
  49. 		}
  50. 	}
  51. }
  52.  

Descargar archivos

Comentarios
    • Autor
    • arcada6am
    Estoy buscando un programilla para agregar en una web que juegue con el sonido de un reproductor que ya tengo. La pregunta es, este "espectometro" (me lo invento) podria captar simplemente lo que está sonando en dicha web, o en la salida de audio del pc que lo visualice¿? Este codigo es justo lo que estoy buscando pero no se si seria posible lo que te comento, gracias por el post, y gracias de antemano. :-)
    • Autor
    • esedeerre

    Buenas, desde Flash solo puedes captar el espectro de sonidos que se estén reproduciendo dentro de Flash o en el micrófono del usuario:

    http://www.esedeerre.com/ejemplo/9/114/utilizar-el-micrfono-en-actionscript-30

    Ahora mismo no me suena que en ningún lenguaje puedas visualizar el espectro de sonido de sonidos reproduciendose dentro del navegador. Ten en cuenta que tendrias que "meterte" dentro del ordenador del usuario para hacerlo.

    • Autor
    • cristian
    Una consulta. es posible grabar mi voz en un archivo .mp3 y con el microfono repetir lo del archivo .mp3 y que los compare. ej: en el archivo mp3 digo hola y despues cuando activo la funcion del microfono y digo hola se puedan comparar entre lo que hable por microfono y el archivo mp3. Si no, es posible que el al recorrer el array del espectro pueda comparar el archivo.mp3 y lo que se dice por microfono, ya que he tratado de buscar informacion sobre reconocimiento de voz y no he encontrado nada para actionscript. gracias
    • Autor
    • elvis
    xq no puedo ver el espectro
    • Autor
    • yopo
    queria saber si se puede hacer un grafico del sonido que sale desde un streaming gracias!!!!!!!!!!!!!!
    • Autor
    • Gustavo Morean
    Muy buenos tips... excelente sabes ando buscando alguna documentacion donde se defina y se explique detalladamente cada funcion, variable y todo lo referente al AS3 si sabes de alguno gracias...
Dejar un comentario
Tu nombre (obligatorio):

E-mail (obligatorio, no se mostrará):

Web:

Comentario: