Пример #1
0
        // Назначение: разбор главной структуры MIDI файла.
        // Параметры: Открытый FileStream поток.
        // Возвращаемой значение - заполненная структура типа MIDIheaderStruct.
        public MIDIheaderStruct CopyHeaderOfMIDIFile(MIDIReaderFile MIDIFile)
        {
            MIDIheaderStruct ST = new MIDIheaderStruct();                   // Создаем пустую структуру заголовка файла.

            ST.nameSection   = MIDIFile.ReadStringOf4byte();                // Копируем имя раздела.
            ST.lengthSection = MIDIFile.ReadUInt32BigEndian();              // Считываем 4 байта длины блока. Должно в итоге быть 0x6
            ST.mode          = MIDIFile.ReadUInt16BigEndian();              // Считываем 2 байта режима MIDI. Должно быть 0, 1 или 2.
            ST.channels      = MIDIFile.ReadUInt16BigEndian();              // Считываем 2 байта количество каналов в MIDI файле.
            ST.settingTime   = MIDIFile.ReadUInt16BigEndian();              // Считываем 2 байта параметров тактирования.
            return(ST);                                                     // Возвращаем заполненную структуру.
        }
Пример #2
0
        // Назначение: Открытие файла для чтения.
        // Параметры: путь к файлу.
        // Возвращаемое значение: успешность операции. true - успешно, false - нет.
        public bool openMIDIFile(string pathToFile)
        {
            FileStream       fileStream       = new FileStream(pathToFile, FileMode.Open, FileAccess.Read); // Открываем файл только для чтения.
            MIDIReaderFile   MIDIFile         = new MIDIReaderFile(fileStream);                             // Собственный поток для работы с MIDI файлом со спец. функциями. На основе байтового потока открытого файла.
            MIDIheaderStruct HeaderMIDIStruct = CopyHeaderOfMIDIFile(MIDIFile);                             // Считываем заголовок.

            MIDIMTrkStruct[] MTrkStruct = new MIDIMTrkStruct[HeaderMIDIStruct.channels];                    // Определяем массив для MTrkStruct.
            richTextBox1.Text += "Количество блоков: " + HeaderMIDIStruct.channels.ToString() + "\n";       // Количество каналов.
            richTextBox1.Text += "Параметры времени: " + HeaderMIDIStruct.settingTime.ToString() + "\n";
            richTextBox1.Text += "Формат MIDI: " + HeaderMIDIStruct.mode.ToString() + "\n";
            for (int loop = 0; loop < HeaderMIDIStruct.channels; loop++)
            {
                MTrkStruct[loop] = CopyMIDIMTrkSection(MIDIFile);                                // Читаем блоки MIDI файла.
            }
            outData(СreateNotesArray(MTrkStruct, HeaderMIDIStruct.channels));                    // Получаем список нота/длительность.
            return(true);
        }