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

我正在使用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]


由于这首歌有两个五线谱,我希望可以分为两个部分,但是对于某些有两个五线谱的歌曲,情况并非如此。有些显然带有两个五线谱的歌曲在流对象中仅包含一部分。

最佳答案

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

关于python - 如何使用Music21检索钢琴曲的左右手,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56572720/

10-12 22:01