Transposer masthead

History

A very brief history . . .

This started out as my first major project in C++, then, my son has joined me in a collaborative approach. We ended up deciding to re-write the project in Pascal using the Lazarus IDE. We've found the Lazarus way of programming GUIs is very productive. Yes, yes we know it is based on work that was done known as DELPHI, but Lazarus is free and crossplatform.

Here is a rough idea of what the version numbers mean. I, abudeveloper haven't bothered to upload versions earlier than 0.3 since the software was not really functional and I had changed my design a number of times:

Version Date file uploaded Description
0.56 30-Jan-2012 BETA, bug fix, fixed up menus
0.55 1-Jan-2012 BETA Nothing fancy, but it works!
0.5 15-Sep-2011 PRE-ALPHA collaborative rewrite with GUI, but not much else.
0.4 19-June-2010 rough and ready gui version of the program
0.3a 8-Feb-2010 bugfix with input and output file parameters
0.3 6-Feb-2010 clarified the classes design and got the prototype working
0.2 never got back to the class design idea and created a test bed for the needed classes
0.1 never scrapped the class idea and tried to implement it all in main.cpp
0.0 never planning and fooling around with a class design

Release numbers and their meanings

I think our releases from now on will be X.YZ, where X represents a major milestone, Y represents a significant step (maybe not quite as earth shattering as an increment on the X number). Finally Z, if it is an even number, will indicate that the release is a maintenance release (bug fix, or cleanup), whereas if it is odd, then the release is a feature release.

This is going to need some clarification, but that is a kind of roadmap for now.

A wordy trip down memory lane

Release notes, version 0.56 (bug fixes)

Our friend Anthony discovered that if the word "ending" was on a line by itself, transposer would transpose the word. We decided to fix this problem by adding a tool that the user can create a custom list of words to not transpose. In this version we added a new About form, and finally we made sure all the menu items actually do something. When we were writing this software we got so used to using the basic controls that are presented on the window, that we never bothered to use the menus and had forgotten to connect them to their functionality. OOOPS!

Release notes, version 0.55

This is a two-pane GUI. The left hand pane is a text editing window which presents the song to transpose,while the right hand pane is where the transposed song appears after transposing the original song from one key to another. After having got it working, we realized that we had forgotten to put any functionality into most of the drop-down menu items. That is perhaps because the program (we feel) is so intuitive that there isn't any need to use the menus. So, obviously the next release is going to clean that up.

The buttons on the window are self-explanatory, such as, Open, and Save which only work on text files at this point in time. The other buttons Transpose, and Quit complete the basic GUI buttons. The only other controls in the window are the spin boxes for selecting the orignial song key, and the transpose key. Of course if these are both set to the same value no transposing takes place.

As would be expected all these functions are available through the pull-down menus, but we think it is easier to just use the controls provided in the GUI window.

At this point in time, we haven't provided any facilities for printing, or anything more than basic editing features. So this version does not include anything fancy such as the ability to change font attributes, nor any fancy editing features such as find/replace. So this version is quite basic, but it has been reasonably well tested and does the basics well enough.

As you probably noticed already, this version is BETA. You might have been confused that Version 0.5 was ALPHA, and PRE-ALPHA, whereas Version 0.4 was BETA. Read on to get some understanding of what happened.

Release notes, version 0.5

New team member hails the beginnning of a collaborative approach!

My son, known as iamslinger, has joined me in a collaborative approach to re-writing transposer from scratch using the Lazarus IDE. The first order of business was to re-factor the GUI, and set up the basic edit fields. Right now it sort of acts like a very simple text editor.

This was the beginning of the collaborative effort, and we switched programming languages to Pascal, using Lazarus IDE, because my son wanted to learn Pascal. (We love working in Lazarus.) So version 0.5 was just the basic GUI framework, with no guts, that is why we called it PRE-ALPHA / ALPHA, it didn't do much more than provide a proof of concept on a very different GUI arrangement than the previous version. And that is the beginning of a complete rewrite of the software.

This version is a complete rewrite of transposer using a different development environment, a different GUI idea, and a different author base. From the user's point of view, the main difference is the GUI redesign. The new GUI is a two-panel approach. We think the layout and the design of the window is more intuitve and more useful than the last GUI. The two panels are where the song is edited, entered, or transposed. The left panel is the original song you wish to transpose, while the right text panel is the transposed song.

Version 0.4

This was the first working GUI version of the program, before that time it was simply a command line tool. Then, when my son and I decided it would be fun to develop together, we started over again from scratch. Up until we began collaborating, I had been developing in C++, and then I used QT to do the gui programming. That is what led to version 0.5.

I had forgotten about this project for a long time, and recently thought I would try to write a GUI for it. Of course I had to play around with a lot of examples and figure out which GUI toolkit to use. I have settled on using QT. It is really full and I like the elegant solutions that this set of libraries brings to the developer.

Right now I have only uploaded binaries for mac OSX (Leopard, and Lion, probably earlier versions too), and windows (XP, Vista, 7). I'm having a bit of trouble packaging for Debian (a bit of a learning curve for me when I get time). Of course, the source is available for download right now. Just click on the download button above. If you have a reasonably current QT toolkit on a mac, windows, or linux machine, you should be good to go. I have been developing with version 4.7, on my mac, and I've been able to build a working version on a windows box and a linux box in addition to my mac.

Version 0.3a

This was a release to fix some serious bugs from version 0.3. If you want to know the details, just download the source for version 0.3a. I've just recently found it while trying to remember what the issues were. Look for BUGLIST.txt in versions more recent than version 0.56.

Version 0.3

This is the first uploaded version of transposer. This program expects a song saved as a text file for its input. The way to represent songs is to have standard chord letters and their suffixes including bass notes written on a line by themselves. The other kind of line is known as the lyrics line, or perhaps there might be instructions given to the instrument player, such as, play real fast, or chorus.

The lines which contain chords is what we will call a chord line. Transposer expects to only see chords on the chordline, if it sees anything other than valid chords on a chord line, that line is treated like a line of lyrics. Transposer is able to handle bass notes following a chord, such as E/G, where the E is the root chord, while the G is the bass note.

Although I've not tested many songs with Transposer, nor have I written extensive error handling in the code, I think it is fairly robust and can handle most normal things. If you throw really weird stuff at it, I wouldn't be too surprised if fails, but for the most part I think the results should not be that surprising.

How to use Transposer (CLI versions)

transposer [show w|c]|[infile outfile]

if you type show w, or show c you will be shown the warranty, and copyright information, then you will be asked to supply input and output file names.

if you just type transposer, then you will be in interactive mode where you will be asked to supply input and output file names.

After you have entered input and output filenames, or if you had already typed these as parameters, then you will be asked to supply the original song key chord, and the key that you wish to transpose into.

As an example, let's say you typed in the Happy Birthday song and saved the file as happy.txt, issuing the interactive command: transposer would cause Transposer to display the following:

screenshot at startup

Then after pressing the Enter key, you would see the following screen:

screenshot after key press

Then you are prompted for the original song key, and the key you want to transpose to. Your screen should look like:

screenshot after entering chords

For example, the original chord of F, and the chord to transpose to, let's say Gb.

After entering the original chord as F, and the chord to transpose to, as Gb, the output file happy.transpose should look something like:

 
		Gb                Db
		Happy birthday to you,
	                          Gb
		happy birthday to you,
	                            Bb
		happy birthday dear frie-end,
		           Gb  Db Gb
		happy birthday to you.

Development

Transposer is being developed on my macbook using QT creator. Right now it works fine on my virtual computers running on my mac. I had no trouble building it in linux (Xubuntu 9.04) nor in windows XP (SP2).

Dedication

This project is dedicated to my friend Anthony who wanted software to transpose some songs.

made with bluefish logo HTML5 logo Valid CSS!