Vespers.as (メインクラス)
package {
import flash.display.Sprite;
import flash.display.Shape;
import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.geom.Rectangle;
import flash.geom.ColorTransform;
import flash.geom.Point;
import flash.geom.Matrix;
import flash.media.Sound;
import flash.media.SoundMixer;
import flash.media.SoundTransform;
import flash.media.SoundChannel;
import flash.net.URLRequest;
import flash.utils.ByteArray;
import flash.filters.BlurFilter;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.events.IOErrorEvent;
import flash.text.TextField;
import flash.text.TextFormat;
[SWF(width="550",height="400",backgroundColor="0x0",frameRate="24")]
public class Vespers extends Sprite {
private var marginX:Number = 50;
private var marginY:Number = 50;
private var canvasLeft:Number = marginX;
private var canvasRight:Number = stage.stageWidth - marginX;
private var canvasTop:Number = marginY;
private var canvasBottom:Number = stage.stageHeight - marginY;
private var screen:BitmapData;
private var sliderX:SimpleSlider;
private var sliderY:SimpleSlider;
private var progress:TextField;
public function Vespers (){
var s:Sound = new Sound();
s.load(new URLRequest("mp3/Vespers_mono_32kbps.mp3"));
s.addEventListener(Event.COMPLETE,onComplete);
s.addEventListener(IOErrorEvent.IO_ERROR, ioErrorListener);
s.addEventListener(ProgressEvent.PROGRESS,progressListener);
createProgressIndicator();
}
private function createProgressIndicator():void{
progress = new TextField();
progress.width = 140;
progress.x = stage.stageWidth/2 - progress.width/2;
progress.y = stage.stageHeight/2 - 10;
if (!contains(progress)){
addChild(progress);
}
}
private function createStageObject():void{
sliderX = new SimpleSlider(0,20,0);
sliderX.x = stage.stageWidth/2 + sliderX.height/2;
sliderX.y = stage.stageHeight - 30;
sliderX.rotation = 90;
addChild(sliderX);
sliderY = new SimpleSlider(0,20,0);
sliderY.x = 20;
sliderY.y = stage.stageHeight/2 - sliderY.height/2;
addChild(sliderY);
var w:Number = canvasRight - canvasLeft;
var h:Number = canvasBottom - canvasTop;
screen = new BitmapData(w,h,false,0x0);
var bmp:Bitmap = new Bitmap(screen);
bmp.x = canvasLeft;
bmp.y = canvasTop;
addChild(bmp);
}
private function ioErrorListener(e:IOErrorEvent):void{
progress.text = "Load error!!";
var format:TextFormat = new TextFormat();
format.color = 0xFFFFFF;
format.font = "Courier";
format.size = 14;
progress.setTextFormat(format);
}
private function progressListener(e:ProgressEvent):void{
progress.text = "Loading... " + Math.floor(e.bytesLoaded*100/e.bytesTotal) + " %";
var format:TextFormat = new TextFormat();
format.color = 0xFFFFFF;
format.font = "Courier";
format.size = 14;
progress.setTextFormat(format);
}
private function onComplete(e:Event):void{
var sc:SoundChannel = e.target.play(0,999);
var st:SoundTransform = new SoundTransform();
st.volume = 0.5;
sc.soundTransform = st;
removeChild(progress);
e.target.removeEventListener(ProgressEvent.PROGRESS,progressListener);
e.target.removeEventListener(Event.COMPLETE,onComplete);
createStageObject();
addEventListener(Event.ENTER_FRAME,onEnterFrame);
}
private function onEnterFrame(e:Event):void{
var ba:ByteArray = new ByteArray();
SoundMixer.computeSpectrum(ba,true,0);
makeMirage();
var dif:int = 16;
for(var i:int=0; i<256; i+=dif){
var h:Number = (canvasBottom-canvasTop)*ba.readFloat();
var x:Number = (canvasRight-canvasLeft)*i/255;
var y:Number = canvasBottom - h;
var r:int = i;
var g:int = (255 + 255 - i)/2;
var b:int = (255 + 255 - i)/2;
var col:uint = r << 16 | g << 8 | b;
var s:Shape = new Shape();
s.graphics.beginFill(col);
s.graphics.drawRect(x,y,(canvasRight-canvasLeft)*dif/255,5);
s.graphics.endFill();
screen.draw(s);
}
}
private function makeMirage():void{
var cach:BitmapData = screen.clone();
screen.fillRect(screen.rect,0x0);
var bx:Number = sliderX.value;
var by:Number = sliderY.value;
cach.applyFilter(cach,cach.rect,new Point(0,0),new BlurFilter(bx,by));
screen.draw(cach,new Matrix(),new ColorTransform(1,1,1,0.95,0,0,0,0));
}
}
}
SimpleSlider.as
(original source by Keith Peters
BIT-101 Blog)
package{
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.geom.Rectangle;
import flash.events.Event;
public class SimpleSlider extends Sprite{
private var _width:Number = 6;
private var _height:Number = 100;
private var _value:Number;
private var _max:Number = 100;
private var _min:Number = 0;
private var _handle:Sprite;
private var _back:Sprite;
private var _backWidth:Number = 0;
private var _handleHeight:Number = 20;
private var _backColor:uint = 0xcccccc;
private var _backBorderColor:uint = 0x999999;
private var _handleColor:uint = 0x000000;
private var _handleBorderColor:uint = 0xcccccc;
private var _handleRadius:Number = 2;
private var _backRadius:Number = 2;
public function SimpleSlider(min:Number=0, max:Number=100, value:Number=100){
_min = min;
_max = max;
_value = Math.min(Math.max(value, min), max)
init();
}
private function init():void{
_back = new Sprite();
addChild(_back);
_handle = new Sprite();
addChild(_handle);
_handle.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
draw();
updatePosition();
}
private function draw():void{
drawBack();
drawHandle();
}
private function drawBack():void{
_back.graphics.clear();
_back.graphics.beginFill(_backColor);
_back.graphics.lineStyle(0, _backBorderColor);
_back.graphics.drawRoundRect(0, 0, _backWidth, _height, _backRadius, _backRadius);
_back.graphics.endFill();
_back.x = _width / 2 - _backWidth / 2;
}
private function drawHandle():void{
_handle.graphics.clear();
_handle.graphics.beginFill(_handleColor);
_handle.graphics.lineStyle(0, _handleBorderColor);
_handle.graphics.drawRect(0, 0, _width, _handleHeight);
_handle.graphics.endFill();
}
private function updatePosition():void{
var handleRange:Number = _height - _handleHeight;
var valueRange:Number = _max - _min;
_handle.y = handleRange - (_value - _min) / valueRange * handleRange;
}
private function updateValue():void{
var handleRange:Number = _height - _handleHeight;
var valueRange:Number = _max - _min;
_value = (handleRange - _handle.y) / handleRange * valueRange + _min;
dispatchEvent(new Event(Event.CHANGE));
}
private function onMouseUp(event:MouseEvent):void{
stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
_handle.stopDrag();
}
private function onMouseDown(event:MouseEvent):void
{
stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
_handle.startDrag(false, new Rectangle(0, 0, 0, _height - _handleHeight));
}
private function onMouseMove(event:MouseEvent):void{
updateValue();
}
public function invalidate():void{
draw();
}
public function move(x:Number, y:Number):void{
this.x = x;
this.y = y;
}
public function setSize(w:Number, h:Number):void{
_width = w;
_height = h;
draw();
}
public function set backBorderColor(n:uint):void{
_backBorderColor = n;
draw();
}
public function get backBorderColor():uint{
return _backBorderColor;
}
public function set backColor(n:uint):void{
_backColor = n;
draw();
}
public function get backColor():uint{
return _backColor;
}
public function set backRadius(n:Number):void{
_backRadius = n;
}
public function get backRadius():Number{
return _backRadius;
}
public function set backWidth(n:Number):void{
_backWidth = n;
draw();
}
public function get backWidth():Number{
return _backWidth;
}
public function set handleBorderColor(n:uint):void{
_handleBorderColor = n;
draw();
}
public function get handleBorderColor():uint{
return _handleBorderColor;
}
public function set handleColor(n:uint):void{
_handleColor = n;
draw();
}
public function get handleColor():uint{
return _handleColor;
}
public function set handleRadius(n:Number):void{
_handleRadius = n;
draw();
}
public function get handleRadius():Number{
return _handleRadius;
}
public function set handleHeight(n:Number):void{
_handleHeight = n;
draw();
updatePosition();
}
public function get handleHeight():Number{
return _handleHeight;
}
override public function set height(n:Number):void{
_height = n;
draw();
}
override public function get height():Number{
return _height;
}
public function set max(n:Number):void{
_max = n;
updatePosition();
}
public function get max():Number{
return _max;
}
public function set min(n:Number):void{
_min = n;
updatePosition();
}
public function get min():Number{
return _min;
}
public function set value(n:Number):void{
_value = n;
_value = Math.min(_max, Math.max(_value, _min));
updatePosition();
}
public function get value():Number{
return _value;
}
override public function set width(n:Number):void{
_width = n;
draw();
}
override public function get width():Number{
return _width;
}
}
}
Powered by blog Boreal Kiss 2008.