package{ import nu.mine.flashnet.sound.core.*; import flash.media.*; import flash.display.*; public class ThereminProvider extends AudioDataProvider{ private var phase:Number; private var last:Number = 0; private var webcam:Camera; public var video:Video; private var bmp:Bitmap; public function ThereminProvider(){ webcam = Camera.getCamera(); webcam.setQuality(0, 100); if(webcam != null){ video = new Video(webcam.width, webcam.height); video.attachCamera(webcam); } bmp = new Bitmap(new BitmapData(webcam.width, webcam.height)); var fmt:PCMSoundFormat = new PCMSoundFormat(44100, 16, 1); super(fmt); phase = 0.0; } public static function color(bmp:BitmapData, x:int, y:int):Object{ var pixel:int = bmp.getPixel(x, y); var r:int, g:int, b:int; r = (pixel >> 16) & 0xff; g = (pixel >> 8) & 0xff; b = pixel & 0xff; var tmp:int = (r + g + b) / 3; return {R:r, G:g, B:b, color:pixel, bright:r 80 && col.G < 40 && col.B < 40) tmp++; } } tmp = Math.sqrt(tmp); tmp /= Math.sqrt(webcam.height * webcam.width); tmp *= 660 * 3 + 330; var a:Number = tmp; tmp = (a + last) / 2; last = a; for(i = 0; i < numSamples; i++){ buffer.writeMonoSample(Math.sin(phase) * 0.1); phase += tmp * (2 * Math.PI / soundFormat.sampleRate); } } } }