SION(サイオン)で鍵盤を作りたい

by otherone
♥1 | Line 105 | Modified 2010-09-09 16:45:49 | MIT License
play

ActionScript3 source code

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

package {
    import flash.display.Graphics;
    import flash.display.MovieClip;
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    
    import flash.display.Stage;
    import flash.display.StageAlign;
    import flash.display.StageDisplayState;
    import flash.display.StageScaleMode;
    
    import flash.events.Event;
    import flash.events.KeyboardEvent;

    import flash.text.TextField;
    import org.si.sion.SiONData;
    import org.si.sion.SiONDriver;
    import org.si.sion.SiONVoice;
    import org.si.sion.utils.SiONPresetVoice;

    public class Main extends MovieClip {

        private var mScaleArray:Array = ['c', 'd', 'e', 'f', 'g', 'a','b'];
        public var text_field:TextField = new TextField();            
        private var w:uint=stage.stageWidth-100;
        private var h:uint=stage.stageHeight;
        private var mtime:int=2;
        private var cnt:int;
        private var spList:Array=[];
        private var maxNum:int;
        public var driver:SiONDriver = new SiONDriver;
        public  var presetVoice:SiONPresetVoice = new SiONPresetVoice();
        // SiONVoice型変数を宣言
        public var voice1:SiONVoice;
        // SiONData型変数を宣言
        public var mainMelody:SiONData;
        private var scaleMode:StageScaleMode;
        private var _keyBords:Sprite;
        
        
        
        //constractor
        public function Main() {
             
            //stage.align = StageAlign.TOP_LEFT; 
            
            //stage.scaleMode = StageScaleMode.EXACT_FIT;
            //stage.scaleMode = "exactFit";

            stage.scaleMode = StageScaleMode.SHOW_ALL;
            stage.scaleMode = "showAll";
            
            text_field.text = 'state:';
            text_field.x = 100;
            addChild(text_field);
            
            /*
            var btn:Sprite = new Sprite();
            stage.addChild(btn);
            var g:Graphics = btn.graphics;
            //g.lineStyle ( 太さ , 線の色 , 透明度 , ヒンディング , "スケールモード" , "線の先の種類" , "線の角の種類" , マイター限度 );
            g.lineStyle (2 , 0xdddddd);
            g.beginFill(0xcccccc, 1.0);// 単一色のスタイル設定
            //角丸の場合 g.drawRoundRect ( x 座標 , y 座標 , 幅 , 高さ , 角丸部分の幅 , 角丸部分の高さ );
            g.drawRoundRect (10, 10, 50 , 10 , 10 , 10 );
            
            btn.buttonMode = true;
            btn.addEventListener(MouseEvent.CLICK, fn_click);
            btn.addEventListener(MouseEvent.ROLL_OUT,fn_rollout);
            */
            
            
            
            voice1 = presetVoice["valsound.piano8"];
            stage.addEventListener(KeyboardEvent.KEY_DOWN, KeyDown);
            //stage.addEventListener(KeyboardEvent.KEY_UP, KeyUp);
            
            maxNum = 10;
            
            _keyBords = new Sprite();
            
            for (var i:uint = 0; i < maxNum; i++) {
            cnt++
            //(sw:Number,sh:Number,sx:Number,sy:Number,sc:Number,slc:Number,sltc:Number)
            _keyBords.addChild(square(30,100,30*i,0,0xFFFFFF,0x555555,2));
            }
            _keyBords.x=50            
            _keyBords.y=200
            addChild(_keyBords);
            
        }
        
        /*private function fn_rollout(e:MouseEvent):void 
        {
            text_field.text = 'state:';            
        }*/
        
        private function fn_click(e:MouseEvent):void 
        {
            text_field.text = 'state:click'+ e.target.name;
            
            //stage.displayState = StageDisplayState.FULL_SCREEN;
            //stage.displayState = "fullScreen";    
        }
        
        //
        public function KeyDown(e:KeyboardEvent):void {
        
        
        var len:int = mScaleArray.length;
        
        var setStr:String = '';//mScaleArray[ran(len)];
        
        switch(e.keyCode) {
            case 90:
            setStr = 'c';//Z
            break
            case 88:
            setStr = 'd';//X
            break            
            case 67:
            setStr = 'e';//C
            break
            case 86:
            setStr = 'f';//V
            break
            case 66:
            setStr = 'g';//B
            break
            case 78:
            setStr = 'a';//N
            break
            case 77:
            setStr = 'b';//M
            break
            
            case 188:
            setStr ='o<c'//,
            
            break
            }
        
        
        var _code:String="t"+(ran(20)+100)+"l8v10["+setStr+"4]1";
        
        
        
        
        text_field.text='code:'+e.keyCode;
        
        
        
        
        mainMelody    = driver.compile(_code);
        driver.play();    
        // 第一引数にSiONData、第二引数にSiONVoice、第三引数以降は、length=0(play all of sequence), delay=0(no delay), quantize=2(8th beat)
        driver.sequenceOn(mainMelody, voice1, 0, 0, 2);
        
        }
        
        public function square(sw:Number,sh:Number,sx:Number,sy:Number,sc:Number,slc:Number,sltc:Number):Sprite {
            var sp:Sprite=new Sprite  ;
            var g:Graphics = sp.graphics
            g.lineStyle ( sltc ,slc)
            g.beginFill(sc)//(ran(0xFFFFFF));
            g.drawRect(sx, sy, sw, sh);// 矩形を描画( x 座標 , y 座標 , 幅 , 高さ );
            g.endFill();
            //spList[cnt - 1] = sp;
            
            sp.name = String(cnt);
            sp.addEventListener(MouseEvent.CLICK, fn_click);
            
            return sp;
        }
        //

        /*
         public function tween(tg:Sprite,tx:uint,ty:uint,alf:Number):void {
            //_Blur_blurX:10, _Blur_blurY:10,
            Tweener.addTween(tg,{alpha:alf,x:tx,y:ty,time:ran(mtime) + 1,onComplete:twnEnd,onCompleteParams:[tg]});
        }
        public function twnEnd(tg:Sprite):void {
        //tween(tg,ran(w),ran(h),ran(10)/10);
        }
        */
        public function ran(range:Number):Number {
            var v:uint=Math.floor(Math.random() * range);
            return v;
        }
        

        
    }
}