zoukankan      html  css  js  c++  java
  • 【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)

    这样就生成了伴奏旋律。

    下一篇开始讲网络核心。

  • 相关阅读:
    K3Wise K3List.OCX引入dotnet问题处理方法
    k3wise dotnet开发老单据时序簿工具条添加按钮
    c#调用dotnet写的com组件碰到注册失败的错误的补救方法
    bat注册dotnet com
    dotnet动态加载以及卸载dll的代码
    c#获取com对象的progid
    jpg和png的区别
    Fragment的FragmentTransaction 的commit()和commitAllowingStateLoss()以及commitNow()和commitNowAllowingStateLoss()
    Java泛型类型擦除与运行时类型获取
    rxjava介绍
  • 原文地址:https://www.cnblogs.com/ldzhangyx/p/7146149.html
Copyright © 2011-2022 走看看