forked from: Wondering Pixels Dance
/**
* Copyright makc3d ( http://wonderfl.net/user/makc3d )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/2lz7
*/
// forked from 0xFFFFFF's Wondering Pixels Dance
package {
import flash.media.SoundChannel;
import flash.text.TextFieldAutoSize;
import flash.text.TextField;
import flash.geom.Matrix;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.BitmapDataChannel;
import flash.display.MovieClip;
import flash.events.Event;
import flash.filters.BlurFilter;
import flash.filters.DisplacementMapFilter;
import flash.geom.Point;
import flash.media.Sound;
import flash.media.SoundMixer;
import flash.net.URLRequest;
import flash.utils.ByteArray;
import flash.display.Sprite;
import flash.system.Security;
[SWF (width=465, height=465, backgroundColor=0)]
public class Exp101227_01 extends MovieClip {
private const W : Number = 465;
private const H : Number = 465;
private var output : BitmapData;
private var map : BitmapData;
private var pixels : Array = [];
private var num : Number = 500;
private var movePoint1 : Point = new Point(0, 0);
private var movePoint2 : Point = new Point(0, 0);
private var origin : Point = new Point(0, 0);
private var blur : BlurFilter;
private var sound : Sound;
private var channel:SoundChannel;
private var arr1 : ByteArray;
private var arr2 : ByteArray;
private var tf : TextField;
public function Exp101227_01() {
// write as3 code here..
Security.loadPolicyFile("http://0xffffff.ru/crossdomain.xml");
tf = new TextField();
addChild(tf);
tf.autoSize = TextFieldAutoSize.LEFT;
tf.textColor = 0xffffff;
output = new BitmapData(W, H, true, 0);
map = new BitmapData(W/2, H/2);
for (var i : Number = 0;i < num;i++)
{
var p : Object = {x:Math.random() * W, y:Math.random() * H, speed:25, t:0};
pixels.push(p);
}
addChild(new Bitmap(output));
blur = new BlurFilter(3, 3, 3);
sound = new Sound(new URLRequest("http://0xffffff.ru/flash/exp/as3/musical/wonderingpixelsdance/06.mp3"));
channel = sound.play (0, int.MAX_VALUE);
arr1 = new ByteArray();
arr2 = new ByteArray();
addEventListener(Event.ENTER_FRAME, loop);
loop();
}
private var displace : DisplacementMapFilter = new DisplacementMapFilter(new BitmapData (W, H), origin, BitmapDataChannel.RED, BitmapDataChannel.BLUE, -3, -3);
private function loop(event : Event = null) : void
{
if(!SoundMixer.areSoundsInaccessible())
{
tf.text = '';
SoundMixer.computeSpectrum(arr1);
SoundMixer.computeSpectrum(arr2, true);
map.perlinNoise(50, 50, 2, 6, true, true, BitmapDataChannel.RED | BitmapDataChannel.BLUE, false, [movePoint1, movePoint2]);
movePoint1.offset(.5, .1);
movePoint2.offset(.2, -.5);
var m:Matrix = new Matrix();
m.scale(2, 2);
displace.mapBitmap.draw(map,m,null, null, null, true);
var coef:Number = 1 + 2 * (channel.leftPeak + channel.rightPeak);
for (var i : Number = 0; i < num; i++)
{
var f1 : Number = arr1.readFloat();
var f2 : Number = arr2.readFloat();
var p : Object = pixels[i];
var c : int = map.getPixel(p.x/2, p.y/2);
//tf.text = c.x.toString();
var red : Number = ((c & 0xff0000)>>16)- 128 + Math.random() * 6 - 3;
var blue : Number = (c & 0x0000ff) - 128 + Math.random() * 6 - 3;
p.x += red / p.speed * (Math.abs(f2) * 10 + .2);
p.y += blue / p.speed * (Math.abs(f2) * 10 + .2);
//if (i == 10) tf.text = f2.toPrecision (4);
if (p.x > W) p.x -= W ;
if (p.x < 0) p.x += W ;
if (p.y > H) p.y -= H ;
if (p.y < 0) p.y += H ;
//if (f2 > 0)
p.t = 50;
if (p.t > 0)
{
// var color:uint = ((0xff)<<16<<8 ) | 0x1166FF00;
output.setPixel32(p.x, p.y, 0xFF000000 + hsv2rgb ((1 + Math.atan2 (red, blue) / Math.PI)*180));
// trace((color).toString(16));
// output.setPixel32(p.x, p.y, ((p.t/100*0xff)<<32 ) | 0x66FF00);
// output.setPixel32(p.x, p.y, Number("0x"+(p.t/100*0xff)+"66FF00"));
// output.setPixel(p.x, p.y, 0x66FF00);
p.t--;
}
}
displace.scaleX = -3 * coef;
displace.scaleY = -3 * coef;
output.applyFilter(output, output.rect, origin, displace);
} else {
tf.text = 'sounds are inaccessable; please, close other flash sites with music';
}
}
/**
* @see http://wonderfl.net/c/dtn8
* @author matacat
*/
private function hsv2rgb(h:Number, s:Number = 1, v:Number = 1):uint
{
var rgb:uint = 0;
if (s == 0) { // gray scale
rgb = 0xFF * v << 16 | 0xFF * v << 8 | 0xFF * v << 0;
return rgb;
}
h = h >= 360 ? h % 360 : (h < 0 ? h % 360 + 360 : h);
var i:int = int(h / 60);
var f:Number = h / 60 - i;
var p:Number = v * (1 - s);
var q:Number = v * (1 - s * f);
var t:Number = v * (1 - s * (1 - f));
switch (i) {
case 0: rgb = 0xFF * v << 16 | 0xFF * t << 8 | 0xFF * p << 0; break;
case 1: rgb = 0xFF * q << 16 | 0xFF * v << 8 | 0xFF * p << 0; break;
case 2: rgb = 0xFF * p << 16 | 0xFF * v << 8 | 0xFF * t << 0; break;
case 3: rgb = 0xFF * p << 16 | 0xFF * q << 8 | 0xFF * v << 0; break;
case 4: rgb = 0xFF * t << 16 | 0xFF * p << 8 | 0xFF * v << 0; break;
case 5: rgb = 0xFF * v << 16 | 0xFF * p << 8 | 0xFF * q << 0;
}
return rgb;
}
}
}