In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

forked from: forked from: forked from: forked from: forked from: forked from: SoundVisualizer

// forked from say0's forked from: forked from: forked from: forked from: forked from: SoundVisualizer
// forked from l.dijkman's forked from: forked from: forked from: forked from: SoundVisualizer
// forked from l.dijkman's forked from: forked from: forked from: SoundVisualizer
// forked from sadango's forked from: forked from: SoundVisualizer
// forked from yd_niku's forked from: SoundVisualizer
// forked from hiro_rec's SoundVisualizer


// searching for a classic graphic equalizer
// for an internet radio asx pls stream
// is that possible>>>???
// http://www.gravomaster.com/alarm/help/index.htm
// http://www.gravomaster.com/alarm/
// for a internet radio stream like
// http://gravomaster.com/alarm/radio_qmusic.html
// http://www.q-music.nl/asx/q-music.asx
// http://livestreams.omroep.nl/npo/3fm-bb
package
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.GradientType;
    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.filters.BlurFilter;
    import flash.filters.DisplacementMapFilter;
    import flash.geom.ColorTransform;
    import flash.geom.Matrix;
    import flash.geom.Point;
    import flash.geom.Rectangle;
    import flash.media.Sound;
    import flash.media.SoundChannel;
    import flash.media.SoundMixer;
    import flash.net.URLRequest;
    import flash.system.Security;
    import flash.utils.ByteArray;
    
    [SWF( backgroundColor='#000000')]
    public class Main extends Sprite
    {
        private var container:Sprite;

        private var s:Sound;
        private var sc:SoundChannel;
        private var ba:ByteArray;
        private var mode:Boolean;
         
         private var max:int;
        private var offset:Number;
        private var bar:Sprite;
        private var centerY:int;
        
        private var grad:Shape;
        private var gradBmd:BitmapData;
        
        private var rect:Rectangle;
        private var bmd:BitmapData;
        private var bmp:Bitmap;
        private var blur:BlurFilter;
        private var target:Sprite;
        
        private var radius:Number;
        private var rot:Number;
        private var vs:Number;
        
        private var dm:DisplacementMapFilter;;


        public function Main()
        {
            buttonMode = true;
            
            Security.loadPolicyFile("http://www.gravomaster.com/alarm/crossdomain.xml"); 
            
            
            
            
            container = new Sprite();

            s = new Sound();
            mode = false;
             
             max = 512;
            offset = stage.stageWidth/max;
            bar = new Sprite();
            centerY = stage.stageHeight/2;
            
            grad = new Shape();
            gradBmd = new BitmapData(stage.stageWidth, stage.stageHeight);
            
            rect = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight);
            bmd = new BitmapData(rect.width, rect.height, true, 0x00000000);
            bmp = new Bitmap(bmd);
            blur = new BlurFilter(4, 4, 4);
            target = bar;
            
            radius = 200;
            rot = 0;
            vs = 1.03 * -1;
            
            dm = new DisplacementMapFilter(gradBmd, null, 0, 0, 0, 0, "wrap", 0xFF0000, 1);
            
            
            s.load(new URLRequest("http://www.gravomaster.com/alarm/sounds/Travie_Mccoy_Feat_Bruno_millionair_billionaire.mp3"));
            
         //s.load(new URLRequest("http://www.gravomaster.com/alarm/sounds/racegeluid.mp3"));
              
             //s.load(new URLRequest("http://www.gravomaster.com/alarm/sounds/stereo.mp3"));
              
          
       
            //s.load(new URLRequest("http://www.gravomaster.com/alarm/sounds/Scooter-MoveYourAss.mp3"));
            // s.load(new URLRequest("http://stream.wort-fm.org:8000/high.mp3"));
            
            sc = s.play(2,99);

            addChild(container);
            addChild(bar);
        
            addEventListener(Event.ENTER_FRAME, enterFrameHandler);
            
            grad.graphics.beginGradientFill(GradientType.LINEAR, [0xFF0000, 0x0000FF], [100, 100], [0, 255]);
            grad.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
            grad.graphics.endFill();
            gradBmd.draw(grad);
            
            stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
        }
 
        private function enterFrameHandler(event:Event):void
        {
            spectrum();
            render()
        } 

        private function spectrum():void
        {
            var n:Number = 0;
            var nn:Number = 255;
            ba = new ByteArray();
            SoundMixer.computeSpectrum(ba,mode, 1);
            
            bar.graphics.clear();
            bar.graphics.lineStyle(1, 0x00ff00);
            bar.graphics.moveTo(-1, centerY);
            
      
            for(var i:int=0; i < 255; i++)
            {
               
                
                    n = ba.readFloat()*300;
                    //write n;
                    
                    var px:int = offset * i;
                    bar.graphics.lineTo(px, centerY-n);
                
            } 
                      
                      
                      bar.graphics.lineStyle(1, 0xff0000);
                        for(var ii:int=255; ii < 512; ii++)
            {
               
                
                    nn = ba.readFloat()*300;
                    //write n;
                    
                    var pxx:int = offset * ii;
                    bar.graphics.lineTo(pxx, centerY-nn);
               
            } 
            //bar.graphics.lineTo(stage.stageWidth, centerY);
        }

        private function render():void
        {
            var radian:Number = Math.PI/180 * rot;
            var val:Number = Math.sin(radian) * radius;
            rot += 1
            
            var r:Number = -2;
            var g:Number = Math.abs(val / 10) * -1;
            var b:Number = val * 1.5;
            
            container.transform.colorTransform = new ColorTransform(1, 0, 0, 1, r, g, b, 100)
        
            var matrix:Matrix = new Matrix();
            matrix.scale(vs, vs);
            matrix.tx = (rect.width * vs - rect.width) / 2 * -1;
            matrix.ty = (rect.height * vs - rect.height) / 2 * -1;
            
            xRotateAt(matrix, rect.width/2, rect.height/2, 1)
            
            //bmd.draw(stage, matrix);
            //bmd.applyFilter(bmd, rect, new Point(), blur);
            
            dm.componentX = rot;
            container.filters = [dm];
            
            container.addChild(bmp);
        }

        private function xRotateAt(m:Matrix, nx:Number, ny:Number, degree:Number):Matrix
        {
             var point:Point = new Point(nx, ny);
            point = m.transformPoint(point);
            m.tx -= point.x;
            m.ty -= point.y;
            m.rotate(degree * (Math.PI/180));
            m.tx += point.x;
            m.ty += point.y;
          
            return m;
        } 
        
            private function mouseDownHandler(event:MouseEvent):void
        {
            mode = !mode;
        }
    }
}