使用Python编程制作上证指数波动的Midi音符

都说炒股要掌握节奏,这让我想到了音乐,可咱不懂乐理呀,那就让程序自己为我们演奏吧!我们将整个流程分成如下五个部分:

  1. 使用适当的模块来生成一段音符
  2. 程序根据将上证指数涨跌一段音符,能称得上“主旋律”
  3. 给这段主旋律添加一系列和弦
  4. 给这段主旋律添加一段伴奏
  5. 优化程序生成的音乐

因此我们需要找到能生成Midi模块,它们分别是“mido”和“musicpy”,它们中的几个基本的类是note(音符), chord(和弦)和scale(音阶)。这几个类是构成音乐代码的基础。

分别测试这两个模块。

1.“miso”随机生成一段音符

# -*- coding: UTF-8 -*-
import mido
import random


pitch_list = [[] for t0 in range(32)]
vel_list = [[] for t1 in range(32)]

for i in range(32):
    note_num = random.randint(0, 5)
    while True:
        pitch_list[i] = [random.randint(60, 84) for t2 in range(note_num)]
        vel_list[i] = [random.randint(64, 100) for t3 in range(note_num)]
        if len(pitch_list[i]) == len(set(pitch_list[i])):
            break


mid = mido.MidiFile()
track = mido.MidiTrack()
mid.tracks.append(track)

track.append(mido.MetaMessage('set_tempo', tempo=500000, time=0))
track.append(mido.MetaMessage('track_name', name='Piano 1', time=0))
track.append(mido.Message('program_change', program=1, time=0))

current_beat = 0
for i in range(32):
    for note in range(len(pitch_list[i])):
        note_beat = i * 0.5
        track.append(mido.Message('note_on', note=pitch_list[i][note], velocity=vel_list[i][note],
                                  time=round(480 * (note_beat - current_beat))))
        current_beat = note_beat
    for note in range(len(pitch_list[i])):
        note_beat = i * 0.5 + 0.4
        track.append(mido.Message('note_off', note=pitch_list[i][note], velocity=vel_list[i][note],
                                  time=round(480 * (note_beat - current_beat))))
        current_beat = note_beat

mid.save('test1.mid')

2.“Musicpy”生成一段和弦。

from musicpy import *

a = (C('Bmaj9', 3) / [2, 3, 4, 1, 5]) % (1 / 8, 1 / 8)
b = (C('Bmaj9', 3) / [2, 3, 4, 1, 5, 2]) % (1 / 8, 1 / 8)
q = a + ~a[1:-1]
q2 = b + ~b[3:-1]
t = (q + q2) * 2
adding = chord(['Bb5', 'Ab5', 'Gb5', 'Ab5']) % (1 / 2, 1 / 2) * 2
t2 = t & adding
play(t2 + (t2 - 3), 100, instrument=47)

这里重点推荐“Musicpy”,Musicpy是一门基于python的领域特定的音乐编程语言,是设计给音乐人通过乐理逻辑和算法在非常简洁的语法下创作音乐的。

Musicpy不只可以用来写代码作曲,它还有一些作者自己开发的音乐分析算法,包括判断任何一组音组成的和弦类型的乐理逻辑算法,分离出一首曲子的主旋律与和弦部分的算法。

作者写这个模块的初衷就是能够用简洁的代码来作曲,更重要的是这门语言完全融入了乐理逻辑,因此可以在乐理上面做出各种尝试。

作者致力于在这个项目中将整个乐理体系彻底地数学模型化,计算机化,构建一整个计算机能够理解的乐理系统,让大家可以在musicpy这个世界里研究任何跟音乐,乐理相关的算法,智能分析,实验性作曲等等。(除此之外,你可以用musicpy来写任何你喜欢的类型的音乐,古典音乐,爵士,摇滚,流行,电音,等等)

重播

播放

00:00
/
00:00
直播

00:00
进入全屏
50
点击按住可拖动视频

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/289746
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 54分钟前
下一篇 52分钟前

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注