/// <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); }
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(); }