topical media & game development
student-musicpad-KaosPad.ax
student-musicpad-KaosPad.ax
[swf]
[flash]
flex
Copyright suweller
based on @ax-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 @ax-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 @ax-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;
}
}
(C) Æliens
04/09/2009
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.