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

如何使用Music21去除写入MIDI文件时末尾的空白数据

原因

music21默认导出MIDI时会自动将总时长对齐到整数个完整小节,默认使用4/4拍的配置下,仅包含2拍半音符的流会被自动补2拍空白休止符凑满1个完整小节,最终出现尾部空白。

解决方案

你可以选择以下任意一种方法去掉尾部空白:

  • 方法1:将流修剪到实际内容的最大时长
    修改后的代码如下:
import music21

stream = music21.stream.Stream()
n = music21.note.Note(60)
n.duration.type = 'half'
stream.insert(0, n)
# 新增以下两行,裁剪流到实际内容的结束位置
max_offset = stream.highestTime
stream = stream.trimToOffset(max_offset)
stream.write('midi', fp='out.midi')
  • 方法2:创建小节时禁用自动补全休止符
    如果你需要保留小节结构,可以在生成小节时关闭补全逻辑:
import music21

stream = music21.stream.Stream()
n = music21.note.Note(60)
n.duration.type = 'half'
stream.insert(0, n)
# 新增以下行,生成小节时不补全空白休止符
stream.makeMeasures(fillWithRests=False, inPlace=True)
stream.write('midi', fp='out.midi')

两种方法生成的MIDI文件总时长都会匹配实际音符的长度,不会出现尾部空白。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:48:03