用 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].timeSignature
是 None
。其他人知道用 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
.
我正在尝试使用 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].timeSignature
是 None
。其他人知道用 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
.