博主本人雖然五音不全,而且唱歌還很難聽,但是還是非常喜歡聽歌的。我一直在做這樣的嘗試,就是通過人工智慧算法實現機器自動的作詞和編曲(在這裡預告下,通過深度學習寫歌詞已經實現了,之後會分享給大家),本文我們主要聊下如何寫曲。
說到用代碼寫曲子,有一個東西大家一定要了解就是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 install3.如果想執行某個以mid為後綴的MIDI文件,只要執行以下命令即可:
mididump.py test.mid接下來介紹下如何寫代碼生成midi文件。
實操在python-midi庫中,每個樂譜用Pattern對象表示,樂譜中的每個音軌(通常音樂都有很多軌道組成,每種樂器是一個軌道)用Track對象表示。每個音符的開端用midi.NoteOnEvent表示,結束用midi.NoteOffEvent表示,可以在參數中定義每個字符的音長和音高。示例代碼如下:
生成的是一個簡單的音階:
更多有趣的音樂生成代碼和樣例可以關注我的微信公眾號進行下載,進入公眾號,輸入「music」顯示下載連結,謝謝。