package { import flash.display.Sprite; import flash.display.StageQuality; import flash.display.StageScaleMode; import org.libspark.thread.EnterFrameThreadExecutor; import org.libspark.thread.Thread; [SWF(width=640, height=480, backgroundColor=0x0, frameRate=30)] public class OgnFireworks extends Sprite { public function OgnFireworks() { this.stage.quality = StageQuality.LOW this.stage.scaleMode = StageScaleMode.NO_BORDER; Thread.initialize(new EnterFrameThreadExecutor()); new MainThread(this).start(); } } } import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.BlendMode; import flash.display.PixelSnapping; import flash.display.Sprite; import flash.events.MouseEvent; import flash.events.NetStatusEvent; import flash.events.TimerEvent; import flash.filters.BitmapFilter; import flash.filters.BitmapFilterQuality; import flash.filters.BlurFilter; import flash.filters.ColorMatrixFilter; import flash.geom.Matrix; import flash.geom.Point; import flash.media.SoundMixer; import flash.media.Video; import flash.net.NetConnection; import flash.net.NetStream; import flash.utils.ByteArray; import flash.utils.Timer; import org.libspark.thread.Thread; class MainThread extends Thread { private static const ZERO_POINT:Point = new Point(); private var _base:Sprite; private var _conn:NetConnection; private var _stream:NetStream; private var _video:Video; private var _canvas:Bitmap; private var _drawMatrix:Matrix; private var _filters:Array; private var _target:Point; private var _timer:Timer; public function MainThread(base:Sprite) { this._base = base; var bmp:BitmapData = new BitmapData(640, 480, false, 0x0); this._canvas = this._base.addChild(new Bitmap(bmp, PixelSnapping.ALWAYS, false)) as Bitmap; } protected override function run():void { this._conn = new NetConnection(); this._conn.connect(null); this._stream = new NetStream(this._conn); this._stream.client = { onMedaData: function (info:Object):void {} }; this._stream.play('85126377_104_086d0af869.flv'); // this._video = this._base.addChild(new Video()) as Video; this._video= new Video(504, 336); this._video.attachNetStream(this._stream); this._drawMatrix = new Matrix(); this._filters = [ new BlurFilter(4, 4, BitmapFilterQuality.LOW), new ColorMatrixFilter([ 0.75, 0, 0, 0, 0, 0, 0.75, 0, 0, 0, 0, 0, 0.85, 0, 0, 0, 0, 0, 1, 0 ]) ]; this._target = new Point(0, 0); this._timer = new Timer(1000, 0); // this._timer.start(); this._waitEvent(); } private function _waitEvent():void { event(this._stream, NetStatusEvent.NET_STATUS, this._onNetStatus); event(this._base.stage, MouseEvent.CLICK, this._onClick); event(this._timer, TimerEvent.TIMER, this._onTimer); next(this.render); } private function _onNetStatus(e:NetStatusEvent):void { trace(e.info.code); switch (e.info.code) { case 'NetStream.Play.Start': break; case 'NetStream.Play.Stop': this._stream.seek(0); break; } this._waitEvent(); } private function _onClick(e:MouseEvent):void { this._target.x = e.stageX; this._target.y = e.stageY; this._waitEvent(); } private function _onTimer(e:TimerEvent):void { this._target.x = Math.random() * 640; this._target.y = Math.random() * 480; this._waitEvent(); } private var _data:ByteArray = new ByteArray(); private function render():void { var bmp:BitmapData = this._canvas.bitmapData; // this._drawMatrix.tx += (this._target.x - 252 - this._drawMatrix.tx) * 0.1; // this._drawMatrix.ty += (this._target.y - 168 - this._drawMatrix.ty) * 0.1; // var t:int = getTimer() * 10; // this._drawMatrix.tx = t % 640 - 252; // this._drawMatrix.ty = int(t / 640) - 168; // this._drawMatrix.tx = Math.random() * 640 - 252; // this._drawMatrix.ty = Math.random() * 480 - 168; SoundMixer.computeSpectrum(this._data, false, 0); this._data.position = 0; // var ox:Number = (getTimer() / 100) % 20; for (var i:int = 0; i < 32; i++) { var v:Number = this._data.readFloat(); var s:Number = this._drawMatrix.a = this._drawMatrix.d = 0.3 + (v < 0 ? -v : v) * 70; this._drawMatrix.tx = i / 15 * 640 - 252 * s; this._data.position = i * 8 * 4; this._drawMatrix.ty = 240 + v * 7000 - 168 * s; bmp.draw(this._video, this._drawMatrix, null, BlendMode.ADD); } for each (var f:BitmapFilter in this._filters) { bmp.applyFilter(bmp, bmp.rect, ZERO_POINT, f); } this._waitEvent(); } }