1

我正在尝试检索带有两个五线谱的钢琴曲的右手和左手音符以进行音乐分析,但我在实现这一目标时遇到了很多麻烦。

我正在使用 Music21 来执行此操作。在他们的文档中,似乎 Part 类对应于人员,所以我认为获取流对象的 Part 对象将检索左手(Part 对象)和右手(Part 对象)。

curr_stream = converter.parse(str(file))
parts = curr_stream.getElementsByClass(stream.Part)
left_hand = parts[0]
right_hand = parts[1]

由于这首歌有两个五线谱,我预计会有两个部分,但对于一些有两个五线谱的歌曲,情况并非如此。一些明显有两个谱表的歌曲在流对象中只有一个部分。

4

1 回答 1

0

一切都取决于是什么str(file)。对于使用一个 musicxml 部分和多个编码的五线谱正确编码的 MusicXML 文件,music21 将创建两个 PartStaff 对象。PartStaff 是 stream.Part 的子类,因此您的代码可以正常工作(与 curr_stream.parts 一样)。参见例如,corpus.parse('cpebach')。但是那里有很多错误编码的钢琴曲。

于 2019-08-01T19:02:17.670 回答