/** * Copyright suweller * based on student_musicpad_KaosPad by keim_at_Si ( http://wonderfl.net/user/keim_at_Si ) * MIT License ( http://www.opensource.org/licenses/mit-license.php ) */ package { import flash.display.*; import flash.events.*; import org.si.sion.*; import org.si.sion.events.*; import org.si.sion.effector.*; import org.si.sion.utils.SiONPresetVoice; public class student_musicpad_KaosPad extends Sprite { // driver public var driver:SiONDriver; // control pad public var controlPad:ControlPad; // low pass filter effector public var lpf:SiCtrlFilterLowPass = new SiCtrlFilterLowPass(); // constructor function student_musicpad_KaosPad(stage:Stage, d:SiONDriver, resonance:Number = 0, cutoff:Number = 0.1) { driver = d; // listen click driver.addEventListener(SiONEvent.STREAM, _onStream); driver.addEventListener(SiONTrackEvent.BEAT, _onBeat); // set parameters of low pass filter lpf.initialize(); lpf.control(1, 0.5); // connect low pass filter on slot0. driver.effector.initialize(); driver.effector.connect(0, lpf); // control pad with ( addChild( controlPad = new ControlPad(stage, 320, 320, resonance, cutoff, 0x669933) ) ) { x = y = 72; } } private function _onStream(e:SiONEvent) : void { var x:Number = 1-controlPad.controlX; lpf.control(controlPad.controlY*0.9+0.1, (1-x*x)*0.96); } private function _onBeat(e:SiONTrackEvent) : void { controlPad.beat(32); } } } import flash.display.*; import flash.events.*; import flash.filters.BlurFilter; class ControlPad extends Bitmap { public var controlX:Number; public var controlY:Number; public var isDragging:Boolean; public var color:int; private var buffer:BitmapData; private var ratX:Number, ratY:Number; private var prevX:Number, prevY:Number; private var clsDrawer:Shape = new Shape(); private var canvas:Shape = new Shape(); private var blur:BlurFilter = new BlurFilter(5, 5); private var pointerSize:Number = 8; function ControlPad(stage:Stage, width:int, height:int, initialX:Number=0, initialY:Number=0, color:int=0x101030) { super(new BitmapData(width+32, height+32, false, 0)); buffer = new BitmapData(width+32, height+32, false, 0); clsDrawer.graphics.clear(); clsDrawer.graphics.lineStyle(1, 0xffffff); //clsDrawer.graphics.drawRect(16, 16, width, height); bitmapData.draw(clsDrawer); buffer.fillRect(buffer.rect, 0); this.color = color; controlX = initialX; controlY = initialY; ratX = 1 / width; ratY = 1 / height; prevX = buffer.width * controlX; prevY = buffer.height * controlY; addEventListener("enterFrame", _onEnterFrame); stage.addEventListener("mouseMove", _onMouseMove); stage.addEventListener("mouseDown", function(e:Event):void { isDragging = true; } ); stage.addEventListener("mouseUp", function(e:Event):void { isDragging = false; }); } private function _onEnterFrame(e:Event) : void { var x:Number = (buffer.width-32) * controlX + 16; var y:Number = (buffer.height-32) * (1-controlY) + 16; canvas.graphics.clear(); canvas.graphics.lineStyle(pointerSize, color); canvas.graphics.moveTo(prevX, prevY); canvas.graphics.lineTo(x, y); buffer.applyFilter(buffer, buffer.rect, buffer.rect.topLeft, blur); buffer.draw(canvas, null, null, "add"); bitmapData.copyPixels(buffer, buffer.rect, buffer.rect.topLeft); bitmapData.draw(clsDrawer); prevX = x+Math.random(); prevY = y; pointerSize *= 0.96; } private function _onMouseMove(e:MouseEvent) : void { if (isDragging) { controlX = (mouseX - 16) * ratX; controlY = 1 - (mouseY - 16) * ratY; if (controlX < 0) controlX = 0; else if (controlX > 1) controlX = 1; if (controlY < 0) controlY = 0; else if (controlY > 1) controlY = 1; } } public function beat(size:int) : void { pointerSize = size; } }