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)

    这样就生成了伴奏旋律。

    下一篇开始讲网络核心。

  • 相关阅读:
    python打印4个九九乘法表
    mysql语法归纳总结
    帆软BI报表的创建
    jmeter+influxdb+grafana可视化监控接口测试
    jmeter 自动化
    linux安装docker+jmeter分布式
    jmeter连接mysql数据库
    cmd切换盘符
    jmeter接口测试教程
    python3 进程中 获取进程号和杀死进程
  • 原文地址:https://www.cnblogs.com/ldzhangyx/p/7146149.html
Copyright © 2011-2022 走看看