2017-03-06 214 views
2

我按照說明here解析MIDI文件。我的代碼如下所示:Music21:從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

我想你會想要instrument.partitionByInstrument()函數,它會根據儀器將你的流分成不同的部分。

+0

非常感謝您的回覆。對此,我真的非常感激。但是,在執行以下操作時遇到錯誤: instruments = instrument.partitionByInstrument(file) StreamException:對象(,id()= 140306780864464)已經(),id()= 140306889172688) – sri

+0

我要求對此提供任何建議 – sri