flash on 2009-12-25
♥0 |
Line 68 |
Modified 2009-12-25 18:51:16 |
MIT License
archived:2017-03-20 06:30:48
ActionScript3 source code
/**
* Copyright akisute ( http://wonderfl.net/user/akisute )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/rHQ5
*/
package {
import flash.net.URLRequest;
import flash.display.*;
import flash.filters.*;
import flash.events.*;
import flash.media.*;
public class MyPlayBass extends Sprite {
private var pointSpriteTop:Sprite;
private var pointSpriteBottom:Sprite;
private var lineSprite:Sprite;
private var amplitude:Number;
private var dampingRate:Number;
private var degree:Number;
private var sound:Sound;
private var soundChannel:SoundChannel;
public function MyPlayBass() {
// Sound file is created by akisute, feel free to use =)
sound = new Sound();
sound.load(new URLRequest("http://sites.google.com/site/akisutesama/files/guitar.mp3?attredirects=0&d=1"));
pointSpriteTop = new Sprite();
pointSpriteTop.x = 200;
pointSpriteTop.y = 100;
// Looks better if draw functions are commented out
// pointSpriteTop.graphics.beginFill(0x666666);
// pointSpriteTop.graphics.drawCircle(0,0,2);
// pointSpriteTop.graphics.endFill();
addChild(pointSpriteTop);
pointSpriteBottom = new Sprite();
pointSpriteBottom.x=pointSpriteTop.x;
pointSpriteBottom.y=pointSpriteTop.y+250;
// Looks better if draw functions are commented out
// pointSpriteBottom.graphics.beginFill(0x666666);
// pointSpriteBottom.graphics.drawCircle(0,0,2);
// pointSpriteBottom.graphics.endFill();
addChild(pointSpriteBottom);
lineSprite = new Sprite();
lineSprite.buttonMode=true;
lineSprite.addEventListener(MouseEvent.MOUSE_DOWN, startAnimation);
addChild(lineSprite);
drawLine();
}
private function startAnimation(event:Event):void {
soundChannel=sound.play();
soundChannel.addEventListener(Event.SOUND_COMPLETE, stopAnimation);
amplitude=20.0;
dampingRate=1.0;
degree=0.0;
var blur:BlurFilter=new BlurFilter(2.0,0);
lineSprite.filters=[blur];
lineSprite.addEventListener(Event.ENTER_FRAME, animateLine);
}
private function stopAnimation(event:Event):void {
dampingRate=0.9;
}
private function animateLine(event:Event):void {
var dampingFactor:Number = (soundChannel.leftPeak + soundChannel.rightPeak) / 2;
if (dampingFactor == 0) {
dampingFactor = 0.8;
}
degree = (degree + 90) % 360;
amplitude = 20.0 * dampingFactor;
drawLine();
if (amplitude<1) {
lineSprite.filters=[];
lineSprite.removeEventListener(Event.ENTER_FRAME, animateLine);
}
}
private function drawLine():void {
var ctx:Number=amplitude*Math.sin(degree*Math.PI/180) + pointSpriteTop.x;
var cty:Number = (pointSpriteBottom.y - pointSpriteTop.y) / 2 + pointSpriteTop.y;
lineSprite.graphics.clear();
lineSprite.graphics.lineStyle(3.0, 0x666666);
lineSprite.graphics.moveTo(pointSpriteTop.x, pointSpriteTop.y);
lineSprite.graphics.curveTo(ctx, cty, pointSpriteBottom.x, pointSpriteBottom.y);
}
}
}