チェンジセット 3530
- コミット日時:
- 2010/03/12 21:10:26 (2 年前)
- ファイル:
-
- as3/SiOPM/trunk/src/org/si/sion/module/channels/SiOPMChannelFM.as (更新) (1 diff)
- as3/SiOPM/trunk/src/org/si/sion/sequencer/SiMMLSequencer.as (更新) (1 diff)
- as3/SiOPM/trunk/src/org/si/sion/utils/Translator.as (更新) (1 diff)
- as3/SiOPM/trunk/src/org/si/sound/mdx/MDXData.as (更新) (5 diffs)
- as3/SiOPM/trunk/src/org/si/sound/mdx/MDXEvent.as (更新) (3 diffs)
- as3/SiOPM/trunk/src/org/si/sound/mdx/MDXTrack.as (更新) (12 diffs)
- as3/SiOPM/trunk/src/org/si/sound/mdx/PDXData.as (更新) (2 diffs)
凡例:
- 変更無し
- 追加
- 削除
- 更新
- コピー
- 移動
as3/SiOPM/trunk/src/org/si/sion/module/channels/SiOPMChannelFM.as
r3504 r3530 51 51 // valiables 52 52 //-------------------------------------------------- 53 /** eg_out threshold to check idling */ static _sion_internal var idlingThreshold:int = 4096; // = 256*8*2 = volume<1/25653 /** eg_out threshold to check idling */ static _sion_internal var idlingThreshold:int = 8192; // = 512*8*2 = volume<1/512 54 54 55 55 // Operators as3/SiOPM/trunk/src/org/si/sion/sequencer/SiMMLSequencer.as
r3516 r3530 885 885 e = MMLParser.parse(); 886 886 887 if (e != null ) {887 if (e != null && e.next != null) { 888 888 seq._cutout(e); 889 889 for (prev = seq.headEvent; prev.next != null; prev = e) { as3/SiOPM/trunk/src/org/si/sion/utils/Translator.as
r3504 r3530 15 15 public class Translator 16 16 { 17 /** constructor */17 /** constructor, do nothing. */ 18 18 function Translator() 19 19 { as3/SiOPM/trunk/src/org/si/sound/mdx/MDXData.as
r3516 r3530 7 7 8 8 package org.si.sound.mdx { 9 import org.si.sion.SiONData; 10 import org.si.sion.SiONVoice; 9 11 import org.si.sion.module.SiOPMChannelParam; 10 12 import org.si.sion.module.SiOPMOperatorParam; 11 import org.si.sion. SiONVoice;13 import org.si.sion.sequencer.base.MMLEvent; 12 14 import flash.utils.ByteArray; 13 15 … … 22 24 public var title:String = null; 23 25 public var pdxFileName:String = null; 24 public var voices:Vector.<SiONVoice> = new Vector.<SiONVoice>(); 25 public var tracks:Vector.<MDXTrack> = new Vector.<MDXTrack>(); 26 public var voices:Vector.<SiONVoice> = new Vector.<SiONVoice>(256, true); 27 public var tracks:Vector.<MDXTrack> = new Vector.<MDXTrack>(16, true); 28 public var globalEvents:Vector.<MDXEvent> = new Vector.<MDXEvent>(); 26 29 27 30 … … 59 62 public function clear() : MDXData 60 63 { 64 var i:int; 61 65 isPCM8 = false; 62 66 bpm = 0; 63 67 title = null; 64 68 pdxFileName = null; 65 voices.length = 0; 66 tracks.length = 0; 69 globalEvents.length = 0; 70 for (i=0; i<16; i++) tracks[i] = null; 71 for (i=0; i<256; i++) voices[i] = null; 67 72 return this; 73 } 74 75 76 /** convert to SiONData 77 * @param data SiONData to convert to, pass null to create new SiONData inside. 78 * @return converted SiONData 79 */ 80 public function convertToSiONData(data:SiONData=null, pdxData:PDXData=null) : SiONData 81 { 82 var i:int, imax:int, prevClock:uint, currentClock:uint; 83 84 if (data == null) data = new SiONData(); 85 data.clear(); 86 87 data.bpm = bpm; 88 data.globalSequence.initialize(); 89 imax = globalEvents.length; 90 currentClock = prevClock = 0; 91 for (i=0; i<imax; i++) { 92 switch(globalEvents[i].type) { 93 case MDXEvent.TIMERB: 94 currentClock = globalEvents[i].clock; 95 if (prevClock < currentClock) data.globalSequence.appendNewEvent(MMLEvent.WAIT, (currentClock-prevClock)*10); 96 data.globalSequence.appendNewEvent(MMLEvent.TEMPO, 4883/(256-globalEvents[i].data)); 97 prevClock = currentClock; 98 break; 99 } 100 } 101 102 imax = (isPCM8) ? 16 : 9; 103 for (i=0; i<imax; i++) { 104 tracks[i]._constructMMLSequence(data.appendNewSequence()); 105 } 106 107 imax = voices.length; 108 for (i=0; i<imax; i++) { 109 data.voices[i] = voices[i] 110 } 111 112 if (pdxData) { 113 imax = 96; 114 for (i=0; i<imax; i++) data.setPCMData(i, pdxData.pcmData[i]); 115 } 116 117 return data; 68 118 } 69 119 … … 117 167 { 118 168 var i:int, opi:int, v:int, voice:SiONVoice, voiceNumber:int, fbalg:int, mask:int, 119 opp:SiOPMOperatorParam, reg:Array = [], opia:Array = [ 0,2,1,3], dt2Table:Array = [0, 384, 500, 608];169 opp:SiOPMOperatorParam, reg:Array = [], opia:Array = [3,1,2,0], dt2Table:Array = [0, 384, 500, 608]; 120 170 121 171 for (i=0; i<voiceLength; i+=27) { … … 161 211 private function _loadTracks(bytes:ByteArray, mmlOffsets:Array) : void 162 212 { 163 var i:int, trackCount:int = (isPCM8) ? 16 : 9;164 bpm = 0;165 for (i=0; i< trackCount; i++) {213 var i:int, imax:int = (isPCM8) ? 16 : 9; 214 // load tracks 215 for (i=0; i<imax; i++) { 166 216 bytes.position = mmlOffsets[i]; 167 tracks[i] = new MDXTrack( i);217 tracks[i] = new MDXTrack(this, i); 168 218 tracks[i].loadBytes(bytes); 169 if (bpm == 0 && tracks[i].timerB != 0) bpm = 4883/(256 - tracks[i].timerB); 219 } 220 221 // sort all global events 222 globalEvents = globalEvents.sort(function(a:MDXEvent, b:MDXEvent) : Number { return (a.clock - b.clock); }); 223 224 // load bpm 225 bpm = 87.19642857142857; // 4883/(256-200) 226 imax = globalEvents.length; 227 for (i=0; i<imax; i++) { 228 if (globalEvents[i].clock > 0) break; 229 if (globalEvents[i].type == MDXEvent.TIMERB) { 230 bpm = 4883/(256-globalEvents[i].data);//4370.285//4883 231 break; 232 } 170 233 } 171 234 } as3/SiOPM/trunk/src/org/si/sound/mdx/MDXEvent.as
r3516 r3530 17 17 static public const REST:int = 0x00; 18 18 static public const NOTE:int = 0x80; 19 static public const T EMPO:int = 0xff;19 static public const TIMERB:int = 0xff; 20 20 static public const REGISTER:int = 0xfe; 21 21 static public const VOICE:int = 0xfd; … … 52 52 //-------------------------------------------------------------------------------- 53 53 public var type:int = 0; 54 public var value:int = 0;55 public var value2:int = 0;54 public var data:int = 0; 55 public var data2:int = 0; 56 56 public var clock:uint = 0; 57 57 public var deltaClock:uint = 0; … … 74 74 // constructor 75 75 //-------------------------------------------------------------------------------- 76 function MDXEvent(type:int, value:int, value2:int, clock:int, deltaClock:int)76 function MDXEvent(type:int, data:int, data2:int, clock:int, deltaClock:int) 77 77 { 78 78 this.type = type; 79 this. value = value;80 this. value2 = value2;79 this.data = data; 80 this.data2 = data2; 81 81 this.clock = clock; 82 82 this.deltaClock = deltaClock; as3/SiOPM/trunk/src/org/si/sound/mdx/MDXTrack.as
r3516 r3530 23 23 /** Return pointer of segno */ 24 24 public var segnoPointer:MDXEvent; 25 /** TIMER B value */26 public var timerB:int;27 25 /** channel number */ 28 26 public var channelNumber:int; 27 /** owner MDXData */ 28 public var owner:MDXData; 29 29 30 30 31 … … 43 44 // constructor 44 45 //-------------------------------------------------------------------------------- 45 function MDXTrack(channelNumber:int) 46 { 46 function MDXTrack(owner:MDXData, channelNumber:int) 47 { 48 this.owner = owner; 47 49 this.channelNumber = channelNumber; 48 50 sequence = new Vector.<MDXEvent>(); 49 51 segnoPointer = null; 50 timerB = 0;51 52 } 52 53 … … 61 62 sequence.length = 0; 62 63 segnoPointer = null; 63 timerB = 0;64 64 return this; 65 65 } … … 74 74 clock = 0; 75 75 76 while (!exitLoop ) {76 while (!exitLoop && bytes.bytesAvailable>0) { 77 77 pos = bytes.position; 78 78 code = bytes.readUnsignedByte(); … … 89 89 //----- 2 operands 90 90 case MDXEvent.REGISTER: 91 case MDXEvent.REPEAT_BEGIN:92 91 case MDXEvent.FADEOUT: 93 92 newEvent(code, bytes.readUnsignedByte(), bytes.readUnsignedByte()); … … 99 98 case MDXEvent.GATE: 100 99 case MDXEvent.KEY_ON_DELAY: 101 case MDXEvent.SYNC_SEND:102 100 case MDXEvent.FREQUENCY: 103 101 case MDXEvent.LFO_DELAY: … … 108 106 case MDXEvent.VOLUME_INC: 109 107 case MDXEvent.SLUR: 110 case MDXEvent.SYNC_WAIT:111 108 case MDXEvent.SET_PCM8: 112 109 newEvent(code); 113 110 break; 114 //----- 1 WORD operand 115 case MDXEvent.REPEAT_END: 116 case MDXEvent.REPEAT_BREAK: 117 newEvent(code, bytes.readUnsignedShort()); 118 break; 111 //----- 1 WORD 119 112 case MDXEvent.DETUNE: 120 113 case MDXEvent.PORTAMENT: 121 newEvent(code, bytes.readShort()); //...? 114 newEvent(code, bytes.readShort()); //...short? 115 break; 116 //----- REPEAT 117 case MDXEvent.REPEAT_BEGIN: 118 newEvent(code, bytes.readUnsignedByte(), bytes.readUnsignedByte()); 119 break; 120 case MDXEvent.REPEAT_END: 121 v = pos+(bytes.readShort()); // REPEAT_BEGIN 122 newEvent(code, v); 123 break; 124 case MDXEvent.REPEAT_BREAK: 125 v = pos+(bytes.readShort()+2); // REPEAT_END 126 newEvent(code, v); 122 127 break; 123 128 //----- others 124 case MDXEvent.TEMPO: 129 case MDXEvent.TIMERB: 130 case MDXEvent.SYNC_SEND: 125 131 v = bytes.readUnsignedByte(); 126 newEvent(code, v); 127 if (timerB == 0) timerB = v; 132 owner.globalEvents.push(newEvent(code, v)); 133 break; 134 case MDXEvent.SYNC_WAIT: 135 owner.globalEvents.push(newEvent(code)); 128 136 break; 129 137 case MDXEvent.PITCH_LFO: 130 138 case MDXEvent.VOLUME_LFO: 131 v = (bytes.readUnsignedByte() << 16) | bytes.readUnsignedShort(); 132 newEvent(code, v, bytes.readUnsignedShort()); 139 v = bytes.readUnsignedByte(); 140 if (v == 0x80 || v == 0x81) newEvent(code, v<<24); 141 else newEvent(code, (v<<16) | bytes.readUnsignedShort(), bytes.readUnsignedShort()); 133 142 break; 134 143 case MDXEvent.OPM_LFO: … … 155 164 156 165 157 function newEvent(type:int, value:int=0, value2:int=0, deltaClock:int=0) : void{158 var inst:MDXEvent = new MDXEvent(type, value, value2, clock, deltaClock);166 function newEvent(type:int, data:int=0, data2:int=0, deltaClock:int=0) : MDXEvent { 167 var inst:MDXEvent = new MDXEvent(type, data, data2, clock, deltaClock); 159 168 sequence.push(inst); 160 169 mem[pos] = inst; 170 return inst; 161 171 } 162 172 … … 166 176 167 177 /** @private [internal] construct MMLSequence */ 168 internal function _constructMMLSequence( simml:MMLSequence, tempo:Number) : void178 internal function _constructMMLSequence(mmlseq:MMLSequence) : void 169 179 { 170 180 if (SiONDriver.mutex == null) return; 171 181 172 182 var i:int, v:int, imax:int, e:MDXEvent, me:MMLEvent, sequencer:SiMMLSequencer = SiONDriver.mutex.sequencer, 173 panTable:Array = [4,0,8,4], freqTable:Array = [18,23,30,35,42], 174 repeatStac:Array = [], lastNote:MMLEvent, lfoDelay:int=0, 183 panTable:Array = [4,0,8,4], freqTable:Array = [18,23,30,35,42], adpcmFreq:int = 4, adpcmID:int = -1, 184 repeatStac:Array = [], lastNoteMDX:MDXEvent, lastNoteMML:MMLEvent, 185 lfoDelay:int=0, lfofq:int=0, lfows:int=2, mp:int=0, ma:int=0, 175 186 eventIDFadeOut:int = sequencer.getEventID("@fadeout"), 176 187 eventIDPan:int = sequencer.getEventID("p"), … … 182 193 183 194 184 simml.initialize(); 185 simml.appendNewEvent(MMLEvent.MOD_TYPE, 6); // use FM voice 195 mmlseq.initialize(); 196 if (channelNumber < 8) mmlseq.appendNewEvent(MMLEvent.MOD_TYPE, 6); // use FM voice 197 else mmlseq.appendNewEvent(MMLEvent.MOD_TYPE, 7); // use PCM voice 186 198 187 199 imax = sequence.length; 188 200 for (i=0; i<imax; i++) { 189 201 e = sequence[i]; 190 if (segnoPointer === e) simml.appendNewEvent(MMLEvent.REPEAT_ALL, 0); 191 if (e.type < 0x80) simml.appendNewEvent(MMLEvent.REST, 0, e.deltaClock*10); 192 else if (e.type < 0xe0) lastNote = simml.appendNewEvent(MMLEvent.NOTE, e.value+12, e.deltaClock*10); 193 else { 202 if (segnoPointer === e) mmlseq.appendNewEvent(MMLEvent.REPEAT_ALL, 0); 203 if (e.type < 0x80) { 204 mmlseq.appendNewEvent(MMLEvent.REST, 0, e.deltaClock*10); 205 } else if (e.type < 0xe0) { 206 lastNoteMDX = e; 207 if (channelNumber < 8) { 208 lastNoteMML = mmlseq.appendNewEvent(MMLEvent.NOTE, e.data+12, e.deltaClock*10); // use FM voice 209 } else { 210 // use PCM voice 211 if (adpcmID != e.data) { 212 adpcmID = e.data; 213 mmlseq.appendNewEvent(MMLEvent.MOD_PARAM, adpcmID); 214 } 215 lastNoteMML = mmlseq.appendNewEvent(MMLEvent.NOTE, freqTable[adpcmFreq], e.deltaClock*10); 216 } 217 } else { 194 218 switch(e.type) { 195 219 case MDXEvent.REGISTER: 196 simml.appendNewEvent(MMLEvent.REGISTER, (e.value << 8) | e.value2); 220 mmlseq.appendNewEvent(MMLEvent.REGISTER, (e.data << 8) | e.data2); 221 break; 222 case MDXEvent.FADEOUT: 223 mmlseq.appendNewEvent(eventIDFadeOut, e.data2); 224 break; 225 case MDXEvent.VOICE: 226 mmlseq.appendNewEvent(MMLEvent.MOD_PARAM, e.data); 227 break; 228 case MDXEvent.PAN: 229 if (e.data == 0) mmlseq.appendNewEvent(MMLEvent.VOLUME, 0); 230 else { 231 mmlseq.appendNewEvent(MMLEvent.VOLUME, 16); 232 mmlseq.appendNewEvent(eventIDPan, panTable[e.data]); 233 } 234 break; 235 case MDXEvent.VOLUME: 236 if (e.data < 16) mmlseq.appendNewEvent(MMLEvent.FINE_VOLUME, e.data<<3); 237 else mmlseq.appendNewEvent(MMLEvent.FINE_VOLUME, e.data & 127); 238 break; 239 case MDXEvent.GATE: 240 if (e.data < 9) { 241 mmlseq.appendNewEvent(MMLEvent.QUANT_RATIO, e.data); 242 mmlseq.appendNewEvent(MMLEvent.QUANT_COUNT, 0); 243 } else { 244 mmlseq.appendNewEvent(MMLEvent.QUANT_RATIO, 8); 245 mmlseq.appendNewEvent(MMLEvent.QUANT_COUNT, (256-e.data)*10); 246 } 247 break; 248 case MDXEvent.KEY_ON_DELAY: 249 mmlseq.appendNewEvent(MMLEvent.KEY_ON_DELAY, e.data*10); 250 break; 251 case MDXEvent.VOLUME_DEC: 252 mmlseq.appendNewEvent(MMLEvent.VOLUME_SHIFT, -1); 253 break; 254 case MDXEvent.VOLUME_INC: 255 mmlseq.appendNewEvent(MMLEvent.VOLUME_SHIFT, 1); 256 break; 257 case MDXEvent.SLUR: 258 if (lastNoteMML) { 259 mmlseq.appendNewEvent(MMLEvent.SLUR_WEAK, 0, lastNoteMML.length); 260 lastNoteMML.length = 0; 261 } 197 262 break; 198 263 case MDXEvent.REPEAT_BEGIN: 199 repeatStac.unshift(simml.appendNewEvent(MMLEvent.REPEAT_BEGIN, e.value)); 200 break; 201 case MDXEvent.FADEOUT: 202 simml.appendNewEvent(eventIDFadeOut, e.value2); 203 break; 204 case MDXEvent.TEMPO: 205 simml.appendNewEvent(MMLEvent.TEMPO, e.value); 206 break; 207 case MDXEvent.VOICE: 208 simml.appendNewEvent(MMLEvent.MOD_PARAM, e.value); 209 break; 210 case MDXEvent.PAN: 211 if (e.value == 0) simml.appendNewEvent(MMLEvent.VOLUME, 0); 212 else { 213 simml.appendNewEvent(MMLEvent.VOLUME, 16); 214 simml.appendNewEvent(eventIDPan, panTable[e.value]); 215 } 216 break; 217 case MDXEvent.VOLUME: 218 if (e.value < 16) simml.appendNewEvent(MMLEvent.FINE_VOLUME, e.value<<4); 219 else simml.appendNewEvent(MMLEvent.FINE_VOLUME, e.value & 127); 220 break; 221 case MDXEvent.GATE: 222 if (e.value < 9) { 223 simml.appendNewEvent(MMLEvent.QUANT_RATIO, e.value); 224 simml.appendNewEvent(MMLEvent.QUANT_COUNT, 0); 225 } else { 226 simml.appendNewEvent(MMLEvent.QUANT_RATIO, 8); 227 simml.appendNewEvent(MMLEvent.QUANT_COUNT, (256-e.value)*10); 228 } 229 break; 230 case MDXEvent.KEY_ON_DELAY: 231 simml.appendNewEvent(MMLEvent.KEY_ON_DELAY, e.value*10); 232 break; 233 case MDXEvent.VOLUME_DEC: 234 simml.appendNewEvent(MMLEvent.VOLUME_SHIFT, -1); 235 break; 236 case MDXEvent.VOLUME_INC: 237 simml.appendNewEvent(MMLEvent.VOLUME_SHIFT, 1); 238 break; 239 case MDXEvent.SLUR: 240 if (lastNote) { 241 simml.appendNewEvent(MMLEvent.SLUR_WEAK, 0, lastNote.length); 242 lastNote.length = 0; 243 } 264 repeatStac.unshift(mmlseq.appendNewEvent(MMLEvent.REPEAT_BEGIN, e.data)); 244 265 break; 245 266 case MDXEvent.REPEAT_BREAK: 246 me = simml.appendNewEvent(MMLEvent.REPEAT_BREAK, 0);267 me = mmlseq.appendNewEvent(MMLEvent.REPEAT_BREAK, 0); 247 268 me.jump = repeatStac[0]; 248 269 break; 249 270 case MDXEvent.REPEAT_END: 250 me = simml.appendNewEvent(MMLEvent.REPEAT_END, 0);271 me = mmlseq.appendNewEvent(MMLEvent.REPEAT_END, 0); 251 272 me.jump = repeatStac.shift(); 252 273 me.jump.jump = me; 253 274 break; 254 275 case MDXEvent.DETUNE: 255 simml.appendNewEvent(eventIDPShift, e.value);276 mmlseq.appendNewEvent(eventIDPShift, e.data); 256 277 break; 257 278 case MDXEvent.PORTAMENT: 258 if (lastNote ) {259 v = lastNote .data + (e.value * lastNote.length + 81920)/163840;279 if (lastNoteMML) { 280 v = lastNoteMML.data + (e.data * (e.clock - lastNoteMDX.clock) + 8192)/16384; 260 281 if (v<0) v=0; 261 282 else if (v>127) v=127; 262 simml.appendNewEvent(MMLEvent.PITCHBEND, 0, lastNote.length);263 lastNote .length = 0;264 simml.appendNewEvent(MMLEvent.NOTE, v, 0);283 mmlseq.appendNewEvent(MMLEvent.PITCHBEND, 0, lastNoteMML.length); 284 lastNoteMML.length = 0; 285 mmlseq.appendNewEvent(MMLEvent.NOTE, v, 0); 265 286 } 266 287 break; 267 288 case MDXEvent.LFO_DELAY: 268 lfoDelay = e. value*75/tempo;289 lfoDelay = e.data*75/owner.bpm; 269 290 break; 270 291 case MDXEvent.PITCH_LFO: 271 v = e.value>>16; 272 simml.appendNewEvent(eventIDLFO, (e.value&0xffff)*75/tempo * ((v&3)?2:1)); 273 simml.appendNewEvent(MMLEvent.PARAMETER, v&3); 274 if (lfoDelay) { 275 simml.appendNewEvent(eventIDPMod, e.value2>>((v&4)?0:8)); 276 simml.appendNewEvent(MMLEvent.PARAMETER, e.value2); 277 simml.appendNewEvent(MMLEvent.PARAMETER, lfoDelay); 292 if (e.data>>24) { 293 if ((e.data>>24) == 0x80) mmlseq.appendNewEvent(eventIDPMod, 0); 294 else _mod(eventIDPMod, mp); 278 295 } else { 279 simml.appendNewEvent(eventIDPMod, e.value2>>((v&4)?0:8)); 296 lfows = (e.data>>16)&3; 297 lfofq = (e.data&0xffff)*75/owner.bpm * ((lfows)?2:1); 298 mp = e.data2>>((e.data&0x40000)?0:8); 299 _mod(eventIDPMod, mp); 280 300 } 281 301 break; 282 302 case MDXEvent.VOLUME_LFO: 283 v = e.value>>16; 284 simml.appendNewEvent(eventIDLFO, (e.value&0xffff)*75/tempo * ((v&3)?2:1)); 285 simml.appendNewEvent(MMLEvent.PARAMETER, v&3); 286 if (lfoDelay) { 287 simml.appendNewEvent(eventIDAMod, 0); 288 simml.appendNewEvent(MMLEvent.PARAMETER, e.value2>>8); 289 simml.appendNewEvent(MMLEvent.PARAMETER, lfoDelay); 303 if (e.data>>24) { 304 if ((e.data>>24) == 0x80) mmlseq.appendNewEvent(eventIDAMod, 0); 305 else _mod(eventIDPMod, ma); 290 306 } else { 291 simml.appendNewEvent(eventIDAMod, e.value2>>8); 307 lfows = (e.data>>16)&3; 308 lfofq = (e.data&0xffff)*75/owner.bpm * ((lfows)?2:1); 309 ma = e.data2>>8; 310 _mod(eventIDAMod, ma); 292 311 } 293 312 break; … … 297 316 } else 298 317 if (channelNumber >= 8) { 299 simml.appendNewEvent(MMLEvent.NOTE, freqTable[e.value], 0);318 adpcmFreq = e.data; 300 319 } 301 320 break; 302 321 case MDXEvent.DATA_END: 303 322 case MDXEvent.SET_PCM8: 323 case MDXEvent.TIMERB: 304 324 break; 305 325 case MDXEvent.SYNC_SEND: … … 310 330 break; 311 331 } 312 313 lastNote = null; 332 } 333 } 334 335 336 function _mod(eventID:int, data:int) : void { 337 mmlseq.appendNewEvent(eventID, lfofq); 338 mmlseq.appendNewEvent(MMLEvent.PARAMETER, lfows); 339 if (lfoDelay) { 340 mmlseq.appendNewEvent(eventID, 0); 341 mmlseq.appendNewEvent(MMLEvent.PARAMETER, data); 342 mmlseq.appendNewEvent(MMLEvent.PARAMETER, lfoDelay); 343 } else { 344 mmlseq.appendNewEvent(eventID, data); 314 345 } 315 346 } as3/SiOPM/trunk/src/org/si/sound/mdx/PDXData.as
r3516 r3530 32 32 { 33 33 adpcmData = new Vector.<ByteArray>(96, true); 34 pcmData = Vector.<Vector.<Number>>(96, true);34 pcmData = new Vector.<Vector.<Number>>(96, true); 35 35 } 36 36 … … 71 71 bytes.position = offset; 72 72 bytes.readBytes(adpcmData[i], 0, length); 73 if (extractAll) pcmData[i] = SiONUtil.extractADPCM(adpcmData[i]); 73 74 } 74 if (extractAll) pcmData[i] = SiONUtil.extractADPCM(adpcmData[i]);75 75 } 76 76

