This is a project that Steve brought up that I really enjoyed doing. A little history:

A couple weeks ago, Bomb the Music Industry! did an ipod tour and Jeff was like "hey bring instruments and play along!" so I decided to tab out a few songs for Steve and I.

However, I play bass clarinet (which is in Bb) and he was going to play alto sax (in Eb) for this, so after I tabbed out a song for myself, I got to transpose it for him. This wasn't hard (they're a prefect 5th apart) but it was extremely tedious.

After one of our practice sessions, and me mentioning how much I hated the transposing, Steve brought up the idea of me writing a program to do it for me. I decided that was a good idea and promptly forgot about it until recently. I banged this out in a few hours and then spent an hour tracking down a decidedly stupid mistake (don't even wanna talk about it) and here we are!

As of now it's only available in C++, but I am going to learn Java by porting it and I will also port it to PHP because I love using PHP a whole lot. I don't know when that will happen, but it'll be soon!

So what this does is take in a properly formatted horn tab text document (no MSWORD or OpenOffice stuff) and transpose it from one key to another. All you need to do is provide it with the tab file, the original key and the key to transpose to. I don't know if this will work in windows (I don't see why not though), so here is how to do this in linux.

  1. Get or write a properly formatted input file
  2. Compile the program "g++ htt.cpp"
  3. Run it like so "./a.out PlanningDeathBb.txt Bb Eb PlanningDeathEb.txt"
  4. This will create the file PlanningDeathEb.txt (unless you have really weird permissions) in the key of Eb
  5. Get drunk and play BTMI covers!

Here is an example of the finished file, PlanningDeathEb.txt and here is the program itself, htt.cpp. I should mention that this is Copyright 2010 Scoot Johns Productions ( and is released under the GPL Version 3 license. You can get a copy here or

Oh yeah, a file is considered properly formatted when any lines that do not contain notes are commented out by placing a '#' at the beginning of it. Any lines containing notes should not contain any other capital letters or any words for that matter, please only place them behind the comment character Of course, grouping symbols '}' and times symbols "X 3" are alright, really the only characters to look out for are A-G, b and #. The '#' denotes a sharp (raise pitch by one semitone) and the 'b' denotes a flat (lower pitch by one semitone). This program does not currently recognize the +/- standard of notating accidentals.

You can just check out the linked files and see for yourself.

Head back home.