欢迎光临散文网 会员登陆 & 注册

Python生成音乐 之 读取midi转换为数组

2021-01-24 15:21 作者:GXTon_阿通  | 我要投稿

这一章,我们进行到了下图中这一关卡.


上一节我已经实现了通过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中组合方式.

这里还是有些不太完整,但是基本可以用了,日后再去修改...

Python生成音乐 之 读取midi转换为数组的评论 (共 条)

分享到微博请遵守国家法律