gpt4 book ai didi

python - Music21:获取音符的轨道索引

转载 作者:行者123 更新时间:2023-12-02 02:49:11 25 4
gpt4 key购买 nike

我有一个multi-track midi file我正在用音乐阅读21:

import music21

f = music21.midi.MidiFile()
f.open('1079-02.mid')
f.read()
stream = music21.midi.translate.midiFileToStream(f).flat
note_filter = music21.stream.filters.ClassFilter('Note')
for n in stream.recurse().addFilter(note_filter):
offset = n.offset # offset from song start in beats
note = n.pitch # letter of the note, e.g. C4, F5
midi_note = n.pitch.midi # midi number of the pitch, e.g. 60, 72
duration = n.duration # duration of the note in beats
instrument = n.activeSite.getInstrument() # instrument voice

我想弄清楚该流中的每个音符属于哪个轨道。例如。当我在 GarageBand 中打开文件时,音符会组织到轨道中:

enter image description here

mido 中,每个 MidiFile 都有一个 tracks 属性,其中包含每个轨道的一个音符列表。

有没有办法让music21达到同样的效果?任何帮助将不胜感激!

最佳答案

音乐轨道被解析为单独的 stream.Part 对象,因此,如果您避免展平它,您只需遍历生成的 stream.Score 部分即可(在这里,我刚刚使用 converter.parse() 生成了一个流:

s = converter.parse('1079-02.mid')
for part in s.parts:
for note in part.recurse().notes:
print("I WAS IN PART ", part)

或者查找包含的部分:

s = converter.parse('1079-02.mid')
for note in s.recurse().notes:
part = note.sites.getObjByClass('Part')
print("I WAS IN PART ", part)

我怀疑你真的需要压平任何东西。祝你好运!

关于python - Music21:获取音符的轨道索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62332985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com