【问题标题】:Identifying time signature with music21用音乐识别拍号21
【发布时间】:2021-11-17 00:36:11
【问题描述】:

我正在尝试使用 music21 确定 Python 中 midi 文件的时间签名。我可以获得this sample midi 的拍号,例如:

import music21

path = 'ambrosia.midi'
score = music21.converter.parse(path)
time_signature = score.parts[0].timeSignature.ratioString

但是,当我通过 this midi 时,score.parts[0].timeSignatureNone。其他人知道用music21获取拍号的正确方法吗?

【问题讨论】:

    标签: python midi music21


    【解决方案1】:

    music21 v.7.1 开始对从 MIDI 文件解析的部分进行测量。出于这个原因,.timeSignature 属性在 Part 上调用时不是很有用(example from docs:“此属性不是递归的,因此 Part 中不会有小节的拍号”)。这曾经适用于 MIDI 文件的事实与系统的其余部分不一致。

    如果您只想要第一个拍号,请执行递归搜索:

    旧语法(仍然有效):myPart.recurse().getElementsByClass(music21.meter.TimeSignature)[0]

    新的快捷语法(v7):myPart[music21.meter.TimeSignature][0]

    同样,您可以在 getter 中使用 'TimeSignature' 等字符串来代替类名。

    您还可以索引到第一个度量并访问那里的.timeSignature 属性:myPart['Measure'][0].timeSignature

    【讨论】:

    • 感谢您的跟进@JacobWalls——听到核心提交者的消息真是太棒了:)
    猜你喜欢
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    相关资源
    最近更新 更多