public DIDXSection ReadDIDXSection(Stream input) { DIDXSection retVar = new DIDXSection(); List <WEMFile> WEMFileList = new List <WEMFile>(); uint SectionSize = input.ReadValueU32(); retVar.SectionSize = SectionSize; long EndOfDIDXSection = input.Position + SectionSize; Console.WriteLine("section='{0}' {1}", "DIDX", SectionSize); long zeroPos = 0L; if (_ZeroWrite) { _Zero.Clear(); } while (input.Position != EndOfDIDXSection) { uint id = input.ReadValueU32(); long offset = input.ReadValueS32(); uint size = input.ReadValueU32(); retVar.ObjCount++; WEMFile tempWEM = new WEMFile(); tempWEM.Num = retVar.ObjCount; tempWEM.Id = id; tempWEM.Offset = offset; tempWEM.Length = size; WEMFileList.Add(tempWEM); if (_ZeroWrite) { if (zeroPos != offset) { int num = (int)retVar.ObjCount - 2; long zero = offset - zeroPos; _Zero.Add(num, zero); //Console.WriteLine("> " + zero); } zeroPos = offset + size; } // Console.WriteLine("[" + tempWEM.Num + "]" + " Position:" + offset + " Size:" + size + " ID:" + tempWEM.Id); } retVar.DIDXFiles = WEMFileList; return(retVar); }
private void ConvertAll(DIDXSection didxSection) { if (InvokeRequired == true) { Invoke((MethodInvoker) delegate { UseWaitCursor = true; }); } string dirExt = Program.ExtractPath(Program.FilePath); string dirType = Path.Combine(dirExt, "MemFile"); string dirBnk = _Description; if (dirBnk.StartsWith("/") == true) { dirBnk = dirBnk.Substring(1); } dirBnk = dirBnk.Replace("/", "\\"); dirBnk = Path.Combine(dirType, Path.GetDirectoryName(dirBnk), Path.GetFileNameWithoutExtension(dirBnk)); if (!Directory.Exists(dirBnk)) { Directory.CreateDirectory(dirBnk); } StringBuilder sb = new StringBuilder(); foreach (WEMFile wem in didxSection.DIDXFiles) { string wemName = wem.Name; string sndFile = ConvertWemToWav(wem, true, 10); if (sndFile != null) { string soundRename = Path.Combine(dirBnk, Path.ChangeExtension(wem.Name, Path.GetExtension(sndFile))); try { if (File.Exists(soundRename)) { File.Delete(soundRename); System.Threading.Thread.Sleep(10); } File.Move(sndFile, Path.Combine(dirBnk, soundRename)); } catch { } } sb.AppendFormat("{0} to {1} {2}\r\n", wemName, Path.GetExtension(sndFile), sndFile != null ? "ok" : "error"); } if (InvokeRequired == true) { Invoke((MethodInvoker) delegate { UseWaitCursor = false; }); } FlexibleMessageBox.Show("Output: " + dirBnk + "\r\n\n" + sb.ToString() + "\r\nCompleted.", "Conversion", MessageBoxButtons.OK); }
public void LoadResourceEntry(ResourceEntry resourceEntry, string description, Endian endian) { var resource = new ResourceFormats.MemFileResource(); using (var data = new MemoryStream(resourceEntry.Data, false)) { resource.Deserialize(resourceEntry.Version, data, endian); } _ResourceEntry = resourceEntry; _Endian = endian; _Description = description; _Resource = resource; // textLog.Clear(); _LastPlaySound = 0; _LastWemPath = ""; _HeaderGeneral = null; _DIDXSection = null; if (_DIDXData != null) { _DIDXData.Close(); _DIDXData = null; } _Section.Clear(); var input = new MemoryStream(resource.Data, false); if (input.ReadValueU32() != 0x44484b42) { Console.WriteLine("Invalid .bnk file"); return; } uint headerSize = input.ReadValueU32(); _HeaderGeneral = input.ReadBytes(headerSize); #if DEBUG string hex = BitConverter.ToString(_HeaderGeneral).Replace("-", ""); Console.WriteLine("header=" + hex); #endif while (input.Position != input.Length) { uint section = input.ReadValueU32(); if (section == 0x58444944) // DIDX { _DIDXSection = ReadDIDXSection(input); } else if (section == 0x41544144) // DATA { uint SectionSize = input.ReadValueU32();; _DIDXData = new FileStream(_PathCache, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite); _DIDXData.WriteFromStream(input, SectionSize); _DIDXData.Seek(0L, SeekOrigin.Begin); Console.WriteLine("section='{0}' {1}", "DATA", SectionSize); } else if (section == 0x43524948) // HIRC { #if _DEBUG var posBegin = input.Position; #endif uint SectionSize = input.ReadValueU32(); _Section.Add(section, input.ReadBytes(SectionSize)); Console.WriteLine("section='{0}' {1}", "HIRC", SectionSize); #if _DEBUG var posEnd = input.Position; input.Seek(posBegin, SeekOrigin.Begin); var pHIRCSection = ReadHIRCSection(input); input.Seek(posEnd, SeekOrigin.Begin); #endif } else { uint SectionSize = input.ReadValueU32(); byte[] buffer = input.ReadBytes(SectionSize); _Section.Add(section, buffer); string name = Encoding.ASCII.GetString(BitConverter.GetBytes(section)); Console.WriteLine("section='{0}' {1}", name, SectionSize); } } BuildEntryTree(); input.Close(); }