Wiimote Kinecting Music with Holofunk


Today's project brings together two of the top motion controllers into one very cool music making package, the Wiimote and the Kinect [Insert "dogs and cats living together... mass hysteria..." quote here]

Holofunk Lives

... here it is: a Kinect-and-Wiimote-based live looping instrument, or soundspace, or synesthizer… not sure yet quite which.


So, Yes, Holofunk Is A Thing

Specifically, it is a thing right here: http://holofunk.codeplex.com — warts and all. You can download it and play with it if you like, and I quite encourage you to! (You do need Visual Studio 2010 — this is a hacker’s project right now.)

It came together really amazingly rapidly. XNA and C# were good rapid development choices, and the Kinect SDK and Wiimote libraries were both pretty much completely trouble-free.

But the single best technical choice was the BASS audio library. I am very grateful to everyone who steered me in that direction. I am using only the freeware version, but the questions I posted on their support forum got unbelievably prompt and complete responses from the two main developers. If it weren’t for their help, there’s no way I would have been done on time. I can’t recommend their project highly enough.

What It Is, And Isn’t

The open source site goes into much more detail, but basically, what you see above is what you currently get. Beardyman and I had about a million ideas for what could be next. Some of the ones I plan to experiment with over the next several months:

  • Pulling live video from the Kinect camera and animating it instead of just using colored circles. (Imagine Monkey Jazz, live.)
  • Extracting the frequency and using it to colorize a sound trail (so you can literally paint with the loops).
  • Adding sound effects.
  • Chopping up and sub-looping your loops (possibly integrated with the video and/or sound trail).


Project Information URL: http://robjsoftware.org/2011/09/21/holofunk-lives/, http://holofunk.codeplex.com/

Project Source URL: http://holofunk.codeplex.com/SourceControl/list/changesets


protected override void Initialize()

     new Test(GraphicsDevice).RunAllTests();

     m_kinect = new HolofunKinect(GraphicsDevice, ViewportSize);

     m_wiimoteLib = new WiimoteLib();

     m_sceneGraph = new HolofunkSceneGraph(

     m_holofunkBass = new HolofunkBass(m_clock);

     m_holofunkMachine = new HolofunkMachine(
         new HolofunkState(m_sceneGraph, m_holofunkBass, m_kinect));

     // Listen to the Wiimote
     if (m_wiimoteLib != null) {
         WiimoteController c = m_wiimoteLib.Wiimotes[0];
         c.ButtonBChanged += new WiimoteController.ButtonEventHandler(ButtonBChanged);
         c.MinusChanged += new WiimoteController.ButtonEventHandler(MinusChanged);
         c.PlusChanged += new WiimoteController.ButtonEventHandler(PlusChanged);
         c.HomeChanged += new WiimoteController.ButtonEventHandler(HomeChanged);

Contact Information: