我从这里下载了 midi 文件:Taylor Swift - You Belong With Me.mid
然后我只想提取原声低音鼓部分,这意味着我想要这首歌的输出原声低音鼓.mid。
我使用music21库来解析midi文件,下面是我的代码:
from music21 import *
import os
fp = os.path.join(common.getSourceFilePath(), 'midi', 'testPrimitive', 'Taylor Swift - You Belong With Me.mid')
mf = midi.MidiFile()
mf.open(fp)
mf.read()
mf.close()
s = midi.translate.midiFileToStream(mf)
partStream = s.parts.stream()
for p in partStream:
print p.partName
然后输出是
Saxophone
None
Electric Bass
None
None
Electric Guitar
None
None
None
Banjo
Banjo
Banjo
StringInstrument
Piano
我不知道哪个是打击乐...在我知道哪个部分是打击乐之后,我想提取该部分中的原声大鼓并将其输出为原声大鼓.mid文件。谁能告诉我该怎么做?谢谢
[编辑] 我用下面的代码,
from music21 import *
import os
fp = os.path.join(common.getSourceFilePath(), 'midi', 'testPrimitive', 'Taylor Swift - You Belong With Me.mid')
mf = midi.MidiFile()
mf.open(fp)
mf.read()
mf.close()
for n in range(len(mf.tracks)):
for c in mf.tracks[n].getChannels():
if c == 10:
print n
那么输出是14,也就是说mf.tracks[14]是打击乐器,那么我需要提取音高为35或者36的部分。
然后我使用了下面的代码:
for n in range(len(mf.tracks[14].events)):
if mf.tracks[14].events[n].pitch == 35 or mf.tracks[14].events[n].pitch == 36:
print n
然后有很多输出。我正在考虑下一步我应该做什么。