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

音 MathGraphics SoundVisualizer

@author dubfrog aka 'dubflash' /* 

project [ MathGraphics SoundVisualizer ] 

サウンドビジュアライザーをPV風にしてみました。
音の強弱を数字で視覚可し、0に近づくほど音が弱くなり、数字表記が小さくなります。

サウンドはgainaさんのところからお借りしてます
/**
 * Copyright dubfrog ( http://wonderfl.net/user/dubfrog )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/qwBh
 */

package {
    
    import flash.display.*;
    import flash.events.*;
    import flash.filters.*;
    import flash.geom.*;
    import flash.media.*;
    import flash.net.*;
    import flash.text.*;
    import flash.ui.*
    import flash.utils.*;
    
    /* @author dubfrog aka 'dubflash' /* 
    
    /* project [ MathGraphics SoundVisualizer ] 
     * 
     * サウンドビジュアライザーをPV風にしてみました。
     * 音の強弱を数字で視覚可し、0に近づくほど音が弱くなり、数字表記が小さくなります。
     * 
     * // forked from gaina's soundtest6
     * サウンドはgainaさんのところからお借りしてます
     * 
     * */ 
    [SWF(backgroundColor='0xffffff', width='465', height='465')]
    
    public class Main extends MovieClip
    {
        
        public function Main():void
        {
            details();
            
            if (stage) initialize();
            else addEventListener(Event.ADDED_TO_STAGE, initialize);
        }
        
        private function details():void 
        {
            zword     = "MathGraphics SoundVisualizer";
            bword     = "DFG";
            sdstr     = "http://www.takasumi-nagai.com/soundfiles/sound001.mp3";
            bitmax    = 255;
            spectrum  = new Vector.< Number >();
            cnt       = { a:0, b:0 };
        }
        private function initialize(e:Event = null):void
        {    
            setSound();
        }
        private function start():void
        {
            tyle = new Sprite();
            addChild(tyle);
            
            haul = new Sprite();
            haul.x = -50;
            haul.scaleX = haul.scaleY = 1.1;
            addChild(haul);
            
            dtSp = new Sprite();
            dtSp.x = 9999;
            addChild(dtSp);
            
            var ft:TextFormat = new TextFormat();
            ft.size = 36;
            ft.color = 0xffffff;
            dt = new TextField();
            dt.selectable = false;
            dt.autoSize = TextFieldAutoSize.LEFT;
            dt.wordWrap = false;
            dtSp.addChild(dt);
            
            title = new Sprite();
            title.graphics.beginFill(0x000000, 1);
            title.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
            title.graphics.endFill();
            addChild(title);
            zdt = new TextField();
            zdt.defaultTextFormat = ft;
            zdt.selectable = false;
            zdt.autoSize = TextFieldAutoSize.LEFT;
            zdt.text = zword;
            zdt.x = stage.stageWidth / 2 - zdt.width / 2;
            zdt.y = stage.stageHeight / 2 - zdt.height / 2;
            title.addChild(zdt);
            title.visible = false;
            
            var _temp:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight, false);
            _temp.draw(tyle);
            overhaul = new BitmapRgbOverhaul(_temp);
            
            Wonderfl.capture_delay(30);
            callTimer();
        }
        private function callTimer():void
        {
            timer = new Timer(Math.random() * 500, 1);
            timer.addEventListener(TimerEvent.TIMER_COMPLETE, addLine);
            timer.start();
        }
        private function removeTimer():void
        {
            if (timer)
            {
                timer.stop();
                timer.removeEventListener(TimerEvent.TIMER_COMPLETE, addLine);
                timer = null;
            }
        }
        private function addLine(e:TimerEvent):void
        {
            var mc:line = new line();
            mc.x = -100;
            addChild(mc);
            
            moveLine(mc);
            
            removeTimer();
            callTimer();
        }
        private function moveLine(target:Sprite):void
        {
            var gx:Number = Math.random() * stage.stageWidth;
            var spd:Number = .2;
            var cnt:Number = 0;
            target.addEventListener(Event.ENTER_FRAME, function(e:Event):void
            {
                e.target.x += (gx - e.target.x ) * spd;
                e.target.alpha += (0 - e.target.alpha ) * spd;
                cnt++;
                if (cnt >= 50)
                {
                    e.target.removeEventListener(Event.ENTER_FRAME, arguments.callee);
                    e.target.parent.removeChild(e.target);
                }
            });
        }
        private function setSound():void
        {
            var context:SoundLoaderContext = new SoundLoaderContext(10, true);
            var req:URLRequest = new URLRequest(sdstr);
            track = new Sound(req, context);
            track.addEventListener(Event.COMPLETE, function(e:Event):void
            {
                start();
                channel = track.play(0, 9999);
                addEventListener(Event.ENTER_FRAME, update);
            });
        }
        private function titleMotion():void
        {
            title.visible = true;
            
            var blur:BlurFilter = new BlurFilter(Math.random() * 10 + 1, Math.random() * 10 + 1, 1);
            title.x = Math.random() * 1 + ( stage.stageWidth / 2 - title.width / 2);
            title.scaleX = title.scaleY = Math.random() * .01 + 1;
            title.filters = [blur];
            
            var bmp:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight, false);
            var grad:Sprite = new Sprite();
            grad.graphics.beginGradientFill(GradientType.LINEAR,
                                            [0x000000, 0xffffff], 
                                            [1, 1],
                                            [55, 255],
                                            null, 
                                            SpreadMethod.PAD,
                                            InterpolationMethod.RGB, 0);
            grad.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
            grad.graphics.endFill();
            bmp.draw(grad);
            var r:Number = Math.floor(Math.random() * 2);
            var plus:Number = Math.floor(Math.random() * 100) - 25;
            if (r == 0)
            {
                cnt.a += plus;
                cnt.b = 0;
            }else if (r == 1) {
                cnt.b += plus;
                cnt.a = 0;
            }
            var dmf:DisplacementMapFilter = new DisplacementMapFilter(bmp, 
                                                                      new Point(), 
                                                                      BitmapDataChannel.BLUE, 
                                                                      BitmapDataChannel.BLUE, 
                                                                      cnt.a, 
                                                                      cnt.b, 
                                                                      DisplacementMapFilterMode.WRAP);
            title.filters = [dmf, blur];
            
            if (r == 0) cnt.b = cnt.a;
            else if (r == 1) cnt.a = cnt.b;
        }
        private function update(e:Event):void
        {
            var bytes:ByteArray = new ByteArray();
            SoundMixer.computeSpectrum(bytes, true, 0);
            
            var total:Number = 0;
            for (var i:uint = 0; i <= bitmax - 1; i++) 
            {
                spectrum[i] = bytes.readFloat();
                total += Math.floor(spectrum[i] * 10);
            }
            
            var p:Number, bw:Number, bh:Number;
            
            p = Math.floor(total);
            dt.scaleX = dt.scaleY = p / 10;
            
            title.visible = false;
            if (p > 50 && p < 200) dt.text = String(p);
            else if (p == 0) titleMotion();
            else dt.text = bword;
            
            if (dt.width >= 1) bw = dt.width;
            else bw = dt.width = 1;
            if (dt.height >= 1) bh = dt.height;
            else bh = dt.height = 1;
            
            var matrix:Matrix = new Matrix();
            if (p % 2 == 0) matrix.rotate(Math.PI / 180 * p);
            var bmp:BitmapData = new BitmapData(bw, bh, true, 0x808080);
            bmp.draw(dtSp);
            
            tyle.visible = false;
            tyle.graphics.clear();
            tyle.graphics.beginBitmapFill(bmp, matrix, true, false);
            tyle.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
            tyle.graphics.endFill();
            
            
            var _temp:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight, false);
            _temp.draw(tyle);
            overhaul.reDraw(_temp);
            
            if (haul.numChildren > 0) 
            {
                for (var n:Number; n <= haul.numChildren - 1; n++)
                {
                    haul.removeChildAt(n);
                }
            }
            
            haul.addChild(overhaul.blackObj);
            haul.addChild(overhaul.rbmpObj);
            haul.addChild(overhaul.gbmpObj);
            haul.addChild(overhaul.bbmpObj);
            
            overhaul.rbmpObj.x = 0;
            overhaul.gbmpObj.x = Math.random() * 5;
            overhaul.bbmpObj.x = Math.random() * 10;
        }
        private function stageDetail():void
        {
            var context:ContextMenu = new ContextMenu();
            context.hideBuiltInItems();
            MovieClip(this.root).contextMenu      = context;
            stage.frameRate                       = 60;
            stage.quality                         = StageQuality.MEDIUM;
            stage.align                           = StageAlign.TOP_LEFT;
            stage.scaleMode                       = StageScaleMode.NO_SCALE;
        }
        
        
        /*_Vars______________________________________________________________________________________*/
        
        private var track:Sound;
        private var channel:SoundChannel;
        private var spectrum:Vector.<Number>;
        private var bitmax:Number;
        private var dt:TextField, zdt:TextField;
        private var sdstr:String, bword:String, zword:String;
        private var tyle:Sprite, dtSp:Sprite, haul:Sprite, title:Sprite;
        private var overhaul:BitmapRgbOverhaul;
        private var cnt:Object;
        private var timer:Timer;
    }
}


import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.filters.*;

/* project : [ RGB分解 ] */

class BitmapRgbOverhaul 
{
    
    private var rbmd:BitmapData;
    private var gbmd:BitmapData;
    private var bbmd:BitmapData;
    
    public var rbmpObj:Bitmap;
    public var gbmpObj:Bitmap;
    public var bbmpObj:Bitmap;
    public var blackObj:Bitmap;
    
    public function BitmapRgbOverhaul(sourceBmp:BitmapData) {
        
        rbmd = new BitmapData(sourceBmp.width, sourceBmp.height, true, 0x808080);
        gbmd = new BitmapData(sourceBmp.width, sourceBmp.height, true, 0x808080);
        bbmd = new BitmapData(sourceBmp.width, sourceBmp.height, true, 0x808080);
        rbmd.fillRect( sourceBmp.rect, 0xFF000000 );
        gbmd.fillRect( sourceBmp.rect, 0xFF000000 );
        bbmd.fillRect( sourceBmp.rect, 0xFF000000 );
        rbmd.copyChannel(sourceBmp, sourceBmp.rect, new Point(), BitmapDataChannel.RED, BitmapDataChannel.RED);
        gbmd.copyChannel(sourceBmp, sourceBmp.rect, new Point(), BitmapDataChannel.GREEN, BitmapDataChannel.GREEN);
        bbmd.copyChannel(sourceBmp, sourceBmp.rect, new Point(), BitmapDataChannel.BLUE, BitmapDataChannel.BLUE);
        rbmpObj = new Bitmap(rbmd);
        gbmpObj = new Bitmap(gbmd);
        bbmpObj = new Bitmap(bbmd);
        rbmpObj.blendMode = BlendMode.ADD;
        gbmpObj.blendMode = BlendMode.ADD;
        bbmpObj.blendMode = BlendMode.ADD;
        
        var blackbmp:BitmapData = new BitmapData(sourceBmp.width, sourceBmp.height, false, 0x000000);
        blackObj = new Bitmap(blackbmp);
    }
    public function reDraw(sourceBmp:BitmapData):void
    {
        rbmd = new BitmapData(sourceBmp.width, sourceBmp.height, true, 0x808080);
        gbmd = new BitmapData(sourceBmp.width, sourceBmp.height, true, 0x808080);
        bbmd = new BitmapData(sourceBmp.width, sourceBmp.height, true, 0x808080);
        rbmd.fillRect( sourceBmp.rect, 0xFF000000 );
        gbmd.fillRect( sourceBmp.rect, 0xFF000000 );
        bbmd.fillRect( sourceBmp.rect, 0xFF000000 );
        rbmd.copyChannel(sourceBmp, sourceBmp.rect, new Point(), BitmapDataChannel.RED, BitmapDataChannel.RED);
        gbmd.copyChannel(sourceBmp, sourceBmp.rect, new Point(), BitmapDataChannel.GREEN, BitmapDataChannel.GREEN);
        bbmd.copyChannel(sourceBmp, sourceBmp.rect, new Point(), BitmapDataChannel.BLUE, BitmapDataChannel.BLUE);
        
        rbmpObj.bitmapData = rbmd;
        gbmpObj.bitmapData = gbmd;
        bbmpObj.bitmapData = bbmd;
    }
}

class line extends Sprite
{
    public function line():void
    {
        graphics.lineStyle(Math.floor(Math.random() * 3), 0x000000, 1);
        graphics.moveTo(0, 0)
        graphics.lineTo(0, 500);
        var blur:BlurFilter = new BlurFilter(Math.random() * 10, Math.random() * 10, 1);
        //filters = [blur];
        alpha = Math.random() * .9 + .1;
    }
}