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()
.
我有一个简单的脚本,它使用 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()
.