package { import flash.display.Sprite; import flash.display.Graphics; import flash.geom.Point; import flash.media.SoundMixer; import flash.utils.ByteArray; import flash.utils.Timer; import flash.events.*; public class visualization extends Sprite { private var _bytes:ByteArray = new ByteArray(); private var _visLoc:Point; private var _visScale:Number; private var _waveHeight:Number; private var _baseNum:Number; private var _fft:Boolean; private var _g:Graphics; private var _timer:Timer; private var _color ; public function visualization(obj:Object) { _waveHeight = obj.waveHeight; _baseNum = obj.baseNum; _visLoc = obj.visLoc; _visScale = obj.visScale; _fft = obj.fft; _color = obj.musicColor; initVars(); addVisTimer(); var canvas:Sprite = new Sprite(); addChild(canvas); canvas.x = _visLoc.x; canvas.y = _visLoc.y; canvas.scaleX = canvas.scaleY = _visScale; _g = canvas.graphics; } private function initVars():void { if (isNaN(_waveHeight)) { _waveHeight = 150; } if (isNaN(_baseNum)) { _baseNum = 0; } if (!(_visLoc is Point)) { _visLoc = new Point(); } if (isNaN(_visScale)) { _visScale = 1; } if (isNaN(_color)) {_color = 0xFF6666;} } public function addVisTimer():void { if (_timer == null) { _timer = new Timer(50); _timer.addEventListener("timer", onVisualize); _timer.start(); } } public function removeVisTimer():void { removeEventListener("timer", onVisualize); _timer = null; } private function onVisualize(evt:TimerEvent):void { SoundMixer.computeSpectrum(_bytes, _fft, 0); _g.clear(); plotWaveform(_color,_baseNum); } private function plotWaveform(col:uint, chanBaseline:Number):void { _g.lineStyle(1, col); for (var i:Number = 0; i < 360; i+=2) { _g.moveTo(i, chanBaseline); _g.lineTo(i, chanBaseline - (Math.abs(_bytes.readFloat()) * _waveHeight)); } } } }