这个全新的Python音乐创作系列,将会不定期更新。写作这个系列的初衷,是为了做一个项目《基于图像特征的音乐序列生成模型》,实时地提取照片特征,进行神经网络处理,生成一段音乐。
千里之行,始于足下。首先我们要做的是,音乐序列怎么在计算机中表达出来。
==============
首先参考知乎上的相关回答,以及PyPI上和音乐相关的第三方库。
来源:https://www.zhihu.com/question/24590883
另见:https://wiki.python.org/moin/PythonInMusic(上面有更全面的库和软件)
==================
在几番选择之后,我选用了两个库作为midi音乐的生成:
mingus:http://bspaans.github.io/python-mingus/
mingus是一个比较高级的库,优点在于写作简单,有相关音乐理论的人可以很快上手,文档全面。
多简明!(哭)
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升级该多好啊。
第二个是能和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
当然这种更加不存在。
=========================
我只要能做出《成都》这种难度和复杂度的音乐就很满足了。
谢谢阅读。