python - Music21:获取音符的曲目索引
问题描述
我有一个用music21 阅读的多轨midi 文件:
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 中打开文件时,音符被组织成轨道:
在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.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)
我怀疑你真的需要压平任何东西。祝你好运!
推荐阅读
- vue.js - Axios Pre-flight 请求正在获取 Access-Control-Allow-Origin 但是错误说标头不存在
- c++ - C++ 文件->SendRequest 返回 ANSI 而不是 UTF8
- javascript - 使用javascript将数据发送到php文件
- python - 使用 python 从 xml 获取数据时未正确生成输出 xml
- xamarin - 带有 WorkManger 的 Xamarin 表单
- javascript - 包裹在共享库中的 cls-hooked 不起作用
- jenkins - 如何覆盖我的全局代理以在詹金斯声明性管道中的另一个代理上运行特定阶段?
- java - 如何使用 Glide 下载多张图片?
- python-3.x - discord.py ClientConnectorError 引发处理
- r - 如何跨用户 ID # 应用 if else 语句?