예제 #1
0
        // Назначение: создавать список: нота/длительность.
        // Параметры: массив структур блоков, каждый из которых содержит массив структур событий; количество блоков.
        public ArrayList СreateNotesArray(MIDIMTrkStruct[] arrayST, int arrayCount)
        {
            ArrayList arrayChannelNote = new ArrayList();                                                      // Массив каналов.

            for (int indexBlock = 0; indexBlock < arrayCount; indexBlock++)                                    // Проходим по всем блокам MIDI.
            {
                for (int eventArray = 0; eventArray < arrayST[indexBlock].arrayNoteStruct.Count; eventArray++) // Пробегаемся по всем событиям массива каждого канала.
                {
                    noteStruct bufferNoteST = (noteStruct)arrayST[indexBlock].arrayNoteStruct[eventArray];     // Достаем событие ноты.
                    if (bufferNoteST.flagNote == true)                                                         // Если нажимают ноту.
                    {
                        byte indexChennelNoteWrite = 0;
                        while (true)                                                                              // Перебераем каналы для записи.
                        {
                            if (indexChennelNoteWrite < arrayChannelNote.Count)                                   // Если мы еще не просмотрели все существующие каналы.
                            {
                                channelNote bufferChannel = (channelNote)arrayChannelNote[indexChennelNoteWrite]; // Достаем канал с выбранным номером.

                                if (bufferChannel.ToWriteaNewNote(bufferNoteST.roomNotes, bufferNoteST.noteTime) == true)
                                {
                                    break;                                                                                       // Если запись проша удачно - выходим.
                                }
                            }
                            else // Если свободного канала не найдено - создать новый и кинуть в него все.
                            {
                                channelNote noteNambeChannelBuffer = new channelNote(); // Канал с реальным временем предыдущего.
                                noteNambeChannelBuffer.ToWriteaNewNote(bufferNoteST.roomNotes, bufferNoteST.noteTime); // Если запись проша удачно - выходим.
                                arrayChannelNote.Add(noteNambeChannelBuffer);                                          // Добавляем канал в массив каналов.
                                break;                                                                                 // Наверняка выходим.
                            }
                            indexChennelNoteWrite++;                                                                   // Если не удалось записать - следующий канал.
                        }
                    }
                    else // Если ноту наоборот отпускают.
                    {
                        byte indexChennelNoteWrite = 0;
                        while (true)                                                                          // Перебераем каналы для записи.
                        {
                            channelNote bufferChannel = (channelNote)arrayChannelNote[indexChennelNoteWrite]; // Достаем канал с выбранным номером.
                            if (bufferChannel.EntryEndNotes(bufferNoteST.roomNotes, bufferNoteST.noteTime) == true)
                            {
                                break;                   // Если запись проша удачно - выходим.
                            }
                            indexChennelNoteWrite++;     // Если не удалось записать - следующий канал.
                        }
                    }
                }
            }
            return(arrayChannelNote);
        }
예제 #2
0
 // Вывод массивов каналов в richTextBox1.
 public void outData(ArrayList Data)
 {
     for (int loop = 0; loop < Data.Count; loop++)     // Идем по всем каналам.
     {
         channelNote buffer = (channelNote)Data[loop]; // Получаем ссылку на канал.
         // Проходимся по всем нотам канала.
         richTextBox1.Text += "uint16_t channel" + loop.ToString() + "[" + buffer.arrayNoteChannel.Count.ToString() + "][2] = {";
         for (int loop1 = 0; loop1 < buffer.arrayNoteChannel.Count; loop1++)
         {
             channelNote.noteInChannelNote DataD = (channelNote.noteInChannelNote)buffer.arrayNoteChannel[loop1];
             richTextBox1.Text += DataD.roomNotes.ToString() + "," + DataD.noteTime.ToString();
             if (loop1 != (buffer.arrayNoteChannel.Count - 1))
             {
                 richTextBox1.Text += ", \t";
             }
         }
         richTextBox1.Text += "};\n\n";
     }
 }