Equalizador Gráfico – classe SoundMixer

Com a entrada do Flash CS3 muitos recursos novos foram adicionados. Um deles é a classe SoundMixer que nesta classe temos um método muito vantajoso para esta versão. computeSpectrum. Este método nos dá o espectro formado pelas ondas da música. Simples e funcional podemos tanto ter o desenho em números formados pelo som como também podemos ter as freqüências separadas em blocos. Assim ficou obvio a possibilidade de criações de player com um equalizador gráfico.

 

equal.jpg

 


Antes de tudo, lembro que estou usando o flash 9 alpha ainda, então aos haxers, flexers e outros, este código deverá sofrer mudanças na criação. O código não complicado, mas para isso precisaremos usar mais outras 3 classes:

var s:Sound = new Sound();
var sc:SoundChannel;
var ba:ByteArray = new ByteArray();
var array:Array;

O básico para tratamento de sons no flash 9 agora.

var numBar:Number = 18;
var endBand:Number = 252;
var barW:Number = 2;

Ai estou inciando as variaveis necessárias, deixei assim para facilitar qualquer tipo de administração. a variável “numBar” é número de barras de amostras, é importante deixar sempre um número múltiplo do endBand porque este é divido e resulta no número de barras e loops do for. endBand define o final da linha de leitura do byte array tornando assim quanto menor o números, maior a perda do agudo. Nesta versão teremos somente o endBand, mas em futuras teremos o initBand. e por último, barW, é a largura da barra.

s.load(new URLRequest(“musica.mp3″));
sc = s.play(0,1000);

carrega a musica com o filename musica.mp3 e dá o play na música por 1000 vezes. hehehe. Infinito em outras palavras.

this.addEventListener(Event.ENTER_FRAME, spectrum);

Nesta linha temos o novo onEnterFrame do flash.

function spectrum(event:Event) {
var a = 0;
graphics.clear();
var aliasing = endBand / numBar;
SoundMixer.computeSpectrum(ba,true,0);

Aqui vem a ser a função que será chamada no evento ENTER_FRAME. todas as vezes que ela for chamada apagaremos o conteúdo exibido anteriormente. o aliasing define o número de bytes a ser analisados por barra a ser mostrada.

for(var b=0; b<numBar; b++){
var analize = 0;
for(var i=0; i < aliasing; i++) {
analize += ba.readFloat();
}
a = analize / aliasing;
var num:Number = a*50;
graphics.lineStyle(1, 0×0066FF|(num << 8));
graphics.drawRect((barW + 2)*b, 100-num, barW, num);
}

Aqui vem a parte do mal, onde realmente é feita a leitura e criação do equalizador gráfico. O for inicial tem o limite o número de barras, o segundo for o aliasing, que é o número de bytes lidos, feito a média deles e retornado o valor para a variável “a” que será aplicado a barra. as duas chamadas de métodos da classe graphics é quem fazem isto.

}

Por fim, terminado. compile e teste. Não esqueça de ter uma música no formato mp3 na mesma pasta do projeto com o respectivo nome indicado no código. Flws.

 

source

 

baseado no site:

 

http://theflashblog.com/

Uma resposta para “Equalizador Gráfico – classe SoundMixer”

  1. James Disse:

    ola amigo, tudo bem, achei muito interessante este equalizador, so que não consigo adapta-lo para um arquivo que ja tenho…

    ´eum arquivo com preloader começando a animação no 3 frame os sois primeiros eu uso para carregar o preloader.

    Como adapto este equalizador, vc tem alguma idéia?

    abraço e bom trabalho

Deixe uma resposta