I’ve made a spectrum display with just 5 bars, but I can’t make it dynamic enough. Could anyone take a look at it?
import gs.TweenMax;
import gs.easing.*
var songsArry:Array = new Array("1.mp3", "2.mp3", "3.mp3", "4.mp3", "5.mp3", "6.mp3");
var defaultSong:uint = 0;
var currentSong:uint = defaultSong;
var song:Sound = new Sound();
var songChannel:SoundChannel;
function loadedSong(e:Event):void {
songChannel = e.target.play();
songChannel.addEventListener(Event.SOUND_COMPLETE, songEnded);
};
function preloadSong(e:ProgressEvent):void {
progressTF.text = e.target.bytesLoaded;
};
song.addEventListener(Event.COMPLETE, loadedSong);
song.addEventListener(ProgressEvent.PROGRESS, preloadSong);
song.load(new URLRequest("music/"+songsArry[defaultSong]));
function songEnded(e:Event):void {
visdisplayUpdate.stop();
};
var displayUpdate:Number = .1;// seconds
var barHeight:Number = 30;
var visdisplayUpdate:Timer = new Timer(displayUpdate*1000);
var nrOfBars:int = 5;
var myByteArray:ByteArray = new ByteArray();
var channel:uint = 256; //256 just left, 512 l&r channel
var range:uint = Math.floor(channel/nrOfBars);
function updateVis(e:TimerEvent):void {
SoundMixer.computeSpectrum(myByteArray, true);
var i:uint;
var average:Number = 0;
for (i=0; i<channel;i++) {
var barParam:Number = myByteArray.readFloat();
if (i>0 && i<range) {
average += barParam;
} else if(i == range) {
TweenMax.to(visualizerMC.bar0, .1, {height:(average/range)*barHeight+1, overwrite:1});
average = 0;
};
if (i>range && i<range*2) {
average += barParam;
} else if(i == range*2) {
TweenMax.to(visualizerMC.bar1, .1, {height:(average/range)*barHeight+1, overwrite:1});
average = 0;
};
if (i>range*2 && i<range*3) {
average += barParam;
} else if(i == range*3) {
TweenMax.to(visualizerMC.bar2, .1, {height:(average/range)*barHeight+1, overwrite:1});
average = 0;
};
if (i>range*3 && i<range*4) {
average += barParam;
} else if(i == range*4) {
TweenMax.to(visualizerMC.bar3, .1, {height:(average/range)*barHeight+1, overwrite:1});
average = 0;
};
if (i>range*4 && i<range*5) {
average += barParam;
} else if (i == range*5) {
TweenMax.to(visualizerMC.bar4, .1, {height:(average/range)*barHeight+1, overwrite:1});
average = 0;
};
};
};
visdisplayUpdate.addEventListener(TimerEvent.TIMER, updateVis);
visdisplayUpdate.addEventListener(TimerEvent.TIMER, tempVis);
visdisplayUpdate.start();
// this one is just for reference
var gr:Sprite = new Sprite();
gr.x = 20;
gr.y = 200;
addChild(gr);
var ba:ByteArray = new ByteArray();
function tempVis(e:TimerEvent):void {
SoundMixer.computeSpectrum(ba, true);
var i:int;
gr.graphics.clear();
gr.graphics.lineStyle(0, 0xFF0000);
gr.graphics.beginFill(0xFF0000);
gr.graphics.moveTo(0, 0);
var w:int = 1;
for (i=0; i<256; i+=w) {
var t:Number = ba.readFloat();
var n:Number = (Math.abs(t) * 100);
gr.graphics.drawRect(i, 0, w, -n);
}
}
Just add any mp3 to the music/ folder and name it “1.mp3”.
Sample: http://www.marcinbauer.com/work/spectrum/mp3.html
Source code in CS3.