You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将数值列表/数组转换为MIDI文件?

将数值列表转换为MIDI文件的实用方案

针对你的需求,推荐用Python的MIDIUtil库来实现,它轻量易用,适合音频领域新手快速生成MIDI文件。

步骤1:安装依赖

先通过pip安装库:

pip install midiutil

步骤2:编写转换代码

你的时长列表以秒为单位,我们可以结合MIDI的速度(BPM)把秒数转换成MIDI的时长单位(四分音符)。下面是完整代码,默认用C大调中音区音符,你可以根据需求修改音高:

from midiutil import MIDIFile

# 你的时长列表(单位:秒)
note_durations = [0.93, 0.12, 0.84, 0.98, 1.23, 1.04]
# 自定义音高列表(MIDI音高范围0-127,60是中央C)
note_pitches = [60, 62, 64, 65, 67, 69]
# 设置MIDI参数
track = 0
channel = 0
time = 0  # 起始时间(以四分音符为单位)
tempo = 120  # 速度,BPM(四分音符每分钟120个)
volume = 100  # 音量0-127

# 创建MIDI文件对象
midi = MIDIFile(1)  # 1个音轨
midi.addTempo(track, time, tempo)

# 遍历时长和音高,添加音符
for pitch, duration_sec in zip(note_pitches, note_durations):
    # 把秒数转换成四分音符时长:BPM=120时,1四分音符=0.5秒
    duration_quarter = duration_sec / (60 / tempo)
    midi.addNote(track, channel, pitch, time, duration_quarter, volume)
    # 更新下一个音符的起始时间
    time += duration_quarter

# 保存MIDI文件
with open("output.mid", "wb") as output_file:
    midi.writeFile(output_file)

代码说明

  • 如果你没有指定音高,可以统一用固定值(比如全用60即中央C),只需要把note_pitches改成[60]*len(note_durations)
  • tempo(速度)会影响实际播放时长,你可以根据需求调整,比如tempo=60时,1四分音符=1秒
  • 生成的output.mid可以用任何MIDI播放器打开验证

备选方案:pretty_midi

如果你需要更复杂的MIDI编辑功能,可以用pretty_midi库,安装命令:

pip install pretty_midi

简单示例代码:

import pretty_midi

# 初始化MIDI对象
pm = pretty_midi.PrettyMIDI(initial_tempo=120)
# 创建一个乐器轨道
piano = pretty_midi.Instrument(program=pretty_midi.instrument_name_to_program('Acoustic Grand Piano'))

time = 0.0
# 遍历时长列表添加音符
for duration_sec in [0.93, 0.12, 0.84, 0.98, 1.23, 1.04]:
    # 创建音符,音高默认中央C(60),时长秒为单位
    note = pretty_midi.Note(velocity=100, pitch=60, start=time, end=time+duration_sec)
    piano.notes.append(note)
    time += duration_sec

# 添加乐器到MIDI对象
pm.instruments.append(piano)
# 保存文件
pm.write("output_pretty.mid")

内容的提问来源于stack exchange,提问作者Megan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 07:54:19