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