Keep reading for some insight into the solution.
MIDI files are the universal standard for music data such as musical notes, when they are played and how long each note is held. They work great for the majority of instruments that follow a standard notation; however there are some inconsistencies when interpreting music for percussion instruments.
I encountered these inconsistencies when trying to move a drum composition from Guitar Pro 6 into Addictive Drums 2; the way in which drum notes are recorded in the MIDI format means that one program may interpret them completely differently to another.
My solution to this was to write a tool that translates .mid files originally written in Guitar Pro 6 (GP6) to the format understood by Addictive Drums 2 (AD2).
Currently the only solution and advice I have come across is to “re-write your composition in AD2” so this should be a better way.
A MIDI track stores each note as an ‘event’. For example; if we are recording notation for a piano and pressed one of the keys then the note itself will be recorded as a MIDI event along with other data such as how long to play it for and the velocity that the piano key was hit. This all transfers relatively well to percussion instruments but with one difference, where on a piano (and most instruments) the location of the note is a constant, the individual drums of a percussion instrument do not seem to have a constant note attached to them, so the judgement of how to record the MIDI event is up to the software’s author, Developer ‘A’ may decide that ‘kick drum’ events are recorded as the note C4 and Developer ‘B’ may have already decided that their ‘Snare‘ is recorded as the note C4, so a MIDI file from developer A when played back in Developer B’s software will play the snare drum where the kick drum was expected. This is exactly the case between GP6 and AD2.
To create a solution to this, I started with compiling a list of each musical note that each drum was mapped to in the respective softwares. I managed to find a 1 to 1 map for every entry apart from ‘Cowbell’ since I could find no specific mapping for it in AD2.
Next I found a map online of the integer values used by MIDI to describe each musical note, I compiled another version of my mapping but using the MIDI codes instead of the musical notes.
Lastly I wrote a small tool that would search for a drum track inside of a MIDI file (in later revisions of the MIDI specification the drum track is always Track 10, but instead of relying on this I look for any track that has ‘drums’ in its title as this seems to be more accurate) and after finding this track, work through it note for note; substituting the GP6 MIDI note number for the AD2 equivalent but keeping the other existing values (such as timing) untouched.
The result is a tool i’ve named ‘Pro2Addict’ that outputs drum tracks to AD2 exactly as your score intended, no more need to write the same piece twice!
Hopefully this is as useful to anyone else as it is to me.