我有一个由两部分组成的 midi 文件。现在我需要为第 0 部分(包括休止符)中的每个音符打印出在第 1 部分中同时发声的音符(以及随之而来的音符)。
我可以使用 music21 浏览第 0 部分中的所有音符,但是如何在第 1 部分中找到当时的音符。我需要使用结束时间吗?或者有这个功能吗?
for thisNote in s.parts[0].notes:
print thisNote.ps
这是一个非常有趣的函数,可以让我解决这个问题:
secondPart = s.parts[1]
for thisNote in s.parts[0].notes:
sys.stdout.write('at ' + str(thisNote.offset) + ' toppitch: ' + str(thisNote.ps))
soundingNotes = secondPart.getElementsByOffset(thisNote.offset, mustFinishInSpan=False, mustBeginInSpan=False)
try:
if soundingNotes > 0:
basslength = len(soundingNotes)
except:
basslength = 0
if basslength > 1:
print "oh ow, more then one note sounding in the bass."
if basslength > 0:
if soundingNotes[0].isRest:
sys.stdout.write(' bottompitch: R')
else:
sys.stdout.write(' bottompitch: ' + str(soundingNotes[0].ps)) # + ' from ' + str(soundingNotes[0].offset))
# print the previous note
soundingNotes2 = secondPart.getElementsByOffset(thisNote.offset-1, mustFinishInSpan=False, mustBeginInSpan=False)