我从这里下载了midi文件:Taylor Swift - You Belong With Me.mid
然后我只想提取声学低音鼓部分,这意味着我想要这首歌的输出声学低音drum.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我不知道哪一个是打击乐。在我知道哪个部分是打击乐,然后我想提取声学低音鼓在该部分,并输出为声学低音drum.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.tracks14是打击乐,然后我需要提取音高数为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然后会有很多输出。我在想我下一步该做什么。
发布于 2016-12-11 19:05:49
在通用MIDI中,所有的打击乐事件都是在通道9上发送的。因此,您必须在通道9上搜索包含事件的曲目(流对象可能对此没有帮助)。
在那个文件中,它是名为“鼓”的曲目。(我不知道为什么music21不接这个名字。)
要提取声学低音鼓事件,请删除不使用音符编号35的所有音符。(这是该文件中的所有低音鼓;它实际上使用了音符编号为36的另一个低音鼓。)
https://stackoverflow.com/questions/41085082
复制相似问题