簡體   English   中英

如何使用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庫,但是無法獲取跟蹤樂器,我找到了一個屬性 ,但是不知道如何使用它。

如何使用python解析midi音軌的樂器?

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)

tracks屬性是一個軌道列表。 每個軌道是消息和元消息的列表,每個消息的時間屬性設置為其增量時間(以滴答為單位)。
更多信息可以在這里找到。

樂器在程序更改消息中的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是電吉他。

請參閱https://jazz-soft.net/demo/GeneralMidi.html查找程序工具。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM