July 12, 2010
BEATS is back with v1.2.0, and it’s now a whole lot faster. Performance-wise, it blows away previous releases, especially when working with long songs.
In case you aren’t cool and don’t know what BEATS is, it’s the top command-line drum machine of 2010. Feed it a song notated in YAML, and it will produce a wave file of impeccable timing and feel. To learn more, visit http://beatsdrummachine.com.
Let’s look at some graphs prepared by the BEATS intern. Here’s how long it takes to generate audio[1] for the venerable example_song.txt, comparing BEATS 1.2.0 with the previous two versions:

Using Ruby 1.8, it’s more than 6x faster than 1.1.0, and almost 12x faster than 1.0.0. An even more dramatic improvement is shown when using the -s option (which saves each track to a separate wave file):

That’s right, the -s option is now 13x faster when using Ruby 1.8. (To be fair, the huge performance increase is partially because the -s option got no love in 1.1.0).
As nice as that is, the example song is only 24 seconds long. You’ll see an even bigger improvement when working with longer songs. I’ve created another example, which lasts for 3 minutes, 18 seconds. Let’s look at the results when mixing everything down to a single track. (Note that though these graphs look about the same as the previous ones, the scales are totally different).

BEATS 1.2.0 shaves 19 seconds off the run time when using Ruby 1.8. As for the -s option:

Congratulations, BEATS 1.2.0 on Ruby 1.8 will give you back 99 seconds of your life, which happens to be a 19x improvement.
The focus of this release has been making it faster, along with revamping the internal architecture (which I must say, is now much better). However, a few bugs have been fixed as well:
-s option.X or . characters in a track rhythm are treated as a rest, instead of an error.