我一直在试图弄清楚 MIDI 解析的神秘领域,但我没有运气。我要做的就是按照它们发生的顺序获取音符值( 60
= C4, = C5 等)。72
我的代码如下。它所做的只是非常简单地以字节数组的形式打开一个文件,然后以十六进制读取所有内容:
byte[] MIDI = File.ReadAllBytes("TestMIDI.mid");
foreach (var element in MIDI) {
string b = Convert.ToString(element,16);
Debug.WriteLine(b);
}
所有 TestMIDI.mid 包含的是 C5 上的一个音符。 这是它的十六进制转储。使用此信息,我试图找到 Note On (0x9
或只是9
在转储中) 的简单十六进制值,但没有任何值。我可以找到一些72
,但有 3 个,这对我来说没有任何意义(注意,注意,然后呢?)。
这是我第一次尝试将 MIDI 解析为文件并使用十六进制转储(他们甚至叫它吗?),所以如果我的方向完全错误,我很抱歉。 我所需要的只是得到播放的音符,以及按什么顺序播放。我根本不需要时间或任何花哨的东西。 这背后的原因(如果重要的话)是生成不同语言的新代码以在扬声器中播放,这与beep
*nix 上的命令非常相似。正因为如此,我不想使用任何框架,1)我没有编程,真的没有学到任何东西,2)做的远远超过我需要的,使框架比我的实际代码更重.