Starry soundtest6

by tjoen forked from soundtest6 (diff: 86)
こっそりとSoundMixer.computeSpectrumの第二引数を
stageクリックでかえれるようにしてみた。
trueとfalaseでの動きの違いを確かめる。
♥0 | Line 137 | Modified 2010-07-26 04:08:16 | MIT License
play

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;
            }
        }
        
    }