/**
* Copyright yama3 ( http://wonderfl.net/user/yama3 )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/uV7b
*/
package {
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Loader;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.filters.BlurFilter;
import flash.filters.GlowFilter;
import flash.geom.ColorTransform;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.net.URLRequest;
import flash.system.LoaderContext;
import flash.system.Security;
import flash.display.GradientType;
[SWF(width="465", heighi="465")];
public class FlashTest extends Sprite {
public static const WIDTH:int = 465;
public static const HEIGHT:int = 465;
private var _soundloader:SoundLoader;
private static var policyPath:String = "http://mutast.heteml.jp/crossdomain.xml";
private var _path:String = "http://mustast.heteml.jp/works/music/music.mp3";
private var _bigball:BigBall;
private var _elects:/*Elect*/Array;
private var _canvas2:BitmapData;
private var _canvas:BitmapData;
public function FlashTest() {
if(stage) init();
else addEventListener(Event.ADDED_TO_STAGE,init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
Security.loadPolicyFile("http://mutast.heteml.jp/crossdomain.xml");
graphics.beginFill(0);
graphics.drawRect(0, 0, WIDTH, HEIGHT);
graphics.endFill();
_canvas2 = new BitmapData(WIDTH, HEIGHT, true, 0);
addChild(new Bitmap(_canvas2));
_canvas = new BitmapData(WIDTH, HEIGHT, true, 0);
addChild(new Bitmap(_canvas));
_soundloader = new SoundLoader();
_soundloader.Load(_path);
InitSoundObj();
this.addEventListener(Event.ENTER_FRAME, Update);
}
private function InitSoundObj():void
{
_bigball = new BigBall();
_elects = new Array();
for(var i:int = 0; i < 512; i++)
{
_elects[_elects.length] = new Elect(360 / 512 * i);
}
}
public function Update(e:Event):void {
var i:int;
var array:Array = _soundloader.GetSpectrumData(true);
var arrayTotal:Number = 0;
for(i = 0; i < 512; i++) arrayTotal += array[i];
for(i = 0; i < 512; i++)
{
_elects[i].Update(WIDTH / 2, HEIGHT / 2, array[i], arrayTotal/512);
}
_bigball.Update(arrayTotal/512);
_canvas2.lock();
_canvas2.fillRect(_canvas.rect, 0);
_canvas2.draw(_bigball, new Matrix(1, 0, 0, 1, WIDTH / 2, HEIGHT / 2));
_canvas2.applyFilter(_canvas2, _canvas2.rect, new Point(), new BlurFilter(10,10,3));
_canvas2.applyFilter(_canvas2, _canvas2.rect, new Point(), new GlowFilter(0xFFFFFF*Math.random(),0.8,6,6,3));
_canvas2.unlock();
_canvas2.lock();
_canvas.lock();
_canvas.fillRect(_canvas.rect, 0);
for(i = 0; i < 512; i++)
{
_canvas.draw(_elects[i].shape);
}
_canvas.applyFilter(_canvas, _canvas.rect, new Point(), new GlowFilter(0xFFFF00, 0.8, 10, 10, 2, 3, false, false));
_canvas.unlock();
}
}
}
import flash.events.Event;
import flash.media.Sound;
import flash.media.SoundLoaderContext;
import flash.media.SoundMixer;
import flash.media.SoundChannel;
import flash.net.URLRequest;
import flash.utils.ByteArray;
import flash.display.Graphics;
import flash.display.Shape;
import flash.filters.GlowFilter;
import flash.geom.Matrix3D;
import flash.geom.Vector3D;
class SoundLoader
{
private var _started:Boolean;
private var sound:Sound;
private var soundChannel:SoundChannel;
private var bytes:ByteArray;
public function SoundLoader()
{
_started = false;
}
public function Load(path:String):void
{
sound = new Sound();
sound.addEventListener(Event.COMPLETE, LoadComplete);
sound.load(new URLRequest(path), new SoundLoaderContext(10, true));
bytes = new ByteArray();
_started = false;
}
private function LoadComplete(e:Event):void {
e.target.removeEventListener(Event.COMPLETE, LoadComplete);
Start();
}
private function Start():void
{
soundChannel = sound.play(0, 1000);
_started = true;
}
public function GetSpectrumData(FFTMode:Boolean = false):Array
{
var i:int;
var buf:Array = new Array(512);
if(!_started)
{
for(i=0; i<512; i++) buf[i] = 0;
return buf;
}
SoundMixer.computeSpectrum(bytes, FFTMode, 0);
bytes.position = 0;
for(i = 0; i < 512; i++) buf[i] = bytes.readFloat();
return buf;
}
}
class BigBall extends Shape
{
public function BigBall()
{
filters = [new GlowFilter(0xccccff, 0.7, 20, 20, 2, 3, false, false)];
}
public function Update(totalRate:Number):void
{
var g:Graphics = graphics;
g.clear();
g.beginFill(0xffffff, Math.min(totalRate*3+0.1,1));
g.drawCircle(0, 0, 50 + totalRate * 20);
g.endFill();
}
}
class Elect
{
private static const S_LENGTH:int = 50;
private static const E_LENGTH:int = 350;
private var _shape:Shape;
public function get shape():Shape {return _shape;}
private var _zAngle:Number;
private var _xAngle:Number;
private var _xAngleSpeed:Number;
public function Elect(angle:Number)
{
_zAngle = angle;
_xAngle = 0;
_xAngleSpeed = 0;
_shape = new Shape();
}
public function Update(tx:Number, ty:Number, val:Number, totalRate:Number):void
{
var mat:Matrix3D;
var i:int;
var g:Graphics = _shape.graphics;
var level:int = int(val/0.1);
var divide:int;
_xAngleSpeed += val
_xAngleSpeed *= 0.95;
_xAngle = (_xAngle + _xAngleSpeed) % 360;
_zAngle = (_zAngle + 1 + totalRate * 5)%360;
g.clear();
g.lineStyle(1, 0xffffff, val);
for(i = 0; i < 2 + level; i++)
{
mat = new Matrix3D();
if(i == 0)
{
mat.appendTranslation(S_LENGTH, 0, 0);
} else {
var sx:Number = (E_LENGTH - S_LENGTH) / (level + 1) * i + S_LENGTH;
mat.appendTranslation(sx, Math.random()*val*50, Math.random()*val*50);
}
mat.appendRotation(_zAngle, Vector3D.Z_AXIS);
mat.appendRotation(_xAngle, Vector3D.X_AXIS);
mat.appendTranslation(tx, ty, 0);
if(i == 0) g.moveTo(mat.position.x, mat.position.y);
else g.lineTo(mat.position.x, mat.position.y);
}
}
}