如何用PYTHON程式碼寫出音樂

李博Garvin發表於2017-06-15

如何用PYTHON程式碼寫出音樂

什麼是MIDI

博主本人雖然五音不全,而且唱歌還很難聽,但是還是非常喜歡聽歌的。我一直在做這樣的嘗試,就是通過人工智慧演算法實現機器自動的作詞和編曲(在這裡預告下,通過深度學習寫歌詞已經實現了,之後會分享給大家),本文我們主要聊下如何寫曲。

說到用程式碼寫曲子,有一個東西大家一定要了解就是MIDI。MIDI是一種樂器數字介面,是編曲界最廣泛的音樂標準格式。MIDI並不是真正意義上的音樂檔案,大家可以把它理解成樂譜,需要有環境編譯MIDI檔案,才可以生成音樂。這個關係有點像程式碼和編譯器的關係。市面上可以解析MIDI檔案的軟體有很多種,本文將用到MuseScore2的軟體,以下就是這個軟體的截圖,介面中的五線譜就是MIDI檔案的呈現。這個樂譜是可以播放的,並且可以匯出為MP3格式的音樂檔案。

下面我們就介紹下生成MIDI檔案所使用的PYTHON庫。

python-midi庫介紹

市面上差不多有十多種PYTHON庫可以編寫MIDI格式的檔案,本文會推薦大家使用PYTHON-MIDI。我覺得python-midi的優勢是不光可以自己寫程式生成MIDI,而且還可以對MIDI檔案進行解析。這樣的功能配合機器學習演算法,或許可以幫助我們實現機器的自動編曲,當然這是後話。先來看下如何安裝python-midi。

1.首先進入https://github.com/vishnubob/python-midi#Installation,將整個專案克隆下來。

2.在程式目錄下執行以下命令安裝,

python setup.py install

3.如果想執行某個以mid為字尾的MIDI檔案,只要執行以下命令即可:

mididump.py test.mid

接下來介紹下如何寫程式碼生成midi檔案。

實操

在python-midi庫中,每個樂譜用Pattern物件表示,樂譜中的每個音軌(通常音樂都有很多軌道組成,每種樂器是一個軌道)用Track物件表示。每個音符的開端用midi.NoteOnEvent表示,結束用midi.NoteOffEvent表示,可以在引數中定義每個字元的音長和音高。示例程式碼如下:

生成的是一個簡單的音階:

更多有趣的音樂生成程式碼和樣例可以關注我的微信公眾號進行下載,進入公眾號,輸入“music”顯示下載連結,謝謝。

相關文章