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

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

ファイル:

凡例:

変更無し
追加
削除
更新
コピー
移動
  • 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                }