LibiadaMusic.ScoreModel.CongenericScoreTrack.NoteOrder C# (CSharp) Method

NoteOrder() public method

The note order. возвращает строй объектов Note, проидентифицировав их
public NoteOrder ( ) : List
return List
        public List<ValueNote> NoteOrder()
        {
            var temp = new List<ValueNote>();

            // запись в одну цепочку
            foreach (Measure measure in MeasureList)
            {
                foreach (ValueNote note in measure.NoteList)
                {
                    temp.Add((ValueNote)note.Clone());
                }
            }

            // идентификация
            // первая нота обозначается 0
            temp[0].Id = 0;

            // счетчик для уникальных
            int n = 1;

            // для остальных процедура цикла
            for (int i = 1; i < temp.Count; i++)
            {
                // флаг если уже идентифицированна нота
                bool identified = false;

                for (int j = 0; j < i; j++)
                {
                    if (temp[i].Equals(temp[j]))
                    {
                        // если уже такая идентифицировалась
                        temp[i].Id = temp[j].Id;
                        identified = true;
                    }
                }

                // если ранее не встречалась эта нота, то назначим ей новый id
                if (!identified)
                {
                    // назанчим еще не использованный по возрастанию id
                    temp[i].Id = n;

                    // увеличиваем счетчик уникальных
                    n++;
                }
            }

            return temp;
        }

Usage Example

        public void ValueNoteOrderFirstTest()
        {
            // создание и заполнения списка(ов) нот для такта(ов) монотрека
            var notes = new List<ValueNote>
            {
                new ValueNote(new Pitch(3, 'A', 2), new Duration(1, 16, false, 128), false, Tie.None, 3),
                new ValueNote(new Pitch(3, 'E', 0), new Duration(1, 4, false, 512), false, Tie.None, 0),
                new ValueNote(new Pitch(3, 'E', 0), new Duration(1, 4, false, 512), false, Tie.None, 0),
                new ValueNote(new Pitch(3, 'C', 1), new Duration(1, 16, false, 128), false, Tie.None, 1),
                new ValueNote(new Pitch(3, 'A', -1), new Duration(1, 16, false, 128), false, Tie.None, 3),
                new ValueNote(new Pitch(3, 'D', 0), new Duration(1, 16, false, 128), false, Tie.None, 2),
                new ValueNote(new Pitch(3, 'A', 2), new Duration(1, 16, false, 128), false, Tie.None, 3),
                new ValueNote(new Pitch(3, 'C', 1), new Duration(1, 16, false, 128), false, Tie.None, 1),
                new ValueNote(new Pitch(3, 'C', 1), new Duration(1, 16, false, 128), false, Tie.None, 1)
            };

            var notes2 = new List<ValueNote>
            {
                new ValueNote(new Pitch(3, 'B', 0), new Duration(1, 16, false, 128), false, Tie.None, 1),
                new ValueNote(new Pitch(3, 'A', 2), new Duration(1, 16, false, 128), false, Tie.None, 3),
                new ValueNote(new Pitch(3, 'E', 0), new Duration(1, 4, false, 512), false, Tie.None, 0),
                new ValueNote(new Pitch(3, 'E', 0), new Duration(1, 4, false, 512), false, Tie.None, 0),
                new ValueNote(new Pitch(3, 'C', 1), new Duration(1, 16, false, 128), false, Tie.None, 1),
                new ValueNote(new Pitch(3, 'A', -1), new Duration(1, 16, false, 128), false, Tie.None, 3),
                new ValueNote(new Pitch(3, 'D', 0), new Duration(1, 4, false, 128), false, Tie.None, 2),
                new ValueNote(new Pitch(3, 'A', 2), new Duration(1, 16, false, 128), false, Tie.None, 3),
                new ValueNote(new Pitch(3, 'C', 1), new Duration(1, 4, false, 128), false, Tie.None, 1),
                new ValueNote((Pitch)null, new Duration(1, 4, false, 128), false, Tie.None, 1),
                new ValueNote((Pitch)null, new Duration(1, 4, false, 128), false, Tie.None, 1),
                new ValueNote((Pitch)null, new Duration(1, 16, false, 128), false, Tie.None, 1),
                new ValueNote((Pitch)null, new Duration(1, 16, false, 128), false, Tie.None, 1)
            };

            var attr = new Attributes(new Size(4, 4), new Key(5));

            var m1 = new Measure(notes, attr);
            var m2 = new Measure(notes2, attr);

            var mList = new List<Measure> { m1, m2 };

            var uni = new CongenericScoreTrack("a1", mList);

            Assert.AreNotEqual(uni.NoteOrder()[0].Id, 1);

            Assert.AreEqual(uni.NoteOrder()[0].Id, 0);
            Assert.AreEqual(uni.NoteOrder()[1].Id, 1);
            Assert.AreEqual(uni.NoteOrder()[2].Id, 1);

            Assert.AreEqual(uni.NoteOrder()[3].Id, 2);
            Assert.AreEqual(uni.NoteOrder()[4].Id, 3);
            Assert.AreEqual(uni.NoteOrder()[5].Id, 4);

            Assert.AreEqual(uni.NoteOrder()[6].Id, 0);
            Assert.AreEqual(uni.NoteOrder()[7].Id, 2);
            Assert.AreEqual(uni.NoteOrder()[8].Id, 2);

            Assert.AreEqual(uni.NoteOrder()[9].Id, 0);
            Assert.AreEqual(uni.NoteOrder()[10].Id, 0);
            Assert.AreEqual(uni.NoteOrder()[11].Id, 1);

            Assert.AreEqual(uni.NoteOrder()[12].Id, 1);
            Assert.AreEqual(uni.NoteOrder()[13].Id, 2);
            Assert.AreEqual(uni.NoteOrder()[14].Id, 3);

            Assert.AreEqual(uni.NoteOrder()[15].Id, 5);
            Assert.AreEqual(uni.NoteOrder()[16].Id, 0);
            Assert.AreEqual(uni.NoteOrder()[17].Id, 6);

            Assert.AreEqual(uni.NoteOrder()[18].Id, 7);
            Assert.AreEqual(uni.NoteOrder()[19].Id, 7);
            Assert.AreEqual(uni.NoteOrder()[20].Id, 8);
            Assert.AreEqual(uni.NoteOrder()[21].Id, 8);
        }