• 周六. 7 月 27th, 2024

5G编程聚合网

5G时代下一个聚合的编程学习网

热门标签

【Python图像特征的音乐序列生成】生成伴奏旋律(附部分代码)

admin

11 月 28, 2021

做了半天做的都是一些细枝末节的东西,嗨呀。

伴奏旋律是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)

这样就生成了伴奏旋律。

下一篇开始讲网络核心。

发表回复