Starry soundtest6
forked from soundtest6 (diff: 86)
こっそりとSoundMixer.computeSpectrumの第二引数を stageクリックでかえれるようにしてみた。 trueとfalaseでの動きの違いを確かめる。
ActionScript3 source code
/**
* Copyright tjoen ( http://wonderfl.net/user/tjoen )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/cK3C
*/
// forked from gaina's soundtest6
//こっそりとSoundMixer.computeSpectrumの第二引数を
//stageクリックでかえれるようにしてみた。
//trueとfalaseでの動きの違いを確かめる。
package
{
import flash.display.Sprite;
import flash.display.Graphics;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.media.SoundLoaderContext;
import flash.media.SoundMixer;
import flash.net.URLRequest;
import flash.utils.ByteArray;
import flash.filters.*;
import caurina.transitions.Tweener;
import caurina.transitions.properties.*;
import net.hires.debug.Stats;
[SWF(width=465,height=465,backgroundColor=0xffff00)]//0xffff00
public class soundSpectrum extends Sprite
{
public var rot:Number = 0;
private var leftRightSpList:Array;
private var snd:Sound;
private var FFTswitch:Boolean = false;
private var fil:Array = [];
public var _canvas:Sprite;
public var _canvasWidth:uint;
public var _canvasHeight:uint;
function soundSpectrum()
{
_canvas = new Sprite();
addChild(_canvas);
_canvas.graphics.beginFill(0x353436);
_canvasWidth = stage.stageWidth;
_canvasHeight = stage.stageHeight;
_canvas.graphics.drawRect(0, 0, _canvasWidth, _canvasHeight);
_canvas.graphics.endFill();
leftRightSpList = makeLeftRightSpList();
playSound("http://www.takasumi-nagai.com/soundfiles/sound001.mp3");
addEventListener(Event.ENTER_FRAME, onEnterFrame);
stage.addEventListener(MouseEvent.CLICK, FFTswitcher);
fil = [new BlurFilter(0.5, 0.5, 3)];//, new BlurFilter(0.5, 0.5, 3)];
addChild(new Stats());
}
public function drawStar(g:Graphics, _x:Number=0, _y:Number=0, outer:Number=50, inner:Number=20, rot:Number=0):void
{
var angle:Number = rot+Math.PI/2;
var px:Number = _x+Math.cos(angle)*outer;
var py:Number = _y+Math.sin(angle)*outer;
g.moveTo(px,py);
for(var i:int=0; i<5; i++)
{
angle += Math.PI/5;
px = _x+Math.cos(angle)*inner;
py = _y+Math.sin(angle)*inner;
g.lineTo(px,py);
angle += Math.PI/5;
px = _x+Math.cos(angle)*outer;
py = _y+Math.sin(angle)*outer;
g.lineTo(px,py);
}
}
public static function init():void
{
ColorShortcuts.init();
DisplayShortcuts.init();
FilterShortcuts.init();
}
private function playSound(sndUrl:String):void
{
snd = new Sound();
var context:SoundLoaderContext = new SoundLoaderContext(10,true);
var req:URLRequest = new URLRequest(sndUrl);
snd.load(req, context);
var sndChannel:SoundChannel=new SoundChannel();
sndChannel = snd.play(0, 5);
}
private function FFTswitcher(e:MouseEvent):void
{
if (FFTswitch) { FFTswitch = false; } else { FFTswitch = true;}
}
private function onEnterFrame(event:Event):void {
var sp:Sprite=new Sprite();
var bytes:ByteArray = new ByteArray();
SoundMixer.computeSpectrum(bytes, FFTswitch, 0);
var i:uint, j:uint;
for (i = 0; i < 2; i++)
{
var spList:Array = leftRightSpList[i];
for (j = 0; j < 256; j++)
{
sp = spList[j];
var rf:Number = bytes.readFloat();
var scale:Number = Math.max(0.5, 1 + rf * 10);
sp.scaleX = sp.scaleY = scale;
if (scale > 7){
init();
Tweener.addTween(_canvas, { _color:Math.random()*0xFFFFFF, time:1, transition:"linear"});
}
if(!FFTswitch){
sp.x += sp.x *rf * 5 + 8;
}else{
sp.x = sp.x *rf * 5 + 8;
}
sp.filters = fil;
}
}
}
private function makeLeftRightSpList():Array
{
var spLRList:Array = new Array();
var circle_r:uint = 3;
var n:uint;
var i:uint;;
for (n = 0; n < 2; n++)
{
var spList:Array = new Array();
for (i = 0; i < 256; i++) {
var sp:Sprite = new Sprite();
if (n == 0) {
sp.graphics.beginFill(0, 0);
sp.graphics.lineStyle(1, Math.random()*0xFFFFFF);
drawStar(sp.graphics, 0, 0, Math.random()*10, Math.random()*10,Math.random()*360-Math.random()*360);
//sp.graphics.drawCircle(0, 0, circle_r);
}else {
sp.graphics.beginFill(Math.random()*0xFFFFFF);
drawStar(sp.graphics, 0, 0, Math.random()*6, Math.random()*4,Math.random()*360-Math.random()*360);
}
sp.graphics.endFill();
sp.y = stage.stageHeight / 256 * i;
addChild(sp);
spList.push(sp);
}
spLRList.push(spList);
}
return spLRList;
}
}
}