Example #1
0
        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);
        }
Example #2
0
        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);
        }