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);
}
}
}
}
浙公网安备 33010602011771号