如何使用 python 获取 midi 轨道乐器名称?
How to get midi track instrument name with python?
我发现唯一的方法是使用 music21:
m = converter.parse(path)
for m in m.parts:
print(m[0])
但输出不正确:
Piano
Piano
空白处也是一个乐器名,只是无法读取,但问题不在文件中,因为我可以将其正确导入tuxguitar。 music21 也无法粘贴大的 MIDI 文件并卡住。我尝试了 mido 库,但是没有办法获取轨道乐器,我找到了一个 attribute,但不知道如何使用它。
如何用 python 解析 MIDI 轨道的乐器?
为什么美度没有效果?
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)
曲目属性是曲目列表。每个轨道都是消息和元消息的列表,每个消息的时间属性设置为其增量时间(以滴答为单位)。
可以找到更多信息 here。
乐器在 程序更改 消息中的 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 是电吉他。
我发现唯一的方法是使用 music21:
m = converter.parse(path)
for m in m.parts:
print(m[0])
但输出不正确:
Piano
Piano
空白处也是一个乐器名,只是无法读取,但问题不在文件中,因为我可以将其正确导入tuxguitar。 music21 也无法粘贴大的 MIDI 文件并卡住。我尝试了 mido 库,但是没有办法获取轨道乐器,我找到了一个 attribute,但不知道如何使用它。
如何用 python 解析 MIDI 轨道的乐器?
为什么美度没有效果?
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)
曲目属性是曲目列表。每个轨道都是消息和元消息的列表,每个消息的时间属性设置为其增量时间(以滴答为单位)。
可以找到更多信息 here。
乐器在 程序更改 消息中的 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 是电吉他。