public OpusTools(Archive soundbanks, string modFolder, string rawFolder, bool useMod = false) //audio_2_soundbanks.archive { _soundBanks = soundbanks; _modFolder = new DirectoryInfo(modFolder); _rawFolder = new DirectoryInfo(rawFolder); _isModded = useMod; if (!Directory.Exists(Path.Combine(_modFolder.FullName, "base\\sound\\soundbanks"))) { Directory.CreateDirectory(Path.Combine(_modFolder.FullName, "base\\sound\\soundbanks")); } if (!Directory.Exists(_rawFolder.FullName)) { Directory.CreateDirectory(_rawFolder.FullName); } if (_isModded) { var infoFile = Path.Combine(_modFolder.FullName, "base\\sound\\soundbanks\\sfx_container.opusinfo"); if (File.Exists(infoFile)) { var ms = new MemoryStream(File.ReadAllBytes(infoFile)); var br = new BinaryReader(ms); ms.Position = 0; if (BitConverter.ToString(br.ReadBytes(3)) != "53-4E-44") { _isModded = false; } else { Info = new OpusInfo(ms); } } else { _isModded = false; } } if (!_isModded) { var hash = FNV1A64HashAlgorithm.HashString("base\\sound\\soundbanks\\sfx_container.opusinfo"); var ms = new MemoryStream(); if (_soundBanks.Files.ContainsKey(hash)) { ModTools.ExtractSingleToStream(_soundBanks, hash, ms); Info = new OpusInfo(ms); } else { Info = new OpusInfo(); } } }
public static void Parse(FileInfo opusinfofile, DirectoryInfo paksdir, DirectoryInfo outdir) { FileStream fs = new FileStream(opusinfofile.FullName, FileMode.Open, FileAccess.Read); OpusInfo info = new OpusInfo(fs); string[] files = Directory.GetFiles(paksdir.FullName, "*.opuspak").OrderBy(f => Convert.ToUInt32(f.Replace(".opuspak", string.Empty).Substring(f.LastIndexOf('_') + 1))).ToArray(); Stream[] paks = new Stream[files.Length]; for (int i = 0; i < files.Length; i++) { paks[i] = new FileStream(files[i], FileMode.Open, FileAccess.Read); } info.WriteAllOpusFromPaks(paks, outdir); }