Пример #1
0
        /// <summary>
        /// Unpack\modify\load wwise template.
        /// </summary>
        /// <returns>Modified wwise template directory.</returns>
        /// <param name="sourcePath">Source path.</param>
        /// <param name="audioQuality">Audio quality (-2 to 10).</param>
        public static string LoadWwiseTemplate(string sourcePath, int audioQuality)
        {
            // TODO: add Wwise template validation to ExternalApps
            var templateDir = Path.Combine(ExternalApps.TOOLKIT_ROOT, "Template");

            // Unpack required template here, based on Wwise version installed.
            switch (Selected)
            {
            // add legacy support for RS1 CDLC here
            case OggFile.WwiseVersion.Wwise2010:
            // add support for new versions of Wwise for RS2014 here
            case OggFile.WwiseVersion.Wwise2013:
            case OggFile.WwiseVersion.Wwise2014:
            case OggFile.WwiseVersion.Wwise2015:
            case OggFile.WwiseVersion.Wwise2016:
            case OggFile.WwiseVersion.Wwise2017:
                // for fewer headaches ... start with fresh Wwise 2010 Template
                if (Directory.Exists(templateDir) && Selected == OggFile.WwiseVersion.Wwise2010)
                {
                    IOExtension.DeleteDirectory(templateDir, true);
                }

                ExtractTemplate(Path.Combine(ExternalApps.TOOLKIT_ROOT, Selected + ".tar.bz2"));
                break;

            default:
                throw new FileNotFoundException("<ERROR> Wwise path is incompatible." + Environment.NewLine);
            }

            var workUnitPath = Path.Combine(templateDir, "Interactive Music Hierarchy", "Default Work Unit.wwu");

            using (var sr = new StreamReader(File.OpenRead(workUnitPath)))
            {
                var workUnit = sr.ReadToEnd();
                sr.Close();
                workUnit = workUnit.Replace("%QF1%", Convert.ToString(audioQuality));

                if (Selected != OggFile.WwiseVersion.Wwise2010)
                {
                    workUnit = workUnit.Replace("%QF2%", "4"); //preview audio
                }
                var tw = new StreamWriter(workUnitPath, false);
                tw.Write(workUnit);
                tw.Flush();
            }

            // use IOExtensions here for better control
            // deleting GeneratedSoundBanks gives new hex value to wem/ogg files
            var bnk = Path.Combine(templateDir, "GeneratedSoundBanks");

            if (Directory.Exists(bnk))
            {
                IOExtension.DeleteDirectory(bnk, true);
            }

            var orgSfxDir = Path.Combine(templateDir, "Originals", "SFX");

            if (Directory.Exists(Path.Combine(templateDir, "Originals")))
            {
                IOExtension.DeleteDirectory(Path.Combine(templateDir, "Originals"), true);
            }
            IOExtension.MakeDirectory(orgSfxDir);

            var cacheWinSfxDir = Path.Combine(templateDir, ".cache", "Windows", "SFX");

            if (Directory.Exists(Path.Combine(templateDir, ".cache")))
            {
                IOExtension.DeleteDirectory(Path.Combine(templateDir, ".cache"), true);
            }
            IOExtension.MakeDirectory(cacheWinSfxDir);

            var vcache = Directory.EnumerateFiles(templateDir, "Template.*.validationcache").FirstOrDefault();

            if (File.Exists(vcache))
            {
                IOExtension.DeleteFile(vcache);
            }

            if (Selected != OggFile.WwiseVersion.Wwise2010)
            {
                var dirName           = Path.GetDirectoryName(sourcePath);
                var fileName          = Path.GetFileNameWithoutExtension(sourcePath);
                var dirFileName       = Path.Combine(dirName, fileName);
                var sourcePreviewWave = String.Format("{0}_{1}.wav", dirFileName, "preview");
                IOExtension.CopyFile(sourcePreviewWave, Path.Combine(orgSfxDir, "Audio_preview.wav"), true, false);
            }

            IOExtension.CopyFile(sourcePath, Path.Combine(orgSfxDir, "Audio.wav"), true, false);

            return(templateDir);
        }