コード例 #1
0
        public static void ExportToAudicaFile(AudicaFile audicaFile)
        {
            if (!File.Exists(audicaFile.filepath))
            {
                Debug.Log("Save file is gone... :(");
                return;
            }

            Encoding encoding = Encoding.GetEncoding(437);

            using (var archive = ZipArchive.Open(audicaFile.filepath)) {
                HandleCache.CheckCacheFolderValid();
                HandleCache.CheckSaveFolderValid();

                bool expert = false, advanced = false, standard = false, easy = false;
                //Write the cues files to disk so we can add them to the audica file.
                if (audicaFile.diffs.expert.cues != null)
                {
                    File.WriteAllText($"{Application.dataPath}/.cache/expert-new.cues", CuesToJson(audicaFile.diffs.expert));
                    expert = true;
                }
                if (audicaFile.diffs.advanced.cues != null)
                {
                    File.WriteAllText($"{Application.dataPath}/.cache/advanced-new.cues", CuesToJson(audicaFile.diffs.advanced));
                    advanced = true;
                }
                if (audicaFile.diffs.moderate.cues != null)
                {
                    File.WriteAllText($"{Application.dataPath}/.cache/moderate-new.cues", CuesToJson(audicaFile.diffs.moderate));
                    standard = true;
                }
                if (audicaFile.diffs.beginner.cues != null)
                {
                    File.WriteAllText($"{Application.dataPath}/.cache/beginner-new.cues", CuesToJson(audicaFile.diffs.beginner));
                    easy = true;
                }

                File.WriteAllText($"{Application.dataPath}/.cache/song-new.desc", JsonUtility.ToJson(audicaFile.desc));

                var      workFolder = Path.Combine(Application.streamingAssetsPath, "Ogg2Audica");
                MidiFile songMidi   = new MidiFile(Path.Combine(workFolder, "songtemplate.mid"));

                MidiEventCollection events = new MidiEventCollection(0, (int)Constants.PulsesPerQuarterNote);
                foreach (var tempo in audicaFile.desc.tempoList)
                {
                    events.AddEvent(new TempoEvent((int)tempo.microsecondsPerQuarterNote, (long)tempo.time.tick), 0);
                    events.AddEvent(new TimeSignatureEvent((long)tempo.time.tick, (int)tempo.timeSignature.Numerator, (int)TimeSignature.GetMIDIDenominator(tempo.timeSignature.Denominator), 0, 8), 0);
                }

                events.PrepareForExport();
                MidiFile.Export(Path.Combine(workFolder, $"{Application.dataPath}/.cache/song.mid"), events);

                //Remove any files we'll be replacing
                foreach (ZipArchiveEntry entry in archive.Entries)
                {
                    if (entry.ToString() == "expert.cues")
                    {
                        archive.RemoveEntry(entry);
                    }
                    else if (entry.ToString() == "song.desc")
                    {
                        archive.RemoveEntry(entry);
                    }
                    else if (entry.ToString() == "song.mid")
                    {
                        archive.RemoveEntry(entry);
                    }
                    else if (entry.ToString() == "advanced.cues")
                    {
                        archive.RemoveEntry(entry);
                    }
                    else if (entry.ToString() == "moderate.cues")
                    {
                        archive.RemoveEntry(entry);
                    }
                    else if (entry.ToString() == "beginner.cues")
                    {
                        archive.RemoveEntry(entry);
                    }
                }
                if (expert)
                {
                    archive.AddEntry("expert.cues", $"{Application.dataPath}/.cache/expert-new.cues");
                }
                if (advanced)
                {
                    archive.AddEntry("advanced.cues", $"{Application.dataPath}/.cache/advanced-new.cues");
                }
                if (standard)
                {
                    archive.AddEntry("moderate.cues", $"{Application.dataPath}/.cache/moderate-new.cues");
                }
                if (easy)
                {
                    archive.AddEntry("beginner.cues", $"{Application.dataPath}/.cache/beginner-new.cues");
                }

                archive.AddEntry("song.desc", $"{Application.dataPath}/.cache/song-new.desc");
                archive.AddEntry("song.mid", $"{Application.dataPath}/.cache/song.mid");
                archive.SaveTo(audicaFile.filepath + ".temp", SharpCompress.Common.CompressionType.None);
                archive.Dispose();
            }
            File.Delete(audicaFile.filepath);
            File.Move(audicaFile.filepath + ".temp", audicaFile.filepath);


            Debug.Log("Export finished.");
        }
コード例 #2
0
        public static void ExportToAudicaFile(AudicaFile audicaFile, bool autoSave)
        {
            if (!File.Exists(audicaFile.filepath))
            {
                Debug.Log("Save file is gone... :(");
                return;
            }

            Encoding encoding     = Encoding.GetEncoding(437);
            string   targetPath   = audicaFile.filepath;
            string   autoSavePath = "";

            using (var archive = ZipArchive.Open(audicaFile.filepath)) {
                HandleCache.CheckCacheFolderValid();
                HandleCache.CheckSaveFolderValid();

                bool expert = false, advanced = false, standard = false, easy = false, modifiers = false;
                //Write the cues files to disk so we can add them to the audica file.
                if (audicaFile.diffs.expert.cues != null)
                {
                    File.WriteAllText($"{Application.dataPath}/.cache/expert-new.cues", CuesToJson(audicaFile.diffs.expert));
                    expert = true;
                }
                if (audicaFile.diffs.advanced.cues != null)
                {
                    File.WriteAllText($"{Application.dataPath}/.cache/advanced-new.cues", CuesToJson(audicaFile.diffs.advanced));
                    advanced = true;
                }
                if (audicaFile.diffs.moderate.cues != null)
                {
                    File.WriteAllText($"{Application.dataPath}/.cache/moderate-new.cues", CuesToJson(audicaFile.diffs.moderate));
                    standard = true;
                }
                if (audicaFile.diffs.beginner.cues != null)
                {
                    File.WriteAllText($"{Application.dataPath}/.cache/beginner-new.cues", CuesToJson(audicaFile.diffs.beginner));
                    easy = true;
                }
                audicaFile.modifiers           = new ModifierList();
                audicaFile.modifiers.modifiers = ModifierHandler.Instance.MapToDTO();
                if (audicaFile.modifiers.modifiers.Count > 0)
                {
                    File.WriteAllText($"{Application.dataPath}/.cache/modifiers-new.json", ModifiersToJson2(audicaFile.modifiers));
                    modifiers = true;
                }

                File.WriteAllText($"{Application.dataPath}/.cache/{audicaFile.desc.moggSong}", audicaFile.mainMoggSong.ExportToText());
                File.WriteAllText($"{Application.dataPath}/.cache/song-new.desc", Newtonsoft.Json.JsonConvert.SerializeObject(audicaFile.desc, Formatting.Indented));

                var      workFolder = Path.Combine(Application.streamingAssetsPath, "Ogg2Audica");
                MidiFile songMidi   = new MidiFile(Path.Combine(workFolder, "songtemplate.mid"));

                MidiEventCollection events = new MidiEventCollection(0, (int)Constants.PulsesPerQuarterNote);
                foreach (var tempo in audicaFile.desc.tempoList)
                {
                    events.AddEvent(new TempoEvent((int)tempo.microsecondsPerQuarterNote, (long)tempo.time.tick), 0);
                    events.AddEvent(new TimeSignatureEvent((long)tempo.time.tick, (int)tempo.timeSignature.Numerator, (int)TimeSignature.GetMIDIDenominator(tempo.timeSignature.Denominator), 0, 8), 0);
                }

                events.PrepareForExport();
                MidiFile.Export(Path.Combine(workFolder, $"{Application.dataPath}/.cache/song.mid"), events);


                //Remove any files we'll be replacing
                foreach (ZipArchiveEntry entry in archive.Entries)
                {
                    if (entry.ToString() == "expert.cues")
                    {
                        archive.RemoveEntry(entry);
                    }
                    else if (entry.ToString() == "song.desc")
                    {
                        archive.RemoveEntry(entry);
                    }
                    else if (entry.ToString() == audicaFile.desc.moggSong)
                    {
                        archive.RemoveEntry(entry);
                    }
                    else if (entry.ToString() == "song.mid")
                    {
                        archive.RemoveEntry(entry);
                    }
                    else if (entry.ToString() == "song.png")
                    {
                        archive.RemoveEntry(entry);
                    }
                    else if (entry.ToString() == "advanced.cues")
                    {
                        archive.RemoveEntry(entry);
                    }
                    else if (entry.ToString() == "moderate.cues")
                    {
                        archive.RemoveEntry(entry);
                    }
                    else if (entry.ToString() == "beginner.cues")
                    {
                        archive.RemoveEntry(entry);
                    }
                    else if (entry.ToString() == "modifiers.json")
                    {
                        archive.RemoveEntry(entry);
                    }
                }
                if (expert)
                {
                    archive.AddEntry("expert.cues", $"{Application.dataPath}/.cache/expert-new.cues");
                }
                if (advanced)
                {
                    archive.AddEntry("advanced.cues", $"{Application.dataPath}/.cache/advanced-new.cues");
                }
                if (standard)
                {
                    archive.AddEntry("moderate.cues", $"{Application.dataPath}/.cache/moderate-new.cues");
                }
                if (easy)
                {
                    archive.AddEntry("beginner.cues", $"{Application.dataPath}/.cache/beginner-new.cues");
                }
                if (modifiers)
                {
                    archive.AddEntry("modifiers.json", $"{Application.dataPath}/.cache/modifiers-new.json");
                }



                if (autoSave)
                {
                    int    pos       = audicaFile.filepath.LastIndexOf(@"\") + 1;
                    string fileName  = audicaFile.filepath.Substring(pos, audicaFile.filepath.Length - pos);
                    string shortName = fileName.Substring(0, fileName.LastIndexOf(@"."));
                    shortName    = shortName.Replace(" ", "");
                    targetPath   = $"{Application.dataPath}/autosaves/{shortName}/";
                    autoSavePath = targetPath;
                    targetPath  += DateTime.Now.ToString("MM-dd_h-mm-ss_");
                    targetPath  += fileName;
                    if (!Directory.Exists($"{Application.dataPath}/autosaves/"))
                    {
                        Directory.CreateDirectory($"{Application.dataPath}/autosaves/");
                    }
                    if (!Directory.Exists($"{Application.dataPath}/autosaves/{shortName}/"))
                    {
                        Directory.CreateDirectory($"{Application.dataPath}/autosaves/{shortName}/");
                    }
                }
                archive.AddEntry($"{audicaFile.desc.moggSong}", $"{Application.dataPath}/.cache/{audicaFile.desc.moggSong}");
                archive.AddEntry("song.desc", $"{Application.dataPath}/.cache/song-new.desc");
                archive.AddEntry("song.mid", $"{Application.dataPath}/.cache/song.mid");
                if (File.Exists($"{Application.dataPath}/.cache/song.png"))
                {
                    archive.AddEntry("song.png", $"{Application.dataPath}/.cache/song.png");
                }
                archive.SaveTo(audicaFile.filepath + ".temp", SharpCompress.Common.CompressionType.None);
                archive.Dispose();
            }
            File.Delete($"{Application.dataPath}/.cache/{audicaFile.desc.moggSong}");

            if (!autoSave)
            {
                File.Delete(audicaFile.filepath);
            }

            File.Move(audicaFile.filepath + ".temp", targetPath);


            if (autoSave)
            {
                NRSettings.autosavePath = autoSavePath;
            }
            Debug.Log("Export finished.");
        }