使用BinaryReader读取midi文件。(.net)

使用BinaryReader读取midi文件。(.net),.net,midi,binaryreader,.net,Midi,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 &am

如何使用二进制读取器读取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 &= 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 & TrackType2)

End Sub

直到我开始读取实际的头数据时,一切都正常。我完全不知道如何继续下去。任何帮助或代码示例都很好

在类中编写解码逻辑,而不是直接在GUI中编写


为MIDI头定义一个结构,然后使用类似的方法进行设置。

在类中编写解码逻辑,而不是直接在GUI中编写


为MIDI头定义一个结构,然后使用类似的方法进行设置。

一次一个字节。问一个真实的问题。有更好的方法可以这样说。一次一个字节。问一个真实的问题。有更好的方法可以这样说。好吧,听起来不错。在我将此标记为已回答之前,为什么两个值(ff?)应该等于一?一种数据类型是这样的。它应该是(最后)0、1或2。(这些都来自于我包含的协议/格式信息。他们将其用作填充。它总是
00
00 01
,或者
00 02
。他们写得不是很清楚,我的第一个MIDI解码器就是用这种方法编写的(很抱歉,我花了这么长时间才找到它).好的,听起来不错。在我将其标记为已回答之前,为什么两个值(ff?)应该等于一?一种数据类型是这样的。它应该(最终)为0、1或2。(这些都来自于我包含的协议/格式信息。他们将其用作填充。它总是
00
00 01
,或者
00 02
。他们写得不是很清楚,我的第一个MIDI解码器就是用这种方法编写的(很抱歉,我花了这么长时间才找到它)。