Hace tiempo que buscaba la manera de hacer un ecualizador REAL (no una animación con los movimientos aleatorios) hasta que encontré este tutorial donde explicaba la manera de hacerlo. Bien, pues no tengo ni idea de como utilizarla en un proyecto.
Supongo que el codigo de la clase es todo esto:
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; } 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(); } } 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 } 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); } private function ReproducirSong():void{ song = soundFactory.play();//La ejecutamos } 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; } public function set Fourier(valor:Boolean):void{ this.FourierTransform = valor; } public function get Fourier():Boolean{ return FourierTransform; }
Si es así, al abrirlo con Flash CS4 me detecta 8 errores:
- Línea 14/1114: El atributo public sólo se puede utilizar dentro de un paquete. /public class PlaySound extends Sprite {
- Línea 28/ 1114: El atributo public sólo se puede utilizar dentro de un paquete. /public function CargarSong():void{
- Línea 38/ 1013: El atributo private sólo se puede utilizar en definiciones de propiedad de clase. /private function completeHandler(event:Event):void {
- Línea 44/ 1013: El atributo private sólo se puede utilizar en definiciones de propiedad de clase. /private function progressHandler(event:ProgressEvent):void {
- Línea 49/ 1013: El atributo private sólo se puede utilizar en definiciones de propiedad de clase. /private function ReproducirSong():void{
- Línea 53/ 1114: El atributo public sólo se puede utilizar dentro de un paquete. /public function get Mixer():ByteArray{
- Línea 62/ 1114: El atributo public sólo se puede utilizar dentro de un paquete. /1114: El atributo public sólo se puede utilizar dentro de un paquete.
- Línea 66/ 1114: El atributo public sólo se puede utilizar dentro de un paquete. /public function get Fourier():Boolean{
¿Alguien me puede explicar que debo hacer con esta clase y como solucionar los errores?
Un saludo