Music21:从MIDI文件中获取每个乐器的所有音符

5

我按照这里的指示解析MIDI文件。我的代码如下:

from music21 import converter,instrument # or import *
file = converter.parse('sample.mid')
components = []
for element in file.recurse():
    components.append(element)

组件列表现在包含以下数据:components
<music21.stream.Score 0x7f50314ca390>,
<music21.stream.Part 0x7f50314caf10>,
<music21.instrument.Instrument Acoustic Guitar>,
<music21.instrument.Instrument Acoustic Guitar>,
<music21.tempo.MetronomeMark allegro moderato Quarter=130.0>,
<music21.meter.TimeSignature 4/4>,
<music21.note.Note E>,
<music21.note.Note B>,
<music21.note.Note E>,
<music21.note.Note B>,
<music21.note.Note E>,
<music21.note.Rest rest>,
.
.
.
<music21.chord.Chord B3 E3>,
<music21.chord.Chord B3 E3>,
<music21.chord.Chord B3 E3>,
<music21.chord.Chord B3 E3>,
<music21.chord.Chord B3 E3>,
<music21.chord.Chord B3 E3>,
<music21.chord.Chord D4 F#3>,
<music21.chord.Chord D4 F#3>,
<music21.chord.Chord D4 F#3>,
.
.
.
<music21.stream.Part 0x7f50309b99d0>,
<music21.instrument.Instrument Electric Guitar>,
<music21.instrument.Instrument Electric Guitar>,
<music21.meter.TimeSignature 4/4>,
<music21.note.Rest rest>,
<music21.note.Note E>,
<music21.note.Note F#>,
<music21.note.Note G>,
<music21.note.Note A>,
<music21.note.Note G>,
<music21.note.Note E>,
<music21.note.Rest rest>,

我的目标是根据每个乐器列在标签中的方式,将音符分类。比如像 <music21.instrument.Instrument Electric Guitar>。我该怎么做?
1个回答

2

我认为你需要使用 instrument.partitionByInstrument() 函数,它可以根据乐器将你的流分成不同的部分。


非常感谢您的回复。我真的很感激。然而,我在执行以下操作时遇到了错误:instruments = instrument.partitionByInstrument(file)StreamException: 对象 (<music21.tempo.MetronomeMark allegro moderato Quarter=130.0>, id()=140306780864464) 已经在此流中找到 (<music21.stream.Part Acoustic Guitar>, id()=140306889172688)。 - sri
我请求任何关于此的建议。 - sri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接