[oeasy]python094_使用python控制音符列表_midi_文件制作

094_使用python控制音符列表_midi_文件制作

使用python控制音符列表_midi_文件制作

回忆

  • 上次了解了 列表的下标索引

    • 可以是 正数

    • 也可以是 负数

0 1 2 3 4
o e a s y
-5 -4 -3 -2 -1
  • 2个函数 可以

    • 根据 列表项

    • 找到 索引位置

函数 输入 输出 区别
index 列表项 索引值 找不到 就报ValueError
find 列表项 索引值 找不到 不报错 返回-1
  • 这列表 还有什么 好玩的 吗?🤔

midi文件

  • 我想生成 可以播放的mid文件

图片描述

  • 先进入 Code文件夹

cd Code
  • 便于 生成mid 的 下载

制作midi

  • 先来个 《两只老虎》的 mid

图片描述

构建环境

pip install mido
  • 先安装需要的包mido

图片描述

复制代码

from mido import Message, MidiFile, MidiTrack

# 定义简谱数字与MIDI note number的映射(以C调为例)
note_mapping = {
    1: 60,  # do
    2: 62,  # re
    3: 64,  # mi
    4: 65,  # fa
    5: 67,  # sol
    6: 69,  # la
    7: 71   # si
}

# 《两只老虎》的简谱音符序列
tune_notes = [
    1, 2, 3, 1,
    1, 2, 3, 1,
    3, 4, 5, 
    3, 4, 5,
    5, 6, 5, 4, 3, 1,
    5, 6, 5, 4, 3, 1,
    2, 5, 1,
    2, 5, 1
]

# 定义每个音符的拍子(这里假设每个音符为1拍,可根据需要调整)
beat_per_note = 1
# 定义每拍的tick数(MIDI文件中时间的基本单位)
ticks_per_beat = 480

# 创建MIDI文件和音轨
mid = MidiFile()
track = MidiTrack()
mid.tracks.append(track)

# 设置乐器为钢琴(program number 0)
track.append(Message('program_change', program=0, time=0))

# 遍历音符序列,生成MIDI消息
for note in tune_notes:
    if note in note_mapping:
        note_num = note_mapping[note]
        # 音符开启消息
        track.append(Message('note_on', no
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值