Ideas Are Cheap
At SXSW 2012 we started discussing what we should do next as Kokoromi, having all been busy on other things since 2010. We didn’t want to do another Gamma, but we really like dance parties, especially when combined with games. I’d love to say it came to me in a dream, but actually it came to me while I was having trouble falling asleep. So I grabbed my phone and tapped out an e-mail:
Phil and I both like to DJ parties. So we should have a party we can both DJ at. Instead of a game we cover the dance floor with dance pads and hook them up to computers running projections so that by dancing to the music people create visuals. I’m thinking at least four dance pads.
This got the ball rolling, and after some back and forth we had the basic idea for what we eventually wound up with.
It’s All In The Execution
THE DANCINGULARITY is essentially an audience-interactive VJ application that is designed to be presented in conjunction with a live DJ performance. Party-goers, or players if you will, interact with the application by dancing around on a dancefloor made out of a 3×3 grid of Xbox 360 DDR dance mats. Most of the time, the application displays a visualization that directly represents the dancefloor, as above. Each button on each mat is represented as a square in a grid that mirrors the layout of the floor and when players step on a button, they will see the corresponding square light up and pop out from the grid. Ideally, players will dance in time with the music, creating synchronicity between the music and visuals.
In addition to the players providing input, there is also a Dance Master, who has a whole bunch of VJ controls she can use to add variation to the visuals. She can do things like skew, stretch, bounce, tumble the camera, and manipulate the glow effect. For our first performance, Heather simply used the computer keyboard to do all of this, but we also discussed hooking up a MIDI controller, which I might do in a future iteration. But even more than making sure the giant grid of squares doesn’t get boring for people, the DM is also responsible for deciding when a Dancingularity is imminent. Dance tracks are filled with those breakdowns that build in intensity until there’s a big, face-melting “drop.” The DM coordinates with the DJs to trigger a “build-up” during each of those.
We practiced ahead of time so that Heather could become familiar with our DJ sets and have a rough idea of when Dancingularities should occur but we also communicated live on stage. During the build-up, the visualization changes into nine large squares that represent each dance mat. Players must dance like crazy on the mats to make each square increase in size until it fills up its section of the cube. If they accomplish this before the musical “drop” happens, then the DM awards them by triggering THE DANCINGULARITY.
You might imagine automating the process by having the software simply trigger a Dancingularity when players have either filled up all of the build-up squares or have come very close to doing so, but in fact having a person determine when and whether to trigger the Dancingularity is important here. To automate it, the software would have to be doing real-time analysis of the DJ’s music to identify the musical moment it should occur (perfectly synched with the “drop”). But while the computer can look at numbers, it can’t look at people quite so easily. The human DM can award great enthusiasm from the crowd, even if they don’t manage to fill up the squares very much.
There were a few technical issues that needed to be addressed to make THE DANCINGULARITY a reality: input handling and wiring.
When we started, I wasn’t sure that it’d be possible to plug in nine dance mats to a single computer. In particular, since the mats show up as XBox 360 controllers in Windows, I was pretty sure it would only connect to four of them (there are only four lights on the guide button, after all). But before I could even test that theory, I came across another deal-breaker for running in Windows: the joystick axes problem, well known to fans of Stepmania. For whatever reason, the XBox 360 DDR mat presents the arrow buttons available as a d-pad, not as discrete buttons. The problem with a d-pad is that it’s not possible to press up and down at the same time, nor it is possible to press left and right at the same time. This makes a lot of sense if you’re talking about an actual d-pad, but no sense at all when talking about a dance mat!
The solution to both problems turned out to be running the app in Linux and using xboxdrv as the controller driver. This driver has an option for both treating the d-pad as buttons, thereby solving the joystick axes problem, and for running in a daemon mode that allows you to predefine how many controllers will be plugged in. Using the daemon mode meant that I could start the driver and the app before plugging in any of the controllers and the app would still see nine controllers. This made hot-swapping controllers very easy.
Finally, wiring was a major concern. DDR mats have a plastic casing at the top that houses the circuit board for the mat. We didn’t want these casings to be present on the dancefloor because we knew that people would step on them and either hurt themselves or totally break the mat. So I had to come up with a solution for hacking the pads so that the electronics could be moved off of the dancefloor. I’d found a web page describing how someone had hacked a different kind of dance mat so they could move the electronics away from the pad, so I decided to just open up the casing on my mat to see how it was put together.
Well, there you have it, just a plastic strip of conductive leads taped to a matching set of conductive leads on the circuit board. I couldn’t do any soldering. I knew I wanted to keep the wiring as neat as possible and my friend Bug had the brilliant suggestion of using ethernet cables, which already contain eight wires neatly packaged up. I needed nine wires per mat, eight buttons and one ground wire, so ethernet cable sounded like a good option. The other advantage to using ethernet cable is that all of the wires are color-coded, so it was easy to make sure the side of the cable attached to the mat matched up with the side attached to the electronics. The one decision I still sort of regret is deciding that I wanted to make it possible to detach the electronics from the cable using 9-pin serial connectors. Assembling those connectors and making sure everything was all connected through the entire assembly was a lot more work than I anticipated. The result looks like this:
Finally, a suggestion for any who might embark on a similar mission: don’t use electrical tape to secure wires. I initially prototyped with electrical tape and found that it just doesn’t hold very well, especially when dealing with stiff wires like the ones in ethernet cable. Any kind of tension in the wire will work against the tape. Things did not become reliable until I switched to using packing tape.