music21: 从平分谱中得到 voice/program/instrument 的 midi 声音?

music21: get the voice/program/instrument of midi voice from a flat score?

我有一个简单的脚本,它使用 music21 来处理 midi 文件中的音符:

import music21

score = music21.converter.parse('www.vgmusic.com/music/console/nintendo/nes/zanac1a.mid')

for i in score.flat.notes:
  
  print(i.offset, i.quarterLength, i.pitch.midi)

有没有一种方法也可以使用降准乐谱获得音符的发声/midi 程序?任何指针将不胜感激!

MIDI 通道和程序存储在 Instrument 个实例上,因此请使用 getContextByClass(instrument.Instrument) 查找流中最近的乐器,然后访问其 .midiProgram。

注意:

  • .midiChannel.midiProgram 是 0 索引的,因此 MIDI 通道 10 在 music21 等中将为 9,(我们正在讨论在下一个版本中更改此行为)
  • 如果您不是 运行 最先进的版本(我们昨天合并了一个关于这个主题的补丁),一些信息可能会丢失,所以我建议从 git 中提取:pip install git+https://github.com/cuthbertLab/music21
  • .flat 会杀了你,但是,如果文件是多轨的。如果你听从我的建议,你只会得到每条轨道上的最后一个乐器。 90% 的人做 .flat 实际上想要 .recurse().