チェンジセット 2806

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

サウンドライブラリ SiON ver0.5.4 更新 バグフィクス エフェクタ追加

ファイル:

凡例:

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

    r2625 r2806  
    77 
    88package org.si.sion { 
     9    import flash.media.Sound; 
    910    import org.si.sion.sequencer.SiMMLData; 
     11    import org.si.sion.utils.SiONUtil; 
     12    import org.si.sion.module.SiOPMPCMData; 
    1013 
    1114     
     
    2528        { 
    2629        } 
     30         
     31         
     32         
     33         
     34    // setter 
     35    //---------------------------------------- 
     36        /** Set PCM sound rederd from %7. 
     37         *  @param index PCM data number. 
     38         *  @param sound Sound instance to set. 
     39         *  @param samplingOctave Sampling frequency. The value of 5 means that "o5a" is original frequency. 
     40         *  @param sampleMax The maximum sample count to extract. The length of returning vector is limited by this value. 
     41         */ 
     42        public function setPCMSound(index:int, sound:Sound, samplingOctave:int=5, sampleMax:int=1048576) : void 
     43        { 
     44            var pcm:Vector.<int> = SiONUtil.logTrans(sound, null, sampleMax); 
     45            pcmData[index] = SiOPMPCMData.alloc(pcm, samplingOctave); 
     46        } 
     47         
     48         
     49        /** Set sampler sound refered by %10. 
     50         *  @param index note number. 0-127 for bank0, 128-255 for bank1. 
     51         *  @param sound Sound instance to set. 
     52         *  @param isOneShot True to set "one shot" sound. The "one shot" sound ignores note off. 
     53         *  @param channelCount 1 for monoral, 2 for stereo. 
     54         *  @param sampleMax The maximum sample count to extract. The length of returning vector is limited by this value. 
     55         */ 
     56        public function setSamplerSound(index:int, sound:Sound, isOneShot:Boolean=true, channelCount:int=2, sampleMax:int=1048576) : void 
     57        { 
     58            var data:Vector.<Number> = SiONUtil.extract(sound, null, channelCount, sampleMax); 
     59            setSamplerData(index, data, isOneShot, channelCount); 
     60        } 
    2761    } 
    2862} 
  • as3/SiOPM/trunk/src/org/si/sion/SiONDriver.as

    r2697 r2806  
    3535     * @see org.si.sion.events.SiONTrackEvent 
    3636     * @see org.si.sion.module.SiOPMModule 
    37      * @see org.si.sion.mml.SiMMLSequencer 
    38      * @see org.si.sion.effect.SiEffectModule 
     37     * @see org.si.sion.sequencer.SiMMLSequencer 
     38     * @see org.si.sion.effector.SiEffectModule 
    3939@example 1) The simplest sample. Create new instance and call play with MML string.<br/> 
    4040<listing version="3.0"> 
     
    5050    //---------------------------------------- 
    5151        /** version number */ 
    52         static public const VERSION:String = "0.5.3"; 
     52        static public const VERSION:String = "0.5.4"; 
    5353         
    5454         
     
    111111        private var _inStreaming:Boolean;         // in streaming 
    112112        private var _preserveStop:Boolean;        // preserve stop after streaming 
     113        private var _isFinishSeqDispatched:Boolean; // FINISH_SEQUENCE event already dispacthed 
    113114 
    114115        private var _queueInterval:int;         // interupting interval to execute queued jobs 
     
    124125        private var _faderVolume:Number;        // fader volume 
    125126         
    126         private var _triggerEventQueue:Vector.<SiONTrackEvent>; 
     127        private var _trackEventQueue:Vector.<SiONTrackEvent>; 
    127128         
    128129        private var _renderBuffer:Vector.<Number>;  // rendering buffer 
     
    231232        public function get isPlaying() : Boolean { return (_soundChannel != null); } 
    232233         
     234        /** Is paused ? */ 
     235        public function get isPaused() : Boolean { return _isPaused; } 
     236         
    233237         
    234238        // operation 
     
    297301            module = new SiOPMModule(); 
    298302            effector = new SiEffectModule(module); 
    299             sequencer = new SiMMLSequencer(module, _callbackEventTriggerOn, _callbackEventTriggerOff); 
     303            sequencer = new SiMMLSequencer(module, _callbackEventTriggerOn, _callbackEventTriggerOff, _callbackTempoChanged); 
    300304            _sound = new Sound(); 
    301305            _soundTransform = new SoundTransform(); 
     
    317321            _noteOnExceptionMode = NEM_IGNORE; 
    318322            _debugMode = false; 
     323            _isFinishSeqDispatched = false; 
    319324             
    320325            _backgroundSound = null; 
     
    329334             
    330335            _eventListenerPrior = 1; 
    331             _triggerEventQueue = new Vector.<SiONTrackEvent>(); 
     336            _trackEventQueue = new Vector.<SiONTrackEvent>(); 
    332337             
    333338            _queueInterval = 500; 
     
    532537                    } 
    533538                    _isPaused = false; 
     539                    _isFinishSeqDispatched = (data == null); 
    534540                } 
    535541            } catch(e:Error) { 
     
    651657         *  @param sound Sound instance to set. 
    652658         *  @param samplingOctave Sampling frequency. The value of 5 means that "o5a" is original frequency. 
    653          */ 
    654         public function setPCMSound(index:int, sound:Sound, samplingOctave:int=5) : void 
    655         { 
    656             var data:Vector.<int> = SiONUtil.logTrans(sound); 
     659         *  @param sampleMax The maximum sample count to extract. The length of returning vector is limited by this value. 
     660         */ 
     661        public function setPCMSound(index:int, sound:Sound, samplingOctave:int=5, sampleMax:int=1048576) : void 
     662        { 
     663            var data:Vector.<int> = SiONUtil.logTrans(sound, null, sampleMax); 
    657664            SiOPMTable.registerPCMData(index, data, samplingOctave); 
    658665        } 
     
    686693         
    687694         
    688         /** Set envelop table data refered by @@,na,np,nt,nf,_@@,_na,_np,_nt and _nf. 
     695        /** Set envelop table data refered by &#64;&#64;,na,np,nt,nf,_&#64;&#64;,_na,_np,_nt and _nf. 
    689696         *  @param index envelop table number. 
    690697         *  @param table envelop table vector. 
     
    724731    // Interface for intaractivity 
    725732    //---------------------------------------- 
    726         /** Play sound registered in sampler table (registered by setSamplerData()). */ 
    727         public function playSound() : SiMMLTrack 
    728         { 
    729             return null; 
    730         } 
    731          
    732          
    733         /** Note on. This function only is available after play(). The NOTE_ON_STREAM event is dispatched inside. 
     733        /** Play sound registered in sampler table (registered by setSamplerData()), same as noteOn(note, new SiONVoice(10), ...). 
    734734         *  @param note note number [0-127]. 
    735          *  @param voice SiONVoice to play note. You can spqcify null, but it sets only a default square wave... 
    736735         *  @param length note length in 16th beat. 0 sets no note off, this means you should call noteOff(). 
    737736         *  @param delay note on delay units in 16th beat. 
     
    743742         *  @return SiMMLTrack to play the note. 
    744743         */ 
    745         public function noteOn(note:int, voice:SiONVoice,  
    746                                length:Number=0, delay:Number=0, quant:Number=0, trackID:int=0,  
    747                                eventTriggerID:int=0, noteOnTrigger:int=0, noteOffTrigger:int=0) : SiMMLTrack 
     744        public function playSound(note:int, length:Number=0, delay:Number=0, quant:Number=0, trackID:int=0,  
     745                                  eventTriggerID:int=0, noteOnTrigger:int=0, noteOffTrigger:int=0) : SiMMLTrack 
    748746        { 
    749747            trackID = (trackID & SiMMLTrack.TRACK_ID_FILTER) | SiMMLTrack.DRIVER_NOTE_ID_OFFSET; 
     
    767765            mmlTrack = mmlTrack || sequencer.getFreeControlableTrack(trackID) || sequencer.newControlableTrack(trackID); 
    768766            if (mmlTrack) { 
     767                mmlTrack.setChannelModuleType(10, 0); 
     768                mmlTrack.setEventTrigger(eventTriggerID, noteOnTrigger, noteOffTrigger); 
     769                mmlTrack.keyOn(note, sequencer.calcSampleLength(length), delaySamples); 
     770            } 
     771            return mmlTrack; 
     772        } 
     773         
     774         
     775        /** Note on. This function only is available after play(). The NOTE_ON_STREAM event is dispatched inside. 
     776         *  @param note note number [0-127]. 
     777         *  @param voice SiONVoice to play note. You can spqcify null, but it sets only a default square wave... 
     778         *  @param length note length in 16th beat. 0 sets no note off, this means you should call noteOff(). 
     779         *  @param delay note on delay units in 16th beat. 
     780         *  @param quant quantize in 16th beat. 0 sets no quantization. 4 sets quantization by 4th beat. 
     781         *  @param trackID new tracks id. 
     782         *  @param eventTriggerID Event trigger id. 
     783         *  @param noteOnTrigger note on trigger type. 
     784         *  @param noteOffTrigger note off trigger type. 
     785         *  @return SiMMLTrack to play the note. 
     786         */ 
     787        public function noteOn(note:int, voice:SiONVoice,  
     788                               length:Number=0, delay:Number=0, quant:Number=0, trackID:int=0,  
     789                               eventTriggerID:int=0, noteOnTrigger:int=0, noteOffTrigger:int=0) : SiMMLTrack 
     790        { 
     791            trackID = (trackID & SiMMLTrack.TRACK_ID_FILTER) | SiMMLTrack.DRIVER_NOTE_ID_OFFSET; 
     792            var mmlTrack:SiMMLTrack = null,  
     793                delaySamples:Number = sequencer.calcSampleDelay(0, delay, quant); 
     794             
     795            // check track id exception 
     796            if (_noteOnExceptionMode != NEM_IGNORE) { 
     797                // find a track sounds at same timing 
     798                mmlTrack = sequencer.findActiveTrack(trackID, delaySamples); 
     799                if (_noteOnExceptionMode == NEM_REJECT && mmlTrack != null) return null; // reject 
     800                else if (_noteOnExceptionMode == NEM_SHIFT) { // shift timing 
     801                    var step:int = sequencer.calcSampleLength(quant); 
     802                    while (mmlTrack) { 
     803                        delaySamples += step; 
     804                        mmlTrack = sequencer.findActiveTrack(trackID, delaySamples); 
     805                    } 
     806                } 
     807            } 
     808             
     809            mmlTrack = mmlTrack || sequencer.getFreeControlableTrack(trackID) || sequencer.newControlableTrack(trackID); 
     810            if (mmlTrack) { 
    769811                if (voice) voice.setTrackVoice(mmlTrack); 
    770812                mmlTrack.setEventTrigger(eventTriggerID, noteOnTrigger, noteOffTrigger); 
     
    864906            if (type & 1) { // frame event. dispatch later 
    865907                event = new SiONTrackEvent(frameEvent, this, track); 
    866                 _triggerEventQueue.push(event); 
     908                _trackEventQueue.push(event); 
    867909            } 
    868910            if (type & 2) { // sound event. dispatch immediately 
     
    872914            } 
    873915            return true; 
     916        } 
     917         
     918        // call back when tempo changed 
     919        private function _callbackTempoChanged(bufferIndex:int) : void 
     920        { 
     921            var event:SiONTrackEvent = new SiONTrackEvent(SiONTrackEvent.CHANGE_BPM, this, null, bufferIndex); 
     922            _trackEventQueue.push(event); 
    874923        } 
    875924         
     
    11221171             
    11231172            // frame trigger 
    1124             if (_triggerEventQueue.length > 0) { 
    1125                 _triggerEventQueue = _triggerEventQueue.filter(function(e:SiONTrackEvent, i:int, v:Vector.<SiONTrackEvent>) : Boolean { 
     1173            if (_trackEventQueue.length > 0) { 
     1174                _trackEventQueue = _trackEventQueue.filter(function(e:SiONTrackEvent, i:int, v:Vector.<SiONTrackEvent>) : Boolean { 
    11261175                    if (e._decrementTimer(_frameRate)) { 
    11271176                        dispatchEvent(e); 
     
    11881237                    } 
    11891238                     
     1239                    // dispatch finishSequence event 
     1240                    if (!_isFinishSeqDispatched) { 
     1241                        if (sequencer.isSequenceFinished) { 
     1242                            dispatchEvent(new SiONEvent(SiONEvent.FINISH_SEQUENCE, this)); 
     1243                            _isFinishSeqDispatched = true; 
     1244                        } 
     1245                    } 
     1246                     
    11901247                    // fading 
    11911248                    if (_fader.execute()) { 
  • as3/SiOPM/trunk/src/org/si/sion/SiONVoice.as

    r2697 r2806  
    2727    // constrctor 
    2828    //-------------------------------------------------- 
    29         /** constructor
     29        /** create new SiONVoice instance with '%' parameters, attack rate, release rate and detune
    3030         *  @param moduleType Module type. 1st argument of '%'. 
    3131         *  @param channelNum Channel number. 2nd argument of '%'. 
     
    5151    // parameter setting 
    5252    //-------------------------------------------------- 
    53         /** Set by #@ parameters Array */ 
     53        /** Set by #&#64; parameters Array */ 
    5454        public function set param(args:Array) : void { channelParam = Translator.setParam(new SiOPMChannelParam(), args); } 
    5555         
    56         /** Set by #OPL@ parameters Array */ 
     56        /** Set by #OPL&#64; parameters Array */ 
    5757        public function set paramOPL(args:Array) : void { channelParam = Translator.setOPLParam(new SiOPMChannelParam(), args); } 
    5858         
    59         /** Set by #OPM@ parameters Array */ 
     59        /** Set by #OPM&#64; parameters Array */ 
    6060        public function set paramOPM(args:Array) : void { channelParam = Translator.setOPMParam(new SiOPMChannelParam(), args); } 
    6161         
    62         /** Set by #OPN@ parameters Array */ 
     62        /** Set by #OPN&#64; parameters Array */ 
    6363        public function set paramOPN(args:Array) : void { channelParam = Translator.setOPNParam(new SiOPMChannelParam(), args); } 
    6464         
    65         /** Set by #OPX@ parameters Array */ 
     65        /** Set by #OPX&#64; parameters Array */ 
    6666        public function set paramOPX(args:Array) : void { channelParam = Translator.setOPXParam(new SiOPMChannelParam(), args); } 
    6767         
    68         /** Set by #MA@ parameters Array */ 
     68        /** Set by #MA&#64; parameters Array */ 
    6969        public function set paramMA3(args:Array) : void { channelParam = Translator.setMA3Param(new SiOPMChannelParam(), args); } 
    7070    } 
  • as3/SiOPM/trunk/src/org/si/sion/effector/SiEffectAutoPan.as

    r2625 r2806  
    2828         
    2929         
    30         /** constructo
     30        /** set paramete
    3131         *  @param frequency rotation frequency(Hz). 
    3232         *  @param width stereo width(0-1). 0 means stereo auto pan. 
  • as3/SiOPM/trunk/src/org/si/sion/effector/SiEffectEqualiser.as

    r2625 r2806  
    8989            startIndex <<= 1; 
    9090            length <<= 1; 
    91             var i:int, n:Number, l:Number, m:Number, h:Number
    92             for (i=startIndex; i<length;) { 
     91            var i:int, n:Number, l:Number, m:Number, h:Number, imax:int=startIndex+length
     92            for (i=startIndex; i<imax;) { 
    9393                n = buffer[i]; 
    9494                f1p0L += (lf * (n - f1p0L)) + 2.3283064370807974e-10; 
  • as3/SiOPM/trunk/src/org/si/sion/effector/SiEffectModule.as

    r2697 r2806  
    4545            register("chorus",  SiEffectStereoChorus); 
    4646            register("autopan", SiEffectAutoPan); 
     47            register("ds",      SiEffectDownSampler); 
     48            register("speaker", SiEffectSpeakerSimulator); 
    4749            //register("comp",    SiEffectCompressor); // bugful!! 
    4850             
     
    6365    // operations 
    6466    //-------------------------------------------------------------------------------- 
    65         /** @parivate [internal use] initialize all effectors. */ 
     67        /** @private [internal use] initialize all effectors. */ 
    6668        public function initialize() : void 
    6769        { 
     
    7274         
    7375         
    74         /** @parivate [internal use] prepare for processing. */ 
     76        /** @private [internal use] prepare for processing. */ 
    7577        public function prepareProcess() : void 
    7678        { 
     
    9193         
    9294         
    93         /** @parivate [internal use] processing. */ 
     95        /** @private [internal use] processing. */ 
    9496        public function process() : void 
    9597        { 
  • as3/SiOPM/trunk/src/org/si/sion/effector/SiEffectWaveShaper.as

    r2625 r2806  
    6464            startIndex <<= 1; 
    6565            length <<= 1; 
    66             var i:int, n:Number, c1:Number=1 + _coefficient
    67             for (i=startIndex; i<length; i++) { 
     66            var i:int, n:Number, c1:Number=1 + _coefficient, imax:int=startIndex+length
     67            for (i=startIndex; i<imax; i++) { 
    6868                n = buffer[i]; 
    6969                buffer[i] = c1 * n / (1 + _coefficient * ((n<0) ? -n : n)); 
  • as3/SiOPM/trunk/src/org/si/sion/effector/SiFilterBase.as

    r2625 r2806  
    5151            startIndex <<= 1; 
    5252            length <<= 1; 
    53             var i:int, input:Number, output:Number
    54             for (i=startIndex; i<length;) { 
     53            var i:int, input:Number, output:Number, imax:int=startIndex+length
     54            for (i=startIndex; i<imax;) { 
    5555                input = buffer[i]; 
    5656                output = _b0*input + _b1*_in1L + _b2*_in2L - _a1*_out1L - _a2*_out2L; 
  • as3/SiOPM/trunk/src/org/si/sion/events/SiONEvent.as

    r2697 r2806  
    110110         * <tr><th>Property</th><th>Value</th></tr> 
    111111         * <tr><td>cancelable</td><td>false</td></tr> 
    112          * <tr><td>driver</td><td>SiONDriver instance to stop streaming.</td></tr> 
    113          * <tr><td>data</td><td>SiONData instance to stop streaming. This property is null if you call SiONDriver.play() with null of the 1st argument.</td></tr> 
     112         * <tr><td>driver</td><td>SiONDriver instance playing now.</td></tr> 
     113         * <tr><td>data</td><td>SiONData instance playing now.</td></tr> 
    114114         * <tr><td>streamBuffer</td><td>null</td></tr> 
    115115         * </table> 
  • as3/SiOPM/trunk/src/org/si/sion/events/SiONTrackEvent.as

    r2625 r2806  
    8989         */ 
    9090        public static const NOTE_OFF_FRAME:String = 'noteOffFrame'; 
    91          
     91 
     92         
     93        /** Dispatch when the bpm changes. 
     94         * <p>The properties of the event object have the following values:</p> 
     95         * <table class=innertable> 
     96         * <tr><th>Property</th><th>Value</th></tr> 
     97         * <tr><td>cancelable</td><td>false</td></tr> 
     98         * <tr><td>driver</td><td>SiONDriver instance.</td></tr> 
     99         * <tr><td>data</td><td>SiONData instance. This property is null if you call SiONDriver.play() with null of the 1st argument.</td></tr> 
     100         * <tr><td>streamBuffer</td><td>null</td></tr> 
     101         * <tr><td>track</td><td>null</td></tr> 
     102         * <tr><td>eventTriggerID</td><td>null</td></tr> 
     103         * <tr><td>note</td><td>null</td></tr> 
     104         * <tr><td>bufferIndex</td><td>Buffering index</td></tr> 
     105         * </table> 
     106         * @eventType changeBPM 
     107         */ 
     108        public static const CHANGE_BPM:String = 'changeBPM';         
    92109         
    93110         
     
    122139    // properties 
    123140    //---------------------------------------- 
    124         /** Sequencer track. */ 
     141        /** Sequencer track instance. */ 
    125142        public function get track() : SiMMLTrack { return _track; } 
    126143         
     
    134151        public function get bufferIndex() : int { return _bufferIndex; } 
    135152         
    136         /** Frame trigger delay [ms] */ 
     153        /** Delay time to dispatch frame trigger event [ms]. */ 
    137154        public function get frameTriggerDelay() : Number { return _frameTriggerDelay; } 
    138155         
     
    143160    //---------------------------------------- 
    144161        /** This event can be created only in the callback function inside. @private */ 
    145         public function SiONTrackEvent(type:String, driver:SiONDriver, track:SiMMLTrack
     162        public function SiONTrackEvent(type:String, driver:SiONDriver, track:SiMMLTrack, bufferIndex:int=0
    146163        { 
    147164            super(type, driver, null, true); 
    148165            _track = track; 
    149             _note = track.note; 
    150             _eventTriggerID = track.eventTriggerID; 
    151             _bufferIndex = track.channel.bufferIndex; 
    152             _frameTriggerDelay = track.channel.bufferIndex / driver.sequencer.sampleRate + driver.latency; 
    153             _frameTriggerTimer = _frameTriggerDelay; 
     166            if (track) { 
     167                _note = track.note; 
     168                _eventTriggerID = track.eventTriggerID; 
     169                _bufferIndex = track.channel.bufferIndex; 
     170                _frameTriggerDelay = track.channel.bufferIndex / driver.sequencer.sampleRate + driver.latency; 
     171                _frameTriggerTimer = _frameTriggerDelay; 
     172            } else { 
     173                _note = 0; 
     174                _eventTriggerID = 0; 
     175                _bufferIndex = bufferIndex; 
     176                _frameTriggerDelay = bufferIndex / driver.sequencer.sampleRate + driver.latency; 
     177                _frameTriggerTimer = _frameTriggerDelay; 
     178            } 
    154179        } 
    155180         
  • as3/SiOPM/trunk/src/org/si/sion/module/SiOPMModule.as

    r2697 r2806  
    5151         
    5252        /** stream buffer count */ 
    53         public function set streamCount(count:int) : void  
    54         { 
     53        public function set streamCount(count:int) : void { 
    5554            var i:int; 
    5655             
     
    6766                } 
    6867            } 
     68        } 
     69        public function get streamCount() : int { 
     70            return streamBuffer.length; 
    6971        } 
    7072         
  • as3/SiOPM/trunk/src/org/si/sion/module/SiOPMOperator.as

    r2697 r2806  
    535535         
    536536         
    537         /** Set PCM Data. */ 
     537        /** Set Wave table data. */ 
    538538        public function setWaveTable(waveTable:SiOPMWaveTable) : void 
    539539        { 
    540540            _pgType = SiOPMTable.PG_USER_CUSTOM; // -1 
    541             _ptType        = waveTable.defaultPTType; 
    542541            _waveTable     = waveTable.wavelet; 
    543542            _waveFixedBits = waveTable.fixedBits; 
    544         } 
    545          
    546          
    547         /** Set PCM Data. */ 
     543            ptType = waveTable.defaultPTType; 
     544        } 
     545         
     546         
     547        /** Set PCM data. */ 
    548548        public function setPCMData(pcmData:SiOPMPCMData) : void 
    549549        { 
    550550            _pgType = SiOPMTable.PG_USER_PCM; // -2 
    551             _ptType        = SiOPMTable.PT_PCM; 
    552551            _waveTable     = pcmData.wavelet; 
    553552            _waveFixedBits = pcmData.pseudoFixedBits; 
     553            ptType = SiOPMTable.PT_PCM; 
    554554        } 
    555555         
     
    743743            var n:int = (_pitchIndex + _pitchIndexShift + _pitchIndexShift2) & _pitchTableFilter; 
    744744            _updatePhaseStep(_pitchTable[n] >> _wavePhaseStepShift); 
     745trace(_pitchTable[n], _wavePhaseStepShift); 
    745746        } 
    746747         
  • as3/SiOPM/trunk/src/org/si/sion/module/SiOPMTable.as

    r2697 r2806  
    192192        /** PG:Wave tables without any waves. */ 
    193193        public var noWaveTable:SiOPMWaveTable; 
     194        public var noWaveTableOPM:SiOPMWaveTable; 
    194195        /** PG:Wave tables */ 
    195196        public var waveTables:Vector.<SiOPMWaveTable> = null; 
     
    557558            // allocate table list 
    558559            noWaveTable = SiOPMWaveTable.alloc(Vector.<int>([calcLogTableIndex(1)]), PT_PCM); 
     560            noWaveTableOPM = SiOPMWaveTable.alloc(Vector.<int>([calcLogTableIndex(1)]), PT_OPM); 
    559561            waveTables = new Vector.<SiOPMWaveTable>(DEFAULT_PG_MAX); 
    560562            customWaveTables = new Vector.<SiOPMWaveTable>(WAVE_TABLE_MAX); 
     
    703705            waveTables[PG_NOISE] = waveTables[PG_NOISE_WHITE]; 
    704706             
    705             // pulse noise. NOTE: This is dishonest impelementation. Details are shown in MAME or VirtuaNes source. 
     707            // pulse noise. NOTE: Dishonest impelementation. Details are shown in MAME or VirtuaNes source. 
    706708            table1 = new Vector.<int>(NOISE_TABLE_SIZE, true); 
    707709            imax = NOISE_TABLE_SIZE; 
     
    712714            waveTables[PG_NOISE_PULSE] = SiOPMWaveTable.alloc(table1, PT_PCM); 
    713715             
    714             // fc short noise. NOTE: This is dishonest 93*11=1023 aprox.-> 1024. 
     716            // fc short noise. NOTE: Dishonest impelementation. 93*11=1023 aprox.-> 1024. 
    715717            table1 = new Vector.<int>(SAMPLING_TABLE_SIZE, true); 
    716718            imax = SAMPLING_TABLE_SIZE; 
     
    735737                table1[i] = calcLogTableIndex(v*n); 
    736738            } 
    737             waveTables[PG_NOISE_SHORT] = SiOPMWaveTable.alloc(table1, PT_PCM); 
     739            waveTables[PG_NOISE_HIPAS] = SiOPMWaveTable.alloc(table1, PT_PCM); 
    738740             
    739741            // periodic noise 
     
    10871089                index -= PG_CUSTOM; 
    10881090                if (stencilCustomWaveTables && stencilCustomWaveTables[index]) return stencilCustomWaveTables[index]; 
    1089                 return customWaveTables[index] || noWaveTable
     1091                return customWaveTables[index] || noWaveTableOPM
    10901092            } 
    10911093            return noWaveTable; 
  • as3/SiOPM/trunk/src/org/si/sion/module/SiOPMWaveTable.as

    r2697 r2806  
    1818            this.wavelet = null; 
    1919            this.fixedBits = 0; 
    20             this.defaultPTType = defaultPTType
     20            this.defaultPTType = 0
    2121        } 
    2222         
  • as3/SiOPM/trunk/src/org/si/sion/sequencer/SiMMLChannelSetting.as

    r2697 r2806  
    88    import org.si.sion.sequencer.base.MMLSequence; 
    99    import org.si.sion.module.SiOPMModule; 
     10    import org.si.sion.module.SiOPMPCMData; 
    1011    import org.si.sion.module.SiOPMTable; 
    1112    import org.si.sion.module.SiOPMChannelBase; 
     
    2223        static public const SELECT_TONE_NORMAL:int = 1; 
    2324        static public const SELECT_TONE_FM    :int = 2; 
    24          
     25        static public const SELECT_TONE_PCM   :int = 3; 
     26 
    2527         
    2628         
     
    9395            if (voiceIndex == -1) return null; 
    9496             
    95             var voice:SiMMLVoice, param:SiOPMChannelParam=null
     97            var voice:SiMMLVoice, param:SiOPMChannelParam=null, pcm:SiOPMPCMData
    9698             
    9799            switch (_selectToneType) { 
     
    122124                } 
    123125                return (param==null || param.initSequence.isEmpty()) ? null : param.initSequence; 
     126            case SELECT_TONE_PCM: 
     127                if (voiceIndex>=0 && voiceIndex<SiOPMTable.PCM_DATA_MAX) { 
     128                    pcm = SiOPMTable.instance.getPCMData(voiceIndex); 
     129                    if (pcm) track.channel.setPCMData(pcm); 
     130                } 
     131                break; 
    124132            default: 
    125133                break; 
  • as3/SiOPM/trunk/src/org/si/sion/sequencer/SiMMLData.as

    r2697 r2806  
    5959         
    6060         
    61         /** Set envelop table data refered by @@,na,np,nt,nf,_@@,_na,_np,_nt and _nf. 
     61        /** Set envelop table data refered by &#64;&#64;,na,np,nt,nf,_&#64;&#64;,_na,_np,_nt and _nf. 
    6262         *  @param index envelop table number. 
    6363         *  @param envelop envelop table. 
  • as3/SiOPM/trunk/src/org/si/sion/sequencer/SiMMLSequencer.as

    r2697 r2806  
    4343        /** @private [internal use] callback event trigger */ 
    4444        public var _eventTriggerOff:Function = null; 
     45        /** @private [internal use] callback tempo changed */ 
     46        public var _callbackTempoChanged:Function = null; 
    4547         
    4648        private var _module:SiOPMModule;                // Module instance 
     
    7678        /** Is finish buffering ? */ 
    7779        public function get isFinished() : Boolean { 
     80            if (!_isSequenceFinished) return false; 
    7881            for each (var trk:SiMMLTrack in tracks) { if (!trk.isFinished) return false; } 
    7982            return true; 
     
    9295    //-------------------------------------------------- 
    9396        /** Create new sequencer. */ 
    94         function SiMMLSequencer(module:SiOPMModule, eventTriggerOn:Function, eventTriggerOff:Function
     97        function SiMMLSequencer(module:SiOPMModule, eventTriggerOn:Function, eventTriggerOff:Function, tempoChanged:Function
    9598        { 
    9699            super(); 
     
    107110            _eventTriggerOn = eventTriggerOn; 
    108111            _eventTriggerOff = eventTriggerOff; 
     112            _callbackTempoChanged = tempoChanged; 
    109113            _currentTrack = null; 
    110114             
     
    603607                trk.executor._onTempoChanged(changingRatio); 
    604608            } 
     609            if (_callbackTempoChanged != null) _callbackTempoChanged(globalBufferIndex); 
    605610        } 
    606611         
  • as3/SiOPM/trunk/src/org/si/sion/sequencer/SiMMLTable.as

    r2697 r2806  
    156156            // FM setting 
    157157            channelModuleSetting[MT_FM]._selectToneType = SiMMLChannelSetting.SELECT_TONE_FM; 
     158            // PCM setting 
     159            channelModuleSetting[MT_PCM]._selectToneType = SiMMLChannelSetting.SELECT_TONE_PCM; 
    158160            // Sampler 
    159161            channelModuleSetting[MT_SAMPLE]._selectToneType = SiMMLChannelSetting.SELECT_TONE_NOP; 
  • as3/SiOPM/trunk/src/org/si/sion/sequencer/SiMMLTrack.as

    r2697 r2806  
    201201            _expression = (x<0) ? 0 : (x>128) ? 128 : x; 
    202202            channel.offsetVolume(_expression, _velocity); 
     203        } 
     204         
     205        /** output level = @v * v * x. */ 
     206        public function get outputLevel() : Number { 
     207            return channel.masterVolume * _velocity * _expression * 4.76837158203125e-7; // 1/(128^3) 
     208        } 
     209         
     210        /** pannning */ 
     211        public function get pan() : int { 
     212            return channel.pan; 
     213        } 
     214         
     215        /** program number. this value has no meaning. */ 
     216        public function get programNumber() : int { 
     217            return _tone; 
    203218        } 
    204219         
  • as3/SiOPM/trunk/src/org/si/sion/sequencer/base/MMLSequencer.as

    r2697 r2806  
    4444        protected var mmlData:MMLData; 
    4545         
     46        /** buffer index for global sequence */ 
     47        protected var globalBufferIndex:int; 
    4648        /** beat counter in 16th */ 
    4749        protected var globalBeat16:Number; 
     
    221223                mmlData.regiter(); 
    222224            } 
     225            globalBufferIndex = 0; 
    223226            globalBeat16 = 0; 
    224227        } 
     
    240243            _globalBufferSampleCount = _bufferLength; 
    241244            _globalExecuteSampleCount = 0; 
     245            globalBufferIndex = 0; 
    242246        } 
    243247        protected function executeGlobalSequence() : int 
     
    261265        protected function isEndGlobalSequence() : Boolean 
    262266        { 
     267            globalBufferIndex += _globalExecuteSampleCount; 
    263268            globalBeat16 += _globalExecuteSampleCount * beat16ParSample; 
    264269            return (_globalBufferSampleCount == 0);