Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save youpy/188949 to your computer and use it in GitHub Desktop.

Select an option

Save youpy/188949 to your computer and use it in GitHub Desktop.
package {
import flash.display.Sprite;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.events.*;
import flash.media.Camera;
import flash.media.Video;
import flash.utils.ByteArray;
import flash.geom.Rectangle;
import flash.media.Sound;
import flash.media.SoundChannel;
public class NoiseCamera extends Sprite {
private var video:Video;
private var cameraBmp:Bitmap;
private var cameraBmpData:BitmapData;
private var w:int = 320;
private var h:int = 240;
private var points:Vector.<Vector.<Number>>;
private var dot:Sprite = new Sprite();
private const LATENCY:int = 3000 //2048~8192
public function NoiseCamera() {
var camera:Camera = Camera.getCamera();
var sound:Sound = new Sound();
var channel:SoundChannel;
points = new Vector.<Vector.<Number>>();
var point:Vector.<Number>;
for (var i:uint = 0; i < 2; i ++) {
point = new Vector.<Number>();
point[0] = Math.floor(Math.random() * w) as Number;
point[1] = Math.floor(Math.random() * h) as Number;
points.push(point);
}
if (camera != null) {
video = new Video(w, h);
video.attachCamera(camera);
addEventListener(Event.ENTER_FRAME, tick);
} else {
trace("error");
}
cameraBmpData = new BitmapData(w, h, false, 0xaaaaaa);
cameraBmp = new Bitmap(cameraBmpData);
addChild(cameraBmp);
sound.addEventListener(SampleDataEvent.SAMPLE_DATA, updateSound);
channel = sound.play();
points.forEach(function(item:Vector.<Number>, index:int, vector:Vector.<Vector.<Number>>):void {
dot.graphics.beginFill(0xff0000);
dot.graphics.drawCircle(item[0], item[1], 2);
dot.graphics.endFill();
});
addChild(dot);
}
private function updateSound(event:SampleDataEvent):void {
var rad1:Number;
var rad2:Number;
var rad3:Number;
var rad4:Number;
var c:int;
var r1:int = cameraBmpData.getPixel(points[0][0], points[0][1]) >> 16;
var r2:int = cameraBmpData.getPixel(points[1][0], points[1][1]) >> 16;
var g1:int = (cameraBmpData.getPixel(points[0][0], points[0][1]) >> 8) & 0x0000ff;
var g2:int = (cameraBmpData.getPixel(points[1][0], points[1][1]) >> 8) & 0x0000ff;
for (c=0; c<LATENCY; c++) {
rad1 = Number(c+event.position) /Math.PI * r1 * c/LATENCY;
rad2 = Number(c+event.position) /Math.PI * r2 * c/LATENCY;
rad3 = Number(c+event.position) /Math.PI * g1 * c/LATENCY;
rad4 = Number(c+event.position) /Math.PI * g2 * c/LATENCY;
event.data.writeFloat(Math.sin(rad1) * Math.sin(rad3) / 4);
event.data.writeFloat(Math.sin(rad2) * Math.sin(rad4) / 4);
}
}
private function tick(event:Event):void {
cameraBmpData.draw(video);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment