【Python图像特征的音乐序列生成】生成伴奏旋律(附部分代码)
做了半天做的都是一些细枝末节的东西,嗨呀。
伴奏旋律是Ukulele和弦,MIDI发音乐器是Guitar。在弹唱的时候,Ukulele和弦就是伴奏。
我们以创建《成都》伴奏为例:
节奏型:
和弦:
那么节奏型和和弦的组合可以视为一个二元矩阵,下面写一个函数用来寻址:
1 from mingus.core import * 2 from mingus.containers import * 3 from mingus.midi.midi_file_out import * 4 5 def chord_mixer(chord,rhythm,basic_type=(3,4)): 6 b=Bar('C',basic_type) 7 if chord == 'C' and rhythm == '34_1': 8 b.place_notes(['G-4','C-5'],8) 9 b.place_notes('C-4',8) 10 b.place_notes('E-4',8) 11 b.place_notes('C-5',8) 12 b.place_notes('E-4',8) 13 b.place_notes('C-4',8) 14 elif chord == 'Em' and rhythm == '34_1': 15 b.place_notes(['G-4','B-4'],8) 16 b.place_notes('E-4',8) 17 b.place_notes('G-4',8) 18 b.place_notes('B-5',8) 19 b.place_notes('G-4',8) 20 b.place_notes('E-4',8) 21 elif chord == 'F' and rhythm == '34_1': 22 b.place_notes(['A-4','A-4'],8) 23 b.place_notes('C-4',8) 24 b.place_notes('E#-4',8) 25 b.place_notes('A-4',8) 26 b.place_notes('E#-4',8) 27 b.place_notes('C-4',8) 28 elif chord == 'G' and rhythm == '34_1': 29 b.place_notes(['G-4','B-4'],8) 30 b.place_notes('D-4',8) 31 b.place_notes('G-4',8) 32 b.place_notes('B-4',8) 33 b.place_notes('G-4',8) 34 b.place_notes('D-4',8) 35 ... 36 37 return b
接下来我们新建一个音轨串联和弦:
1 b=[chord_mixer('C','34_1'),chord_mixer('Em','34_1'),chord_mixer('F','34_1'),chord_mixer('G','34_1'),chord_mixer('C','34_1'),chord_mixer('Em','34_1'),chord_mixer('F','34_1'),chord_mixer('G','34_1'),] 2 t=Track(Guitar()) 3 for i in b: 4 t.add_bar(i)
最后输出:
1 write_Track('test.mid',t,bpm=80)
这样就生成了伴奏旋律。
下一篇开始讲网络核心。