Пример #1
0
        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();
                }
            }
        }
Пример #2
0
        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);
        }