music21:从平面乐谱中获取 midi 声音的声音/程序/乐器?

Posted

技术标签:

【中文标题】music21:从平面乐谱中获取 midi 声音的声音/程序/乐器?【英文标题】:music21: get the voice/program/instrument of midi voice from a flat score? 【发布时间】:2021-04-18 22:39:46 【问题描述】:

我有一个简单的脚本,它使用 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 程序?任何指针将不胜感激!

【问题讨论】:

【参考方案1】:

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()

【讨论】:

非常感谢!这非常有用。

以上是关于music21:从平面乐谱中获取 midi 声音的声音/程序/乐器?的主要内容,如果未能解决你的问题,请参考以下文章

在 python 中从 MIDI 文件预览乐谱

Music21 Python 库将只输出钢琴声音

使用带有 partitionByInstrument() 的 music21 读取 MIDI 文件以获取返回空列表的音符和和弦

使用 Music21(或替代方法)从 MIDI 中提取休止符并写入单独的 MIDI 轨道

如何使用 Python 中的长笛乐器从音符制作 MIDI 文件(music21 库)

Music21:获取音符的曲目索引