Visualization - Open Or Close

by ShipNK
Simple Sound Visualization.

1. draw on 100x100 BitmapData.
2. create new Rectangle, and Fill up the BitmapData
3. make same rectangle, and change scaleX, scaleY.

Tile Visualization
♥2 | Line 129 | Modified 2011-08-18 16:42:45 | MIT License
play

ActionScript3 source code

/**
 * Copyright ShipNK ( http://wonderfl.net/user/ShipNK )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/ouuf
 */

package {
    import flash.text.TextField;
    import flash.net.URLRequest;
    import flash.media.Sound;
    import flash.system.Security;
    import flash.display.Sprite;
    import flash.display.Bitmap;
    import flash.display.Shape;
    import flash.utils.ByteArray;
    import flash.media.SoundMixer;
    import flash.events.Event;
    import flash.display.Sprite;
    import flash.geom.ColorTransform;
    import flash.display.BitmapData;
    
    [SWF(backgroundColor=0)]
    
    public class FlashTest extends Sprite {
        
        private var tf:TextField = new TextField();
        private var bgm:Sound = new Sound();
        private var paper:BitmapData = new BitmapData( 100, 100, true, 0 );
        private var releaser:Boolean = true;
        private var i:int;
        private var j:int;
        private var shape:Shape = new Shape();
        private var shapes:Array = new Array();
        private var sprite:Sprite = new Sprite();
        private var byte:ByteArray = new ByteArray();
        private var soundPower:Number;
        private var color:ColorTransform;
        private var rects:Sprite = new Sprite();
        
        public function FlashTest() {
            tf.text = "BGM Loading...";
            addChild( tf );
            Security.loadPolicyFile( "http://joyfl.kr/shipworld/crossdomain.xml" );
            bgm.load( new URLRequest( "http://joyfl.kr/shipworld/sound/bgm.mp3" ) );
            bgm.addEventListener(Event.COMPLETE, completeEvent );
            
            this.addChild( rects );
            for( i = 0; i < 5; ++ i )
            {
             for( j = 0; j < 5; ++ j )
             {
              shape = new Shape();
              shape.graphics.beginBitmapFill( paper );
              shape.graphics.drawRect( 0, 0, 100, 100 );
              shape.x = i * 100;
              shape.y = j * 100;
              if( i % 2 == 1 )
              {
               shape.scaleX *= -1;
               shape.x += 100;
              }
              if( j % 2 == 1 )
              {
               shape.scaleY *= -1;
               shape.y += 100;
              }
              rects.addChild( shape );
             }
            }
            stage.addEventListener( Event.ENTER_FRAME, process );
        }
        
        private function completeEvent( e:Event ) :void
        {
            bgm.play( 0, 100000 );
            removeChild( tf );
        }

        
        private function process ( e:Event ) :void
        {
         paper.lock();
         SoundMixer.computeSpectrum( byte, true, 0 );
         soundPower = byte.readFloat();
         //
         for( i = 0; i < soundPower * 3; ++ i )
         {
          shape = new Shape();
          shape.graphics.beginFill( 0xffffff - Random( 10000 ) );
          switch( Random( 2 ) )
          {
           case 0 :
           shape.graphics.drawCircle( 0, 0, byte.readFloat() * 10 );
           break;
           case 1 :
           shape.graphics.drawRect( 0, 0, byte.readFloat() * 10, byte.readFloat() * 10 );
           shape.rotation = Random( 360 );
           break;
          }
          shape.x = -10;
          shape.y = Random( 100 );
          shape.alpha = soundPower
          shapes.push ( shape );
          sprite.addChild( shape );
         }
         for( i = shapes.length - 1; i > -1; -- i )
         {
          shape.scaleY *= 0.95;
          shape.scaleX = shape.scaleY;
          shapes[ i ].x += soundPower * 5 + 1;
          if( releaser )
          {
           shapes[ i ].y += ( shapes[ i ].y - 50 ) * soundPower / 10;
          }
          else
          {
           shapes[ i ].y -= ( shapes[ i ].y - 50 ) * soundPower / 10;
          }
          if( shapes[ i ].x > 110 )
          {
           sprite.removeChild( shapes[ i ] );
           shapes.splice( i , 1 );
          }
         }
         //
         if( soundPower > 1 )
         {
          paper.perlinNoise( 100, 100, Random( 5 ), Random( 100 ), true, true, 7 );
          releaser = !releaser;
          color = new ColorTransform( 1, 1, 0, 0.9 );
         }
         else
         {
          color = new ColorTransform( 0, 1, 1, 0.8 );
         }
         //
         paper.colorTransform( paper.rect, color );
         paper.draw( sprite );
         paper.unlock();
        }
        private function Random( n:Number ) :int
        {
         return int( n * Math.random() );
        }
    }
}

Forked