MIDI into PYRAMID - definitive guide. (Windows 10)

Of course, we could also just turn this into a definitive guide that does describe all the known methods :smile:

So here’s my take. Requires Python 3 and Mido library, both open source software available free of charge, and you can consider this little scriptlet to be public domain:

 #!/usr/bin/python3

import mido
import sys
import os.path

if __name__ == '__main__':
    mid1 = mido.MidiFile(sys.argv[1])
    if mid1.type == 1:
        projpath = 'PYRA_%s' % sys.argv[2]
        os.mkdir(projpath)
        for i in range(1, len(mid1.tracks)):
            trkname = os.path.join(projpath, 'track%02d.mid' % i)
            origname = mid1.tracks[i].name
            mid0 = mido.MidiFile(type=0)
            mid0.tracks.append(mid1.tracks[i])
            print('Saving track %02d (%s) as %s' % (i,origname, trkname))
            mid0.save(filename=trkname)

With the official sample material of the thread, here’s what I get:

[pmatilai@mursu mid2pyra]$ ./mid2pyra.py 'Dave Brubeck - Take Five 1.mid' 'Take_Five'
Saving track 01 (Acoustic Bass) as PYRA_Take_Five/track01.mid
Saving track 02 (Acoustic Grand Piano) as PYRA_Take_Five/track02.mid
Saving track 03 (Alto Sax) as PYRA_Take_Five/track03.mid
Saving track 04 (Acoustic Grand Piano) as PYRA_Take_Five/track04.mid
Saving track 05 (Acoustic Grand Piano) as PYRA_Take_Five/track05.mid
Saving track 06 (Acoustic Grand Piano) as PYRA_Take_Five/track06.mid
Saving track 07 (Acoustic Grand Piano) as PYRA_Take_Five/track07.mid
Saving track 08 (Acoustic Grand Piano) as PYRA_Take_Five/track08.mid
Saving track 09 (Drums) as PYRA_Take_Five/track09.mid
Saving track 10 (Acoustic Grand Piano) as PYRA_Take_Five/track10.mid
Saving track 11 () as PYRA_Take_Five/track11.mid
Saving track 12 () as PYRA_Take_Five/track12.mid
Saving track 13 () as PYRA_Take_Five/track13.mid
Saving track 14 () as PYRA_Take_Five/track14.mid
Saving track 15 () as PYRA_Take_Five/track15.mid
Saving track 16 () as PYRA_Take_Five/track16.mid
[pmatilai@mursu mid2pyra]$ 

The whole thing takes less than a second, and should work on any platform where Python is supported. This too will lose time signature and tempo, some of that might be fixable depending on how Pyramid stores things, but not here and not now :slight_smile:

5 Likes