Here's a demonstration of what it can do so far:

What's next for this project?

Well, there's a lot more emphasis patterns that could be implemented and perfected. Sometimes it doesn't pick up something interesting, and sometimes it thinks too much is interesting (as shown above in the "Brain Power" song). There's also often patterns in easier difficulties that are excluded in the higher difficulties; perhaps I can find a clever way to combine them?

I also don't want to limit this project to just stepfiles and lightstrips: I want to gather more information from many different song files and display them in all sorts of interesting ways, from the cheap LED stip I got from Ebay all the way up to professional DMX laser light shows.

How it works, or what can we gather from a Stepfile

A stepfile is a file used by a DDR Machine or other rhythm games like Stepmania, BeatX etc. which holds information about a song and what keys it has, keys being the arrows needed to be pressed in a "level".


The basic song header

At the top of the file is various information about the song. Things like the song name, artist and BPM range are listed to help the user choose. There's also the banner image path and the song sample location, which are played as the user scrolls through the list of songs. These are all stored in tags, labeled "#TITLE:nyan cat;", for example, in a plain text file.

Also included are of course the different "charts", or sets of keys you can play along to, with varying levels of difficulty usually available for each song. Higher difficulty means more keys, of course, and "expert" usually contains the most interesting data, so we're mainly using this one. More on the actual keys later. Other data includes background image/video, song file path, and the offset of the the first beat of the song.

It's not all that straightforward: BPM changes and stops

You'd think that this would be all, but there's one more very interesting piece of information inside these files: BPM changes and stops. BPM changes, as the name suggests, are places in the song where the speed changes, affecting the speed at which the notes scroll and some other timings. Stops are points in the song where the notes stop scrolling for a brief moment, intended for short pauses in the song (first thing that comes to mind is the stop right before the beginning of the chorus of "Oppan Gangnam Style").

Both of these are intended to through off the player's timing, however, the community uses these for cool effects where the notes swing around to parts of the song. It's hard to explain, but this is seen in a lot of dubstep and "gimmick" songs, like here at about 1:05: That pack has a few more examples of it being used in moderation, but some songs are made almost completely out of those effects. There's also negative BPM, which will essentially teleport the viewpoint ahead a certain distance, which, with lots of patience and frame by frame work, can be used to make weird stepfiles in which keys move around in directions other than the usual up (or down, if you prefer to play that way)

Parsing that and keeping it all in sync is a nightmare, especially when they're all stacked milliseconds apart, but I finally managed to figure out how to deal with them, using a technique I'll write about in detail later.

The key ingredient: the 4 holy arrows

Unsurprisingly, the bulk of these files is consumed by the keys making up the song's different difficulties. There's a few types:

There's a few more that arn't actually objects themselves. Jumps, for example, is when you have 2 basic arrows at the same time. Playing this on an actual DDR machine requires you to jump and land on 2 buttons at the same time, hence the name. This takes quite a bit of energy, and is synced with a significant "bang"-like part of the song.

What's all this data good for?

Turns out, from just watching the BPM change across the song, seeing what keys happen where, where holds start and end, and what keys will follow, you can get a whole lot of useful information. Here's how my processing system currently works:

The basic mode is simply displaying the BPM on 2 corner lights, and any key presses in one of 4 colours, in one of 4 sections, more or less. Holds will fade out depending on length, and mines are always white. Rolls and mines also flikker rapidly, which I found is actually a pleasing effect in relevant songs.

While it's doing that, it's also looking for interesting patterns:

There's quite a few more of these, which I have called emphasis patterns. Once the pattern is over, it will return to normal operation until something else interesting happens. the effect is much cooler looking than expected, and you can see the result in the video at the top, about 4 minutes in.