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.
|Drum||GP6 Note||AD2 Note|
|Tom very low (hit)||F2||F4|
|Tom low (hit)||G2||G4|
|Tom medium (hit)||A2||A4|
|Tom high (hit)||B2||B4|
|Tom very high (hit)||C3||C5|
|Snare (rim shot)||D2||C#2|
|Snare (side stick)||C#2||F#2|
|Pedal hihat (hit)||G#2||B3|
|Crash medium (hit)||C#3||G5|
|Crash high (hit)||A3||F5|
|Cowbell high (hit)||G#3||N/A|
|Cowbell medium (hit)||G#3||N/A|
|Cowbell low (hit)||G#3||N/A|
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’.
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!
Hopefully this is as useful to anyone else as it is to me.