[ff]: Circle Particle Visualization
forked from Circle Particle Visualization (diff: 49)
ActionScript3 source code
/**
* Copyright bradsedito ( http://wonderfl.net/user/bradsedito )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/6cty
*/
package
{
import flash.net.URLRequest;
import flash.system.Security;
import flash.display.Sprite;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.utils.ByteArray;
import flash.media.SoundMixer;
import flash.events.Event;
import flash.display.Shape;
import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.geom.Point;
import flash.display.StageAlign;
import flash.geom.Matrix;
import flash.geom.ColorTransform;
import flash.display.StageScaleMode;
import flash.geom.Rectangle;
import flash.filters.BlurFilter;
public class FlashTest extends Sprite
{
public const num:int = 128;
public const sDis:Number = 30;
public const lDis:Number = 100;
public const maxDis:Number = 250;
private var i:int;
private var bgm:Sound = new Sound;
private var sc:SoundChannel;
private var power:Number;
private var aPower:Number;
private var ba:ByteArray = new ByteArray;
private var shape:Shape = new Shape();
private var bd:BitmapData = new BitmapData( stage.stageWidth, stage.stageHeight, false, 0 );
private var b:Bitmap = new Bitmap( bd );
private var center:Point = new Point;
private var rot:Number;
private var color:ColorTransform = new ColorTransform( 0.95, 1, 1, 0.9 );
private var blur:BlurFilter = new BlurFilter( 4, 4 );
private var numArr:Array = [];
public function FlashTest()
{
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
// ENTRY POINT:
for( i = 0; i < num *2; ++ i )
{
numArr[ i ] = 0;
}
addChild( b );
addChild( shape );
Security.loadPolicyFile( 'http://commondatastorage.googleapis.com/media_archive/audio/crossdomain.xml' );
Security.allowDomain( 'http://commondatastorage.googleapis.com' );
bgm.addEventListener( Event.COMPLETE, soundLoadedEvent );
bgm.load( new URLRequest( 'http://commondatastorage.googleapis.com/media_archive/audio/Martin%20Solveig%20-%20Why%20Are%20We%20Whispering%3F%20-%20Hello%20%5Bft.%20Dragonette%5D.mp3' ) );
}
private function soundLoadedEvent ( e:Event ):void
{
sc = bgm.play( 0, 9999 );
stage.addEventListener(Event.ENTER_FRAME, process );
stage.addEventListener(Event.RESIZE, resizeEvent );
}
private function resizeEvent ( e:Event ) :void
{
b.bitmapData = bd = new BitmapData( stage.stageWidth, stage.stageHeight, false, 0 );
}
private function process ( e:Event ) :void
{
SoundMixer.computeSpectrum( ba, false );
//SoundMixer.computeSpectrum( ba, true );
center.x = stage.stageWidth / 2;
center.y = stage.stageHeight / 2;
aPower = sc.leftPeak + sc.rightPeak;
aPower /= 2;
//
shape.graphics.clear();
shape.graphics.lineStyle( 1, 0xFF00FF );
for( i = 0; i < num; ++ i )
{
power = ba.readFloat();
power = Math.abs( power );
numArr[ i ] += (power-numArr[ i ] ) * 0.25;
power = numArr[ i ];
rot = i * 360 / num * Math.PI / 180;
shape.graphics.drawCircle( center.x + Math.sin( rot ) * (sDis+power*maxDis),
center.y + Math.cos( rot ) * (sDis+power*maxDis),
power * 20 );
}
//long
shape.graphics.beginFill( 0xFF33FF, 1 );
for( i = 0; i < num; ++ i )
{
power = ba.readFloat();
power = Math.abs( power );
numArr[ i ] += (power-numArr[ i ] ) * 0.25;
power = numArr[ i ];
rot = i * 360 / num * Math.PI / 180;
shape.graphics.drawCircle( center.x + Math.sin( rot ) * (lDis+power*maxDis),
center.y + Math.cos( rot ) * (lDis+power*maxDis),
power * power * 10 );
}
bd.draw( shape );
bd.fillRect( new Rectangle( 0,0, bd.width, 1 ), 0 );
bd.fillRect( new Rectangle( 0,0, 1, bd.height ), 0 );
bd.scroll( aPower * 3, aPower * 3 );
bd.colorTransform( bd.rect, color );
blur.blurX = sc.leftPeak * 10;
blur.blurY = sc.rightPeak * 10;
bd.applyFilter( bd, bd.rect, new Point, blur );
}
}
}