【Python图像特征的音乐序列生成】使用Python生成简单的MIDI文件

时间:2023-02-10 15:00:46

这个全新的Python音乐创作系列,将会不定期更新。写作这个系列的初衷,是为了做一个项目《基于图像特征的音乐序列生成模型》,实时地提取照片特征,进行神经网络处理,生成一段音乐。

千里之行,始于足下。首先我们要做的是,音乐序列怎么在计算机中表达出来。

 

==============

首先参考知乎上的相关回答,以及PyPI上和音乐相关的第三方库。

【Python图像特征的音乐序列生成】使用Python生成简单的MIDI文件

来源:https://www.zhihu.com/question/24590883

另见:https://wiki.python.org/moin/PythonInMusic(上面有更全面的库和软件)

==================

在几番选择之后,我选用了两个库作为midi音乐的生成:

mingus:http://bspaans.github.io/python-mingus/

mingus是一个比较高级的库,优点在于写作简单,有相关音乐理论的人可以很快上手,文档全面。

 【Python图像特征的音乐序列生成】使用Python生成简单的MIDI文件

多简明!(哭)

mingus的缺点在于:它只支持Python 2.X。如果要使用它的Python3版本,最好还是预先使用一次2to3.

mingus的报错代码问题及解决方案如下:

https://*.com/questions/26984731/importerror-no-module-named-mt-exceptions-when-using-mingus-library

 

python-midi:https://github.com/vishnubob/python-midi

怎么说呢,相对于mingus来说,Python-midi实在不怎么直观。且看这个库的写作方式:

1 on = midi.NoteOnEvent(tick=0, velocity=20, pitch=midi.G_3)
2 track.append(on)
3 # Instantiate a MIDI note off event, append it to the track
4 off = midi.NoteOffEvent(tick=100, pitch=midi.G_3)
5 track.append(off)

tick是音轨序号,pitch是音符。

我个人还在比较这两个库,如果能解决mingus在Python 3.x下的问题就最好了。

 

=======================

关于MIDI音乐文件的播放,自然有很多选择。但是本着一体化的原则,考虑下面的两个库:

PyGame:http://www.pygame.org

PyGame提供了完整的API供MIDI使用,并且最高支持到Python3.6.1,简直是天降福音,要是我当初学Python时,PyGame升级该多好啊。

【Python图像特征的音乐序列生成】使用Python生成简单的MIDI文件

 

第二个是能和mingus协同工作的FluidSynth,而且mingus连怎么操作这个库都写好了,参见:

http://bspaans.github.io/python-mingus/doc/wiki/tutorialFluidsynth.html

==============================

这只是一些前期的操作,之后我会慢慢撰写整个系列,包括使用TensorFlow,使用Deep Learning完成民谣风格的音乐创作等。

注意:本系列不完成高难度音乐。(参见:

https://deepmind.com/blog/wavenet-generative-model-raw-audio/

http://www.hexahedria.com/2015/08/03/composing-music-with-recurrent-neural-networks/

相信我,上面的是做不到的。

https://freemidi.org/artist-435-enya

当然这种更加不存在。

=========================

我只要能做出《成都》这种难度和复杂度的音乐就很满足了。

 

谢谢阅读。