Столкнулся с тем, что в сети очень мало информации по созданию midi файлов. И вообще нет информации понятной начинающим.
Решил исправить этот пробел. Накидал программку. Она создаёт на диске тестовый миди файл, в нём всего 6 нот. Зато этот файл стабильно проигрывается любым плеером!!!
Программа состоит из одной кнопке. При нажатии на которую три массива данных записываются поочереди в файл.
Я специально данные разделил на три массива, о каждом я расскажу отдельно!
Так как массивы байтовые, то я их в шеснадцатиричной форме оформил, для наглядности!
Option Base 1 Dim FilePath As String Dim mm1, mm2, mm3 As Variant Private Sub Command1_Click() Dim NumFile As Integer Dim i As Long, LFile As Long Dim s As String On Error GoTo wyhod NumFile = FreeFile Open FilePath For Binary As #NumFile LFile = FileLen(FilePath) For i = 1 To UBound(mm1) Put #NumFile, LFile + i, CByte(mm1(i)) Next Close #NumFile Open FilePath For Binary As #NumFile LFile = FileLen(FilePath) For i = 1 To UBound(mm2) Put #NumFile, LFile + i, CByte(mm2(i)) Next Close #NumFile Open FilePath For Binary As #NumFile LFile = FileLen(FilePath) For i = 1 To UBound(mm3) Put #NumFile, LFile + i, CByte(mm3(i)) Next Close #NumFile Exit Sub wyhod: s = "ошибка открытия файла " & FilePath & "!" MsgBox s, 16, "oblom" End Sub Private Sub Form_Load() FilePath = "D:\0114.mid" 'Заголовок,два последних байта определяют темп!!! mm1 = Array(&H4D, &H54, &H68, &H64, &H0, &H0, &H0, &H6, &H0, &H0, &H0, &H1, &H4, &H0) 'описание канала последний байт это инструмент в миди банке.7 и 8 байты это длина участка канала mm2 = Array(&H4D, &H54, &H72, &H6B, &H0, &H0, &H0, &H55, &H0, &HFF, &H58, &H4, &H4, &H2, &H18, &H8, &H0, &HFF, &H59, &H2, &H0, &H0, &H0, &HFF, &H51, &H3, &H7, &HA1, &H20, &H0, &HC0, &H1) 'данные файла. последние 4 байта код завершения. mm3 = Array(&H0, &H90, &H43, &H40, &H88, &H0, &H80, &H43, &H0, &H0, &H90, &H40, &H40, &H84, &H0, &H80, &H40, &H0, &H0, &H90, &H40, &H40, &H84, &H0, &H80, &H40, &H0, &H0, &H90, &H43, &H40, &H88, &H0, &H80, &H43, &H0, &H0, &H90, &H40, &H40, &H0, &H3C, &H40, &H84, &H0, &H80, &H40, &H0, &H0, &H90, &H40, &H40, &H84, &H0, &H80, &H40, &H0, &H0, &HFF, &H2F, &H0) End Sub