如何将MIDO下的ticks_per_beat设置为一个新的MIDI文件?

Posted

技术标签:

【中文标题】如何将MIDO下的ticks_per_beat设置为一个新的MIDI文件?【英文标题】:How to set ticks_per_beat under MIDO to a new MIDI file? 【发布时间】:2017-08-26 12:42:20 【问题描述】:

在 MIDO 下读取ticks_per_beat 可以通过mid.ticks_per_beat 完成。但是,如果我想将 ticks_per_beat 的值(例如 120 或 480)保存到新的 MIDI 文件中,该怎么做? (p.s.我可以设置“拍号”或“节奏”如下。但是,在我看来,这些值和ticks_per_beat之间没有关系。)

track.append(MetaMessage('time_signature', numerator=4, denominator=4, clocks_per_click=24, notated_32nd_notes_per_beat=8, time=0))

track.append(MetaMessage('set_tempo', tempo=100000, time=0))

【问题讨论】:

赞美上帝!我一直在为这个 ticks_per_beat 属性搜索所有土地! 【参考方案1】:

每拍的节拍值不与 MIDI 消息一起存储;它是 MIDI 文件头中的一个字段。

MidiFile 构造函数有一堆未记录的参数:

class MidiFile(object):
    def __init__(self, filename=None, file=None,
                 type=1, ticks_per_beat=DEFAULT_TICKS_PER_BEAT,
                 charset='latin1',
                 debug=False,
                 clip=False
                 ):

【讨论】:

以上是关于如何将MIDO下的ticks_per_beat设置为一个新的MIDI文件?的主要内容,如果未能解决你的问题,请参考以下文章

Mido - 如何从不同端口实时获取 midi 数据

如何在 mido 中从 Message 中获取 note 属性?

在 Mac 上从 Python Mido 库输出 MIDI 声音

关闭 mido 端口时的“PortMidi: `Bad pointer'”

python mido MIDI包中使用MultiPort的问题

如何使用 QFileDialog 打开带有 .mid 后缀的文件