#.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-декодер я написал по этой прекрасной ссылке (извините, мне потребовалось так много времени, чтобы найти его).