TimeSpan GetChord(List <ABCNote> chordNotes) { if (chordNotes.Count <= 0) { return(TimeSpan.Zero); } TimeSpan timeSpan = TimeSpan.MaxValue; for (int index = chordNotes.Count - 1; index >= 0; --index) { ABCNote chordNote = chordNotes[index]; timeSpan = new TimeSpan((long)(Math.Min(timeSpan.TotalSeconds, chordNote.BaseNote.Length.TotalSeconds) * 10000000.0)); if (chordNote.BaseNote.Type == 'r') { chordNotes.RemoveAt(index); } } if (timeSpan == TimeSpan.MaxValue) { timeSpan = TimeSpan.Zero; } if (chordNotes.Count > Settings.MaxChordNotes) { chordNotes.RemoveRange(Settings.MaxChordNotes, chordNotes.Count - Settings.MaxChordNotes); } return(timeSpan); }
protected virtual Note TieNote(ABCNote note) { string key = note.BaseNote.Type.ToString(CultureInfo.InvariantCulture) + note.BaseNote.Octave.ToString(CultureInfo.InvariantCulture); if (tiedNotes.TryGetValue(key, out int num) && num > 0) { tiedNotes[key]--; note.BaseNote.Type = 'r'; return(note.BaseNote); } if (IsTiedNote(note.TokenIndex)) { for (int _tokenIndex = note.TokenIndex + 1; _tokenIndex < tokens.Count; ++_tokenIndex) { if (IsPlayableNote(tokens[_tokenIndex])) { Note note1 = GetNote(tokens[_tokenIndex]); if (note1.Type == note.BaseNote.Type && note1.Octave == note.BaseNote.Octave) { if (tiedNotes.ContainsKey(key)) { tiedNotes[key]++; } else { tiedNotes[key] = 1; } note.BaseNote.Length += note1.Length; if (!IsTiedNote(_tokenIndex)) { break; } } } } } return(note.BaseNote); }