private void WriteProjectFile(AAudioBinaryFile file, string outputFolder) { var config = new JsonSerializerSettings(); config.NullValueHandling = NullValueHandling.Ignore; var projectSettings = new AudioRebuilderProjectSettings() { UseWavFilesIfAvailable = true, AdditionalOutputFolders = new string[0], }; if (file is MusicAudioBinaryFile mabf) { config.NullValueHandling = NullValueHandling.Include; List <MusicTrackFixObject> originals = new List <MusicTrackFixObject>(); foreach (var entry in mabf.Entries) { foreach (var slice in entry.Slices) { var fixObject = new MusicTrackFixObject() { MusicIndex = entry.Index, SliceIndex = slice.Index, MaterialsUsed = slice.Layers.Select(x => (uint)x.MaterialIndex).ToArray(), LoopStartSample = slice.LoopStart, LoopEndSample = slice.LoopEnd, EntrySample = slice.EntryPointsSample, ExitSample = slice.ExitPointsSample }; originals.Add(fixObject); } } projectSettings.Overrides = new MusicTrackFixObject[0]; projectSettings.Originals = originals.ToArray(); } var projectFilePath = Path.Combine(outputFolder, AudioRebuilderService.RebuildSettingsFileName); string projectSettingsText = JsonConvert.SerializeObject(projectSettings, Formatting.Indented, config); File.WriteAllText(projectFilePath, projectSettingsText); Logger.Log($"Created project settings at: {projectFilePath}"); }
private void TryFixingMusicSlices(AudioRebuilderProjectSettings settings, AAudioBinaryFile file, byte[] fileBytes) { if (!(file is MusicAudioBinaryFile mab)) { return; } foreach (var fix in settings.Overrides ?? new MusicTrackFixObject[0]) { var music = mab.Entries[fix.MusicIndex]; var slice = music.Slices[fix.SliceIndex]; var fixInfo = new MusicSliceFixer() { FileBytes = fileBytes, LoopStartSample = fix.LoopStartSample, LoopEndSample = fix.LoopEndSample, EntrySample = fix.EntrySample, ExitSample = fix.ExitSample }; slice.RunFixes(fixInfo); } }