Baltimore Todolo

Eubie Blake composed the Baltimore Todolo in 1910.

I spent over 40 hours painstakingly transcribing this ragtime classic into LilyPond source code, without having viewed or referenced any other existing transcription. The idea was to generate sheet music that accurately represents the music exactly as played, as opposed to someone’s own approximate version of it. It’s gratifying to be able to play it just like Blake, complete with most of the proper timing and dynamics. It gives insight into the thought process and piano technique that makes his style unique, even clarifying some of the finger and hand motions he must have used.

When transcribing, it’s often difficult deciphering which notes are being played, especially in chords during noisy sections of music. This kind of transcription would not be possible without software like “Transcribe!” which performs a frequency analysis and allows the music to be played at speeds ranging from normal to very slow, without frequency shift – but also allows a frequency shift when it’s useful to better hear lower or higher notes. I often end up repeating a single chord for minutes on end while trying to reproduce the notes on my nearby piano keyboard until the right combination suddenly clicks in an “aha” moment.

In some cases it might appear a composer playing his own composition has made a “mistake.” However, one could reasonably argue that that’s not possible, especially since he never plays it the same way twice. For this reason I reproduce most of the oddities in the recording. Some of them include measure 8 (G+A), 56 (B-flat strike indicates probably played RH only), 67 (final F octave slid onto G), 82 (played even weirder than this), 84 (pounding almost indecipherable), 90 (the 2nd high D is played nearly as C, tied with the following C), 93 (he slides the 4th finger many times in Charleston Rag), 94 (odd RH), 96 (missing D-flat in LH).

Blake is often heard shouting phrases during live performances. Those are included for fun; I think I’ve got them right.

Like much ragtime music, this piece is to be “swung,” meaning that pairs of 8th notes are to be played more like triplet 8th notes, where an 8th rest is added in the middle of each pair. I note this at the beginning of the piece, then present the whole piece using plain 8th notes. I also have LilyPond add swing during MIDI generation. This method of writing swung music using plain 8ths is much preferable to what some transcribers do, which is to use a dotted 8th and a 16th. Besides resulting in a messy score, the rhythm is just wrong. The overly-pronounced swing irretrievably ruins the MIDI output. In this piece, the magnitude of the swing varies from considerable to barely detectable. I’ve tried to notate that using an asterisk for straight 8ths. There isn’t any standardized notation for that, other than by writing out the words straight eighths, which is overkill when just a few notes need to be straight, and frequently so.

The source recording I used was released by Columbia Records in 1969 and was made available on YouTube. I could only find this one version, unlike the Charleston Rag, which has a piano roll and at least three recorded performances by Blake himself. In the case of the Charleston Rag, my transcription is mostly accurate to a recording in 1972, but I also incorporated some details from an early piano roll that found more enjoyable to play.

Here is a cover page I designed using GIMP (the open source GNU image editor similar to Photoshop).

And here is a PDF of my transcription (4 pages):

Here is a MIDI file for download, and also an on-line MIDI player for instant gratification. This barebones MIDI player doesn’t do it justice, so I’d recommend downloading the MIDI and playing through a better program. LilyPond’s MIDI output is pretty good when using the “articulate” module. I also use a module that generates the swing (swing.scm), which I’ve further customized to exclude the small sections that are to be rendered as straight eighths.

Ice Cream Truck

My neighborhood in California is plagued by an ice cream truck that can be heard often from blocks away. Sorry if you have been subject to it. If so, you might want to skip this to avoid psychological trauma.


The usual software was used to transcribe (Transcribe!) and typeset (Lilypond) this music. Unfortunately, the MIDI generator in Lilypond does not arpeggiate arpeggios.

Recording Taken From Front Porch and Subsequently Transcribed

Valse Lente

A few years ago I received the gift of a Rhythm Clocks musical wall clock. Every hour on the hour, it plays one of several short song excerpts. Somehow I identified one of the songs (possibly using SoundHound?) to be a popular waltz from an opera of Delibes.

Title: Coppélia – Waltz from Act I – Valse Lente
Composer: Clémont Philibert Léo Delibes (1836-1891)

I downloaded sheet music for it, edited by Ricardo Boppré. It turns out it was a slightly simplified version that had also been transposed from E flat major to C major. With a GoPro camera I recorded myself playing it for YouTube, here. This has reached 20K+ views, not so deservedly, but this shows the song itself is quite popular.

More recently, I found the “original” E flat version upon which Boppré’s version clearly had been based. I decided it isn’t much more difficult, so I didn’t feel the existence of the C major version was fully justified, and wished I’d recorded the original.

Editor: Henri Heugel
Publisher: Heugel et Compangnie, Au Ménestral, Paris
Date: 1870

I typeset this version into the GNU LilyPond music formatting software. As with Le Chemin de Fer, I tried to make the output look just like the 1870 version, although I didn’t take it quite as far. Here is the LilyPond source file:

The MIDI file generated by LilyPond:

You can play the MIDI file in your browser using the tools from, but I recommend downloading the MIDI file and playing it natively.

And the PDF file of the sheet music:

With LilyPond, it is near trivial to transpose a piece. In the source code, I have two lines setting the variable “transposeKey”. Simply uncommenting one line or the other selects which key. For grins, here is the C major version of the sheet music:

Le Chemin de Fer

My first major project using the GNU Lilypond music typesetting software was to re-typeset the piano piece Le Chemin de Fer (The Rail) by Charles-Valentin Alkan. I had seen performances of this fun and ridiculously fast piece on YouTube and tried learning it myself.

Part of the motivation was to create a MIDI file to play it at Alkan’s insane indicated tempo of 112 to the half note, which equates to the right hand playing continuous scales and arpeggios at a rate of nearly 15 notes per second.

I had retrieved a PDF file of the M. R. Braun edition from here. It’s a fancy, historic typeset of this piece. I decided to see how close to identical I could get with Lilypond. It’s not perfect but I can’t imagine getting any closer with other typesetting software. Some of the challenges included:

  • A fancy title page containing some minor graphics requiring embedding raw PostScript, which I eventually converted to native \path commands.
  • With the addition of the title page, having to use a music function to make sure the subsequent page was numbered 1.
  • Customizing the book title markup to match the text appearing at the top of the first page.
  • The slightly archaic notation for dynamics, rests, etc.
  • Painstakingly replicating every dynamic mark (staccato), pedaling, page breaks, fingering numbers, stem directions — everything.
  • I couldn’t get the pedal glyphs to match, and although I was able to font matching fonts on a web search (, they are non-standard and non-free.
  • Working around MIDI player issues. I find that regardless of what software is used to play a LilyPond MIDI file on Windows, the first and last fraction of a second are each cut off. I’ve taken to including a little silence at the beginning and end to avoid this.

The LilyPond file is organized into 20 sections, 10 for the left hand and 10 for the right.

The MIDI file is automatically generated when LilyPond is run.

You can play the MIDI file in your browser using the tools from The speed is indeed ridiculous.

The final PDF file!

Watch an unbelievable performance of the piece. There are a surprising number of good performances on YouTube, plus many MIDI renditions.

Merry Go

If you’ve watched enough compilation videos on YouTube, it is likely you’ve heard Merry Go, a fast-paced, 2-minute ragtime-ish piano song published by Kevin MacLeod in 2010. It is one work out of a large body of high quality digital music that Kevin shares under the Creative Commons By 3.0 license, for anyone to use for any purpose, royalty-free. Not surprisingly, his music has become some of the most-used background filler on YouTube.

Here is a video of the audio of Merry Go by itself (because people upload stuff like that).

Depending on your mood and temperament, Merry Go can be either energizing or irritating. Because of the latter, someone had to do it: here is a video of the song playing for 10 hours. There is also a 1-hour version, a slowed-down version, MIDI transcriptions, and others.

Watching a useless video late one night, this song played, and it piqued my interest. Its use of sforzandos and staccatissimo is striking. It’s fast, but sounds simple enough. I decided to attempt a sheet music transcription. However, I quickly found out that the apparent simplicity belies a greater complexity than one would expect. There are a lot of notes! It got even more interesting as I discovered its origin..

A reproduction aiming for fidelity to the original would be most suitable for performance by MIDI and/or player piano. It is impossible to play on solo piano.

Using the Transcribe! software, I listened to Merry Go for hours in excruciating detail, at different speeds and octave shifts, in order to generate a transcription. To test for the presence of specific notes, I would listen carefully while hitting them on a keyboard while simultaneously looping short snippets of the audio, often just individual chords. There are several things that limit how accurately the notes can be divined. Some chords contain upwards of 10 simultaneous tones. Very quiet or low tones may get drowned-out. Artifacts of digital encoding and frequency scaling through re-sampling filters result in ghostly sonorities and sympathetic octave blurring. It took four or five passes/editions before I was satisfied I hadn’t missed too much. Nevertheless I’m sure Mr. MacLeod would cringe.

Having written out the initial transcription on music staff paper, I then coded it as a text file in the GNU LilyPond music description format. LilyPond is an amazing piece of software that reads a description and generates beautiful typeset sheet music in PDF format, as well as generating MIDI output. There is a big learning curve, however. I’m sure it comes a lot more naturally to people who are already experienced computer programmers. But if you are a geek who needs to typeset music, you need LilyPond!

Here is the resulting MIDI output. Dynamics processing by LilyPond is somewhat rudimentary and leaves something to be desired. As with everything else in LilyPond, perfection is possible given enough time (worst case, it’s open source!)

You can play the MIDI file in your browser using the tools from, but it doesn’t sound as good as native players.

And of course the PDF sheet music.

Finally, for the curious, or those who might want to tweak further, the LilyPond source file, under the same license.

Please have a Merry time with it and comment below.

UPDATE! Read about the duet version!