【Python圖像特征的音樂序列生成】使用Python生成簡單的MIDI文件


這個全新的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

當然這種更加不存在。

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

我只要能做出《成都》這種難度和復雜度的音樂就很滿足了。

 

謝謝閱讀。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM