private static void GenerateSongPsarcRS1(Stream output, DLCPackageData info, Platform platform) { var soundBankName = String.Format("Song_{0}", info.Name); try { Stream albumArtStream = null, audioStream = null; string albumArtPath; if (File.Exists(info.AlbumArtPath)) { albumArtPath = info.AlbumArtPath; } else { using (var defaultArtStream = new MemoryStream(Resources.albumart)) { albumArtPath = GeneralExtensions.GetTempFileName(".dds"); defaultArtStream.WriteFile(albumArtPath); defaultArtStream.Dispose(); TMPFILES_ART.Add(albumArtPath); } } var ddsfiles = info.ArtFiles; if (ddsfiles == null) { ddsfiles = new List<DDSConvertedFile>(); ddsfiles.Add(new DDSConvertedFile() { sizeX = 512, sizeY = 512, sourceFile = albumArtPath, destinationFile = GeneralExtensions.GetTempFileName(".dds") }); ToDDS(ddsfiles); // Save for reuse info.ArtFiles = ddsfiles; } albumArtStream = new FileStream(ddsfiles[0].destinationFile, FileMode.Open, FileAccess.Read, FileShare.Read); // AUDIO var audioFile = info.OggPath; if (File.Exists(audioFile)) if (platform.IsConsole != audioFile.GetAudioPlatform().IsConsole) audioStream = OggFile.ConvertAudioPlatform(audioFile); else audioStream = File.OpenRead(audioFile); else throw new InvalidOperationException(String.Format("Audio file '{0}' not found.", audioFile)); using (var aggregateGraphStream = new MemoryStream()) using (var manifestStream = new MemoryStream()) using (var xblockStream = new MemoryStream()) using (var soundbankStream = new MemoryStream()) using (var packageIdStream = new MemoryStream()) using (var soundStream = OggFile.ConvertOgg(audioStream)) using (var arrangementFiles = new DisposableCollection<Stream>()) { var manifestBuilder = new ManifestBuilder { AggregateGraph = new AggregateGraph.AggregateGraph { SoundBank = new SoundBank { File = soundBankName + ".bnk" }, AlbumArt = new AlbumArt { File = info.AlbumArtPath } } }; foreach (var x in info.Arrangements) { //Generate sng file in execution time GenerateSNG(x, platform); manifestBuilder.AggregateGraph.SongFiles.Add(x.SongFile); manifestBuilder.AggregateGraph.SongXMLs.Add(x.SongXml); } manifestBuilder.AggregateGraph.XBlock = new XBlockFile { File = info.Name + ".xblock" }; manifestBuilder.AggregateGraph.Write(info.Name, platform.GetPathName(), platform, aggregateGraphStream); aggregateGraphStream.Flush(); aggregateGraphStream.Seek(0, SeekOrigin.Begin); { var manifestData = manifestBuilder.GenerateManifest(info.Name, info.Arrangements, info.SongInfo, platform); var writer = new StreamWriter(manifestStream); writer.Write(manifestData); writer.Flush(); manifestStream.Seek(0, SeekOrigin.Begin); } GameXblock<Entity>.Generate(info.Name, manifestBuilder.Manifest, manifestBuilder.AggregateGraph, xblockStream); xblockStream.Flush(); xblockStream.Seek(0, SeekOrigin.Begin); var soundFileName = SoundBankGenerator.GenerateSoundBank(info.Name, soundStream, soundbankStream, info.Volume, platform); soundbankStream.Flush(); soundbankStream.Seek(0, SeekOrigin.Begin); GenerateSongPackageId(packageIdStream, info.Name); var songPsarc = new PSARC.PSARC(); songPsarc.AddEntry("PACKAGE_ID", packageIdStream); songPsarc.AddEntry("AggregateGraph.nt", aggregateGraphStream); songPsarc.AddEntry("Manifests/songs.manifest.json", manifestStream); songPsarc.AddEntry(String.Format("Exports/Songs/{0}.xblock", info.Name), xblockStream); songPsarc.AddEntry(String.Format("Audio/{0}/{1}.bnk", platform.GetPathName()[0], soundBankName), soundbankStream); songPsarc.AddEntry(String.Format("Audio/{0}/{1}.ogg", platform.GetPathName()[0], soundFileName), soundStream); songPsarc.AddEntry(String.Format("GRAssets/AlbumArt/{0}.dds", manifestBuilder.AggregateGraph.AlbumArt.Name), albumArtStream); foreach (var x in info.Arrangements) { var xmlFile = File.OpenRead(x.SongXml.File); arrangementFiles.Add(xmlFile); var sngFile = File.OpenRead(x.SongFile.File); arrangementFiles.Add(sngFile); songPsarc.AddEntry(String.Format("GR/Behaviors/Songs/{0}.xml", Path.GetFileNameWithoutExtension(x.SongXml.File)), xmlFile); songPsarc.AddEntry(String.Format("GRExports/{0}/{1}.sng", platform.GetPathName()[1], Path.GetFileNameWithoutExtension(x.SongFile.File)), sngFile); } songPsarc.Write(output, false); output.Flush(); output.Seek(0, SeekOrigin.Begin); } } finally { } }