Beispiel #1
0
        public XactClip(SoundEffect effect)
        {
            EventPlayWave evt = new EventPlayWave();

            evt.wave       = effect;
            events         = new ClipEvent[1];
            events[0]      = evt;
            events[0].clip = this;
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
		}
Beispiel #5
0
        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);
        }