2017-03-06 7 views
2

Je suis en train d'analyser un fichier MIDI comme indiqué here. Mon code ressemble à ceci:Music21: Obtenir toutes les notes par instrument à partir d'un fichier MIDI

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

La liste components contient maintenant des données comme suit:

<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>, 

Mon but est de séparer les notes en fonction de chaque instrument qui figure dans une balise comme <music21.instrument.Instrument Electric Guitar>. Comment puis-je y parvenir?

Répondre

1

Je pense que vous voulez la fonction instrument.partitionByInstrument(), qui va séparer votre flux en différentes parties en fonction de l'instrument.

+0

Merci beaucoup pour votre réponse. J'apprécie vraiment cela. Cependant je rencontre l'erreur lors de l'exécution suivantes: instruments = instrument.partitionByInstrument (fichier) StreamException: l'objet (, id() = 140306780864464) est déjà trouvé dans ce Stream (, id() = 140306889172688) – sri

+0

Je demande pour des suggestions sur ce – sri