Python生成音乐 之 mido库读取midi文件
midi文件记录的是一系列的弹奏动作.
比如一首钢琴曲的midi文件:里面就是记录了弹奏钢琴曲的按键按下和松开等操作,并且记录了按键按下的时长,声音大小,乐器种类等参数.
midi文件的后缀是mid:

然后midi音乐文件可以用下面的软件打开,这个软件是一个免费的软件:

打开之后的效果:

也可以用下面软件打开:(这个软件也是免费的,可以查看曲子的五线谱或者简谱之类的)

下载midi文件可以用这个网站:(这个网站定期会发积分,可以下载一些midi文件,也算免费吧)
如果你想用程序去编写midi文件,最好下载一些简单的文件,最好是单一的钢琴曲...


上面是准备条件,下面开始说一下Python3的程序问题:
有点乱,我粘贴一张图片吧:

其中有一个:enumerate的函数,
它的作用呢就是给一个序列中每个元素都进行编号,可以参考下图:

运行上面的程序,就会输出midi文件中每个音轨中包含了什么,也就是输出音轨中包含的弹奏动作. 运行结果:

我们找到图中: 倒数第四行.(这里实际上是音乐的开始,从倒数第四行看才有些价值)
从程序中运行的图片,可以看出,都是一条一条的信息,
每条信息都代表了对钢琴按键的一次操作.
比如:note_on channel=0 note=64 velocity=40 time=0
分别代表了: 按下,0号乐器,音阶是64,音量是40,开始时间是0
(这里的时间是相对的,是相对于上一个动作,而不是相对于第一个音符的动作.)

下面是同一首曲子 程序运行结果,及,软件打开后的结果 进行比对:

可以找到一些规律:
1,每一个音都有对应的note_on和note_off组合.
2.time时间不是绝对的,是相对的.(是本次动作相对于上一次的动作)
3.如果要同时按下两个琴键,就需要连续写两个note_on,然后连续写两个note_off.