我找到的唯一方法就是使用 music21 :
m = converter.parse(path)
for m in m.parts:
print(m[0])
但它的输出不正确:
Piano
Piano
空位也是一个乐器名称,它只是无法读取它,但问题不在文件中,因为我可以正确地将它导入 tuxguitar 。音乐21也无法播放大型midi文件并卡住。我尝试过mido库,但没有办法获得跟踪工具,我发现了attribute,但没有想法如何使用它。
如何使用python解析midi曲目的乐器?
答案 0 :(得分:0)
为什么Mido没有工作?
from mido import MidiFile
mid = MidiFile('song.mid')
for i, track in enumerate(mid.tracks):
print('Track {}: {}'.format(i, track.name))
for msg in track:
print(msg)
track属性是一个曲目列表。每个轨道都是消息和元消息的列表,每个消息的时间属性设置为其增量时间(以刻度表示)。
可以找到更多信息here。
答案 1 :(得分:0)
通过程序更改消息在MIDI文件中设置乐器。
例如:
mid = mido.MidiFile('PaintItBlack.mid')
for msg in mid:
if msg.type == 'program_change':
print(msg)
这将产生
program_change channel=1 program=32 time=0
program_change channel=2 program=27 time=0
program_change channel=3 program=27 time=0
program_change channel=4 program=27 time=0
program_change channel=5 program=25 time=0
program_change channel=6 program=27 time=0
program_change channel=7 program=104 time=0
program_change channel=8 program=30 time=0
program_change channel=10 program=52 time=0
其中通道程序值是该通道的工具。
例如,程序27是电吉他。