這個全新的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://stackoverflow.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
當然這種更加不存在。
=========================
我只要能做出《成都》這種難度和復雜度的音樂就很滿足了。
謝謝閱讀。