如果文件不包含任何乐器名称元事件,Synthesia 如何检测乐器名称?

How does Synthesia detect instrument name if the file does not contain any instrument name meta event?

我正在使用 this midi 文件。我看到 synthesia 分别为每个 midi 音轨检测到 2 个录音机、2 个大提琴和 1 个低音提琴,但是 midi 文件中没有任何 'instrument name' 元事件。

这里发生了什么?

通用 MIDI 规范给出了实际乐器与乐器编号的默认分配 - 例如,乐器 #44 是低音提琴。否则 MIDI 文件在不同系统之间绝对没有可移植性。

MIDI 规范本身并未定义程序更改消息映射到的乐器。 MIDI 文件应该包含一个系统独占消息,该消息为所需的标准初始化合成器(例如,"GM System On" 用于通用 MIDI,或 "XG Reset" 用于 XG 标准)。

此文件不包含此类初始化。但是大多数文件是针对通用 MIDI 的(并且大多数其他标准都与 GM 兼容),因此 Synthesia 假定 MIDI 文件是针对支持通用 MIDI 的合成器的,并且只是从 GM instrument list.[=11 中获取名称=]