testament

by Nackybear
ちょっとテストです。
♥0 | Line 227 | Modified 2011-03-22 00:06:09 | MIT License
play

ActionScript3 source code

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

package {
    import flash.media.SoundTransform;
    import flash.display.Sprite;
    import flash.display.*;
    import flash.net.*;
    import flash.text.*;
    import flash.events.*;
    import flash.events.MouseEvent;
    import flash.utils.*;
    import org.si.sion.*;
    import org.si.sion.events.*;
    import org.si.sion.effector.*;
    import org.si.sion.utils.SiONPresetVoice;
    import flash.media.Sound;    
    
    public class Main extends Sprite {
       private var centercircle:Sprite = new Sprite();
       private var cx:int; //中心の円のx
       private var cy:int; //中心の円のy
       private var cex:int = 150; //同心円のx座標
       private var cey:int = 150; //同心円のy座標
       private var r:int = 100;//同心円の半径
       private var colortable:Array = new Array(0xabdabc,0xabca00,0x00cabc,0xab00bc,0x772233); //ユーザーオブジェクトの配色設定
       private var object:Array = new Array(5); //5つのユーザーオブジェクト
       private var ox:Array = new Array(5);//各ユーザーオブジェクトのx座標
       private var oy:Array = new Array(5);//各ユーザーオブジェクトのy座標
       private var scolortable:Array = new Array(0x555555,0x33aa33,0x3300ff,0xff00ff,0xdd99dd);//音オブジェクトの配色設定
       private var sobj:Array = new Array(5); //5つの音オブジェクト
       private var sox:Array = new Array(5); //各音オブジェクトのx座標
       private var soy:Array = new Array(5); //各音オブジェクトのy座標
       private var line:Sprite = new Sprite(); //中心点からつなぐ線
       // テキストフィールドオブジェクトを作成する 数値表示用;
       private var tf:TextField = new TextField();
       private var tf2:TextField = new TextField();
       private var tf3:TextField = new TextField();
       private var draggedObject:DisplayObjectContainer;
       private var old_timer:int = getTimer(); //時間経過用オブジェクト。
 
       
       // パラメータ(ここはとりあえず仮)
       private var sampling:Array = new Array(5);// 1 度に転送するサンプリング数
       private var loop:Array = new Array(5);// ループあり
       private var loop_begin:Array = new Array(5);// ループ開始地点
       private var delay_sampling:Array = new Array(5);// ディレイの時間(サンプリング数)
       private var delay_decrease_buf:Array = new Array(5);// ディレイの減衰率 (ディレイバッファに乗算)
       private var delay_decrease_src:Array = new Array(5);// ディレイの減衰率(再生ソースに乗算)
       
       //サウンドの指定  読み込む音を配列で示す
        private var soundlist:Array = new Array("import/01.mp3","import/02.mp3","import/03.mp3","import/04.mp3","import/05.mp3");
        private var url:URLRequest;
        private var src_obj:Array = new Array(5);
        private var soundchannel:Sprite;

        // 出力用サウンドオブジェクト
        private var out_obj:Array = new Array(5);
        private var channel:Array = new Array(5);
        // 波形用ワーク
        private var wave:Array = new Array(5);
        // ディレイ用ワーク
        private var delay:Array = new Array(5);
       
       
        public function Main() :void    {
            //中心の円を求める
            centercircle.x = 150;
            centercircle.y = 150;
            addChild(centercircle);
            centercircle.graphics.beginFill(0x999999,0.9);
            //配色設定のj番目を取る;
            centercircle.graphics.drawCircle(20, 20, 20);
            centercircle.graphics.endFill();
            //中心の円の座標を求める;
            cx = centercircle.x + centercircle.width / 2;
            cy = centercircle.y + centercircle.height / 2;
            
            
            //5つのオブジェクトとその中心点を求める
            for (var j:int=0; j<5; j++)//配列用オブジェクト用 j
            {//1-5までのオブジェクトを生成
                object[j] = new Sprite();
                object[j].x = cex + r * Math.cos(j * 72 * 2 * Math.PI / 360);//72度づつ各オブジェクトが同心円上に並ぶ x座標
                object[j].y = cey + r * Math.sin(j * 72 * 2 * Math.PI / 360); ;//72度づつ各オブジェクトが同心円上に並ぶ y座標
                addChild(object[j]);
                object[j].graphics.beginFill(colortable[j],0.7);
                //配色設定のj番目を取る;
                object[j].graphics.drawCircle(20, 20, 20);
                object[j].graphics.endFill();
                //各オブジェクトの中心点を求める;
                ox[j] = object[j].x + object[j].width / 2;
                oy[j] = object[j].y + object[j].height / 2;
            }
            
            
            //5つの音発生△とその中心点
            for (var t:int=0; t<5; t++)//配列用音発生△用 t
            {
                sobj[t]  = new Sprite();
                sobj[t].x = 400;//△の位置x座標
                sobj[t].y = 80 * t;//△の位置y座標  
                addChild(sobj[t]);
                //ここで△をつくる
                sobj[t].graphics.beginFill(scolortable[t],0.9);
                //ここで△をつくる;
                sobj[t].graphics.moveTo(25, 0);
                sobj[t].graphics.lineTo(0, 50);
                sobj[t].graphics.lineTo(50, 50);
                sobj[t].graphics.endFill();
                //各△の中心点を求める;
                sox[t] = object[t].x + object[t].width / 2;
                soy[t] = object[t].y + object[t].height / 2;
            }
            
            
            //線を描画 中心点から各ユーザーオブジェクトへ
            addChild(line);
            line.graphics.lineStyle(6, 0xFF2222, 0.8,false,"horizontal","round");
            line.graphics.moveTo(cx,cy);
            line.graphics.lineTo(ox[0],oy[0]);
            line.graphics.moveTo(cx,cy);
            line.graphics.lineTo(ox[1],oy[1]);
            line.graphics.moveTo(cx,cy);
            line.graphics.lineTo(ox[2],oy[2]);
            line.graphics.moveTo(cx,cy);
            line.graphics.lineTo(ox[3],oy[3]);
            line.graphics.moveTo(cx,cy);
            line.graphics.lineTo(ox[4],oy[4]);
            
            
            // 表示リストに登録する
            stage.addChild(tf);
            stage.addChild(tf2);
            stage.addChild(tf3);
            
            // テキストフィールドの設定
            tf.border = true;
            tf.x = 750;
            tf.y = 470;
            tf.width = 50;
            tf.height = 20;
            
            tf2.border = true;
            tf2.x = 750;
            tf2.y = 500;
            tf2.width = 50;
            tf2.height = 20;
            
            tf3.border = true;
            tf3.x = 750;
            tf3.y = 530;
            tf3.width = 50;
            tf3.height = 20;
            
            //距離計算のファンクション
            function calcdistance(x1:int, y1:int, x2:int, y2:int):int
            {
                return Math.floor(Math.sqrt((x1- x2)*(x1-x2) + (y1-y2)*(y1-y2)));
            }           
            
            //数値表示イベント
            function numberdisplay() :void
            {
                this.stage.addEventListener(MouseEvent.MOUSE_MOVE)
                {
                    tf.text = String(calcdistance(cx,cy,ox[0],oy[0]) * 12);
                    tf2.text = String(Math.floor(calcdistance(cx,cy,ox[1],oy[1]) /450*11000));
                    tf3.text = String(calcdistance(cx,cy,ox[2],oy[2]) /100*1100);
                };
            }
          
            //ドラッグを始めた時の動作
            function startDragging(event:MouseEvent):void
            {
                draggedObject = DisplayObjectContainer(event.target);
                addChild(draggedObject);
                event.target.startDrag();
                event.target.addEventListener(MouseEvent.MOUSE_UP, stopDragging);
            }

          
            //図形を追加 オブジェクトと音△と線
            function addobject() :void
            {
            object[0].addEventListener(MouseEvent.MOUSE_DOWN, startDragging);
            object[1].addEventListener(MouseEvent.MOUSE_DOWN, startDragging);
            object[2].addEventListener(MouseEvent.MOUSE_DOWN, startDragging);
            object[3].addEventListener(MouseEvent.MOUSE_DOWN, startDragging);
            object[4].addEventListener(MouseEvent.MOUSE_DOWN, startDragging);
            sobj[0].addEventListener(MouseEvent.MOUSE_DOWN, startDragging);
            sobj[1].addEventListener(MouseEvent.MOUSE_DOWN, startDragging);
            sobj[2].addEventListener(MouseEvent.MOUSE_DOWN, startDragging);
            sobj[3].addEventListener(MouseEvent.MOUSE_DOWN, startDragging);
            sobj[4].addEventListener(MouseEvent.MOUSE_DOWN, startDragging);
            line.addEventListener(MouseEvent.MOUSE_UP, stopDragging);
            }
            
            
                    //ドラッグをし終わった時の動作
            function stopDragging(event:MouseEvent):void
            {
            event.target.removeEventListener(MouseEvent.MOUSE_DOWN, stopDragging);
            event.target.stopDrag();
        
       
            //数値を表示 中心点と各オブジェクトの距離;
            trace( calcdistance(cx,cy,ox[0],oy[0]) *13);
            trace( calcdistance(cx,cy,ox[1],oy[1]) *13);
            trace( calcdistance(cx,cy,ox[2],oy[2]) *13);
            trace( calcdistance(cx,cy,ox[3],oy[3]) /1000);
            trace( calcdistance(cx,cy,ox[4],oy[4]) /80);
        
            //ディレイに数値を反映
            delay_sampling[j] = 9000 - calcdistance(cx,cy,ox[0],oy[0]) * 13;
            delay_decrease_buf[j] = 0.85 - calcdistance(cx,cy,ox[1],oy[1]) / 1000;
            delay_decrease_src[j] = 9 - calcdistance(cx,cy,ox[2],oy[2]) / 80;
        
        
            //ラインをドラッグ後に描画する。中心点から各図形の中心へ 時間がたったら書く
        
            if (getTimer() - old_timer >= 50)
            {
        
                //オブジェクトの中心を再定義
                for (var i:int=0; i<5; i++)
                {
                    ox[i] = object[i].x + object[i].width / 2;
                    oy[i] = object[i].y + object[i].height / 2;
                }
        
                //線を引く
                line.graphics.clear();
                line.graphics.lineStyle(6, 0xFF2222, 0.8,false,"horizontal","round");
                line.graphics.moveTo(cx,cy);
                line.graphics.lineTo(ox[0],oy[0]);
                line.graphics.moveTo(cx,cy);
                line.graphics.lineTo(ox[1],oy[1]);
                line.graphics.moveTo(cx,cy);
                line.graphics.lineTo(ox[2],oy[2]);
                line.graphics.moveTo(cx,cy);
                line.graphics.lineTo(ox[3],oy[3]);
                line.graphics.moveTo(cx,cy);
                line.graphics.lineTo(ox[4],oy[4]);
        
                old_timer = getTimer();
        
        
            }
        
        
        
            //距離を測って線を引く
            var myx:int,myy:int;///動かしているものの座標
            var d:Array = new Array(5);
            myx = event.target.x + event.target.width / 2;
            myy = event.target.y + event.target.height / 2;
            for (var j:int=0; j<5; j++)
            {
                d[j] = calcdistance(myx,myy,ox[j],oy[j]);//動かしているものと5つのオブジェクトの距離を距離を計算
            }
        
            var min:int,minp:int;///minは一番小さい数、minpはその場所(j
            min = d[0];
            minp = 0;
            for (var l:int=0; l<5; l++)
            {
                if (min > d[l])
                {//オブジェクトの中で一番近いものを算出
                    min = d[l];
                    minp = l;
                }
            }
        
            //var sbank:Array=new Array
            if (min < 200)
            {//minが200以下なら線をつなぐ
                line.graphics.lineStyle(6, 0x22FF22, 0.8,false,"horizontal","round");
                line.graphics.moveTo(myx, myy);
                line.graphics.lineTo(ox[minp],oy[minp]);
       
               for (var t:int=0; t<5; t++)
                {
                    if (event.target == sobj[t])
                    {
                        url = new URLRequest(soundlist[t]);
                        src_obj[t] = null;
                        src_obj[t] = new Sound(url);
                        //src_obj[j].play(0,99999);
                        channel[t]=src_obj[t].play(0,99999);
                        if(channel[t])
                        {
                            var trans:SoundTransform = channel.soundTransform;
                            trans.volume = min;
                            channel[t].soundTransform = trans;
                        }
        
                SoundTransform
                }
        
            }
        
            //サウンドを設定する
        
        
            /////距離が近い音三角をすべてよみこみ、それをすべて再び再生、それ以外は停止 そうすれば、音のズレも解消?
            /////でも近いものが二つ以上あると音がだぶる
           //url = new URLRequest(soundlist[minp]);
            //src_obj[minp]=new Sound(url);
            //soundchannel= src_obj[minp].play(0,9999);  //9999回再生
        
        }
            
        }
    }
    }
}