チェンジセット 3638

差分発生行の前後
無視リスト:
コミット日時:
2010/03/29 02:28:00 (2 年前)
コミッタ:
keim
ログメッセージ:

SiON ver0.59 updated. This version is only for development.

ファイル:

凡例:

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

    r3504 r3638  
    205205                switch(addr) { 
    206206                case 15: // NOIZE:7 FREQ:4-0 for channel#7 
    207                     if (channel == 7 && data & 128) { 
    208                         operatorParam[3].setPGType(SiOPMTable.PG_NOISE_PULSE); 
     207                    if (channel == 7 && (data & 128)) { 
     208                        operatorParam[3].pgType = SiOPMTable.PG_NOISE_PULSE; 
     209                        operatorParam[3].ptType = SiOPMTable.PT_OPM_NOISE; 
    209210                        operatorParam[3].fixedPitch = ((data & 31) << 6) + 2048; 
    210211                    } 
     
    246247                    } else { 
    247248                        // Operator parameter 
    248                         opp = operatorParam[[0,2,1,3][(addr >> 3) & 3]]; 
     249                        opp = operatorParam[[3,1,2,0][(addr >> 3) & 3]]; // [0,2,1,3]? 
    249250                        switch((addr-0x40) >> 5) { 
    250251                        case 0: // DT1:6-4 MUL:3-0 
  • as3/SiOPM/trunk/src/org/si/sion/module/channels/SiOPMChannelFM.as

    r3608 r3638  
    8181        /** register map type */ 
    8282        _sion_internal var registerMapType:int; 
     83        _sion_internal var registerMapChannel:int; 
    8384         
    8485         
     
    318319            if (waveData is SiOPMWavePCMTable) pcmData = (waveData as SiOPMWavePCMTable).getSample(0); 
    319320             
    320             if (pcmData) { 
     321            if (pcmData && pcmData.wavelet) { 
    321322                _updateOperatorCount(1); 
    322323                _funcProcessType = PROC_PCM; 
     
    325326            } else  
    326327            if (waveData is SiOPMWaveTable) { 
    327                 _updateOperatorCount(1); 
    328                 activeOperator.setWaveTable(waveData as SiOPMWaveTable); 
     328                var waveTable:SiOPMWaveTable = waveData as SiOPMWaveTable; 
     329                if (waveTable.wavelet) { 
     330                    _updateOperatorCount(1); 
     331                    activeOperator.setWaveTable(waveTable); 
     332                } 
    329333            } 
    330334        } 
     
    335339        { 
    336340            switch(_sion_internal::registerMapType) { 
     341            case 0: 
     342                _setByOPMRegister(addr, data); 
     343                break; 
    337344            case 1:  
    338                 _setByOPMRegister(addr, data); 
    339                 break; 
    340             case 0: 
    341345            default: 
    342346                _setBy2A03Register(addr, data); 
     
    353357         
    354358        // OPM register value 
     359        private var _pmd:int=0, _amd:int=0; 
    355360        private function _setByOPMRegister(addr:int, data:int) : void 
    356361        { 
     362            var i:int, v:int, pms:int, ams:int, op:SiOPMOperator,  
     363                channel:int = _sion_internal::registerMapChannel; 
     364             
     365            if (addr < 0x20) {  // Module parameter 
     366                switch(addr) { 
     367                case 15: // NOIZE:7 FREQ:4-0 for channel#7 
     368                    if (channel == 7 && _operatorCount==4 && (data & 128) != 0) { 
     369                        operator[3].pgType = SiOPMTable.PG_NOISE_PULSE; 
     370                        operator[3].ptType = SiOPMTable.PT_OPM_NOISE; 
     371                        operator[3].pitchIndex = ((data & 31) << 6) + 2048; 
     372                    } 
     373                    break; 
     374                case 24: // LFO FREQ:7-0 for all 8 channels 
     375                    v = SiOPMTable.instance.lfo_timerSteps[data]; 
     376                    _lfo_timer = (v>0) ? 1 : 0; 
     377                    _lfo_timer_step = v; 
     378                    break; 
     379                case 25: // A(0)/P(1):7 DEPTH:6-0 for all 8 channels 
     380                    if (data & 128) _amd = data & 127; 
     381                    else            _pmd = data & 127; 
     382                    break; 
     383                case 27: // LFO WS:10 for all 8 channels 
     384                    initializeLFO(data & 3); 
     385                    break; 
     386                } 
     387            } else { 
     388                if (channel == (addr&7)) { 
     389                    if (addr < 0x40) { 
     390                        // Channel parameter 
     391                        switch((addr-0x20) >> 3) { 
     392                        case 0: // L:7 R:6 FB:5-3 ALG:2-0 
     393                            v = data >> 6; 
     394                            setAlgorism(4, data & 7); 
     395                            setFeedBack((data >> 3) & 7, 0); 
     396                            _volumes[0] = (v) ? 0.5 : 0; 
     397                            _pan = (v==1) ? 128 : (v==2) ? 0 : 64; 
     398                            break; 
     399                        case 1: // KC:6-0 
     400                            for (i=0; i<4; i++) operator[i].kc = data & 127; 
     401                            break; 
     402                        case 2: // KF:6-0 
     403                            for (i=0; i<4; i++) operator[i].kf = data & 127; 
     404                            break; 
     405                        case 3: // PMS:6-4 AMS:10 
     406                            pms = (data >> 4) & 7; 
     407                            ams = (data     ) & 3; 
     408                            if (data & 128) setPitchModulation((pms<6) ? (_pmd >> (6-pms)) : (_pmd << (pms-5))); 
     409                            else            setAmplitudeModulation((ams>0) ? (_amd << (ams-1)) : 0); 
     410                            break; 
     411                        } 
     412                    } else { 
     413                        // Operator parameter 
     414                        op = operator[[3,1,2,0][(addr >> 3) & 3]]; // [0,2,1,3] 
     415                        switch((addr-0x40) >> 5) { 
     416                        case 0: // DT1:6-4 MUL:3-0 
     417                            op.dt1 = (data >> 4) & 7; 
     418                            op.mul = (data     ) & 15; 
     419                            break; 
     420                        case 1: // TL:6-0 
     421                            op.tl = data & 127; 
     422                            break; 
     423                        case 2: // KS:76 AR:4-0 
     424                            op.ks = (data >> 6) & 3; 
     425                            op.ar = (data & 31) << 1; 
     426                            break; 
     427                        case 3: // AMS:7 DR:4-0 
     428                            op.ams = ((data >> 7) & 1)<<1; 
     429                            op.dr  = (data & 31) << 1; 
     430                            break; 
     431                        case 4: // DT2:76 SR:4-0 
     432                            op.detune = [0, 384, 500, 608][(data >> 6) & 3]; 
     433                            op.sr     = (data & 31) << 1; 
     434                            break; 
     435                        case 5: // SL:7-4 RR:3-0 
     436                            op.sl = (data >> 4) & 15; 
     437                            op.rr = (data & 15) << 2; 
     438                            break; 
     439                        } 
     440                    } 
     441                } 
     442            } 
    357443        } 
    358444         
     
    523609            operator[0].initialize(); 
    524610            _isNoteOn = false; 
    525             _sion_internal::registerMapType = 0; 
     611            _sion_internal::registerMapType = 0 
     612            _sion_internal::registerMapChannel = 0; 
    526613             
    527614            // initialize sound channel 
     
    11321219                phase_filter:int = SiOPMTable.PHASE_FILTER; 
    11331220             
    1134              
    11351221            // buffering 
    11361222            var ip:SLLint = _inPipe, 
  • as3/SiOPM/trunk/src/org/si/sion/sequencer/SiMMLSequencer.as

    r3530 r3638  
    15941594        private function _onRegisterUpdate(e:MMLEvent) : MMLEvent 
    15951595        { 
    1596             var addr:int = e.data>>8, data:int = e.data & 0xff
    1597             _currentTrack._callbackUpdateRegister(addr, data); 
     1596            e = e.getParameters(_p, 2)
     1597            _currentTrack._callbackUpdateRegister(_p[0], _p[1]); 
    15981598            return e.next; 
    15991599        } 
  • as3/SiOPM/trunk/src/org/si/sion/utils/SiONUtil.as

    r3631 r3638  
    123123        static public function extractYM2151ADPCM(src:ByteArray, dst:Vector.<Number>=null, dstChannelCount:int=1) : Vector.<Number> 
    124124        { 
    125              
    126125            var data:int, r:int, i:int, imax:int, pcm:int=0, sample:Number,  
    127126                InpPcm:int=0, InpPcm_prev:int=0, scale:int=0, output:int=0; 
  • as3/SiOPM/trunk/src/org/si/sion/utils/Translator.as

    r3530 r3638  
    77package org.si.sion.utils { 
    88    import org.si.sion.module.*; 
     9    import org.si.sion.sequencer.SiMMLData; 
    910    import org.si.sion.sequencer.SiMMLTable; 
    1011    import org.si.sion.effector.SiEffectModule; 
     
    797798         
    798799         
     800         
     801         
    799802    // reconstruct MML string from channel parameters 
    800803    //-------------------------------------------------- 
     
    10161019         
    10171020         
     1021    // reconstruct MML string from SiMMLData 
     1022    //-------------------------------------------------- 
     1023        /** reconstruct MML string from SiMMLData */ 
     1024        public function reconstructMML(data:SiMMLData) : String  
     1025        { 
     1026            var mml:String = ""; 
     1027             
     1028             
     1029             
     1030            return mml; 
     1031        } 
     1032         
     1033         
     1034         
     1035         
     1036         
    10181037    // internal functions 
    10191038    //-------------------------------------------------- 
  • as3/SiOPM/trunk/src/org/si/sound/mdx/MDXData.as

    r3565 r3638  
    1212    import org.si.sion.module.SiOPMOperatorParam; 
    1313    import org.si.sion.sequencer.base.MMLEvent; 
     14    import org.si.sion.sequencer.base.MMLSequence; 
    1415    import flash.utils.ByteArray; 
    1516     
     
    2728        public var tracks:Vector.<MDXTrack> = new Vector.<MDXTrack>(16, true); 
    2829        public var executors:Vector.<MDXExecutor> = new Vector.<MDXExecutor>(16, true); 
    29         public var currentBPM:Number; 
    3030        private var _noiseVoice:SiONVoice; 
    3131        private var _noiseVoiceNumber:int; 
     32        private var _currentBPM:Number; 
     33        private var _globalSequence:MMLSequence; 
     34        private var _globalPrevClock:uint; 
    3235         
    3336         
     
    9194            data.clear(); 
    9295            data.bpm = bpm; 
     96            _globalSequence = data.globalSequence; 
    9397             
    9498            // set voice data 
     
    100104                imax = 96; 
    101105                for (i=0; i<imax; i++) { 
    102                     data.setPCMData(i, pdxData.pcmData[i]); 
     106                    if (pdxData.pcmData[i]) data.setPCMData(i, pdxData.pcmData[i]); 
    103107                } 
    104108            } 
     
    107111            imax = (isPCM8) ? 16 : 9; 
    108112            for (i=0; i<imax; i++) { 
    109                 if (tracks[i].hasNoData) executors[i].initialize(null, tracks[i], _noiseVoiceNumber); 
    110                 else executors[i].initialize(data.appendNewSequence().initialize(), tracks[i], _noiseVoiceNumber); 
     113                if (tracks[i].hasNoData) executors[i].initialize(null, tracks[i], _noiseVoiceNumber, isPCM8); 
     114                else executors[i].initialize(data.appendNewSequence().initialize(), tracks[i], _noiseVoiceNumber, isPCM8); 
    111115            } 
    112116 
    113117            var totalClock:uint=0, nextClock:uint, c:uint; 
    114             currentBPM = bpm; 
     118            _currentBPM = bpm; 
     119            _globalPrevClock = 0; 
    115120            while (totalClock != uint.MAX_VALUE) { 
    116121                // sync 
    117                 for (i=0; i<imax; i++) executors[i].globalExec(totalClock, this); 
     122                for (i=0; i<imax; i++) { 
     123                    executors[i].globalExec(totalClock, this); 
     124                } 
    118125                // exec 
    119126                nextClock = uint.MAX_VALUE; 
    120127                for (i=0; i<imax; i++) { 
    121                     c = executors[i].exec(totalClock, currentBPM); 
     128                    c = executors[i].exec(totalClock, _currentBPM); 
    122129                    if (c < nextClock) nextClock = c; 
    123130                } 
     
    153160            pdxLength = bytes.position - titleLength - 4; 
    154161            bytes.position = titleLength + 3; 
    155             if (pdxLength != 0) pdxFileName = bytes.readMultiByte(pdxLength, "shift_jis"); //us-ascii 
     162            if (pdxLength != 0) { 
     163                pdxFileName = bytes.readMultiByte(pdxLength, "shift_jis").toUpperCase(); //us-ascii 
     164                if (pdxFileName.substr(-4,4) != ".PDX") pdxFileName += ".PDX"; 
     165            } 
    156166            bytes.position = titleLength + pdxLength + 4; 
    157167             
     
    182192                opp:SiOPMOperatorParam, reg:Array = [], opia:Array = [3,1,2,0], dt2Table:Array = [0, 384, 500, 608]; 
    183193             
    184             for (i=0; i<voiceLength; i+=27) { 
     194            voiceLength /= 27; 
     195            for (i=0; i<voiceLength; i++) { 
    185196                voiceNumber = bytes.readUnsignedByte(); 
    186197                fbalg = bytes.readUnsignedByte(); 
     
    257268         
    258269        /** @private [internal] call from MDXExecutor.sync() */ 
    259         internal function onTimerB(timerB:int) : void 
    260         { 
    261             currentBPM = 4883/(256-timerB); 
     270        internal function onTimerB(timerB:int, syncClock:uint) : void 
     271        { 
     272            if (syncClock == 0) return; 
     273            if (syncClock > _globalPrevClock) _globalSequence.appendNewEvent(MMLEvent.WAIT, 0, (syncClock - _globalPrevClock)*10); 
     274            _globalPrevClock = syncClock; 
     275            _currentBPM = 4883/(256-timerB); 
     276            _globalSequence.appendNewEvent(MMLEvent.TEMPO, _currentBPM); 
    262277        } 
    263278    } 
  • as3/SiOPM/trunk/src/org/si/sound/mdx/MDXExecutor.as

    r3631 r3638  
    3131        internal var volume:int; 
    3232        internal var fineVolumeFlag:Boolean; 
    33          
     33        internal var isPCM8:Boolean; 
    3434         
    3535        static private var _panTable:Array = [4,0,8,4]; 
    36         static private var _freqTable:Array = [26,31,38,43,50];//[18,23,30,35,42]; 
     36        static private var _freqTable:Array = [26, 31, 38, 43, 50]; 
    3737        static private var _volTable:Array = [85,  87,  90,  93,  95,  98, 101, 103,  106, 109, 111, 114, 117, 119, 122, 125]; 
    3838        static private var _volTablePCM8:Array = [2, 3, 4, 5, 6, 8, 10, 12, 16, 20, 24, 32, 40, 48, 64, 80]; 
     
    5454                for (i=0; i<128; i++) _tlTable[127-i] = ((1<<(i>>3))*(8+(i&7)))>>12; 
    5555                for (i=0; i<16; i++) _volTable[i] = _tlTable[127-_volTable[i]]; 
    56                 for (i=0; i<16; i++) _volTablePCM8[i] = _tlTable[127-_volTablePCM8[i]]; 
    57             } 
    58         } 
    59          
    60          
    61         internal function initialize(mmlseq:MMLSequence, mdxtrack:MDXTrack, noiseVoiceNumber:int) : void  
     56            } 
     57        } 
     58         
     59         
     60        internal function initialize(mmlseq:MMLSequence, mdxtrack:MDXTrack, noiseVoiceNumber:int, isPCM8:Boolean) : void  
    6261        { 
    6362            this.mmlseq = mmlseq; 
    6463            this.mdxtrack = mdxtrack; 
    6564            this.noiseVoiceNumber = noiseVoiceNumber; 
     65            this.isPCM8 = isPCM8; 
    6666            clock = 0; 
    6767            pointer = 0; 
     
    8484             
    8585            if (mmlseq) { 
    86                 if (mdxtrack.channelNumber < 8) { 
    87                     mmlseq.appendNewEvent(MMLEvent.MOD_TYPE, 6); // use FM voice 
    88                     mmlseq.appendNewEvent(MMLEvent.FINE_VOLUME, 32); 
    89                 } else { 
    90                     mmlseq.appendNewEvent(MMLEvent.MOD_TYPE, 7); // use PCM voice 
    91                     mmlseq.appendNewEvent(MMLEvent.FINE_VOLUME, 128); 
    92                     mmlseq.appendNewEvent(MMLEvent.VOLUME, 24); 
    93                 } 
    94              
    9586                var sequencer:SiMMLSequencer = SiONDriver.mutex.sequencer; 
    9687                eventIDFadeOut = sequencer.getEventID("@fadeout"); 
     
    10293                eventIDPMod    = sequencer.getEventID("mp"); 
    10394                eventIDIndex   = sequencer.getEventID("i"); 
     95                 
     96                if (mdxtrack.channelNumber < 8) { 
     97                    mmlseq.appendNewEvent(MMLEvent.MOD_TYPE, 6); // use FM voice 
     98                    mmlseq.appendNewEvent(MMLEvent.FINE_VOLUME, 32); 
     99                    mmlseq.appendNewEvent(MMLEvent.QUANT_RATIO, 8); 
     100                } else { 
     101                    mmlseq.appendNewEvent(MMLEvent.MOD_TYPE, 7); // use PCM voice 
     102                    mmlseq.appendNewEvent(MMLEvent.FINE_VOLUME, 128); 
     103                    mmlseq.appendNewEvent(MMLEvent.VOLUME, 22); 
     104                    mmlseq.appendNewEvent(MMLEvent.QUANT_RATIO, 8); 
     105                    mmlseq.appendNewEvent(eventIDPShift, 40); 
     106                } 
    104107            } 
    105108        } 
     
    149152                        lastNoteMML = mmlseq.appendNewEvent(MMLEvent.NOTE, e.data+15 + (v*e.deltaClock+8192)/16384, 0); 
    150153                        break; 
    151                     case MDXEvent.REGISTER: { mmlseq.appendNewEvent(MMLEvent.REGISTER, (e.data << 8) | e.data2); }break; 
     154                    case MDXEvent.REGISTER:  
     155                        mmlseq.appendNewEvent(MMLEvent.REGISTER,  e.data); 
     156                        mmlseq.appendNewEvent(MMLEvent.PARAMETER, e.data2); 
     157                        break; 
    152158                    case MDXEvent.FADEOUT:  { mmlseq.appendNewEvent(eventIDFadeOut, e.data2); }break; 
    153159                    case MDXEvent.VOICE: 
     
    252258                                    mmlseq.appendNewEvent(MMLEvent.MOD_PARAM, noiseVoiceNumber); 
    253259                                    anFreq = e.data & 31; 
     260//trace("noiz!!"); 
    254261                                } 
    255262                            } else { 
     
    288295            function _vol() : void { 
    289296                if (mdxtrack.channelNumber < 8) mmlseq.appendNewEvent(eventIDExp, (fineVolumeFlag) ? _tlTable[volume] : _volTable[volume]); 
    290                 else { 
    291                     mmlseq.appendNewEvent(eventIDExp, (fineVolumeFlag) ? _tlTable[volume] : _volTable[volume]); 
    292                 } 
     297                else mmlseq.appendNewEvent(eventIDExp, (fineVolumeFlag) ? (127-volume) : _volTable[volume]); 
    293298            } 
    294299             
     
    323328                    break; 
    324329                case MDXEvent.TIMERB: 
    325                     data.onTimerB(e.data); 
     330                    data.onTimerB(e.data, syncClock); 
    326331                    break; 
    327332                case MDXEvent.SYNC_WAIT: 
  • as3/SiOPM/trunk/src/org/si/sound/mdx/mdxplayer.as.txt

    r3565 r3638  
    5252        private function _onPDXLoad(name:String, bytes:ByteArray) : void { 
    5353            pdxData.loadBytes(bytes); 
    54             pdxData.fileName = name; 
    55             _onComplete(); 
     54            pdxData.fileName = name.toUpperCase(); 
     55            if (pdxData.fileName != mdxData.pdxFileName) title.text = mdxData.pdxFileName + "; Wrong PDX file ?"; 
     56            else _onComplete(); 
    5657        } 
    5758         
    5859        private function _onComplete() : void { 
     60            driver.stop(); 
    5961            sionData = mdxData.convertToSiONData(sionData, pdxData); 
    6062            title.text = sionData.title;