チェンジセット 1230

差分発生行の前後
無視リスト:
コミット日時:
2008/09/02 13:46:56 (3 年前)
コミッタ:
zk33
ログメッセージ:

APMT4でのデモ向けに機能追加したTenoranをコミット。

ファイル:

凡例:

変更無し
追加
削除
更新
コピー
移動
  • as3/sazameki/branches/fp10/obj/sazamekiFP10Config.old

    r874 r1230  
    1212    </source-path> 
    1313    <external-library-path append="true"> 
    14       <path-element>C:\lib\flex_sdk_3.1.0.2418\frameworks\libs\player\10\playerglobal.swc</path-element> 
     14      <path-element>C:\lib\flex_sdk_3.2.0.2811\frameworks\libs\player\10\playerglobal.swc</path-element> 
    1515    </external-library-path> 
    1616  </compiler> 
  • as3/sazameki/branches/fp10/obj/sazamekiFP10Config.xml

    r874 r1230  
    1212    </source-path> 
    1313    <external-library-path append="true"> 
    14       <path-element>C:\lib\flex_sdk_3.1.0.2418\frameworks\libs\player\10\playerglobal.swc</path-element> 
     14      <path-element>C:\lib\flex_sdk_3.2.0.2811\frameworks\libs\player\10\playerglobal.swc</path-element> 
    1515    </external-library-path> 
    1616  </compiler> 
  • as3/sazameki/branches/fp10/sazamekiFP10.as3proj

    r874 r1230  
    4646  <!-- External Libraries --> 
    4747  <externalLibraryPaths> 
    48     <element path="C:\lib\flex_sdk_3.1.0.2418\frameworks\libs\player\10\playerglobal.swc" /> 
     48    <element path="C:\lib\flex_sdk_3.2.0.2811\frameworks\libs\player\10\playerglobal.swc" /> 
    4949  </externalLibraryPaths> 
    5050  <!-- Runtime Shared Libraries --> 
     
    5454  <!-- Intrinsic Libraries --> 
    5555  <intrinsics> 
    56     <element path="C:\lib\flex31728\frameworks\libs\player\10\playerglobal.swc" /> 
     56    <element path="C:\lib\flex_sdk_3.2.0.2811\frameworks\libs\player\10\playerglobal.swc" /> 
    5757  </intrinsics> 
    5858  <!-- Assets to embed into the output SWF --> 
  • as3/sazameki/branches/fp10/src/org/sazameki/audio/core/AudioSamples.as

    r874 r1230  
    1313                 
    1414                private var _setting:AudioSetting; 
    15                 //TODO: サンプルがmonoのときは、rightにleftのサンプルの参照を入れておくようにする 
     15                //TODO: サンプルがmonoのときは、rightにleftのサンプルの参照を入れておくようにする 
    1616                public function AudioSamples(setting:AudioSetting,length:int=0)  
    1717                { 
  • as3/sazameki/branches/fp10/src/org/sazameki/audio/ctrlEvent/events/NoteOn.as

    r649 r1230  
    1111                public var channel:uint; 
    1212                 
    13                 public function NoteOn(noteNumber:uint, velocity:Number = 1.0, channel:uint = 0) 
     13                public function NoteOn(noteNumber:uint, velocity:Number = 0.8, channel:uint = 0) 
    1414                { 
    1515                        this.note = noteNumber; 
  • as3/sazameki/branches/fp10/src/org/sazameki/audio/engine/MultiSamplePlayer/ProcessData.as

    r649 r1230  
    2121                        _samples = new AudioSamples(new AudioSetting(), length); 
    2222                        _events = new CtrlEventList(length); 
    23                          
    2423                } 
    2524                public function get events():CtrlEventList { return _events; } 
  • as3/sazameki/branches/fp10/src/org/sazameki/audio/engine/MultiSamplePlayer/Voice.as

    r874 r1230  
    2323                private var _fadeOutSpeed:Number = 0.01; 
    2424                 
    25                 public function Voice(inst:Instrument,noteNum:uint,startOffset:uint=0,velocity:Number=1.0)  
     25                public function Voice(inst:Instrument,noteNum:uint,startOffset:uint=0,velocity:Number=0.8)  
    2626                { 
    2727                        _inst = inst; 
  • as3/sazameki/branches/fp10/src/org/sazameki/audio/engine/tenoran/Tenoran.as

    r874 r1230  
    136136                } 
    137137                 
     138                public function get map():Vector.<int> { return _map; } 
     139                 
     140                public function set map(value:Vector.<int>):void  
     141                { 
     142                        _map = value; 
     143                } 
     144                 
    138145        } 
    139146         
  • as3/sazameki/branches/fp10/src/org/sazameki/audio/engine/tenoran/TenoranBtn.as

    r874 r1230  
    2828                private var _cnt:int; 
    2929                 
    30                 public function TenoranBtn(xIdx:int,yIdx:int)  
     30                private var _parent:TenoranUI; 
     31                public function TenoranBtn(xIdx:int,yIdx:int,ui:TenoranUI)  
    3132                { 
     33                        _parent = ui; 
    3234                        addEventListener(MouseEvent.MOUSE_DOWN, onClick); 
    3335                        addEventListener(MouseEvent.ROLL_OVER, onOver); 
     
    3941                        btnOn2.alpha = 0; 
    4042                        addChild(btnOn2); 
     43                         
    4144                } 
    4245                 
    4346                private function onOver(e:MouseEvent):void  
    4447                { 
    45                         if (e.buttonDown
     48                        if (e.buttonDown && _parent.isMouseDown
    4649                        { 
    4750                                onClick(e); 
     
    6265                 
    6366                public function get isOn():Boolean { return _isOn; } 
     67                public function set isOn(value:Boolean):void 
     68                { 
     69                        _isOn = value; 
     70                        btnOn.visible = _isOn; 
     71                } 
    6472                 
    6573                public function lightOn():void 
  • as3/sazameki/branches/fp10/src/org/sazameki/audio/engine/tenoran/TenoranUI.as

    r874 r1230  
    1010        import flash.text.TextFormat; 
    1111        import flash.utils.setTimeout; 
     12        import jp.zkdesign.utility.StageUtility; 
    1213        /** 
    1314        * ... 
     
    3031                private var swingTf:TextField; 
    3132                 
     33                internal var isMouseDown:Boolean=false; 
     34                 
    3235                public function TenoranUI(tenoran:Tenoran)  
    3336                { 
     
    4346                                for (var k:int = 0; k < 16; ++k) 
    4447                                { 
    45                                         var btn:TenoranBtn = new TenoranBtn(i, k); 
     48                                        var btn:TenoranBtn = new TenoranBtn(i, k, this); 
    4649                                         
    4750                                        btn.x = btnSize * i + btnOffsetX; 
     
    7477                        var bpmAddBtn:TenoranCtrlBtn = new TenoranCtrlBtn(); 
    7578                        bpmAddBtn.addEventListener(MouseEvent.CLICK, onBpmAdd); 
    76                         bpmAddBtn.x = 120; 
     79                        bpmAddBtn.x = 50; 
    7780                        bpmAddBtn.y = 485; 
    7881                        addChild(bpmAddBtn); 
     
    8083                        var bpmSubBtn:TenoranCtrlBtn = new TenoranCtrlBtn(); 
    8184                        bpmSubBtn.addEventListener(MouseEvent.CLICK, onBpmSub); 
    82                         bpmSubBtn.x = 150; 
     85                        bpmSubBtn.x = 80; 
    8386                        bpmSubBtn.y = 485; 
    8487                        addChild(bpmSubBtn); 
     
    8689                        var swingAddBtn:TenoranCtrlBtn = new TenoranCtrlBtn(); 
    8790                        swingAddBtn.addEventListener(MouseEvent.CLICK, onSwingAdd); 
    88                         swingAddBtn.x = 358
     91                        swingAddBtn.x = 120
    8992                        swingAddBtn.y = 485; 
    9093                        addChild(swingAddBtn); 
     
    9295                        var swingSubBtn:TenoranCtrlBtn = new TenoranCtrlBtn(); 
    9396                        swingSubBtn.addEventListener(MouseEvent.CLICK, onSwingSub); 
    94                         swingSubBtn.x = 388
     97                        swingSubBtn.x = 150
    9598                        swingSubBtn.y = 485; 
    9699                        addChild(swingSubBtn); 
    97100                         
     101                        var resetBtn:TenoranCtrlBtn = new TenoranCtrlBtn(); 
     102                        resetBtn.addEventListener(MouseEvent.CLICK, onReset); 
     103                        resetBtn.x = 484; 
     104                        resetBtn.y = 80; 
     105                        addChild(resetBtn); 
     106                         
     107                        addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); 
     108                        addEventListener(MouseEvent.MOUSE_UP, onMouseUp); 
     109                        StageUtility.getStage().addEventListener(MouseEvent.MOUSE_UP, onMouseUp); 
    98110 
     111                } 
     112                 
     113                private function onReset(e:MouseEvent):void  
     114                { 
     115                        var btn:TenoranBtn; 
     116                        for (var i:int = 0; i < 16;++i) 
     117                        { 
     118                                for (var k:int = 0; k < 16; ++k) 
     119                                { 
     120                                        btn = btns[i][k]; 
     121                                        btn.isOn = false; 
     122                                } 
     123                        } 
     124                } 
     125                 
     126                private function onMouseDown(e:MouseEvent):void  
     127                { 
     128                        isMouseDown = true; 
     129                } 
     130                 
     131                private function onMouseUp(e:MouseEvent):void  
     132                { 
     133                        isMouseDown = false; 
    99134                } 
    100135                 
     
    102137                { 
    103138                        tenoran.swing -= 0.1; 
    104                         swingTf.text = String(tenoran.swing); 
     139                        swingTf.text = String(Math.round(tenoran.swing*10)/10); 
    105140                } 
    106141                 
     
    108143                { 
    109144                        tenoran.swing += 0.1; 
    110                         swingTf.text = String(tenoran.swing); 
     145                        swingTf.text = String(Math.round(tenoran.swing*10)/10); 
    111146                } 
    112147                 
     
    148183                        } 
    149184                } 
     185                 
     186                public function allOff():void 
     187                { 
     188                         
     189                } 
    150190        } 
    151191} 
  • as3/sazameki/branches/fp10/src/org/sazameki/audio/processor/AudioProcessor.as

    r649 r1230  
    22{ 
    33        import flash.events.EventDispatcher; 
     4        import org.sazameki.audio.core.AudioSamples; 
    45        import org.sazameki.audio.core.AudioSetting; 
    56        import org.sazameki.audio.core.SampleBuffer; 
     
    3435                } 
    3536                 
    36                 public function processAudio(samples:SampleBuffer):void{ 
     37                public function process(samples:AudioSamples):void{ 
    3738                         
    3839                } 
  • as3/sazameki/branches/fp10/src/org/sazameki/audio/processor/IAudioProcessor.as

    r649 r1230  
    11package org.sazameki.audio.processor  
    22{ 
    3         import org.sazameki.audio.core.AudioSetting; 
    4         import org.sazameki.audio.core.SampleBuffer; 
     3        import org.sazameki.audio.core.AudioSamples; 
    54         
    65        /** 
     
    1110        { 
    1211                 
    13                 function processAudio(samples:SampleBuffer):void; 
     12                function process(samples:AudioSamples):void; 
     13                /* 
    1414                function get parameterFormat():String; 
    1515                function get description():String; 
    1616                function get isEnvelope():Boolean; 
    1717                function trigger():void; 
    18                 function initialize(setting:AudioSetting,basicParams:Array=null,additionalProcessors:Object=null):void; } 
     18                */ 
     19        } 
     20                 
    1921         
    2022} 
  • as3/sazameki/branches/fp10/src/org/sazameki/audio/processor/effects/Delay.as

    r649 r1230  
    1111 */ 
    1212 
    13 /* 
    14  * Licensed under the MIT License 
    15  *  
    16  * Copyright (c) 2008 Takaaki Yamazaki 
    17  *  
    18  * Permission is hereby granted, free of charge, to any person obtaining a copy 
    19  * of this software and associated documentation files (the "Software"), to deal 
    20  * in the Software without restriction, including without limitation the rights 
    21  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
    22  * copies of the Software, and to permit persons to whom the Software is 
    23  * furnished to do so, subject to the following conditions: 
    24  *  
    25  * The above copyright notice and this permission notice shall be included in 
    26  * all copies or substantial portions of the Software. 
    27  *  
    28  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
    29  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
    30  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
    31  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
    32  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
    33  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 
    34  * THE SOFTWARE. 
    35  */ 
    3613 
    3714package org.sazameki.audio.processor.effects { 
     15        import org.sazameki.audio.core.AudioSamples; 
     16        import org.sazameki.audio.core.AudioSetting; 
    3817        import org.sazameki.audio.core.Sample; 
    3918        import org.sazameki.audio.engine.ssGenerator.SsAudioSetting; 
     19        import org.sazameki.audio.parameter.Parameter; 
    4020        import org.sazameki.audio.processor.AudioProcessor; 
     21        import org.sazameki.audio.processor.IAudioProcessor; 
    4122        import org.sazameki.audio.processor.SsAudioProcessor; 
    4223        import org.sazameki.data.RingArray; 
     24        import org.sazameki.data.RingBuffer; 
    4325 
    44         public class Delay extends AudioProcessor 
     26        public class Delay implements IAudioProcessor 
    4527        { 
    4628                 
    47                 private var _buffer:RingArray; 
     29                private var _bufferL:RingBuffer; 
     30                private var _bufferR:RingBuffer; 
    4831                private var _length:int; 
    49                 private var _feedback:Number
    50                 private var _dry:Number
    51                 private var _wet:Number
     32                private var _delayTime:Parameter = new Parameter(1, 1000)
     33                private var _feedback:Parameter = new Parameter(0, 1)
     34                private var _mix:Parameter = new Parameter(0, 1)
    5235                 
    53                 public function Delay() { 
     36                public function Delay(delayTimeMs:Number=500,feedBack:Number=0.5,mix:Number=0.3) { 
     37                        _delayTime.value = delayTimeMs; 
     38                        _feedback.value = feedBack; 
     39                        _mix.value = mix; 
     40                        //バッファサイズ=delay timeの最大値*サンプルレート(44100) 
     41                        _bufferL = new RingBuffer(Math.ceil(_delayTime.max * 44.1)); 
     42                        _bufferR = new RingBuffer(Math.ceil(_delayTime.max * 44.1)); 
    5443                         
    5544                } 
    56                 override public function get description():String{ 
     45                /*override public function get description():String{ 
    5746                        return "delay effect."; 
    5847                } 
     
    6049                        return 'delay time(ms)-feedback(0-1)-wet(0-1)-[dry(0-1)]'; 
    6150                } 
    62                 override public function initialize(setting:SsAudioSetting, basicParams:Array = null, additionalProcessors:Object = null):void{ 
     51                 
     52                override public function initialize(setting:AudioSetting, basicParams:Array = null, additionalProcessors:Object = null):void{ 
    6353                        super.initialize(setting, basicParams, additionalProcessors); 
    6454                         
     
    8474 
    8575                } 
    86                  
    87                 override public function processAudio(samples:Array):void{ 
    88                         var smpl:Sample; 
    89                         var delaySmpl:Sample; 
    90                         var len:int=samples.length; 
    91                         var tmpSmpl:Sample=new Sample(); 
     76                */ 
     77                public function process(samples:AudioSamples):void 
     78                { 
    9279                         
    93                         for(var i:int;i<len;i++){ 
    94                                 smpl=samples[i]; 
    95                                 delaySmpl=_buffer.getAt(0); 
     80                        var delayCount:int = _delayTime.value * 44.1; 
     81                        var feedback:Number = _feedback.value; 
     82                        var wet:Number = _mix.value; 
     83                        var dry:Number = 1 - wet; 
     84                         
     85                        var i:int = 0; 
     86                        var len:int = samples.length; 
     87                        var left:Vector.<Number>=samples.left; 
     88                        var inputSig:Number; 
     89                        var wetSig:Number; 
     90                        for (; i < len; i++) 
     91                        { 
     92                                inputSig = left[i]; 
     93                                wetSig = inputSig + _bufferL.head * feedback; 
     94                                _bufferL.setAt(delayCount, wetSig); 
     95                                left[i] = inputSig * dry + wetSig * wet; 
    9696                                 
    97                                 //一時保存 
    98                                 tmpSmpl.left=smpl.left; 
    99                                 tmpSmpl.right=smpl.right; 
     97                                _bufferL.next(); 
    10098                                 
    101                                 //mix 
    102                                 smpl.left=smpl.left*_dry+delaySmpl.left*_wet; 
    103                                 smpl.right=smpl.right*_dry+delaySmpl.right*_wet; 
    104                                  
    105                                 //save 
    106                                 delaySmpl.left=tmpSmpl.left+delaySmpl.left*_feedback; 
    107                                 delaySmpl.right=tmpSmpl.right+delaySmpl.right*_feedback; 
    108                                  
    109                                 _buffer.next(); 
    110                                  
     99                        } 
     100                        if (samples.setting.channels == 2) 
     101                        { 
     102                                var right:Vector.<Number>=samples.right; 
     103                                for (i = 0; i < len; i++) 
     104                                { 
     105                                        inputSig = right[i]; 
     106                                        wetSig = inputSig + _bufferR.head * feedback; 
     107                                        _bufferR.setAt(delayCount, wetSig); 
     108                                        right[i] = inputSig * dry + wetSig * wet; 
     109                                         
     110                                        _bufferR.next(); 
     111                                         
     112                                } 
     113 
    111114                        } 
    112115                         
     
    116119                } 
    117120                 
     121                public function get delayTime():Parameter { return _delayTime; } 
     122                 
     123                public function get feedback():Parameter { return _feedback; } 
     124                 
     125                public function get mix():Parameter { return _mix; } 
     126                 
    118127        } 
    119128         
  • as3/sazameki/branches/fp10/src/org/sazameki/data/RingBuffer.as

    r364 r1230  
    3737 
    3838        public class RingBuffer { 
    39                 private var _buffer:Array; 
     39                private var _buffer:Vector.<Number> 
    4040                private var _length:int; 
    4141                private var _currentIdx:int; 
     
    4444                public function RingBuffer(length:int=10) { 
    4545                        _length=length; 
    46                         _buffer=new Array(); 
     46                        _buffer = new Vector.<Number>(_length); 
    4747                        _currentIdx=0; 
    4848                        _sum=0; 
    4949                } 
    5050                 
     51                public function setAt(idx:int, value:Number):void 
     52                { 
     53                        idx = _currentIdx + idx; 
     54                        while (idx > _length) 
     55                        { 
     56                                idx -= _length; 
     57                        } 
     58                        while (idx < 0) 
     59                        { 
     60                                idx += _length; 
     61                        } 
     62                        _buffer[idx] = value; 
     63                         
     64                } 
     65                public function getAt(idx:int):Number 
     66                { 
     67                        idx = _currentIdx + idx; 
     68                        while (idx >= _length) 
     69                        { 
     70                                idx -= _length; 
     71                        } 
     72                        while (idx < 0) 
     73                        { 
     74                                idx += _length; 
     75                        } 
     76                        return(_buffer[idx]); 
     77                } 
     78                 
     79                public function get head():Number 
     80                { 
     81                        return _buffer[_currentIdx]; 
     82                } 
     83                public function set head(value:Number):void 
     84                { 
     85                        _buffer[_currentIdx] = value; 
     86                } 
     87                public function next():void 
     88                { 
     89                        _currentIdx++; 
     90                        if (_currentIdx >= _length) 
     91                        { 
     92                                _currentIdx -= _length; 
     93                        } 
     94                } 
     95                public function prev():void 
     96                { 
     97                        _currentIdx--; 
     98                        if (_currentIdx < 0) 
     99                        { 
     100                                _currentIdx += _length; 
     101                        } 
     102                } 
     103                 
     104                 
     105                 
     106                 
    51107                public function setLength(length:int,clear:Boolean=true):void{ 
    52108                        _length=length; 
    53                         _buffer=new Array(); 
     109                        _buffer=new Vector.<Number>(length); 
    54110                         
    55111                } 
  • as3/sazameki/branches/fp10/src/samples/SamplerSample.as

    r649 r1230  
    66        import flash.display.StageScaleMode; 
    77        import flash.events.Event; 
     8        import flash.events.SampleDataEvent; 
    89        import flash.media.Sound; 
     10        import flash.sampler.Sample; 
    911        import flash.utils.ByteArray; 
    1012        import org.sazameki.audio.core.AudioSamples; 
     
    8385                        //prepare sound 
    8486                        sound = new Sound(); 
    85                         sound.addEventListener(Event.SAMPLES_CALLBACK, onSamplesCallback); 
     87                        sound.addEventListener(Event.SAMPLE_DATA, onSamplesCallback); 
    8688                        sound.play(); 
    8789                }                
     
    9496                        procData.events.addEvent(new NoteOff(e.note), 0); 
    9597                } 
    96                 private function onSamplesCallback(e:Event):void  
     98                private function onSamplesCallback(e:SampleDataEvent):void  
    9799                { 
    98100 
     
    116118                                for (; i < len; ++i) 
    117119                                { 
    118                                         sound.samplesCallbackData.writeFloat(left[i]); 
    119                                         sound.samplesCallbackData.writeFloat(right[i]); 
     120                                        e.data.writeFloat(left[i]); 
     121                                        e.data.writeFloat(right[i]); 
    120122                                 
    121123                                } 
     
    126128                                { 
    127129                                        sig = left[i]; 
    128                                         sound.samplesCallbackData.writeFloat(sig); 
    129                                         sound.samplesCallbackData.writeFloat(sig); 
     130                                        e.data.writeFloat(sig); 
     131                                        e.data.writeFloat(sig); 
    130132                                } 
    131133                                 
  • as3/sazameki/branches/fp10/src/samples/TenoranSample.as

    r874 r1230  
    22{ 
    33        import flash.display.Sprite; 
     4        import flash.display.StageAlign; 
    45        import flash.display.StageScaleMode; 
    56        import flash.events.Event; 
     7        import flash.events.IOErrorEvent; 
     8        import flash.events.MouseEvent; 
    69        import flash.events.SampleDataEvent; 
    710        import flash.media.Sound; 
    811        import flash.media.SoundChannel; 
     12        import flash.media.SoundTransform; 
     13        import flash.net.FileFilter; 
     14        import flash.net.FileReference; 
    915        import flash.utils.ByteArray; 
     16        import jp.zkdesign.utility.StageUtility; 
    1017        import org.sazameki.audio.core.AudioSamples; 
    1118        import org.sazameki.audio.engine.MultiSamplePlayer.Instrument; 
     
    1421        import org.sazameki.audio.engine.MultiSamplePlayer.ProcessData; 
    1522        import org.sazameki.audio.engine.tenoran.Tenoran; 
     23        import org.sazameki.audio.engine.tenoran.TenoranCtrlBtn; 
     24        import org.sazameki.audio.engine.waveSlicer.algorithm.EvenIntervalSlice; 
     25        import org.sazameki.audio.engine.waveSlicer.Region; 
     26        import org.sazameki.audio.engine.waveSlicer.WaveSlicer; 
    1627        import org.sazameki.audio.format.wav.Wav; 
     28        import org.sazameki.audio.processor.effects.Delay; 
     29        import org.sazameki.audio.processor.filter.MoogVCF; 
     30        import org.sazameki.audio.processor.filter.ResonatFilter; 
     31        import org.sazameki.audio.processor.IAudioProcessor; 
     32        import org.sazameki.ui.Knob; 
    1733         
    1834        /** 
     
    4258                private var soundChannel:SoundChannel; 
    4359                 
     60                private var effects:Vector.<IAudioProcessor>; 
     61                 
     62                private var ref:FileReference = new FileReference(); 
     63                private var decoder:Wav = new Wav(); 
     64                 
    4465                public function TenoranSample()  
    4566                { 
    46                  
    47                          
    48                         stage.scaleMode = StageScaleMode.NO_SCALE; 
     67                        StageUtility.initStageProp(stage,StageAlign.TOP); 
    4968                         
    5069                        tenoran = new Tenoran(); 
    5170                        addChild(tenoran); 
    52                          
    53                         var decoder:Wav = new Wav(); 
    5471 
    5572                        var bassSamples:AudioSamples = decoder.decode(new Bass() as ByteArray); 
     
    7087                        var snareSamples:AudioSamples = decoder.decode(new Snare() as ByteArray); 
    7188                        var snareInst:Instrument = new Instrument(snareSamples); 
     89                         
     90                                                 
     91                        //effects(temporary) 
     92                        effects = new Vector.<IAudioProcessor>(); 
     93                        var delayEffect:Delay = new Delay(200,0.5,0); 
     94                        effects.push(delayEffect); 
     95 
     96                        var resonantFilter:ResonatFilter = new ResonatFilter(0,16000,0); 
     97                        effects.push(resonantFilter); 
     98                         
     99                        var knobSize:int = 26; 
     100                        var knobColor:int = 0x333333; 
     101                        var knobY:int = 486; 
     102                        //create knob 
     103                        var knob:Knob = new Knob(knobSize,knobColor); 
     104                        knob.x = 350; 
     105                        knob.y = knobY; 
     106                        knob.valueNormalized = 1; 
     107                        knob.assignParameter(resonantFilter.cutoff); 
     108                        addChild(knob); 
     109                         
     110                        var qKnob:Knob = new Knob(knobSize,knobColor); 
     111                        qKnob.x = 382; 
     112                        qKnob.y = knobY; 
     113                        qKnob.valueNormalized = 0; 
     114                        qKnob.assignParameter(resonantFilter.q); 
     115                        addChild(qKnob); 
     116                         
     117                        var dmKnob:Knob = new Knob(knobSize,knobColor); 
     118                        dmKnob.x = 425; 
     119                        dmKnob.y = knobY; 
     120                        dmKnob.assignParameter(delayEffect.mix); 
     121                        dmKnob.valueNormalized = 0.0; 
     122                        addChild(dmKnob); 
     123 
     124                        var dtKnob:Knob = new Knob(knobSize,knobColor); 
     125                        dtKnob.x = 457; 
     126                        dtKnob.y = knobY; 
     127                        dtKnob.assignParameter(delayEffect.delayTime); 
     128                        dtKnob.valueNormalized = 0.2; 
     129                        addChild(dtKnob); 
     130                         
     131                        //button for load local samples 
     132                        ref.addEventListener(Event.SELECT, onFileSelected); 
     133                        ref.addEventListener(Event.COMPLETE, onFileLoadComplete); 
     134                        ref.addEventListener(IOErrorEvent.IO_ERROR, onFileIoError); 
     135                         
     136                        var loadBtn:TenoranCtrlBtn = new TenoranCtrlBtn(); 
     137                        loadBtn.addEventListener(MouseEvent.CLICK, onLoadBtnClick); 
     138                        loadBtn.x = 23; 
     139                        loadBtn.y = 80; 
     140                        addChild(loadBtn); 
     141                         
     142                         
     143                         
    72144                         
    73145                        sampler = new MultiSamplePlayer(); 
     
    85157                        sound.addEventListener(Event.SAMPLE_DATA, onSamplesCallback); 
    86158                        soundChannel = sound.play(); 
     159                        var trans:SoundTransform = soundChannel.soundTransform; 
     160                        trans.volume = 0.8; 
     161                        soundChannel.soundTransform = trans; 
     162 
     163                         
     164                } 
     165                 
     166                private function onLoadBtnClick(e:MouseEvent):void  
     167                { 
     168                        ref.browse([new FileFilter("wav","*.wav")]); 
     169                } 
     170                 
     171                private function onFileSelected(e:Event):void  
     172                { 
     173                        var ref:FileReference = e.target as FileReference; 
     174                        trace("selected",ref.name); 
     175                        ref.load(); 
     176 
     177                } 
     178                 
     179                private function onFileIoError(e:IOErrorEvent):void  
     180                { 
     181                        trace("error"); 
     182                        trace(e); 
     183                } 
     184                 
     185                private function onFileLoadComplete(e:Event):void  
     186                { 
     187                        var ref:FileReference = e.target as FileReference; 
     188                        var smpls:AudioSamples = decoder.decode(ref.data); 
     189                        var slicer:WaveSlicer = new WaveSlicer(new EvenIntervalSlice(16)); 
     190                        var regions:Vector.<Region>=slicer.slice(smpls); 
     191                        //instrument生成 
     192                        for (var i:int = 0; i < 16; ++i) 
     193                        { 
     194                                var inst:Instrument = new Instrument(regions[i]); 
     195                                sampler.addInstrument(inst, new NoteRange(50 + i, 50 + i)); 
     196                        } 
     197                        //tenoranのmapを書き換え 
     198                        tenoran.map = Vector.<int>([65,64,63,62,61,60,59,58,57,56,55,54,53,52,51,50]); 
     199                        // 
     200                        tenoran.bpm = 135; 
     201                        tenoran.swing = 0; 
     202                         
    87203                } 
    88204                 
     
    109225                        tenoran.processEvents(procData); 
    110226                        sampler.process(procData); 
     227                        //apply effects 
     228                        var effectCount:int = effects.length; 
     229                        for (i = 0; i < effectCount; ++i) 
     230                        { 
     231                                effects[i].process(procData.samples); 
     232                        } 
    111233                         
    112234                        if (audios.setting.channels == 2) 
     
    114236                                left = audios.left; 
    115237                                right = audios.right; 
    116                                 for (; i < len; ++i) 
     238                                for (i=0; i < len; ++i) 
    117239                                { 
    118240                                        e.data.writeFloat(left[i]); 
     
    123245                        { 
    124246                                left = audios.left; 
    125                                 for (; i < len; ++i) 
     247                                for (i=0; i < len; ++i) 
    126248                                { 
    127249                                        sig = left[i];