package spectrum
{
import flash.display.MovieClip;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.filters.BlurFilter;
import flash.filters.ColorMatrixFilter;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.media.SoundMixer;
import flash.utils.ByteArray;
import flash.utils.Timer;
import flash.display.PixelSnapping;
public class Spectrum extends MovieClip
{
private var byteArray:ByteArray;
private var _sprite:Sprite;
private var sprite:Sprite;
private var timer:Timer;
private var thisW:Number;
private var thisH:Number;
private var bitmapData:BitmapData;
private var bitmap:Bitmap;
private var blur:BlurFilter;
private var colorMatrixFilter:ColorMatrixFilter;
private var _color:ColorChange = new ColorChange();
public function Spectrum(width:Number=550,height:Number=400)
{
thisW = width;
thisH = height;
byteArray = new ByteArray ;
_sprite = new Sprite();
sprite = new Sprite();
/*位图是否透明true/false*/
bitmapData = new BitmapData(thisW,thisH,true,0);
bitmap = addChild(new Bitmap(bitmapData)) as Bitmap;
colorMatrixFilter = new ColorMatrixFilter([1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,.96,0]);
timer = new Timer(30);
timer.addEventListener(TimerEvent.TIMER,timerHandler);
timer.start();
}
private function timerHandler(event:TimerEvent):void
{
SoundMixer.computeSpectrum(byteArray,true,0);
_color.enterFrameHandler()
_sprite.graphics.clear();
sprite.graphics.clear();
_sprite.graphics.beginFill(_color.color_number,1);
sprite.graphics.beginFill(0xffffff,1)
var num:Number;
var n:Number=thisW/2/256
/*left*/
for (var i:int =0; i <256; i++)
{
num =byteArray.readFloat()
_sprite.graphics.drawRect(i*n+thisW/2,thisH,n-1,-(thisH*num/1.4-4));
sprite.graphics.drawRect(i*n+thisW/2,thisH-(thisH*num/1.4),n-1,1);
}
/*right*/
for (i=256; i>0; i--)
{
num = byteArray.readFloat();
_sprite.graphics.drawRect(i*n-n,thisH,n-1,-(thisH*num/1.4-4));
sprite.graphics.drawRect(i*n-n,thisH-(thisH*num/1.4),n-1,1);
}
_sprite.graphics.endFill();
sprite.graphics.endFill()
bitmapData.lock();
/*是否使用ColorMatrixFilter*/
bitmapData.applyFilter(bitmapData,bitmapData.rect,new Point(),colorMatrixFilter);
bitmapData.applyFilter(bitmapData, bitmapData.rect, new Point(), new BlurFilter(8, 8,2));
bitmapData.draw(_sprite);
bitmapData.draw(sprite);
bitmapData.unlock();
}
}
}
import flash.display.Sprite;
import flash.events.Event;
class ColorChange
{
private var colorNumber:uint = 0xf09000;
private var colorArray:Array;
private var color_index:Number = 1;
private var mz:int = 1;
public function ColorChange()
{
colorArray = color_arr();
}
public function enterFrameHandler():void
{
var i:Number;
var j:Number;
i = Math.random();
if (i> 0.99)
{
mz *= -1;
}
j = Math.round(mz * i * 5);
color_index += j;
if (color_index < 0)
{
color_index = colorArray.length - 1;
}
else
{
if (color_index >= colorArray.length)
{
color_index = 0;
}
}
colorNumber = colorArray[color_index];
}
private function color_arr():Array
{
var n:int = 0;
var color1:Array = [];
var color2:Array = [];
var color3:Array = [];
var color4:Array = [];
var color5:Array = [];
var color6:Array = [];
var color7:Array;
while (n < 0xFF)
{
color1.push(0xFF0000 + n * 256);
color2.push((0xFF - n) * 65536 + 0xFF00);
color3.push(0xFF00 + n);
color4.push((0xFF - n) * 256 + 0xFF);
color5.push(0xFF + n * 65536);
color6.push(0xFF - n + 0xFF0000);
n += 3;
}
color7 = [];
color7 = [].concat(color1).concat(color2).concat(color3).concat(color4).concat(color5).concat(color6);
return color7;
}
public function get color_number():Number
{
return colorNumber;
}
}
评论