New Projects - Fresh from the Labs

Tiny Ear Trainer—Color-Based Interval Training (

An ongoing fascination of mine has been with Synaesthesia: the crossing of senses, often leading to new and unique perceptions in the mind of the “Synaesthete”. This is particularly common among musicians (myself included) where individuals will “see” sound as color, possibly along with shapes, numbers, textures and so on. It seems that Jonas Wagner has the concept of linked sound and color quite firmly embedded in his own thoughts when it comes to his program Tiny Ear Trainer—an ear training program designed to teach you musical intervals with color association.

To quote the Web site: “Tiny Ear Trainer is a tiny piece of software that helps you recognize musical intervals. Tiny Ear Trainer is free/open-source software written for the GNU/Linux operating system.” According to the Web site, its features include:

  • Associates colors to intervals.

  • Features learning mode, which plays intervals together with color and name.

  • Plays harmonic or melodic intervals.

  • Uses fluidsynth/soundfonts for playback.

  • Uses Python/GTK.

  • Is tiny!

Tiny Ear Trainer takes the unique approach of teaching musical intervals through color association.

Making Tiny Ear Trainer work with JACK can be tricky for a first-timer, but all you need to do is connect “fluidsynth” with “system”, and you're away.

Tiny Ear Trainer gives you a number of useful options from which to choose (including a learning mode), all in one concise package.


i386-based Debian and Ubuntu users are in luck as a .deb file is available at the Web site. For those using other systems, the obligatory source tarball has been provided, but thankfully, the library requirements are fairly modest and don't require anything particularly obscure for installation. The documentation says you need the following:

  • Python 2.6 (2.5 might work too and will require simplejson).

  • PyGTK >= 2.10.

  • fluidsynth.

  • A soundfont (fluid-soundfont-gm).

Once you have the needed libraries, download the latest tarball, extract it, and open either a terminal or a file manager inside the new folder. For those with a modern file manager like Nautlius or Dolphin, you can install Tiny Ear Trainer simply by clicking on the file, where you'll be prompted to enter a root password. For those with a minimalist system, or those who prefer the manual method, you can install it by entering the following command either as root or by using sudo:

# python install

Once the installation has finished, Tiny Ear Trainer should be in your system menu, or you can run it by entering:

$ tinyeartrainer


Before going any further, I must warn you that Tiny Ear Trainer uses JACK. That's not a bad thing, but it can be tricky getting it to work for the uninitiated (experienced JACK users will have no trouble at all and can skip the next few paragraphs).

First, start JACK. Most people will be using the JACK Audio Connection Kit, which usually can be found in your menu as JACK Control, or you can run it from a terminal with the command qjackctl.

Now, click Start inside the GUI, and if you're lucky, it will start straightaway. But, I wasn't lucky. This was the first time I'd used JACK with this distro, and it came up with an error that I didn't understand until I looked further into it. You may encounter this too. JACK usually is set up by default to run in real time, generally coupled with a real-time kernel. Real-time kernels crash constantly on my hardware, so that wasn't an option for me. In this case, my only real choice was to disable real time in the Settings tab in the Setup option.

Now that JACK is running, start Tiny Ear Trainer, and in the JACK Audio Connection Kit, click Connect on the bottom left, and open the Audio tab. In the left pane under Readable Clients/Output Ports is the client fluidsynth, and in the right pane under Writeable Clients/Input Ports is the client system. Click on fluidsynth on the left and system on the right, and then click the Connect button on the bottom left, and you should be good to go.

Back over to Tiny Ear Trainer—the program will be sitting idly with a blank screen (presumably so you can connect to JACK in the meantime) until you click the Play button. When you do, several notes will play in a randomly chosen interval (for instance, a minor third), and when the notes are over, it will tell you what was played along with a colored background. This builds your association between sound and color, as well as trains your ear to intervals.

Now, let's take a look at the Preferences screen. Two default soundfonts usually are provided for you under /usr/share/sounds/sf2, but if you don't like these soundfonts, don't have any or want to change the instrument (a guitar springs to mind), you can change the soundfont with the Soundfont option at the top. The next option, Learning Mode, is equally important. Learning Mode plays the sound with the color at the same time (instead of a black screen), so you can learn it now and test yourself later.

From here onward, the options start getting musical. You can choose whether notes are played together, which intervals to play from a long list, as well as the all important key in which they'll be played (with the default being the obvious C). I recommend starting off with Learning Mode with only several intervals selected, testing yourself on these, and then gradually adding more to the list.

I'm not sure if Synaesthesia is what Jonas really had in mind, or if he just happened to strike upon the same theme, but this is the first time I've come across what Synaesthetes always have seen in their minds being used practically. Of course, it all could backfire as some other Synaesthete shouts, “No, no, a major third is light green, damn you!”, but personally, I look forward to the inevitable color arguments with glee.


John Knight is the New Projects columnist for Linux Journal.