public void EditAudioFile(uint fileID, byte[] newData) { DIDXSection dataIndex = (DIDXSection)this.GetSection("DIDX"); DATASection data = (DATASection)this.GetSection("DATA"); if (dataIndex != null && data != null) { uint lastOffset = 0; for (int i = 0; i < dataIndex.embeddedWEMFiles.Count; i++) { dataIndex.embeddedWEMFiles[i].offset = lastOffset; if (dataIndex.embeddedWEMFiles[i].ID == fileID) { dataIndex.embeddedWEMFiles[i].length = (uint)newData.Length; } lastOffset += dataIndex.embeddedWEMFiles[i].length + 10; } for (int i = 0; i < data.wemFiles.Count; i++) { if (data.wemFiles[i].info.ID == fileID) { data.wemFiles[i].data = newData; } } HIRCSection hirc = (HIRCSection)this.GetSection("HIRC"); if (hirc != null) { foreach (WwiseObject obj in hirc.objects) { if (obj.objectType == WwiseObjectType.Sound_SFX__Sound_Voice) { SoundSFXVoiceWwiseObject soundObj = (SoundSFXVoiceWwiseObject)obj; DIDXSection.EmbeddedWEM gotEmbedded = dataIndex.GetEmbeddedWEM(soundObj.audioFileID); if (gotEmbedded != null) { soundObj.fileOffset = (uint)data.dataStartOffset + gotEmbedded.offset; soundObj.fileLength = gotEmbedded.length; } } } } } WPKSoundBank wpkBank = this.GetWPKBank(); if (wpkBank != null) { foreach (WPKSoundBank.WPKSoundBankWEMFile wemFile in wpkBank.wemFiles) { if (wemFile.ID == fileID) { wemFile.data = newData; } } } }
public WEMFile(BinaryReader br, long DATASectionOffset, DIDXSection.EmbeddedWEM info) { this.info = info; br.BaseStream.Seek(DATASectionOffset + info.offset, SeekOrigin.Begin); this.data = br.ReadBytes((int)info.length); }