Changeset 34488 for lang/actionscript

Show
Ignore:
Timestamp:
07/19/09 23:25:57 (3 years ago)
Author:
arche
Message:

Ring(@r)とSync(@s)機能の追加

Location:
lang/actionscript/flmml/trunk/src
Files:
14 modified

Legend:

Unmodified
Added
Removed
  • lang/actionscript/flmml/trunk/src/com/txt_nifty/sketch/flmml/MChannel.as

    r33297 r34488  
    3434        private var m_outMode:int; 
    3535        private var m_outPipe:int; 
     36        private var m_ringSens:Number; 
     37        private var m_ringPipe:int; 
     38        private var m_syncMode:int; 
     39        private var m_syncPipe:int; 
    3640        public    static var PITCH_RESOLUTION:int = 100; 
    3741        protected static var s_init:int = 0; 
     
    4246        protected static var s_samples:Vector.<Number>;            // mono 
    4347        protected static var s_pipeArr:Vector.<Vector.<Number>>; 
     48        protected static var s_syncSources:Vector.<Vector.<Boolean>>; 
    4449        protected static var s_lfoDelta:int = 245; 
    4550 
     
    7378            setInput(0, 0); 
    7479            setOutput(0, 0); 
     80            setRing(0, 0); 
     81            setSync(0, 0); 
    7582        } 
    7683        public static function boot(numSamples:int):void { 
     
    100107                } 
    101108            } 
     109        } 
     110        public static function createSyncSources(num:int):void { 
     111                s_syncSources = new Vector.<Vector.<Boolean>>(num); 
     112                for (var i:int = 0; i < num; i++) { 
     113                        s_syncSources[i] = new Vector.<Boolean>(s_samples.length); 
     114                        for (var j:int = 0; j < s_samples.length; j++) { 
     115                                s_syncSources[i][j] = false; 
     116                        } 
     117                } 
    102118        } 
    103119        public static function getFrequency(freqNo:int):Number { 
     
    241257            m_outPipe = p; 
    242258        } 
     259        public function setRing(s:int, p:int):void { 
     260                m_ringSens = (1 << (s - 1)) / 8.0; 
     261                m_ringPipe = p; 
     262        } 
     263        public function setSync(m:int, p:int):void { 
     264                m_syncMode = m; 
     265                m_syncPipe = p; 
     266        } 
    243267        protected function getNextCutoff():Number { 
    244268            var cut:Number = m_lpfFrq + m_lpfAmt * m_envelope2.getNextAmplitudeLinear(); 
     
    260284                if (m_osc2Connect == 0) { 
    261285                    // no input, no LFO 
    262                     m_oscMod1.getSamples(s_samples, start, end); 
     286                    if(m_syncMode == 1){ 
     287                        // sync out 
     288                            m_oscMod1.getSamplesWithSyncOut(s_samples, s_syncSources[m_syncPipe], start, end); 
     289                    }else if(m_syncMode == 2){ 
     290                        // sync in 
     291                            m_oscMod1.getSamplesWithSyncIn(s_samples, s_syncSources[m_syncPipe], start, end); 
     292                    }else{ 
     293                            m_oscMod1.getSamples(s_samples, start, end); 
     294                        } 
    263295                    if (m_volMode == 0) m_envelope1.ampSamplesLinear(s_samples, start, end, m_ampLevel); 
    264296                    else m_envelope1.ampSamplesNonLinear(s_samples, start, end, m_ampLevel); 
     
    277309                        } 
    278310                        m_oscMod1.setFrequency(getFrequency(freqNo)); 
    279                         m_oscMod1.getSamples(s_samples, s, e); 
     311                        if(m_syncMode == 1){ 
     312                                // sync out 
     313                                m_oscMod1.getSamplesWithSyncOut(s_samples, s_syncSources[m_syncPipe], s, e); 
     314                        }else if(m_syncMode == 2){ 
     315                                // sync in 
     316                                m_oscMod1.getSamplesWithSyncIn(s_samples, s_syncSources[m_syncPipe], s, e); 
     317                            }else{ 
     318                                m_oscMod1.getSamples(s_samples, s, e); 
     319                            } 
    280320                        if (m_volMode == 0) m_envelope1.ampSamplesLinear(s_samples, s, e, m_ampLevel); 
    281321                        else m_envelope1.ampSamplesNonLinear(s_samples, s, e, m_ampLevel); 
     
    313353                } 
    314354            } 
     355            if (m_ringSens >= 0.000001) { 
     356                // with ring 
     357                for(i = start; i < end; i++){ 
     358                                        s_samples[i] *= s_pipeArr[m_ringPipe][i] * m_ringSens; 
     359                                } 
     360            } 
    315361            m_formant.run(s_samples, start, end); 
    316362            m_filter.run(s_samples, start, end, m_envelope2, m_lpfFrq, m_lpfAmt, m_lpfRes, key); 
  • lang/actionscript/flmml/trunk/src/com/txt_nifty/sketch/flmml/MEvent.as

    r32952 r34488  
    4343        public function setOutput(mode:int, pipe:int):void    { set(MStatus.OUTPUT, mode, pipe); } 
    4444        public function setExpression(ex:int):void            { set(MStatus.EXPRESSION, ex, 0); } 
     45        public function setRing(sens:int, pipe:int):void      { set(MStatus.RINGMODULATE, sens, pipe); } 
     46        public function setSync(mode:int, pipe:int):void      { set(MStatus.SYNC, mode, pipe); } 
    4547        public function setDelta(delta:int):void              { m_delta = delta; } 
    4648        public function getStatus():int     { return m_status; } 
     
    7779        public function getOutputPipe():int { return m_data1; } 
    7880        public function getExpression():int { return m_data0; } 
     81        public function getRingSens():int   { return m_data0; } 
     82        public function getRingInput():int  { return m_data1; } 
     83        public function getSyncMode():int   { return m_data0; } 
     84        public function getSyncPipe():int   { return m_data1; } 
    7985    } 
    8086} 
  • lang/actionscript/flmml/trunk/src/com/txt_nifty/sketch/flmml/MML.as

    r34284 r34488  
    2424        protected var m_warning:String; 
    2525        protected var m_maxPipe:int; 
     26        protected var m_maxSyncSource:int; 
    2627        protected static var MAX_PIPE:int = 3; 
     28        protected static var MAX_SYNCSOURCE:int = 3; 
    2729 
    2830        public function MML() { 
     
    8789        protected function atmark():void { 
    8890            var c:String = getChar(); 
    89             var o:int = 1, a:int = 0, d:int = 64, s:int = 32, r:int = 0; 
     91            var o:int = 1, a:int = 0, d:int = 64, s:int = 32, r:int = 0, sens:int = 0, mode:int = 0; 
    9092            switch(c) { 
    9193            case 'v': // Volume 
     
    212214                case 'i': // Input 
    213215                { 
    214                     var sens:int = 0; 
     216                        sens = 0; 
    215217                    next(); 
    216218                    sens = getUInt(sens); 
     
    228230            case 'o': // Output 
    229231                { 
    230                     var mode:int = 0; 
     232                    mode = 0; 
    231233                    next(); 
    232234                    mode = getUInt(mode); 
     
    245247                // if (n == 1) overwrite 
    246248                // if (n == 2) add 
     249                break; 
     250            case 'r': // Ring 
     251                { 
     252                        sens = 0; 
     253                        next(); 
     254                        sens = getUInt(sens); 
     255                        if (getChar() == ',') { 
     256                                next(); 
     257                                a = getUInt(a); 
     258                                if (a > m_maxPipe) a = m_maxPipe; 
     259                        } 
     260                        m_tracks[m_trackNo].recRing(sens, a); 
     261                } 
     262                break; 
     263            case 's': // Sync 
     264                { 
     265                        mode = 0; 
     266                        next(); 
     267                        mode = getUInt(mode); 
     268                        if (getChar() == ',') { 
     269                                next(); 
     270                                a = getUInt(a); 
     271                                if (mode == 1) { 
     272                                // Sync out 
     273                                if (a > m_maxSyncSource) { 
     274                                        m_maxSyncSource = a; 
     275                                        if (m_maxSyncSource >= MAX_SYNCSOURCE) m_maxSyncSource = a = MAX_SYNCSOURCE; 
     276                                } 
     277                                } else if (mode == 2) { 
     278                                // Sync in 
     279                                if (a > m_maxSyncSource) a = m_maxSyncSource; 
     280                                } 
     281                        } 
     282                        m_tracks[m_trackNo].recSync(mode, a); 
     283                } 
    247284                break; 
    248285            default: 
     
    749786            m_noteShift = 0; 
    750787            m_maxPipe = 0; 
     788            m_maxSyncSource = 0; 
    751789 
    752790            processComment(str); 
     
    776814            // initialize modules 
    777815            m_sequencer.createPipes(m_maxPipe+1); 
     816            m_sequencer.createSyncSources(m_maxSyncSource + 1); 
    778817 
    779818            // dispatch event 
  • lang/actionscript/flmml/trunk/src/com/txt_nifty/sketch/flmml/MOscFcTri.as

    r27528 r34488  
    3535            } 
    3636        } 
     37        public override function getSamplesWithSyncIn(samples:Vector.<Number>, syncin:Vector.<Boolean>, start:int, end:int):void { 
     38                        var i:int; 
     39                        for(i = start; i < end; i++) { 
     40                                if(syncin[i]){ 
     41                                        resetPhase(); 
     42                                } 
     43                samples[i] = s_table[m_phase >> (PHASE_SFT+11)]; 
     44                m_phase = (m_phase + m_freqShift) & PHASE_MSK; 
     45                        }                
     46        } 
     47        public override function getSamplesWithSyncOut(samples:Vector.<Number>, syncout:Vector.<Boolean>, start:int, end:int):void { 
     48                        var i:int; 
     49                        for(i = start; i < end; i++) { 
     50                samples[i] = s_table[m_phase >> (PHASE_SFT+11)]; 
     51                m_phase += m_freqShift; 
     52                syncout[i] = (m_phase > PHASE_MSK); 
     53                m_phase &= PHASE_MSK; 
     54                        }                
     55        } 
    3756    } 
    3857} 
  • lang/actionscript/flmml/trunk/src/com/txt_nifty/sketch/flmml/MOscGbWave.as

    r32842 r34488  
    5959            } 
    6060        } 
     61        public override function getSamplesWithSyncIn(samples:Vector.<Number>, syncin:Vector.<Boolean>, start:int, end:int):void { 
     62                        var i:int; 
     63                        for(i = start; i < end; i++) { 
     64                                if(syncin[i]){ 
     65                                        resetPhase(); 
     66                                } 
     67                samples[i] = s_table[m_waveNo][m_phase >> (PHASE_SFT+11)]; 
     68                m_phase = (m_phase + m_freqShift) & PHASE_MSK; 
     69                        }                
     70        } 
     71        public override function getSamplesWithSyncOut(samples:Vector.<Number>, syncout:Vector.<Boolean>, start:int, end:int):void { 
     72                        var i:int; 
     73                        for(i = start; i < end; i++) { 
     74                samples[i] = s_table[m_waveNo][m_phase >> (PHASE_SFT+11)]; 
     75                m_phase += m_freqShift; 
     76                syncout[i] = (m_phase > PHASE_MSK); 
     77                m_phase &= PHASE_MSK; 
     78                        }                
     79        } 
    6180    } 
    6281} 
  • lang/actionscript/flmml/trunk/src/com/txt_nifty/sketch/flmml/MOscMod.as

    r27528 r34488  
    3131        public function getSamples(samples:Vector.<Number>, start:int, end:int):void { 
    3232        } 
     33        public function getSamplesWithSyncIn(samples:Vector.<Number>, syncin:Vector.<Boolean>, start:int, end:int):void { 
     34                getSamples(samples, start, end); 
     35        } 
     36        public function getSamplesWithSyncOut(samples:Vector.<Number>, syncout:Vector.<Boolean>, start:int, end:int):void { 
     37                getSamples(samples, start, end); 
     38        } 
    3339        public function getFrequency():Number { 
    3440            return m_frequency; 
  • lang/actionscript/flmml/trunk/src/com/txt_nifty/sketch/flmml/MOscPulse.as

    r27528 r34488  
    2929            } 
    3030        } 
     31        public override function getSamplesWithSyncIn(samples:Vector.<Number>, syncin:Vector.<Boolean>, start:int, end:int):void { 
     32                        var i:int; 
     33                        for(i = start; i < end; i++) { 
     34                                if(syncin[i]){ 
     35                                        resetPhase(); 
     36                                } 
     37                samples[i] = (m_phase < m_pwm) ? 1.0 : -1.0; 
     38                m_phase = (m_phase + m_freqShift) & PHASE_MSK; 
     39                        }                
     40        } 
     41        public override function getSamplesWithSyncOut(samples:Vector.<Number>, syncout:Vector.<Boolean>, start:int, end:int):void { 
     42                        var i:int; 
     43                        for(i = start; i < end; i++) { 
     44                samples[i] = (m_phase < m_pwm) ? 1.0 : -1.0; 
     45                m_phase += m_freqShift; 
     46                syncout[i] = (m_phase > PHASE_MSK); 
     47                m_phase &= PHASE_MSK; 
     48                        }                
     49        } 
    3150        public function setPWM(pwm:Number):void { 
    3251            m_pwm = pwm * PHASE_LEN; 
  • lang/actionscript/flmml/trunk/src/com/txt_nifty/sketch/flmml/MOscSaw.as

    r28310 r34488  
    3939            } 
    4040        } 
     41        public override function getSamplesWithSyncIn(samples:Vector.<Number>, syncin:Vector.<Boolean>, start:int, end:int):void { 
     42                        var i:int; 
     43                        for(i = start; i < end; i++) { 
     44                                if(syncin[i]){ 
     45                                        resetPhase(); 
     46                                } 
     47                samples[i] = s_table[m_phase >> PHASE_SFT]; 
     48                m_phase = (m_phase + m_freqShift) & PHASE_MSK; 
     49                        }                
     50        } 
     51        public override function getSamplesWithSyncOut(samples:Vector.<Number>, syncout:Vector.<Boolean>, start:int, end:int):void { 
     52                        var i:int; 
     53                        for(i = start; i < end; i++) { 
     54                samples[i] = s_table[m_phase >> PHASE_SFT]; 
     55                m_phase += m_freqShift; 
     56                syncout[i] = (m_phase > PHASE_MSK); 
     57                m_phase &= PHASE_MSK; 
     58                        }                
     59        } 
    4160    } 
    4261} 
  • lang/actionscript/flmml/trunk/src/com/txt_nifty/sketch/flmml/MOscSine.as

    r27528 r34488  
    3838            } 
    3939        } 
     40        public override function getSamplesWithSyncIn(samples:Vector.<Number>, syncin:Vector.<Boolean>, start:int, end:int):void { 
     41                        var i:int; 
     42                        for(i = start; i < end; i++) { 
     43                                if(syncin[i]){ 
     44                                        resetPhase(); 
     45                                } 
     46                samples[i] = s_table[m_phase >> PHASE_SFT]; 
     47                m_phase = (m_phase + m_freqShift) & PHASE_MSK; 
     48                        }                
     49        } 
     50        public override function getSamplesWithSyncOut(samples:Vector.<Number>, syncout:Vector.<Boolean>, start:int, end:int):void { 
     51                        var i:int; 
     52                        for(i = start; i < end; i++) { 
     53                samples[i] = s_table[m_phase >> PHASE_SFT]; 
     54                m_phase += m_freqShift; 
     55                syncout[i] = (m_phase > PHASE_MSK); 
     56                m_phase &= PHASE_MSK; 
     57                        }                
     58        } 
    4059    } 
    4160} 
  • lang/actionscript/flmml/trunk/src/com/txt_nifty/sketch/flmml/MOscTriangle.as

    r27528 r34488  
    3838            } 
    3939        } 
     40        public override function getSamplesWithSyncIn(samples:Vector.<Number>, syncin:Vector.<Boolean>, start:int, end:int):void { 
     41                        var i:int; 
     42                        for(i = start; i < end; i++) { 
     43                                if(syncin[i]){ 
     44                                        resetPhase(); 
     45                                } 
     46                samples[i] = s_table[m_phase >> PHASE_SFT]; 
     47                m_phase = (m_phase + m_freqShift) & PHASE_MSK; 
     48                        }                
     49        } 
     50        public override function getSamplesWithSyncOut(samples:Vector.<Number>, syncout:Vector.<Boolean>, start:int, end:int):void { 
     51                        var i:int; 
     52                        for(i = start; i < end; i++) { 
     53                samples[i] = s_table[m_phase >> PHASE_SFT]; 
     54                m_phase += m_freqShift; 
     55                syncout[i] = (m_phase > PHASE_MSK); 
     56                m_phase &= PHASE_MSK; 
     57                        }                
     58        } 
    4059    } 
    4160} 
  • lang/actionscript/flmml/trunk/src/com/txt_nifty/sketch/flmml/MSequencer.as

    r32587 r34488  
    11package com.txt_nifty.sketch.flmml { 
     2    import __AS3__.vec.Vector; 
     3     
     4    import flash.events.Event; 
    25    import flash.events.EventDispatcher; 
    36    import flash.events.SampleDataEvent; 
    4     import flash.events.Event; 
    57    import flash.events.TimerEvent; 
    68    import flash.media.Sound; 
     
    911    import flash.media.SoundTransform; 
    1012    import flash.utils.*; 
    11     import __AS3__.vec.Vector; 
    1213 
    1314    public class MSequencer extends EventDispatcher { 
     
    302303            MChannel.createPipes(num); 
    303304        } 
     305        public function createSyncSources(num:int):void { 
     306                MChannel.createSyncSources(num); 
     307        } 
    304308        public function getTotalMSec():uint { 
    305309            return m_trackArr[MTrack.TEMPO_TRACK].getTotalMSec(); 
  • lang/actionscript/flmml/trunk/src/com/txt_nifty/sketch/flmml/MStatus.as

    r32952 r34488  
    2828        public static const OUTPUT:int       = 25; 
    2929        public static const EXPRESSION:int   = 26; 
     30        public static const RINGMODULATE:int = 27; 
     31        public static const SYNC:int         = 28; 
    3032    } 
    3133} 
  • lang/actionscript/flmml/trunk/src/com/txt_nifty/sketch/flmml/MTrack.as

    r32952 r34488  
    140140                                m_ch.setExpression(e.getExpression()); 
    141141                                break; 
     142                            case MStatus.RINGMODULATE: 
     143                                m_ch.setRing(e.getRingSens(), e.getRingInput()); 
     144                                break; 
     145                            case MStatus.SYNC: 
     146                                m_ch.setSync(e.getSyncMode(), e.getSyncPipe()); 
     147                                break; 
    142148                            case MStatus.CLOSE: 
    143149                                m_ch.close(); 
     
    383389            e.setExpression(ex); 
    384390            m_events.push(e); 
     391        } 
     392         
     393        public function recRing(sens:int, pipe:int):void { 
     394                var e:MEvent = new MEvent(); 
     395                recDelta(e); 
     396                e.setRing(sens, pipe); 
     397                m_events.push(e); 
     398        } 
     399         
     400        public function recSync(mode:int, pipe:int):void { 
     401                var e:MEvent = new MEvent(); 
     402                recDelta(e); 
     403                e.setSync(mode, pipe); 
     404                m_events.push(e); 
    385405        } 
    386406