Created
September 18, 2009 08:42
-
-
Save youpy/188949 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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