我正在尝试使用music21将多轨道midi文件转换为每个轨道的音符和持续时间数组。

例如,给定一个midi文件test.mid,其中有16条音轨,

我想得到16个元组数组,包括(音高,持续时间(可能还有音符的位置))。

音乐的文档非常难遵循,对此我将不胜感激。

最佳答案

音乐21中有多种方法可以做到这一点,因此这只是一种简单的方法。请注意,持续时间值以浮点数表示,因此四分音符等于1.0,半音符等于2.0,依此类推:

import music21
from music21 import *

piece = converter.parse("full_path_to_piece.midi")
all_parts = []
for part in piece.parts:
  part_tuples = []
  for event in part:
    for y, in event.contextSites():
      if y[0] is part:
        offset = y[1]
    if getattr(event, 'isNote', None) and event.isNote:
      part_tuples.append((event.nameWithOctave, event.quarterLength, offset))
    if getattr(event, 'isRest', None) and event.isRest:
      part_tuples.append(('Rest', event.quarterLength, offset))
  all_parts.append(part_tuples)


另一种解决方案是使用vis-framework,它通过music21以符号符号访问音乐文件,并将信息存储在pandas数据帧中。你可以这样做:

pip install vis-framework


另一种解决方案是使用Humdrum代替music21。

关于python - music21:解析每个音轨的音符和持续时间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40992288/

10-14 10:07