as3.0声音波形频谱系列_03
package { import flash.display.Sprite; import flash.display.BitmapData; import flash.display.Bitmap; import flash.geom.Point; import flash.utils.ByteArray; import flash.filters.BlurFilter; import flash.geom.ColorTransform; import flash.display.PixelSnapping; import flash.events.Event; import flash.media.SoundMixer; import flash.geom.Rectangle; public class Spectrum extends Sprite { var thisW:Number; var thisH:Number; var parBd:BitmapData; var bitmapData:BitmapData; var parBit:Bitmap; var bitmap:Bitmap; var point:Point; var bytes:ByteArray; var blur:BlurFilter; var colorTransform:ColorTransform; var list:Vector.<Point>= new Vector.<Point>(); public function Spectrum(w:Number=550,h:Number=400) { thisW = w; thisH = h; init(); } function init():void { parBd = new BitmapData(thisW,thisH,true,0); bitmapData = new BitmapData(thisW,thisH,true,0); parBit = addChild(new Bitmap(parBd,PixelSnapping.AUTO,false)) as Bitmap; bitmap = addChild(new Bitmap(bitmapData,PixelSnapping.AUTO,false)) as Bitmap; parBit.scaleX = parBit.scaleY = -1; colorTransform = new ColorTransform(1,11,24,0.95,0,0,0,0); blur = new BlurFilter(6,5,8); parBit.filters = [blur]; for (var i:int=0; i<768; i++) { point= new Point(); point.x = thisW * 0.5 + Math.cos(i) * 50; point.y = thisH * 0.5 + Math.sin(i) * 50; list.push(point); } bytes=new ByteArray(); addEventListener(Event.ENTER_FRAME, enterFrameHandler); } private function enterFrameHandler(event:Event):void { var newPoint:Point=new Point(); SoundMixer.computeSpectrum(bytes,false,0); parBd.colorTransform(new Rectangle(0, 0,thisW,thisH),colorTransform); bitmapData.colorTransform(new Rectangle(0, 0,thisW,thisH),colorTransform); for (var i:int=0; i<list.length; i++) { newPoint=list[i] if (i< 256) { newPoint.x = thisW * 0.5 + Math.cos(i* 1.40625 * Math.PI / 180) * (thisW * 0.3 + bytes.readFloat() * 55); newPoint.y = thisH * 0.5 + Math.sin(i* 1.40625 * Math.PI / 180) * (thisH * 0.3 + bytes.readFloat() * 55); } else if (i!= 256) { if (i> 256) { newPoint.x = (list[i- 256].x + list[i- 255].x) * 0.5; newPoint.y = (list[i- 256].y + list[i- 255].y) * 0.5; } } else { newPoint.x = (list[256].x + list[0].x) * 0.5; newPoint.y = (list[256].y + list[0].y) * 0.5; } parBd.setPixel32(newPoint.x, newPoint.y, 5278190080); bitmapData.setPixel32(newPoint.x, newPoint.y,2278190080); } } } }