将MIDI文件读入程序时出错

时间:2013-08-07 20:19:03

标签: standards midi file-type

我有一个使用MuseScore生成的midi文件。它在Windows Media Player中运行良好,但导致我的midi阅读程序崩溃。我一直在使用以下链接来帮助我:MIDI specificationMobilefish MIDI Guide,第二个主要是帮助我。

4d 54 68 64 = MThd
00 00 00 06 = Header length of 6
00 01 = Track format 1
00 02 = two tracks
01 e0 = 480 delta-ticks per quarter note

4d 54 72 6b = MTrk
00 00 00 86 = length of 0x86
00 ff 58 04 04 02 18 08 = time signature
00 ff 59 02 00 00 = key signature
00 c0 00 = program change (channel 1)
02 b0 07 64 = control mode change (channel 1)
02 0a = running status
40 02 = running status
5b 1e = running status
02 5d = running status
1e ac 78 90 = Aftertouch event (channel 13, not really applicable in this context)
3e 50 = running status
83 5f 3e = delta time (83 5f) and 3e, which is not a status byte
(more bytes for context): 00 01 40 50

我在这里忽略了MIDI标准中存在的内容?

2 个答案:

答案 0 :(得分:1)

我写的这个问题是完全有缺陷的,我很抱歉那些试图帮助我的人;我必须错误地复制Notepad ++的输出。但是,对于那些可能遇到同样问题的人,我会写一个问题的答案。

每当使用运行状态时,始终前面会有增量时间。对于那些可能会看到其他指南的人,例如http://www.blitter.com/~russtopia/MIDI/~jglatt/tech/midispec/run.htm,请知道有关这些指南的信息完全是误导性的。

例如:

00 90 7F 7F
7F 00
50 7F
50 00

这是错误的。

但是,这是正确的版本:

00 90 7F 7F
81 00 7F 00
00 50 7F
81 00 50 00

这显然是一个增量时间。

答案 1 :(得分:0)

如果我没有弄错,运行状态仍然需要指定一个可变时间增量,所以即使两个事件同时发生,仍然会有一个00字节继续运行状态。然而,考虑到这一点,上面转储中的触后事件将没有任何时间偏移,所以我很难过。