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}");
        }
Beispiel #2
0
        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);
            }
        }