如何(自动)区分 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):
我正在使用 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):