如何(自动)区分 Opus 和 Score 对象?

How to (automatically) difference Opus and Score objects?

我正在使用 1850 O'Neills Folksong 语料库,因为它出现在 music21 语料库中。我需要遍历所有歌曲。

我尝试使用以下代码

songs = corpus.getComposer('oneills1850')
for ruta in songs:
    op = converter.parse(ruta)
    numbers = op.getNumbers()

...然后迭代数字。在大多数情况下,每个 op 变量都是一个 Opus 对象,它的每个数字都与一个乐谱相关联。

问题是这并不总是正确的。例如,songs 的第 15 个元素(即索引 14)是乐谱对象本身,而不是 Opus。所以我的代码在尝试使用 getNumbers 时崩溃了。

我猜,解决方案应该是事先检查 op 是 Opus(在那种情况下像我之前那样使用 getNumbers)还是 Score(在那种情况下跳过第二次迭代部分) .但我找不到该怎么做,也找不到解决我问题的任何其他方法。

如果在调用方法之前必须确定对象的类型,请使用 isinstance:

if isinstance(op,Opus):