1

我有一个使用 MuseScore 生成的 midi 文件。它在 Windows Media Player 中播放良好,但会导致我的 midi 阅读程序崩溃。我一直在使用以下链接来帮助我:MIDI 规范Mobilefish MIDI 指南,主要是第二个。

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 标准中存在什么?

4

2 回答 2

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

这显然是在一个增量时间之前。

于 2013-08-12T14:28:09.873 回答
0

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

于 2013-08-12T08:39:35.287 回答