Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How merge or Concatenating two midi files in python

I am working on a project which is producing midi files as output. But those midi files are very short and i want to merge or concatenate them to produce a single long midi file. I am using python-midi library and there is not so much information or documentation about this library. I tried with this program but its giving error :

import midi
pattern=midi.read_midifile("kl.mid")
track=midi.Track()
pattern2=midi.read_midifile("oi.mid")
pattern.append(pattern2)
midi.write_midifile("aaka.mid",pattern)

error :

    Traceback (most recent call last):
  File "lp.py", line 6, in <module>
    midi.write_midifile("aaka.mid",pattern)
  File "/home/userdf/.local/lib/python2.7/site-packages/midi/fileio.py", line 152, in write_midifile
    return writer.write(midifile, pattern)
  File "/home/userdf/.local/lib/python2.7/site-packages/midi/fileio.py", line 102, in write
    self.write_track(midifile, track)
  File "/home/userdf/.local/lib/python2.7/site-packages/midi/fileio.py", line 116, in write_track
    buf += self.encode_midi_event(event)
  File "/home/userdf/.local/lib/python2.7/site-packages/midi/fileio.py", line 125, in encode_midi_event
    ret += write_varlen(event.tick)
AttributeError: 'Track' object has no attribute 'tick'

I googled a lot but have not found a way to add two midi files via python. Let me know how can i do it ?

Thanks in advance.


1 Answers

read the midi files and save the patterns

pattern1 = midi.read_midifile(file1)
pattern2 = midi.read_midifile(file2)

then read each track from each pattern

pattern = midi.Pattern()

for track in pattern1:
    pattern.append(track)

for track in pattern2:
    pattern.append(track)

finally save the file with new pattern

midi.write_midifile('sound.mid', pattern)
like image 77
Giulio Imperato Avatar answered Dec 16 '25 05:12

Giulio Imperato



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!