public XactClip(SoundEffect effect) { EventPlayWave evt = new EventPlayWave(); evt.wave = effect; events = new ClipEvent[1]; events[0] = evt; events[0].clip = this; }
public XactClip(SoundBank soundBank, BinaryReader clipReader, uint clipOffset) { long oldPosition = clipReader.BaseStream.Position; clipReader.BaseStream.Seek(clipOffset, SeekOrigin.Begin); byte numEvents = clipReader.ReadByte(); events = new ClipEvent[numEvents]; for (int i = 0; i < numEvents; i++) { uint eventInfo = clipReader.ReadUInt32(); uint eventId = eventInfo & 0x1F; switch (eventId) { case 1: EventPlayWave evnt = new EventPlayWave(); clipReader.ReadUInt32(); //unkn uint trackIndex = clipReader.ReadUInt16(); byte waveBankIndex = clipReader.ReadByte(); var loopCount = clipReader.ReadByte(); // if loopCount == 255 its an infinite loop // otherwise it loops n times.. // unknown clipReader.ReadUInt16(); clipReader.ReadUInt16(); evnt.wave = soundBank.GetWave(waveBankIndex, trackIndex); evnt.wave.IsLooped = loopCount == 255; events[i] = evnt; break; default: throw new NotSupportedException(); } events[i].clip = this; } clipReader.BaseStream.Seek(oldPosition, SeekOrigin.Begin); }
public XactClip(SoundBank soundBank, BinaryReader clipReader, uint clipOffset) { long oldPosition = clipReader.BaseStream.Position; clipReader.BaseStream.Seek(clipOffset, SeekOrigin.Begin); byte numEvents = clipReader.ReadByte(); events = new ClipEvent[numEvents]; for (int i = 0; i < numEvents; i++) { uint eventInfo = clipReader.ReadUInt32(); uint eventId = eventInfo & 0x1F; switch (eventId) { case 1: EventPlayWave evnt = new EventPlayWave(); clipReader.ReadUInt32(); //unkn uint trackIndex = clipReader.ReadUInt16(); byte waveBankIndex = clipReader.ReadByte(); //unkn clipReader.ReadByte(); clipReader.ReadUInt16(); clipReader.ReadUInt16(); evnt.wave = soundBank.GetWave(waveBankIndex, trackIndex); events[i] = evnt; break; default: throw new NotImplementedException(); } events[i].clip = this; } clipReader.BaseStream.Seek(oldPosition, SeekOrigin.Begin); }
public XactClip (SoundBank soundBank, BinaryReader clipReader, uint clipOffset) { long oldPosition = clipReader.BaseStream.Position; clipReader.BaseStream.Seek (clipOffset, SeekOrigin.Begin); byte numEvents = clipReader.ReadByte(); events = new ClipEvent[numEvents]; for (int i=0; i<numEvents; i++) { uint eventInfo = clipReader.ReadUInt32(); uint eventId = eventInfo & 0x1F; switch (eventId) { case 1: EventPlayWave evnt = new EventPlayWave(); clipReader.ReadUInt32 (); //unkn uint trackIndex = clipReader.ReadUInt16 (); byte waveBankIndex = clipReader.ReadByte (); var loopCount = clipReader.ReadByte (); // if loopCount == 255 its an infinite loop // otherwise it loops n times.. // unknown clipReader.ReadUInt16 (); clipReader.ReadUInt16 (); evnt.wave = soundBank.GetWave(waveBankIndex, trackIndex); evnt.wave.IsLooped = loopCount == 255; events[i] = evnt; break; default: throw new NotImplementedException(); } events[i].clip = this; } clipReader.BaseStream.Seek (oldPosition, SeekOrigin.Begin); }
public XactClip(SoundBank soundBank, BinaryReader clipReader, uint clipOffset) { long oldPosition = clipReader.BaseStream.Position; clipReader.BaseStream.Seek(clipOffset, SeekOrigin.Begin); byte numEvents = clipReader.ReadByte(); events = new ClipEvent[numEvents]; for (int i = 0; i < numEvents; i++) { uint eventInfo = clipReader.ReadUInt32(); uint eventId = eventInfo & 0x1F; switch (eventId) { case 0: // FIXME: SetVolumeEventInfo -flibit EventSetVolume volEvnt = new EventSetVolume(); events[i] = volEvnt; break; case 1: case 4: EventPlayWave evnt = new EventPlayWave(); clipReader.ReadUInt32(); //unkn uint trackIndex = clipReader.ReadUInt16(); byte waveBankIndex = clipReader.ReadByte(); var loopCount = clipReader.ReadByte(); // if loopCount == 255 its an infinite loop // otherwise it loops n times.. // unknown clipReader.ReadUInt16(); clipReader.ReadUInt16(); evnt.wave = soundBank.GetWave(waveBankIndex, trackIndex); evnt.IsLooped = loopCount == 255; events[i] = evnt; break; case 3: case 8: // FIXME: lolwuta // FIXME: WavePlayVariationEventInfo -flibit EventWavePlayVariation playVarEvt = new EventWavePlayVariation(); events[i] = playVarEvt; break; case 6: EventPlayMultiWave evt = new EventPlayMultiWave(); // A whole bunch of shit nobody cares about clipReader.ReadBytes(33); // u16 0 0 // u8 255 255 // u32 12 12 // u16 0 0 // u8 156 123 // u8 255 254 // u16 100 215 // u8 151 151 // u16 180 214 // u8 0 // u8 122 // u16 68 // u8 0 // u8 122 // u16 68 // u8 0 // u8 240 // u16 65 // u8 0 // u8 240 // u16 65 // u8 32 16 ushort numEntries = clipReader.ReadUInt16(); evt.waves = new SoundEffect[numEntries]; clipReader.ReadUInt16(); // 3 clipReader.ReadBytes(4); // 255 each for (ushort j = 0; j < numEntries; j++) { ushort index = clipReader.ReadUInt16(); byte wavebank = clipReader.ReadByte(); byte minWeight = clipReader.ReadByte(); byte weight = clipReader.ReadByte(); evt.waves[j] = soundBank.GetWave(wavebank, index); } events[i] = evt; break; default: throw new NotImplementedException("eventInfo & 0x1F = " + eventId); } events[i].clip = this; } clipReader.BaseStream.Seek(oldPosition, SeekOrigin.Begin); }