チェンジセット 2903

差分発生行の前後
無視リスト:
コミット日時:
2009/07/06 00:31:22 (3 年前)
コミッタ:
keim
ログメッセージ:

サウンドライブラリ SiON ver0.5.5 更新 バグフィクス PCM音源にスライサー機能追加など

ファイル:

凡例:

変更無し
追加
削除
更新
コピー
移動
  • as3/SiOPM/trunk/src/org/si/sion/SiONData.as

    r2806 r2903  
    1111    import org.si.sion.utils.SiONUtil; 
    1212    import org.si.sion.module.SiOPMPCMData; 
     13    import org.si.sion.module.SiOPMSamplerData; 
    1314 
    1415     
     
    3940         *  @param samplingOctave Sampling frequency. The value of 5 means that "o5a" is original frequency. 
    4041         *  @param sampleMax The maximum sample count to extract. The length of returning vector is limited by this value. 
     42         *  @return created instance 
    4143         */ 
    42         public function setPCMSound(index:int, sound:Sound, samplingOctave:int=5, sampleMax:int=1048576) : void 
     44        public function setPCMSound(index:int, sound:Sound, samplingOctave:int=5, sampleMax:int=1048576) : SiOPMPCMData 
    4345        { 
    4446            var pcm:Vector.<int> = SiONUtil.logTrans(sound, null, sampleMax); 
    4547            pcmData[index] = SiOPMPCMData.alloc(pcm, samplingOctave); 
     48            return pcmData[index]; 
    4649        } 
    4750         
     
    5356         *  @param channelCount 1 for monoral, 2 for stereo. 
    5457         *  @param sampleMax The maximum sample count to extract. The length of returning vector is limited by this value. 
     58         *  @return created instance 
    5559         */ 
    56         public function setSamplerSound(index:int, sound:Sound, isOneShot:Boolean=true, channelCount:int=2, sampleMax:int=1048576) : void 
     60        public function setSamplerSound(index:int, sound:Sound, isOneShot:Boolean=true, channelCount:int=2, sampleMax:int=1048576) : SiOPMSamplerData 
    5761        { 
    5862            var data:Vector.<Number> = SiONUtil.extract(sound, null, channelCount, sampleMax); 
    59             setSamplerData(index, data, isOneShot, channelCount); 
     63            return setSamplerData(index, data, isOneShot, channelCount); 
    6064        } 
    6165    } 
  • as3/SiOPM/trunk/src/org/si/sion/SiONDriver.as

    r2806 r2903  
    2424    import org.si.sion.module.SiOPMModule; 
    2525    import org.si.sion.module.SiOPMChannelParam; 
     26    import org.si.sion.module.SiOPMWaveTable; 
     27    import org.si.sion.module.SiOPMPCMData; 
     28    import org.si.sion.module.SiOPMSamplerData; 
    2629    import org.si.sion.effector.SiEffectModule; 
    2730    import org.si.sion.utils.SiONUtil; 
     
    5053    //---------------------------------------- 
    5154        /** version number */ 
    52         static public const VERSION:String = "0.5.4"; 
     55        static public const VERSION:String = "0.5.5"; 
    5356         
    5457         
     
    275278         *  @see #NEM_OVERWRITE 
    276279         *  @see #NEM_SHIFT 
    277          *  @see #NEM_SHIFT_OVERWRITE 
    278280         */ 
    279281        public function get noteOnExceptionMode() : int { return _noteOnExceptionMode; } 
     
    561563                    _soundChannel = null; 
    562564                    _latency = 0; 
     565                    _fader.stop(); 
    563566                    _faderVolume = 1; 
    564567                    _soundTransform.volume = _masterVolume; 
     
    628631         *  @param table wave shape vector ranges in -1 to 1. 
    629632         */ 
    630         public function setWaveTable(index:int, table:Vector.<Number>) : void 
     633        public function setWaveTable(index:int, table:Vector.<Number>) : SiOPMWaveTable 
    631634        { 
    632635            var len:int, bits:int=-1; 
    633636            for (len=table.length; len>0; len>>=1) bits++; 
    634             if (bits<2) return
     637            if (bits<2) return null
    635638            var waveTable:Vector.<int> = SiONUtil.logTransVector(table); 
    636639            waveTable.length = 1<<bits; 
    637             SiOPMTable.registerWaveTable(index, waveTable); 
     640            return SiOPMTable.registerWaveTable(index, waveTable); 
    638641        } 
    639642         
     
    646649         *  @see #render() 
    647650         */ 
    648         public function setPCMData(index:int, data:Vector.<Number>, isDataStereo:Boolean=true, samplingOctave:int=5) : void 
     651        public function setPCMData(index:int, data:Vector.<Number>, isDataStereo:Boolean=true, samplingOctave:int=5) : SiOPMPCMData 
    649652        { 
    650653            var pcm:Vector.<int> = SiONUtil.logTransVector(data, isDataStereo); 
    651             SiOPMTable.registerPCMData(index, pcm, samplingOctave); 
     654            return SiOPMTable.registerPCMData(index, pcm, samplingOctave); 
    652655        } 
    653656         
     
    659662         *  @param sampleMax The maximum sample count to extract. The length of returning vector is limited by this value. 
    660663         */ 
    661         public function setPCMSound(index:int, sound:Sound, samplingOctave:int=5, sampleMax:int=1048576) : void 
     664        public function setPCMSound(index:int, sound:Sound, samplingOctave:int=5, sampleMax:int=1048576) : SiOPMPCMData 
    662665        { 
    663666            var data:Vector.<int> = SiONUtil.logTrans(sound, null, sampleMax); 
    664             SiOPMTable.registerPCMData(index, data, samplingOctave); 
     667            return SiOPMTable.registerPCMData(index, data, samplingOctave); 
    665668        } 
    666669         
     
    673676         *  @see #render() 
    674677         */ 
    675         public function setSamplerData(index:int, data:Vector.<Number>, isOneShot:Boolean=true, channelCount:int=1) : void 
    676         { 
    677             SiOPMTable.registerSamplerData(index, data, isOneShot, channelCount); 
     678        public function setSamplerData(index:int, data:Vector.<Number>, isOneShot:Boolean=true, channelCount:int=1) : SiOPMSamplerData 
     679        { 
     680            return SiOPMTable.registerSamplerData(index, data, isOneShot, channelCount); 
    678681        } 
    679682         
     
    686689         *  @param sampleMax The maximum sample count to extract. The length of returning vector is limited by this value. 
    687690         */ 
    688         public function setSamplerSound(index:int, sound:Sound, isOneShot:Boolean=true, channelCount:int=2, sampleMax:int=1048576) : void 
     691        public function setSamplerSound(index:int, sound:Sound, isOneShot:Boolean=true, channelCount:int=2, sampleMax:int=1048576) : SiOPMSamplerData 
    689692        { 
    690693            var data:Vector.<Number> = SiONUtil.extract(sound, null, channelCount, sampleMax); 
    691             SiOPMTable.registerSamplerData(index, data, isOneShot, channelCount); 
     694            return SiOPMTable.registerSamplerData(index, data, isOneShot, channelCount); 
    692695        } 
    693696         
     
    12961299         
    12971300        private function errorDriverBusy(execID:int) : Error { 
    1298             var states:Array = ["compiling", "streaming", "rendering"]; 
     1301            var states:Array = ["???", "compiling", "streaming", "rendering"]; 
    12991302            return new Error("SiONDriver error: Driver busy. Call " + states[execID] + " while " + states[_listenEvent] + "."); 
    13001303        } 
  • as3/SiOPM/trunk/src/org/si/sion/effector/SiEffectStereoReverb.as

    r2697 r2903  
    4141         *  @param feedback feedback decay(-1-1). Negative value to invert phase. 
    4242         */ 
    43         public function setParameters(delay1:Number=0.55, delay2:Number=0.15, feedback:Number=0.9) : void { 
     43        public function setParameters(delay1:Number=0.7, delay2:Number=0.4, feedback:Number=0.8) : void { 
    4444            if (delay1<0.01) delay1=0.01; 
    4545            else if (delay1>0.99) delay1=0.99; 
     
    7171        override public function mmlCallback(args:Vector.<Number>) : void 
    7272        { 
    73             setParameters((!isNaN(args[1])) ? (args[1]*0.01) : 0.55
    74                           (!isNaN(args[1])) ? (args[1]*0.01) : 0.15
    75                           (!isNaN(args[2])) ? (args[2]*0.01) : 0.9); 
     73            setParameters((!isNaN(args[1])) ? (args[1]*0.01) : 0.7
     74                          (!isNaN(args[1])) ? (args[1]*0.01) : 0.4
     75                          (!isNaN(args[2])) ? (args[2]*0.01) : 0.8); 
    7676        } 
    7777         
  • as3/SiOPM/trunk/src/org/si/sion/effector/SiEffectWaveShaper.as

    r2806 r2903  
    1212    //------------------------------------------------------------ 
    1313        private var _coefficient:int; 
     14        private var _outputLevel:Number; 
    1415         
    1516         
     
    2324         
    2425         
     26         
    2527    // operations 
    2628    //------------------------------------------------------------ 
    2729        /** set parameters 
    2830         *  @param distortion distortion(0-1). 
     31         *  @param outputLevel output level(0-1). 
    2932         */ 
    30         public function setParameters(distortion:Number=0.5) : void { 
     33        public function setParameters(distortion:Number=0.5, outputLevel:Number=1.0) : void { 
    3134            if (distortion >= 1) distortion = 0.9999847412109375; //65535/65536 
    3235            _coefficient = 2*distortion/(1-distortion); 
     36            _outputLevel = outputLevel; 
    3337        } 
    3438         
     
    4852        override public function mmlCallback(args:Vector.<Number>) : void 
    4953        { 
    50             setParameters((!isNaN(args[0])) ? args[0]*0.01 : 0.5); 
     54            setParameters((!isNaN(args[0])) ? args[0]*0.01 : 0.5, 
     55                          (!isNaN(args[0])) ? args[0]*0.01 : 1.0); 
    5156        } 
    5257         
     
    6469            startIndex <<= 1; 
    6570            length <<= 1; 
    66             var i:int, n:Number, c1:Number=1 + _coefficient, imax:int=startIndex+length; 
     71            var i:int, n:Number, c1:Number=(1 + _coefficient)*_outputLevel, imax:int=startIndex+length; 
    6772            for (i=startIndex; i<imax; i++) { 
    6873                n = buffer[i]; 
  • as3/SiOPM/trunk/src/org/si/sion/module/SiOPMChannelFM.as

    r2697 r2903  
    395395    //-------------------------------------------------- 
    396396        /** pitch = (note << 6) | (kf & 63) [0,8191] */ 
    397         override public function get pitch() : int { return operator[0].pitchIndex; } 
    398         override public function set pitch(p:int) : void 
    399         { 
     397        override public function get pitch() : int { return operator[_operatorCount-1].pitchIndex; } 
     398        override public function set pitch(p:int) : void { 
    400399            for (var i:int=0; i<_operatorCount; i++) { 
    401400                operator[i].pitchIndex = p; 
     
    404403         
    405404        /** active operator index (i) */ 
    406         override public function set activeOperatorIndex(i:int) : void 
    407         { 
     405        override public function set activeOperatorIndex(i:int) : void { 
    408406            var opeIndex:int = (i<0) ? 0 : (i>=_operatorCount) ? (_operatorCount-1) : i; 
    409407            activeOperator = operator[opeIndex]; 
     
    10801078            var t:int, l:int, i:int, n:Number; 
    10811079            var ope:SiOPMOperator = operator[0], 
    1082                 phase_filter:int = SiOPMTable.PHASE_FILTER, 
    1083                 tmax:int = ope._waveTable.length; 
     1080                phase_filter:int = SiOPMTable.PHASE_FILTER; 
    10841081             
    10851082             
     
    11111108                //---------------------------------------- 
    11121109                ope._phase += ope._phase_step; 
    1113                 t = (ope._phase + (ip.i<<_inputLevel)) >> 14; // pcm._waveFixedBits = 14 
    1114                 if (t >= tmax) { 
    1115                     ope._eg_shiftState(SiOPMOperator.EG_OFF); 
    1116                     ope._eg_out = (ope._eg_levelTable[ope._eg_level] + ope._eg_total_level)<<3; 
    1117                     for (;i<len; i++) { 
    1118                         op.i = bp.i; 
    1119                         ip = ip.next; 
    1120                         bp = bp.next; 
    1121                         op = op.next; 
     1110                t = (ope._phase + (ip.i<<_inputLevel)) >>> ope._waveFixedBits; 
     1111                if (t >= ope._pcm_endPoint) { 
     1112                    if (ope._pcm_loopPoint == -1) { 
     1113                        ope._eg_shiftState(SiOPMOperator.EG_OFF); 
     1114                        ope._eg_out = (ope._eg_levelTable[ope._eg_level] + ope._eg_total_level)<<3; 
     1115                        for (;i<len; i++) { 
     1116                            op.i = bp.i; 
     1117                            ip = ip.next; 
     1118                            bp = bp.next; 
     1119                            op = op.next; 
     1120                        } 
     1121                        break; 
     1122                    } else { 
     1123                        t -=  ope._pcm_endPoint - ope._pcm_loopPoint; 
     1124                        ope._phase -= (ope._pcm_endPoint - ope._pcm_loopPoint) << ope._waveFixedBits; 
    11221125                    } 
    1123                     break; 
    11241126                } 
    11251127                l = ope._waveTable[t]; 
     
    11471149            var t:int, l:int, i:int, n:Number; 
    11481150            var ope:SiOPMOperator = operator[0], 
    1149                 phase_filter:int = SiOPMTable.PHASE_FILTER, 
    1150                 tmax:int = ope._waveTable.length; 
     1151                phase_filter:int = SiOPMTable.PHASE_FILTER; 
    11511152             
    11521153            // buffering 
     
    11901191                //---------------------------------------- 
    11911192                ope._phase += ope._phase_step; 
    1192                 t = (ope._phase + (ip.i<<_inputLevel)) >> 14; // pcm._waveFixedBits = 14 
    1193                 if (t >= tmax) { 
    1194                     ope._eg_shiftState(SiOPMOperator.EG_OFF); 
    1195                     ope._eg_out = (ope._eg_levelTable[ope._eg_level] + ope._eg_total_level)<<3; 
    1196                     for (;i<len; i++) { 
    1197                         op.i = bp.i; 
    1198                         ip = ip.next; 
    1199                         bp = bp.next; 
    1200                         op = op.next; 
     1193                t = (ope._phase + (ip.i<<_inputLevel)) >>> ope._waveFixedBits; 
     1194                if (t >= ope._pcm_endPoint) { 
     1195                    if (ope._pcm_loopPoint == -1) { 
     1196                        ope._eg_shiftState(SiOPMOperator.EG_OFF); 
     1197                        ope._eg_out = (ope._eg_levelTable[ope._eg_level] + ope._eg_total_level)<<3; 
     1198                        for (;i<len; i++) { 
     1199                            op.i = bp.i; 
     1200                            ip = ip.next; 
     1201                            bp = bp.next; 
     1202                            op = op.next; 
     1203                        } 
     1204                        break; 
     1205                    } else { 
     1206                        t -=  ope._pcm_endPoint - ope._pcm_loopPoint; 
     1207                        ope._phase -= (ope._pcm_endPoint - ope._pcm_loopPoint) << ope._waveFixedBits; 
    12011208                    } 
    1202                     break; 
    12031209                } 
    12041210                l = ope._waveTable[t]; 
  • as3/SiOPM/trunk/src/org/si/sion/module/SiOPMChannelSampler.as

    r2697 r2903  
    229229                    _chip.streamBuffer[0].writeVectorInt(_sample, _sampleIndex, _bufferIndex, procLen, vol, _pan, _sampleChannelCount); 
    230230                } 
    231                 if (len > procLen) { 
     231                if (procLen < len) { 
    232232                    _isIdling = true; 
    233233                    _sample = null; 
  • as3/SiOPM/trunk/src/org/si/sion/module/SiOPMOperator.as

    r2806 r2903  
    174174        internal var _feedPipe:SLLint; 
    175175         
     176    // for PCM wave 
     177        /** @private start point */ 
     178        internal var _pcm_startPoint:int; 
     179        /** @private end point */ 
     180        internal var _pcm_endPoint:int; 
     181        /** @private loop point */ 
     182        internal var _pcm_loopPoint:int; 
    176183         
    177184         
     
    446453            _eg_tl_offset     = 0;  // The _eg_tl_offset is controled by velocity and expression. 
    447454            _pitchIndexShift2 = 0;  // The _pitchIndexShift2 is controled by pitch modulation. 
     455            _pcm_startPoint = 0; 
     456            _pcm_endPoint   = 0; 
     457            _pcm_loopPoint  = -1; 
    448458             
    449459            // reset pg and eg status 
     
    549559        { 
    550560            _pgType = SiOPMTable.PG_USER_PCM; // -2 
    551             _waveTable     = pcmData.wavelet; 
    552             _waveFixedBits = pcmData.pseudoFixedBits; 
     561            _waveTable      = pcmData.wavelet; 
     562            _waveFixedBits  = pcmData.pseudoFixedBits; 
     563            _pcm_startPoint = pcmData.startPoint; 
     564            _pcm_endPoint   = pcmData.endPoint; 
     565            _pcm_loopPoint  = pcmData.loopPoint; 
     566            _keyon_phase = _pcm_startPoint << _waveFixedBits; 
    553567            ptType = SiOPMTable.PT_PCM; 
    554568        } 
     
    743757            var n:int = (_pitchIndex + _pitchIndexShift + _pitchIndexShift2) & _pitchTableFilter; 
    744758            _updatePhaseStep(_pitchTable[n] >> _wavePhaseStepShift); 
    745 trace(_pitchTable[n], _wavePhaseStepShift); 
    746759        } 
    747760         
  • as3/SiOPM/trunk/src/org/si/sion/module/SiOPMPCMData.as

    r2697 r2903  
    11//---------------------------------------------------------------------------------------------------- 
    2 // class for SiOPM wave table 
     2// class for SiOPM PCM data 
    33//  Copyright (c) 2008 keim All rights reserved. 
    44//  Distributed under BSD-style license (see org.si.license.txt). 
     
    66 
    77package org.si.sion.module { 
     8    /** PCM data class */ 
    89    public class SiOPMPCMData 
    910    { 
     11    // valiables 
     12    //---------------------------------------- 
     13        /** wave data */ 
    1014        public var wavelet:Vector.<int>; 
     15         
     16        /** bits for fixed decimal */ 
    1117        public var pseudoFixedBits:int; 
     18         
     19        /** wave starting position. */ 
     20        public var startPoint:int; 
     21         
     22        /** wave end position. */ 
     23        public var endPoint:int; 
     24         
     25        /** wave looping position. -1 means no repeat. */ 
    1226        public var loopPoint:int; 
    1327         
    1428         
    15         function SiOPMPCMData(data:Vector.<Number>=null, samplingOctave:int=5) 
     29         
     30         
     31    // oprations 
     32    //---------------------------------------- 
     33        /** Constructor */ 
     34        function SiOPMPCMData(wavelet:Vector.<int>=null, samplingOctave:int=5, startPoint:int=0, endPoint:int=-1, loopPoint:int=-1) 
    1635        { 
    17             wavelet = null; 
    18             pseudoFixedBits = 0; 
    19             loopPoint = -1; 
     36            this.wavelet = wavelet; 
     37            this.pseudoFixedBits = 11 + (samplingOctave-5); 
     38            if (wavelet != null) { 
     39                slice(startPoint, endPoint, loopPoint); 
     40            } else { 
     41                this.loopPoint = -1; 
     42                this.startPoint = 0; 
     43                this.endPoint   = 0; 
     44            } 
    2045        } 
    2146         
    2247         
     48        /** Free instance. Through this into free list. */ 
    2349        public function free() : void 
    2450        { 
     
    2652        } 
    2753         
     54 
     55        /** Slicer setting. You can cut samples and set repeating. 
     56         *  @param startPoint slicing point to start data. 
     57         *  @param endPoint slicing point to end data. The negative value calculates from the end. 
     58         *  @param loopPoint slicing point to repeat data. -1 means no repeat 
     59         */ 
     60        public function slice(startPoint:int=0, endPoint:int=-1, loopPoint:int=-1) : void  
     61        { 
     62            if (endPoint < 0) endPoint = wavelet.length + endPoint; 
     63            if (wavelet.length < endPoint) endPoint = endPoint; 
     64            if (endPoint < loopPoint)  loopPoint = -1; 
     65            if (endPoint < startPoint) endPoint = endPoint; 
     66            this.startPoint = startPoint; 
     67            this.endPoint   = endPoint; 
     68            this.loopPoint  = loopPoint; 
     69        } 
    2870         
     71         
     72        // free list 
    2973        static private var _freeList:Vector.<SiOPMPCMData> = new Vector.<SiOPMPCMData>(); 
    3074         
     75         
     76        /** @private */ 
    3177        static public function alloc(wavelet:Vector.<int>, samplingOctave:int=5) : SiOPMPCMData 
    3278        { 
    3379            var newInstance:SiOPMPCMData = _freeList.pop() || new SiOPMPCMData(); 
    3480            newInstance.wavelet = wavelet; 
    35             newInstance.pseudoFixedBits = 14 + (samplingOctave-5); 
     81            newInstance.pseudoFixedBits = 11 + (samplingOctave-5); 
    3682            newInstance.loopPoint = -1; 
     83            newInstance.startPoint = 0; 
     84            newInstance.endPoint   = wavelet.length; 
    3785            return newInstance; 
    3886        } 
  • as3/SiOPM/trunk/src/org/si/sion/module/SiOPMTable.as

    r2806 r2903  
    10491049         
    10501050        /** Register wave table. */ 
    1051         static public function registerWaveTable(index:int, table:Vector.<int>) : void 
     1051        static public function registerWaveTable(index:int, table:Vector.<int>) : SiOPMWaveTable 
    10521052        { 
    10531053            // register wave table 
     
    10611061                instance.waveTables[15 + index * 8 + PG_MA3_WAVE] = newWaveTable; 
    10621062            } 
     1063             
     1064            return newWaveTable; 
    10631065        } 
    10641066         
    10651067         
    10661068        /** Register PCM data. */ 
    1067         static public function registerPCMData(index:int, table:Vector.<int>, samplingOctave:int) : void 
     1069        static public function registerPCMData(index:int, table:Vector.<int>, samplingOctave:int) : SiOPMPCMData 
    10681070        { 
    10691071            // register PCM data 
    10701072            index &= PCM_DATA_MAX-1; 
    10711073            instance.pcmData[index] = SiOPMPCMData.alloc(table, samplingOctave); 
     1074            return instance.pcmData[index]; 
    10721075        } 
    10731076         
    10741077         
    10751078        /** Register Sampler data. */ 
    1076         static public function registerSamplerData(index:int, table:Vector.<Number>, isOneShot:Boolean, channelCount:int) : void 
     1079        static public function registerSamplerData(index:int, table:Vector.<Number>, isOneShot:Boolean, channelCount:int) : SiOPMSamplerData 
    10771080        { 
    10781081            // register sample 
    10791082            index &= SAMPLER_DATA_MAX-1; 
    10801083            instance.samplerData[index] = SiOPMSamplerData.alloc(table, isOneShot, channelCount); 
     1084            return instance.samplerData[index]; 
    10811085        } 
    10821086         
  • as3/SiOPM/trunk/src/org/si/sion/module/SiOPMWaveTable.as

    r2806 r2903  
    3333         
    3434        /** allocate. */ 
    35         static public function alloc(wavelet:Vector.<int>, defaultPTType:int=SiOPMTable.PT_OPM) : SiOPMWaveTable 
     35        static public function alloc(wavelet:Vector.<int>, defaultPTType:int=0) : SiOPMWaveTable 
    3636        { 
    3737            var len:int, bits:int=0; 
  • as3/SiOPM/trunk/src/org/si/sion/sequencer/SiMMLChannelSetting.as

    r2806 r2903  
    8585            track.channelNumber = (chNum<0) ? 0 : chNum; 
    8686            track.channel.setAlgorism(1, 0); 
    87             track.channel.setType(_pgTypeList[channelTone], _ptTypeList[channelTone]); 
     87            selectTone(track, channelTone); 
    8888            return (chNum == -1) ? -1 : channelTone; 
    8989        } 
  • as3/SiOPM/trunk/src/org/si/sion/sequencer/SiMMLSequencer.as

    r2806 r2903  
    143143            setMMLEventListener(MMLEvent.OUTPUT_PIPE, _onOutput); 
    144144            newMMLEventListener('%t',  _setEventTrigger); 
    145             newMMLEventListener('%e',  _setEffectTrigger); 
     145            newMMLEventListener('%e',  _dispatchEvent); 
    146146             
    147147            // operator setting 
     
    10651065        private function _onPitchBend(e:MMLEvent) : MMLEvent 
    10661066        { 
    1067             if (e.next == null || e.next.id != MMLEvent.NOTE) return e.next;    // check next note 
    1068             var term:int = calcSampleCount(e.length);                           // changing time 
    1069             _currentTrack.setPitchBend(e.next.data, term);                    // pitch bending 
     1067            if (e.next == null || e.next.id != MMLEvent.NOTE) return e.next;  // check next note 
     1068            var term:int = calcSampleCount(e.length);                         // changing time 
     1069            _currentTrack.setPitchBend(e.next.data, term);                    // pitch bending 
    10701070            return currentExecutor.publishProessingEvent(e); 
    10711071        } 
     
    14291429            var id     :int = (_p[0] != int.MIN_VALUE) ? _p[0] : 0; 
    14301430            var typeOn :int = (_p[1] != int.MIN_VALUE) ? _p[1] : 1; 
    1431             var typeOff:int = (_p[2] != int.MIN_VALUE) ? _p[2] : 0
     1431            var typeOff:int = (_p[2] != int.MIN_VALUE) ? _p[2] : 1
    14321432            _currentTrack.setEventTrigger(id, typeOn, typeOff); 
    14331433            return e.next; 
     
    14361436         
    14371437        // %e 
    1438         private function _setEffectTrigger(e:MMLEvent) : MMLEvent 
    1439         { 
    1440             e = e.getParameters(_p, 2); 
     1438        private function _dispatchEvent(e:MMLEvent) : MMLEvent 
     1439        { 
     1440            e = e.getParameters(_p, 2); 
     1441            var id     :int = (_p[0] != int.MIN_VALUE) ? _p[0] : 0; 
     1442            var typeOn :int = (_p[1] != int.MIN_VALUE) ? _p[1] : 1; 
     1443            _currentTrack.dispatchNoteOnEvent(id, typeOn); 
    14411444            return e.next; 
    14421445        } 
  • as3/SiOPM/trunk/src/org/si/sion/sequencer/SiMMLTrack.as

    r2806 r2903  
    513513            _callbackBeforeNoteOn = (noteOnType) ? _eventTriggerOn : null; 
    514514            _callbackBeforeNoteOff = (noteOffType) ? _eventTriggerOff : null; 
     515        } 
     516         
     517         
     518        /** dispatch note on event once (%e)  
     519         *  @param id Event trigger ID of this track. This value can be refered from SiONTrackEvent.eventTriggerID. 
     520         *  @param noteOnType Dispatching event type at note on. 0=no events, 1=NOTE_ON_FRAME, 2=NOTE_ON_STREAM, 3=both. 
     521         *  @see org.si.sion.events.SiONTrackEvent 
     522         */ 
     523        public function dispatchNoteOnEvent(id:int, noteOnType:int=1) : void 
     524        { 
     525            if (noteOnType) { 
     526                var currentTID:int  = _eventTriggerID,  
     527                    currentType:int = _eventTriggerTypeOn; 
     528                _eventTriggerID = id; 
     529                _eventTriggerTypeOn = noteOnType; 
     530                _eventTriggerOn(this, 0); 
     531                _eventTriggerID = currentTID; 
     532                _eventTriggerTypeOn = currentType; 
     533            } 
    515534        } 
    516535         
     
    959978        internal function _setNote(note:int, length:int) : void 
    960979        { 
    961             keyOn(note, int(length * quantRatio) - quantCount - keyOnDelay + 1); 
     980            length = int(length * quantRatio) - quantCount - keyOnDelay; 
     981            if (length < 1) length = 1; 
     982            keyOn(note, length); 
    962983        } 
    963984         
  • as3/SiOPM/trunk/src/org/si/sion/sequencer/base/MMLData.as

    r2697 r2903  
    111111         *  @param index wave table number. 
    112112         *  @param data Vector.<Number> wave shape data ranged from -1 to 1. 
     113         *  @return created data instance 
    113114         */ 
    114         public function setWaveTable(index:int, data:Vector.<Number>) : void 
     115        public function setWaveTable(index:int, data:Vector.<Number>) : SiOPMWaveTable 
    115116        { 
    116117            index &= SiOPMTable.WAVE_TABLE_MAX-1; 
     
    119120            for (i=0; i<imax; i++) table[i] = SiOPMTable.calcLogTableIndex(data[i]); 
    120121            waveTables[index] = SiOPMWaveTable.alloc(table); 
     122            return waveTables[index]; 
    121123        } 
    122124         
     
    127129         *  @param isDataStereo Flag that the wave data is stereo or monoral. 
    128130         *  @param samplingOctave Sampling frequency. The value of 5 means that "o5a" is original frequency. 
     131         *  @return created data instance 
    129132         *  @see #org.si.sion.SiONDriver.render() 
    130133         */ 
    131         public function setPCMData(index:int, data:Vector.<Number>, isDataStereo:Boolean=true, samplingOctave:int=5) : void 
     134        public function setPCMData(index:int, data:Vector.<Number>, isDataStereo:Boolean=true, samplingOctave:int=5) : SiOPMPCMData 
    132135        { 
    133136            index &= SiOPMTable.PCM_DATA_MAX-1; 
     
    150153            } 
    151154            pcmData[index] = SiOPMPCMData.alloc(pcm, samplingOctave); 
     155            return pcmData[index]; 
    152156        } 
    153157         
     
    158162         *  @param isOneShot True to set "one shot" sound. The "one shot" sound ignores note off. 
    159163         *  @param channelCount 1 for monoral, 2 for stereo. 
     164         *  @return created data instance 
    160165         *  @see #org.si.sion.SiONDriver.render() 
    161166         */ 
    162         public function setSamplerData(index:int, data:Vector.<Number>, isOneShot:Boolean=true, channelCount:int=2) : void 
     167        public function setSamplerData(index:int, data:Vector.<Number>, isOneShot:Boolean=true, channelCount:int=2) : SiOPMSamplerData 
    163168        { 
    164169            index &= SiOPMTable.SAMPLER_DATA_MAX-1; 
    165170            samplerData[index] = new SiOPMSamplerData(data, isOneShot, channelCount); 
     171            return samplerData[index]; 
    166172        } 
    167173    } 
  • as3/SiOPM/trunk/src/org/si/sion/utils/SiONUtil.as

    r2697 r2903  
    111111            return dst; 
    112112        } 
     113         
     114         
     115        /** Calculate sample length from 16th beat. */ 
     116        static public function calcSampleLength(bpm:Number, beat16:Number) : Number 
     117        { 
     118            // 661500 = 44100*60/4 
     119            return beat16 * 661500 / bpm; 
     120        } 
    113121    } 
    114122}