2

I am using Python and Music21 to code an algorithm that composes melodies from input music files of violin accompanied by piano pieces.My problem is that when I input a midi file that has two instruments, the output is only in one instrument. I can currently change the output instrument to a guitar, trumpet etc. even though those instruments are not present in my original input files. I would like to know whether I could write some code that identifies the instruments in the input files and outputs those specific instruments. Alternatively, is there any way that I could code for two output instruments rather than one? I have tired to copy the existing code with another instrument but the algorithm only outputs the last instrument detected in the code.Below is my current running code:

def convert_to_midi(prediction_output):

    offset=0
    output_notes=[]

     #Create note and chord objects based on the values generated by the model
    for pattern in prediction_output:

         #Pattern is a chord
         if ('.' in pattern) or pattern.isdigit():
             notes_in_chord=pattern.split('.')
             notes=[]
             for current_note in notes_in_chord:
                 output_notes.append(instrument.Guitar())

                 cn=int(current_note) 
                 new_note=note.Note(cn)
                 notes.append(new_note)

             new_chord=chord.Chord(notes)
             new_chord.offset=offset
             output_notes.append(new_note)

         #Pattern is a note
         else:
             output_notes.append(instrument.Guitar())

             new_note=note.Note(pattern)
             new_note.offset=offset
             output_notes.append(new_note)

R A
  • 21
  • 1

1 Answers1

2

Instrument objects go directly into the Stream object, not on a Note, and each Part can have only one Instrument object active at a time.