我用music21解析了一组krn文件,它们都包含许多部分。我想重新混合这些部分并将它们保存为不同的文件。
然而,对于一些kern文件,music21说它有0部分:
>>> s = converter.parse('./data/Benedictus_23.krn')
>>> print len(s.parts)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Opus' object has no attribute 'parts' -> this really strange
>>> print len(s.voices)
0
文件确实有不同的条/乐器。我怎么能分开/识别它们?它似乎也没有声音。
以下是一个示例标题(full file)
!!!COM: Palestrina, Giovanni Perluigi da
!!!OPR: Fratres Ego Enim Accepi
!!!OTL: Benedictus
**kern **kern **kern **kern
*Itenor *Icalto *Icalto *Icant
!Tenor !Altus 2 !Altus 1 !Cantus
*clefGv2 *clefG2 *clefG2 *clefG2
*k[b-] *k[b-] *k[b-] *k[b-]
*G:dor *G:dor *G:dor *G:dor
*M4/2 *M4/2 *M4/2 *M4/2
=1 =1 =1 =1
0r 0a 0r 0r
=2 =2 =2 =2
其他具有此标头的krn文件可以正常工作:
!!!COM: Palestrina, Giovanni Perluigi da
!!!OPR: Dum esset summus pontifex
!!!OTL: Gloria
**kern **kern **kern **kern
*Ibass *Itenor *Icalto *Icant
!Bassus !Tenor !Altus !Cantus
*clefF4 *clefGv2 *clefG2 *clefG2
*k[] *k[] *k[] *k[]
*A:aeo *A:aeo *A:aeo *A:aeo
*M4/2 *M4/2 *M4/2 *M4/2
=1 =1 =1 =1
1.A 1.c# 1.e 1.a
关于如何分离乐器的任何想法?或者正确阅读部分内容?
答案 0 :(得分:1)
这些作品显然包括多个对话。
您可以像这样获得不同的流:
s = converter.parse('./data/Benedictus_23.krn')
try:
numscores = len(s.scores)
except:
numscores = 0
#for each opus
if numscores > 0:
for score in range(0,numscores):
sys.stdout.write('\n -> opus ' + str(score))
t = s.scores[score]
print len(t.parts)