The Idiot Jukebox

Laziness is a virtue, but to achieve total slackerdom, one must be pro-active in one's laziness.

The main obstacle to achieving several hours worth of hacking in one go is the constant need to go and put more CDs into the ever-hungry CD player. To help obviate this need I've developed The Idiot Jukebox during 1997. The elements are as follows:

Insane? Yes. Here are some screen shots from the music terminal:

The main alphabetical listing of the repository:

All newly extracted albums land in the new directory:

You can list all albums from one group:

You can display the tracks, of course:

While the jukebox is playing, it displays the details of the group/album/song in a large font, and displays a large image of the sleeve as well.

Oh, and the timing thing at the bottom there is updated continually, of course.

It's this entire system that I've dubbed The Idiot Jukebox. I'm providing it as-is, but it will probably not be useful for anyone that aren't willing to do a little hacking of their own, since everyone's systems are different and quirky.

The distribution consists of pre-compiled binaries, and the source code to all these programs (unless I've missed some). The reason I include the binaries is simply that to compile all these programs on even my machine requires quite a bit of fiddling.

I use a GNU/Linux system; Debian Woody. If you are using something else, you'll probably be faced with a lot more work getting the Jukebox up and rolling.

There is no manual for the Jukebox. The installation and usage notes are included below.

Getting the software

The tarred and gzipped file can be gotten here. It contains pre-compiled binaries for GNU/Linux Debian Woody as well as sources for all the compiled programs. An updated version of the jukebox.el file is also available.

Installing the software

Unpack it in your home directory, for instance. It will unpack into a directory called jukebox.

Go to the .../jukebox/lisp/jukebox.el file and start editing the variables. The most important are:

Byte-compile all the Emacs Lisp files in the directory.

Put the following in your .emacs file:

      (require 'cl)
      (push "~/jukebox/lisp" load-path)
      (autoload 'jukebox "jukebox" nil t)

Then start up your XEmacs and start the Jukebox. If things work out, you should be presented with a Jukebox view of the base directory of the repository hierarchy. The normal Emacs help functions will tell you what commands are available.

Using the Jukebox

So, what can the Jukebox do for you?

Well, you probably want to do some DAE first. The command for this is M-x jukebox-read-audio-cd. If this works OK (it probably won't the first time), you can do more CDs. The jukebox will query a freedb (or cddb) server, and you'll be plopped into a buffer where you can edit the CDDB entry, and mail it off (or just go on) with C-c C-c.

Now you have a bunch of named CDs, so you want to mp3 these. First, get hold of an mp3 encoder from somewhere. This is not included in the package since there are some alleged software patent evil going on in that area.

Then edit the jukebox-farm variabel to include the name of all the machines you want to involve in the mp3ing. Then call the jukebox-encode function. It will go through all the WAV files in the processing directory and mp3 everything there. (You should have an ssh-agent set up to do authentication and stuff, and all the client machines need to have the Lame encoder installed.)

Then, when the mp3ing is winding down, you can use the .../jukebox/bin/add-stats program to delete the WAV files and move the mp3s to the repository.

In the repository (and everywhere else) you can play songs by hitting RET over them in a Jukebox buffer. You can also add them (and records) to a play-list with the SPC command. The R command plays a play-list, and the Q command clears a play-list.

There's oodles more commands to sample vinyl, to split vinyl samples into tracks, to create compilations, to swap things in from the recorded CD-Rs, to delete old things, to do, well, most anything I would want to do with music. Just go through the jukebox.el file and check things out.

Is the Jukebox maintained?

The possibilities for maintenance of such a complex project is staggering, so I'm not going to do it. I provide it as-is, and don't really want to be bothered by it. It does all I want it to do and I couldn't live without it. If someone else finds this useful, then that's fine, but if not, then that's also fine.

If somebody else wants to develop this further, then that would be great. Contact me and I'll provide web space and stuff to whomever volunteers. Even making it so that one could actually just compile and run the thing without fiddling with lots of scripts and paths all over the place would be a great win. Perhaps autoconf support? I don't know.

I do think that the Jukebox is a quite good idea, but then again, few people are as lazy as I am.

Source and binary tarball

And if you're really curious, you can browse what music I have here. There's no actualy music there, of course; just the list of albums and stuff.

Addendum: Three Years Later

Time flies when you have enough music.

I've now been using this system for more than three years. How do I think it's held up? Thank you for asking.

One thing that's changed over the years is that disks have gotten so darn cheap that all the "what-do-I-do-with-the-files-that- don't-fit-on-the-disks" issues have just gone away. I now have all my music raided together on some disks on the file server that's in the closet. It's such a joy to be able to just play anything, any time.

For the music playing machine itself, I took an old, slow PII, threw away the CPU fan and the hard disk and put it behing my speakers. It's virtually soundless; only the PSU fan makes a slight hum when the room is quiet. I took a 12" IBM color monitor (that I paid $5 for at a flea market) and display X and Emacs on that. I bought a rather expensive Hammerfall Light digital sound card, and an external AD/DA box. (And hooked that up to my NAD amplifier.) I certainly can't tell the difference in a blind test between a VBR Lame encoded track and the original WAV file.

After using the system for a while, I realized that the one thing I really missed was having an image to associate the albums with, so I started scanning sleeves as well. That may sound like even more work, but after writing a few more scripts, it doesn't add to the time it takes to process CDs at all.

After upgrading to Linux 2.4, and using a Plextor CD-ROM, I'm now able to DAE CDs at 24x. That's around 2 minutes per CD. And since most albums are in FreeDB, I don't really have to do anything about naming the tracks, so I really am able to process 30 CDs per hour. I've tried.

Since I'm running the jukebox under XEmacs, and XEmacs can be controlled by gnudoit, I can control the volume/pause/play/etc things via ssh. Which is convenient.

I've also written a PHP interface to the repository so that I can stream music from it when I'm not at home. No, you can't have the URL and the password.

What has all this done to my listening habits? Well, I listen even more to music now than I used to, and I buy way, way more albums.

I had kinda expected systems to appear that would make my system look primitive, but nothing of the kind has happened. All mp3 players I've ever seen have been geared towards songs; not albums. I like albums. I like well organized repositories of music. I like my jukebox. Even though it's insane.

Addendum: 2007

When I wrote the Emacs music interface ten years ago (started back in Octuber 1997, apparently), this all seemed a bit far-fetched. "Oooh. Music on a computer. Aaah." These days it's all trivial beyond beliefe. Just goes to show. I've continued fiddling with the Emacs music interface (bigger screen, remote control, interface, etc), and I doubt I'll ever succumbed to one of those new-fangled pointy-clicky interfaces. So there.

2002-12-10 23:19:40