1. 程式人生 > >【Python圖像特征的音樂序列生成】關於mingus一個bug的修復,兼改進情感模型

【Python圖像特征的音樂序列生成】關於mingus一個bug的修復,兼改進情感模型

.cn 事情 height trac most 1-1 使用 int .py

mingus在輸出midi文件的時候,使用這樣的函數:

1 from mingus.containers import NoteContainer
2 from mingus.midi import midi_file_out
3 
4 nc = NoteContainer(["A", "C", "E"])
5 midi_file_out.write_NoteContainer("test.mid", nc)

在輸出時會報錯:

1 Traceback (most recent call last):
2   File "<stdin>", line 1, in <module>
3
File "C:\Users\jzy\Anaconda3\lib\site-packages\mingus-0.5.2-py3.6.egg\mingus\midi\midi_file_out.py", line 94, in write_NoteContainer 4 File "C:\Users\jzy\Anaconda3\lib\site-packages\mingus-0.5.2-py3.6.egg\mingus\midi\midi_track.py", line 50, in __init__ 5 File "C:\Users\jzy\Anaconda3\lib\site-packages\mingus-0.5.2-py3.6.egg\mingus\midi\midi_track.py
", line 225, in set_tempo 6 File "C:\Users\jzy\Anaconda3\lib\site-packages\mingus-0.5.2-py3.6.egg\mingus\midi\midi_track.py", line 230, in set_tempo_event 7 TypeError: %x format: an integer is required, not float

解決辦法是找到這個文件:

...\Anaconda3\Lib\site-packages\mingus-0.5.2-py3.6.egg

用7-Zip打開這個文件,直接編輯裏面的midi_track.py文件:

技術分享

找到230行,將代碼改成下圖所示即可。

技術分享

保存,退出,重新import,程序正確。。

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

關於情感模型的改進,我重新評估了原來的情感分類,發現可行性很差,於是嘗試使用這個模型:

技術分享

其實我一度動搖,根據樂理來做這樣的音樂會不會是多此一舉呢?

其實再想想,這樣做也沒什麽不好的,至少比全自動生成Bach的音樂有意思多了。

關於主旋律的問題,周末我休息的時候也在思考要怎麽制作,結論是:可能采用情感與節奏結合的模型,結合小跳和大跳來做一種概率模型。

即主旋律是在一定的大框架內,根據圖像的情感特征決定節奏拍子,決定一種旋律行進模式(小跳、大跳);根據圖像本身來選擇隨機種子,設計隨機算法。

這都是耗費精力的事情。

【Python圖像特征的音樂序列生成】關於mingus一個bug的修復,兼改進情感模型