public static SongPhraseIteration2014[] Parse(Sng2014HSL.PhraseIterationSection piSection) { var piter = new SongPhraseIteration2014[piSection.Count]; for (int i = 0; i < piSection.Count; i++) { var pi = new SongPhraseIteration2014(); pi.PhraseId = piSection.PhraseIterations[i].PhraseId; pi.Time = piSection.PhraseIterations[i].StartTime; pi.Variation = ""; if (!piSection.PhraseIterations[i].Difficulty.SequenceEqual(new Int32[] { 0, 0, 0 })) { pi.HeroLevels = HeroLevel.Parse(piSection.PhraseIterations[i]); } piter[i] = pi; } return(piter); }
public Song2014(Sng2014HSL.Sng sngData, Attributes2014 attr = null) { Version = "7"; CrowdSpeed = "1"; if (attr != null) { // If manifest is passed, fill general song information Title = attr.SongName; Arrangement = ((ArrangementName)attr.ArrangementType).ToString(); Part = (short)attr.SongPartition; Offset = (float)attr.SongOffset; CentOffset = Convert.ToString(attr.CentOffset); SongLength = (float)attr.SongLength; SongNameSort = attr.SongNameSort; AverageTempo = attr.SongAverageTempo; Tuning = attr.Tuning; Capo = Convert.ToByte(attr.CapoFret); ArtistName = attr.ArtistName; ArtistNameSort = attr.ArtistNameSort; AlbumName = attr.AlbumName; AlbumNameSort = attr.AlbumNameSort; AlbumYear = Convert.ToString(attr.SongYear) ?? ""; AlbumArt = attr.AlbumArt; ArrangementProperties = attr.ArrangementProperties; LastConversionDateTime = attr.LastConversionDateTime; ToneBase = attr.Tone_Base; ToneA = attr.Tone_A; ToneB = attr.Tone_B; ToneC = attr.Tone_C; ToneD = attr.Tone_D; } else { Part = sngData.Metadata.Part; SongLength = sngData.Metadata.SongLength; Tuning = new TuningStrings(sngData.Metadata.Tuning); Capo = (byte)((sngData.Metadata.CapoFretId == 0xFF) ? 0x00 : sngData.Metadata.CapoFretId); LastConversionDateTime = sngData.Metadata.LastConversionDateTime.ToNullTerminatedAscii(); } Tones = SongTone2014.Parse(sngData.Tones, attr); if (attr == null) { // Fix tones slots for fake tone names if manifest was not entered foreach (var tone in Tones) { if (tone.Name.EndsWith("_0")) { ToneBase = tone.Name; } if (tone.Name.EndsWith("_1")) { ToneA = ToneBase; ToneB = tone.Name; } if (tone.Name.EndsWith("_2")) { ToneC = tone.Name; } if (tone.Name.EndsWith("_3")) { ToneD = tone.Name; } } } //Sections can be obtained from manifest or sng file (manifest preferred) Sections = (attr != null) ? SongSection.Parse(attr.Sections) : SongSection.Parse(sngData.Sections); //Can be obtained from manifest or sng file (sng preferred) Phrases = SongPhrase.Parse(sngData.Phrases); PhraseIterations = SongPhraseIteration2014.Parse(sngData.PhraseIterations); //Can be obtained from manifest or sng file (combined preferred) ChordTemplates = SongChordTemplate2014.Parse(sngData.Chords); // Only SNG have all ChordTemplates, manifest have only chord templates with name if (attr != null) { SongChordTemplate2014.AddChordIds(ChordTemplates, attr.ChordTemplates); // Only manifest has chordIds } //Only in SNG Ebeats = SongEbeat.Parse(sngData.BPMs); StartBeat = sngData.BPMs.BPMs[0].Time; Events = SongEvent.Parse(sngData.Events); Levels = SongLevel2014.Parse(sngData); //Not used in RS2014 customs at this time. Need to check official files NewLinkedDiff = SongNewLinkedDiff.Parse(sngData.NLD); PhraseProperties = SongPhraseProperty.Parse(sngData.PhraseExtraInfo); LinkedDiffs = new SongLinkedDiff[0]; FretHandMuteTemplates = new SongFretHandMuteTemplate[0]; //ddc TranscriptionTrack = TranscriptionTrack2014.GetDefault(); }
public static SongPhraseIteration2014[] Parse(Sng2014HSL.PhraseIterationSection piSection) { var piter = new SongPhraseIteration2014[piSection.Count]; for (int i = 0; i < piSection.Count; i++) { var pi = new SongPhraseIteration2014(); pi.PhraseId = piSection.PhraseIterations[i].PhraseId; pi.Time = piSection.PhraseIterations[i].StartTime; pi.Variation = ""; if (!piSection.PhraseIterations[i].Difficulty.SequenceEqual(new Int32[] { 0,0,0 })) pi.HeroLevels = HeroLevel.Parse(piSection.PhraseIterations[i]); piter[i] = pi; } return piter; }
public static List<PhraseIterationWithEndTime> listFromBaseArray(SongPhraseIteration2014[] phraseIterations) { List<PhraseIterationWithEndTime> iterationsWithEndTime = new List<PhraseIterationWithEndTime>(); for (int i = 0; i < phraseIterations.Length; i++) { var thisIteration = phraseIterations[i]; if (i < phraseIterations.Length - 1) { var nextIteration = phraseIterations[i + 1]; iterationsWithEndTime.Add(new PhraseIterationWithEndTime(thisIteration, nextIteration.Time)); } else { iterationsWithEndTime.Add(new PhraseIterationWithEndTime(thisIteration, Single.MaxValue)); } } return iterationsWithEndTime; }
public PhraseIterationWithEndTime(SongPhraseIteration2014 _base, float _endTime) { phraseIteration = _base; EndTime = _endTime; }