Использование BinaryReader для чтения midi-файла. (.net)

#.net #midi #binaryreader

#.net #midi #binaryreader

Вопрос:

Как бы я использовал BinaryReader для чтения midi-файла (спецификации для формата находятся здесь)

Я использую vb.net но я готов увидеть другой код (в основном только C #, я могу его преобразовать). Я работаю над большим проектом, и это приводит к некоторому скачку скорости.

Вот мой текущий код:

 Private Function convertCharArrayToString(ByVal chars() As Char) As String
    Dim tReturn As String = ""
    For Each v As Char In chars
        tReturn amp;= v
    Next
    Return tReturn
End Function

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    midiStatus = "Reading..."
    Dim midiStream As New StreamReader(midiFile)
    Dim nBR As New BinaryReader(midiStream.BaseStream)
    midiStatus = "Validating Midi File..."
    Dim HeaderA As String = convertCharArrayToString(nBR.ReadChars(4))
    If Not HeaderA = "MThd" Then Return
    Dim HeaderB() As Byte = nBR.ReadBytes(4)
    'Get Track Type
    midiStatus = "Reading Header Data..."
    Dim TrackType1 As Integer = nBR.ReadInt16()
    Dim TrackType2 As Integer = nBR.ReadInt16()
    MsgBox(TrackType1 amp; TrackType2)

End Sub
  

Все работает, пока я не начну читать фактические данные заголовка. Я совершенно не понимаю, как мне продолжить. Любая помощь или примеры кода были бы хороши!

Комментарии:

1. По одному байту за раз. Задайте реальный вопрос.

2. Были способы получше, которыми вы могли бы это сказать.

Ответ №1:

Напишите свою логику декодирования в классе, а не непосредственно в графическом интерфейсе.

Определите структуру для MIDI-заголовка, затем используйте что-то вроде этого, чтобы установить его.

Комментарии:

1. Хорошо, звучит неплохо. Однако, прежде чем я отмечу это как ответ, почему два значения (ff?) должны быть равны единице? Один из типов данных — это. Предполагается, что (в конце) это должно быть 0, 1 или 2. (все это вытекает из информации о протоколе / формате, которую я включил.

2. Они использовали его в качестве наполнителя. Это всегда будет либо 00 00 , 00 01 , либо 00 02 . Они написали это не очень понятно, ИМО. Свой первый MIDI-декодер я написал по этой прекрасной ссылке (извините, мне потребовалось так много времени, чтобы найти его).