我已经用 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
该文件确实有不同的柱/工具。我怎么能分开/识别它们?它似乎也没有声音。
这是一个示例 header ( 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
其他带有此 header 的 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
关于如何分离乐器有什么想法吗?或者正确阅读部分内容?
显然这些作品由多个作品组成。
你可以像这样获取不同的流:
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)
我是一名优秀的程序员,十分优秀!