Video games and the SPC file format

I was part of an interesting discussion on #kde-devel tonight regarding the joys of video game music. The discussion eventually turned around to music for one of the best gaming consoles in history, the Super Nintendo. Enterprising emulator authors have taken advantage of the wonderful sound hardware of the Super Nintendo to come up with a file format for Super Nintendo music tracks, called SPC.

It is one of the more complex formats in computer music, as decoders need to have an SPC700 processor emulator built-in. However, these SPCs pack a lot of music into only 64KB, and they sound as good (or better) than you remember, so I was pleasantly surprised to find a decent SPC player for Linux, OpenSPC Lite, a port of the OpenSPC for Linux program to output through aRts, by Neil Stevens. Unfortunately, neither the OpenSPC or OpenSPC Lite players supported the ID666 tagging format for SPC files, which meant that they would play forever if you left the player going.

I’ve had a bit of prior experience with ID666, so I took advantage of the available documentation to try to hack timeout support into OpenSPC lite.

My initial code is this C file. I was able to use this code to create a patch to OpenSPC Lite. I will also probably develop a KFileMetaInfo plugin for this format in the next few days now that I seem to have it pinned down, which will help with the work on KLink.

If you’re interested in reliving some of the classic video game music of our time, there is an archive of SNES (and many other platforms) music at http://www.zophar.net/music.html.

Also, there is a thriving musician community based around creating arrangements of classic (and modern) video game tunes. The best-known place is Overclocked Remix, but VGMix also includes a lot of great tracks. Some are of such high quality that they are excellent pieces of music in their own right, even if you don’t like videogames. I frequently catch my wife humming along to this track in particular. ;-)

Update 2018-12-15: updated to note that I no longer have the OpenSPC patch I’d developed, though that is no great loss by now.