用 music21 识别时间签名

Identifying time signature with music21

我正在尝试使用 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 获取拍号的正确方法吗?

music21 v.7.1 开始对从 MIDI 文件解析的部分进行测量。出于这个原因,.timeSignature 属性 在 Part 上调用时不是很有用(example from docs: "This 属性 is not recursive, so a Part will not have the time其中措施的签名”)。这过去用于 MIDI 文件的事实与系统的其余部分不一致。

如果您只想要第一次签名,请执行递归搜索:

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

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

同样,您可以在 getter 中使用 'TimeSignature' 等字符串,而不是 class 名称。

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