MIDI into PYRAMID - definitive guide. (Windows 10)

After a lot of hassles trying to get to the differences of the different midi formats, I have now written a definitive guide on how to get Internet downloaded midi files into the Pyramid. I have done so on my BLOG as it took quite a while to get all the technology “gelled”. It is quite a workaround, but you are guaranteed:

  1. You will not breaking any copyright issues with “underground” software.
  2. You will get an ABSOLUTE copy of the midi file onto Pyramid.
  3. Tempo will be lost, but that is something out of this scope.

Have a look at: Voyetra on Win10 – Pyramid midi - I hope I am not offending anyone with this message, nor with the Blog-posting. Everything I wrote is to get the user not only to understand the process, but to also successfully re-create the process.

kind regards
cyber7 - AKA Aubrey Kloppers; Cape Town; South Africa


I’d hardly call it ‘definitive’ guide , as it’s about the most complicated way I can think of getting MIDI into the pyramid… especially as mosts users will already have a DAW installed that they can use.

seriously there is no ‘workaround’ necessary

if anyone wants to use an existing midi file on a pyramid, just copy it into an existing project as “track01.mid” or whatever. you may find you need to pre-edit the midi data, if its got a lot of data, and thats easy to do in any (free) daw, or whatever fancy…

its thats simple… no particular software is needed.

as for the difference between type 0 and 1 is trivial. (which you don’t even cover)

type 0 = deals with one track , so is used on the pyramid when you dont use patterns
type 1 = multitrack midi, pyramid uses this to represents patterns on tracks (since now a track as more than one midi file)

so IF you want to use patterns, you need to make sure the file is type 1.
all software supports type 0, many support type 1 for import - many modern daws support type 1 export.
(see details in my previous post )

as for your comments about the pyramid manual… I know zero french, just english and have absolutely no trouble understanding it. I think why some people struggle is its written more a reference manual style than a ‘user guide’ - this means you should read it fully once, and then initially keep it close by when using the pyramid to look things up… this worked well for me, since the Pyramid is very intuitive to use.


Thank you for your comments. Please do me a favor and use the same midi file (take5) and create a complete example how to load this as a MIDI TYPE 1 into the Pyramid. If you can do this for me (us) who has been asking (Look at all the messages), it would be great. If you can not do it, please refer to https://squarp.net/modesaveload#ancre06 and tell me exactly how it works and what it means.

I have been involved with MIDI for the last 30 years and was (1) a beta tester for Cakewalk, Voyetra, Ableton and Cubase (2) a Systems Engineer with a background (search for J@KER/R@DIUM) of reverse engineering some interesting code. This “import” from Squarp has me stumped and even Jean from Squarp could not really assist.

I have a working solution, although initially with a bit of workaround, that can be replicated 100% with ANY midi file (as Midi 0). Do you have anything constructive to add? Just asking…

1 Like

The problem here is that this is a bit of an apples and oranges discussion.

If you grab a random MIDI song file off the 'net, such as the Take Five example here, it’ll typically be a MIDI Type 1 file where all the tracks for the different instruments are stored in a single file. However as the manual says, Pyramid uses the Type-1 format to store per-track patterns, which is semantically incompatible with how a normal “MIDI player” will use it. And vice versa.

So yes, to import a song file such as that Take Five example into the Pyramid in a way that’ll make sense and be actually playable, you’ll need to export each track in that song file into a separate (Type-0 or Type-1) file, and copy those files into the Pyramid. What @cyber7 has done here is document one way to achieve it, and kudos for that. But there are any number of ways to achieve this with a number of tools both free and commercial, and technically you should be able to do this with Pyramid itself too (copy-paste the pattern contents one by one to separate tracks) if memory permits.

What @thetechnobear is objecting to is that you need no such thing when you’re bringing a single instrument MIDI track from a DAW to the Pyramid, you just drop into the Pyramid project directory and go. It could be a complicated track created on a DAW or just recorded elsewhere originally, it might be a track originally recorded on Pyramid but brought over to DAW for editing and then back to Pyramid, whatever. It’s simply a different use-case, and I’d assume this one to be the more typical import use-case for folks on this forum.


Ive already told you how to do this at least 3 times, its hardly like you were just given a reference to the manual, a number of us have given you detailed instructions, in each of the threads you kept posting in!

anyway, challenge accepted…
a) create a project called take 5,
b) take your SD card, plug into your sdcard reader
c) download your file , drag it into your DAW (I used Ableton)
d) for each track (that actually has some data!) , use export clip , choose PYRA_take5, name track 01.mid
e) repeat (d) for each track with data

now load on pyramid…
f) set the track length to 233 bars for each track. ( a step your ‘definitive guide’ fails to mention is necessary!)
g) set tempo of project (167 bpm)

press play on pyramid - done!

optional step…
g) you might want to go the the pyramid CC screens, and remove automation/program changes - or setup your synth to respond appropriately

(note: any daw will work, even a free daw. all allow import of type 1, and export of type 0)

its thats simple, import midi file, save as track01-trackXX.mid
… which of these steps, did I miss in my earlier replies on other posts to you?

in this particular case the whole type 0 , type 1 is a moot point, as the manual says

so if you want multiple tracks (as you do for a ‘song’ not patterns’) , then you want type 0, which is what most daws will output anyway, when you select a single track.

why did I post?

Im happy you have found a workflow that works for you

but I think it would be really unfortunately, if some future pyramid owner came along, and thought this was how you had to ‘import’ midi files, that this was the ‘definitive way’ - because as i said, it’s not, its convoluted, and largely unnecessary.

even if a user followed this and it worked, they would also have a false understanding, that some how Voyetra or some other tools is needed, when it isn’t … the pyramid is using plain midi files, and thats a great thing, there is no ‘import’ process. ( something I clearly explained on my other post)

if it had been entitled something - “a windows utility to convert midi type 1 into type 0” , that be fine,
but your title and text tries to claim something else.

this is my objection @pmatilai, the claim that some particular tool is the ‘definitive’ way,
in the same way, as if I said you had to use a DAW, or you have to use Cubase, or Ableton Live


even if a user followed this and it worked, they would also have a false understanding, that some how Voyetra or some other tools is needed

How would they get this impression after actually reading this guide? The reasons for cyber7’s workaround are very explicitly stated. They even admit that it is “quite a workaround,” but point out why such a workaround might be useful. They even explain their motivations for the choices made. If someone comes away with the impression that this is the only method, or the official method, they have misread the post from the word go.

1 Like

Yes I realize that, sorry for putting (wrong) words into your mouth.

Like you said, absolutely nothing wrong with guides like this, it’s just the title that’s misleading. That’d be easy to fix.

Because of the misleading title? The actual blog posting explains it in more detail but so many people will only ever see the title and the initial posting, which does give an impression that getting MIDI files into Pyramid is somehow hard in general.

1 Like

I can agree about the title, but just to play devil’s advocate, the title itself doesn’t give any impression that it’s difficult, whereas if they read more than the title, even just the initial posting states that this is a workaround based on special conditions. So no matter how much they read, I don’t see how one could come away with the impression of difficulty.

But yes, it’d be best for everyone if the title was adjusted :slight_smile:

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:


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]
        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)
            print('Saving track %02d (%s) as %s' % (i,origname, 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:


This is awesome! I did not think of using python to get the same results.

As for my blog posting. The point of the posting was to show (1)what I discovered, (2)how to achieve an end goal and (3)getting the same results EVERY TIME.

If I offended anyone with the title, it was not meant that way, once again it all goes into the translation from one mother tongue to the next…

As for constructive criticism by @technobear, I took it as posted. At least a question asked and not answered over and over again (how to get midi downloaded from the internet into Pyramid) is now answered. Granted, not the most elegant method, but a repeatable method with very limited tools.

As a last point. Anyone reading this posting and the blog posting is doing so to get a job done without having his entire experience sucked into a DAW. It is actually very easy, once set up, and was done to show anyone how to do it without the distractions of DAW installation, plugins, layouts, and more. Voyetra actually looks like Pyramid and for the age (30 years+) of the software, very close workflow as Pyramid.

kind regards
cyber7 (aka Aubrey - Cape Town - South Africa)

I have added your post to the BLOG. Thank you again for the script.

kind regards
cyber7 (aka Aubrey)

Ok wow this all finally makes sense to me. After reading your blog post I was very confused by… well plenty of things - like what are the steps trying to accomplish, why they are necessary, and how the Python 3.x steps related to the DOS-emulator Voyetra steps. There is zero indication that the Python steps are written from the perspective of a different person or that they are wholly independent of the information preceding it.

"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:"

The Python steps are your take? Whose take are the DOS/Voyetra steps before that? I feel this section should really be explained more from the perspective of the author of the rest of the post.

Sorry to say, but this method does not work “out the box” 100%…

Oh, sure it wont.

Conceptually it is entirely cross-platform and should run as-is on any Python platform. However the procedure to get to a working Python installation including the Mido library and the script into a self-executable state will vary a lot from platform to platform, which is why I left it out entirely. On Windows you’ll also need to invoke it differently from what’s in the example, that only works on unix-based systems (Linux is what I use). I’ve never even seen a Python installation on Windows so can’t detail out how it should be run there.

I do intend to enhance the script in various ways and actually document the procedure for setting it all up, one of these days. I’m reluctant to do anything at all on Windows, and OS X I have no access to at all, so if somebody wants to lend a hand documenting those I’d appreciate it.

1 Like