首先要记住,midi文件并不存储声音,只存储指示合成器(电子乐器)如何发声的动作,比如某个时刻以什么力度按下某个音符。
音符note
狭义的音符指C、D、E、F、G、A、B七个(即Do–Re–Mi–Fa–Sol–La–Si)。广义的应该是包括音符与对应的音阶,比如中央C即C4。音符、琴键与它们在midi中编号的关系如下图所示:
在midi信息中的note number从[21, 108]对应着钢琴的88个琴键。
midi channels
通道,最多有16个通道。可以了解为每个通道对应一个物理输出,所以midi最多可以同时控制16种乐器。
midi tracks
音轨,音轨与通道并不是一一对应,而是可以多对多的关系。音轨是逻辑上的划分,比如可以将钢琴的左手演奏放在track 1,右手演奏放在track 2。但是输出时候,都是对应输出到钢琴的通道。你也可以只设置一个track 1,并且在里面记录着不同通道的消息。另外,还经常将track 0用来存储midi的元信息。
event
事件,也叫做消息(在mido库中使用message表示)。包括三种事件meta event,midi event, sysex event。
meta messages
元消息是不会通过物理线路发送给设备的,只是存储在midi文件中。元消息通常用来存储作者、版权、音轨名、乐器名等信息,以及最重要的tempo值(即microseconds per beat)
midi messages
midi消息中最主要的就是note_on, note_off