MIDI Translation From Guitar Pro 6 to Addictive Drums 2

Download my Pro2Addict tool: MacWindowsLinuxSource Code

Download from links above or 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.

Hit ‘Read More‘ to continue reading this article.

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 the notes that each drum was mapped to in the respective softwares.

DrumGP6 NoteAD2 Note
Kick (hit)B1C1
Tom very low (hit) F2F4
Tom low (hit)G2G4
Tom medium (hit)A2A4
Tom high (hit) B2B4
Tom very high (hit)C3C5
Snare (hit) D2D2
Snare (rim shot) D2C#2
Snare (side stick)C#2F#2
Ride (middle) D#3C4
Ride (edge) B3D4
Ride (bell)F3C#4
Pedal hihat (hit) G#2B3
Hihat (closed)F#2C3
Hihat (half)A#2D#3
Hihat (open)A#2F#3
Crash medium (hit)C#3G5
Crash high (hit)A3F5
Cowbell high (hit)G#3N/A
Cowbell medium (hit) G#3N/A
Cowbell low (hit)G#3N/A
Splash (hit) G3F6
China (hit)E3G6
 Note: Cowbell is marked as ‘N/A’ because I found no specific mapping for it in AD2

During my research I found that the MIDI format uses integer values to describe each musical note, I compiled another version of the list above but using the MIDI codes instead of the standard musical notes. The table shown below shows all the MIDI note codes. The final list of GP6 MIDI note code to AD2 note code I considered my ‘map’.

source : electronics.dit.ie

Next I wrote a small tool that would parse and 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!

Download Source code and binaries here on Github

Hopefully this is as useful to anyone else as it is to me.

Luke Hines

Luke is a husband, father and software engineer who enjoys spending his time in a multitude of technologies. If he's not writing software then he's probably on a motorcycle.

Leave a Reply

Your email address will not be published. Required fields are marked *