MIDI:具有相同数据的多个 Program Change Event

MIDI: Several Program Change Event with the same data

我正在尝试了解 MIDI 文件的结构。在使用 Python 库 python-midi 读取一些文件时,我发现两个 Program Change 事件具有相同的数据和 190 个滴答的差异。我了解到 Program Change 事件用于选择 GM 乐器。为什么要发送两个具有相同数据的 Program Change 事件?

这里是python-midi表示的结构:

midi.TrackNameEvent(tick=0, text='Pad1', data=[80, 97, 100, 49]),
midi.ProgramChangeEvent(tick=0, channel=0, data=[17]),
midi.ControlChangeEvent(tick=1, channel=0, data=[7, 127]),
midi.ControlChangeEvent(tick=1, channel=0, data=[10, 64]),
midi.ProgramChangeEvent(tick=190, channel=0, data=[17]),
midi.ControlChangeEvent(tick=0, channel=0, data=[7, 65]),

如果您需要更多信息,请告诉我。

Why would you send two Program Change events with the same data?

可能没用,尽管根据 Midi 标准它是完全有效的。 Midi 就像一种编程语言,并不是因为程序编译正常就不是笨蛋。或者它可能对给定的上下文、特定的 Midi 设备有特定的用途,但只有文件的制作者知道。

您会在网上找到许多 Midi 文件。它们可以使用许多不同的工具创建,并且可能在以后使用其他工具进行编辑,有时不是由同一个人进行。所以在 Midi 文件中发现奇怪的东西是很常见的,例如没有相应的音符关闭的音符打开事件等。