/// <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);
        }
Exemple #2
0
 private void btn_run_Click(object sender, EventArgs e)
 {
     new Thread(() =>
     {
         try
         {
             setEnable(false);
             _setlog("源文件夹:" + tb_s.Text);
             _setlog("目标文件夹:" + tb_t.Text);
             var allfile = IOExtension.GetAllFiles(tb_s.Text);
             if (allfile == null || allfile.Count == 0)
             {
                 _setlog("源文件夹为空....,请重新选择");
                 setEnable(true);
                 return;
             }
             var allfilet = IOExtension.GetAllFiles(tb_t.Text);
             if (allfilet != null && allfilet.Count != 0)
             {
                 _setlog("目标文件夹必须为空....,请重新选择");
                 setEnable(true);
                 return;
             }
             _setlog($"获取到文件{allfile.Count}个,共计大小{ IOExtension.CountSize(allfile.Sum(a => a.Length)) }");
             _setlog("清除目标路径");
             IOExtension.DeleteFile(tb_t.Text);
             _setlog("开始复制文件");
             int i = copy(tb_s.Text.Trim(), tb_t.Text.Trim());
             if (i != 0)
             {
                 if (i == 1223)
                 {
                     IOExtension.DeleteFile(tb_t.Text);
                     _setlog("用户取消,删除目标文件夹文件");
                 }
                 else
                 {
                     _setlog(ShellFileOperation.GetErrorString(i));
                 }
                 setEnable(true);
                 return;
             }
             _setlog("复制完成,删除原始文件");
             IOExtension.DeleteFile(tb_s.Text);
             _setlog("开始设置目录");
             RunCmd cmd  = new RunCmd();
             cmd.Output += (str) =>
             {
                 if (str == "c:\\>")
                 {
                     _setlog($"完成,请通过\"{tb_s.Text}\"检查文件是否存在");
                     setEnable(true);
                 }
             };
             cmd.Run($"mklink /j \"{tb_s.Text}\" \"{tb_t.Text}\"");
         }
         catch (Exception ex)
         {
             _setlog(ex.Message);
             setEnable(true);
         }
     }).Start();
 }