Home > ACTIONSCRIPT 3.0 > [AS3] – Analizzatore di Spettro Audio (Parte I)

[AS3] – Analizzatore di Spettro Audio (Parte I)

 
Questo esempio mostra come realizzare un semplice Analizzatore di Spettro Audio con effetti di sfocatura ( Classe : BlurFilter ), trasformazione del colore ( Classe : ColorMatrixFilter ), ed “avanzamento” della curva.

 

… click sull’immagine

… il codice

// .......................................................
// PROGRAM-ID.    SOUND010.fla
//
// AUTHOR.        silver peacock.
// DATE-WRITTEN.  10/06/2008
// DATE-COMPILED. 25/09/2009
//
// REMARKS.       Analizzatore di Spettro Audio.
//                Questo esempio mostra come acquisire i
//                valori della forma d'onda di un audio in
//                riproduzione con il metodo statico
//                computeSpectrum() della classe SoundMixer
//                e disegnare un grafico corrispondente in
//                un oggetto BitMapData con effetti di
//                sfocatura (BlurFilter) e trasformazione
//                del colore (ColorMatrixFilter).
// .......................................................

import flash.media.Sound;
import flash.utils.ByteArray;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.filters.BlurFilter;
import flash.filters.ColorMatrixFilter;

// ... dichiarazione variabili globali :
var audio       :Sound;
var byteArray   :ByteArray;

var bitMapData  :BitmapData;
var bitMap      :Bitmap;

var curva       :Sprite;
var filtro      :BlurFilter;
var mtxColori   :ColorMatrixFilter;

var box         :Sprite;

var x_0         :Number;
var y_0         :Number;
var xx          :Number;
var yy          :Number;
var coef_x      :uint;
var coef_y      :uint;

// ... crea gli oggetti :

// ... l'oggetto Sound
audio    = new Sound(new URLRequest("Heartbreaker.mp3"));

// ... l'oggetto ByteArray che sara' passato come
//     argomento al metodo statico computeSpectrum()
//     della Classe SounMixer che lo valorizzerà con 512
//     valori a virgola mobile, di cui i primi 256 valori
//     rappresentano il canale sinistro e gli altri 256
//     valori il canale destro.
//
// ... nota : i valori caricati nel ByteArray sono
//     "normalizzati" e compresi tra : -1.0 a +1.0
//     ( vedere la guida in linea )
byteArray   = new ByteArray();

// ... l'oggetto BitmapData (lo sfondo) su cui disegnare
// ... al metodo costruttore sono passati come argomenti :
//     larghezza, altezza, trasparenza e colore.
bitMapData = new BitmapData(400, 200, true, 0x00000000);

// ... la BitMap relativa
bitMap     = new Bitmap(bitMapData);

// ... l'oggetto Sprite
curva      = new Sprite();

// ... l'ggetto BlurFilter per creare l'effetto sfocatura.
// ... al costruttore sono passati come argomenti :
//     quantita' di sfocatura orizzontale, quantita' di
//     di sfocatura verticale e numero di operazioni di
//     sfocatura da ripetere (qualita' della sfocatura)
filtro     = new BlurFilter(2, 2, BitmapFilterQuality.LOW);

// ... l'oggetto ColorMatrixFilter per creare l'effetto di
//     trasformazione dei Colori.
// ... al costruttore viene passato un'Array di 20
//     elementi (una matrice 4x5) corrispondenti ai valori
//     per la trasformazione del colore ed alpha (RGBA)
mtxColori  = new ColorMatrixFilter([1,0,0,0,0,
					  				0,1,0,0,0,
									0,0,2,0,0,
									0,0,0,0.98,0]);

// ... crea un oggetto contenitore della BitMap
box        = new Sprite();
box.graphics.clear();
box.graphics.beginFill(0x666666, 1);
box.graphics.drawRect(0, 0, bitMap.width, bitMap.height);
box.graphics.endFill();

// ... imposta le posizioni iniziali del grafico
x_0    = 0;
y_0    = (bitMap.height/2);

// ... imposta i coefficienti moltiplicativi per ottenere
//     le coordinate x ed y a partire dai valori della
//     forma d'onda presenti nel ByteArray (-1.0 e + 1.0)
coef_x = 20;
coef_y = 80;

// ... aggiungi la BitMap al box (contenitore)
box.addChild(bitMap);

// ... aggiungta la cura al box
box.addChild(curva);

// ... posiziona ed aggiungi il box allo Stage
box.x   =  -1;
box.y   = 100;

addChild(box);

// ... aggiungi l'ascoltatore evento : ENTER_FRAME
// ... la funzione sara' richiamata ad ogni riproduzione
//     del frame (fps)
addEventListener(Event.ENTER_FRAME, disegnaAnalizzatore);

// ... ok, avvia il sound!
audio.play(0, 1);

// ...

// .......................................................
//  FUNCTION : disegnaAnalizzatore()
//             acquisizione dei dati realtivi alla forma
//             d'onda e disegno della curva
// .......................................................
function disegnaAnalizzatore(evento:Event):void
{
    // ... pulisci il graphics prima di ridisegnare
    curva.graphics.clear();

    // ... imposta lo stile (spessore e colore)
    curva.graphics.lineStyle(1, 0x99CCFF);

	// ... posiziona la penna
	curva.graphics.moveTo(x_0, y_0);

	// ... carica la forma d'onda del sound nel ByteArray
	SoundMixer.computeSpectrum(byteArray);

	// ... ciclo sugli elementi del ByteArray
	for(var i:uint = 0; i  (bitMap.width-2))
		{
			xx = (bitMap.width-1);
			yy = (bitMap.height/2);
		}

		if (xx == 0)
		{
			yy = (bitMap.height/2);
		}

		// ... calcola la coordinata y :
		//     leggi il valore dal byteArray e moltiplica
		//     per il coefficiente della y.
		// ... nota : i valori presenti nel byteArray sono
		//            compresi tra -1.0 e +1.0
		yy = y_0 + ( byteArray.readFloat() * coef_y );

		// ... traccia la linea fino a
		curva.graphics.lineTo(xx, yy);
	}

	// ... disegna la curva nella bitmap
	bitMapData.draw(curva);

	// ... applica il filtro di sfocatura
	bitMapData.applyFilter(bitMapData, bitMapData.rect,
						   new Point(), filtro);

	// ... applica la matrice di trasfomazione dei
	//     colori
	bitMapData.applyFilter(bitMapData, bitMapData.rect,
						   new Point(), mtxColori);

	// ... scroll della bitmapData, per dare l'effetto
	//     di avanzamento (e' lo sfondo che si sposta)
	//     (+ verso destra, - verso sinistra)
	bitMapData.scroll(3,0);
}
// .......................................................

// ... END OF PROGRAM

Annunci
Categorie:ACTIONSCRIPT 3.0
  1. Salvo
    25 novembre 2009 alle 18:31

    Ciao Silver, sono sempre io che ti “rivisito”. Sto andando avanti col mio progetto. Potresti aiutarmi a trovare le librerie per riuscire a visualizzare lo spettro di un file mp3. Non l’equalizzazione, ma, dopo aver analizzato il file mostrare il suo spettro…diciamo come il waveeditor del nero…
    Ci conto Silver…per me è un progetto importante!!! Ciaooooooooo

  2. Salvo
    8 novembre 2009 alle 00:40

    Ciao, questo programma è davvero interessante,
    è possibile avere il .fla?

  1. No trackbacks yet.

Leave a Reply ... thank you

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...