Python生成音乐 之 读取midi转换为数组
这一章,我们进行到了下图中这一关卡.

上一节我已经实现了通过mido的库读取midi文件.
并且打印出来运行结果.

我们可以看到每个音符,对应与音轨(track)中的信息.
但是这样的一条一条不成系统的结果并不是很好用程序进行处理.
要想对midi文件进行处理,就需要建模.
音乐是一系列的音符,而且每个音符都有他自己的属性: 时间长短,音量高低,音调高低...

目前我们先不考虑很复杂的问题,也不考虑太复杂的数据结构,就只用程序中的序列表示一首曲子.一首曲子里我们先只考虑音符部分,其他的音量,时长,先不做考虑.
那么,我们重新看一下midi文件,就是一系列的音符组成,
我们把midi文件的每个音符转换成Python序列中的一个数字.这样音符和数字就被对应起来了.
最终达到的效果就是,一首midi对应一个Python中的序列.
还有个问题:

上面图中我们可以看到,
第一个时间段:有一个音符;
第二个时间段:有一个音符;
第三个时间段:有一个音符;
第四个时间段:有两个音符,(这里就不同于以前了);而且有时候会出现更多的音符出现的情况;
这个时候用一维的数组就不好表示了,所以改成用二维的数组:

这里只是第一步,把midi文件中的音符摘出来,变成Python中的二维数组;
以后还有很多的路要走呀...

以后的事以后再说,
目前讲一下如何把midi文件中的音符,变成Python中对应的二维数组(也可以叫做二维序列)
先粘贴一下代码:
最后生成的note_list_ex_sort就是最后的音符的二维数组.
实现的方式是:
一条一条查看mido库读取出来的动作.
遇到note_on就说明按键按下,遇到note_off就说明有钢琴键松开.
当然还要考虑上一次是note_on还是note_off,这样就有4中组合方式.
这里还是有些不太完整,但是基本可以用了,日后再去修改...