May 032006

[Update: an improved version of this idea, called RoombaMidi2, is available on the Projects area.]

The Roomba has a piezo beeper that can play tunes. You’ve heard it.
And its motors make noise. Why not put them under MIDI control?

So here is RoombaMidi: a Mac OS X application that creates a virtual MIDI instrument for use by any Mac OS X MIDI sequencer, like Ableton Live, Logic, and so on.

If you don’t have a sequencer or just want to play with this quickly, grab the awesome and free app MidiKeys. It’s a little virtual MIDI keyboard.

RoombaMidi has the following features:
– provides GUI interface to controlling Roomba (MIDI not required)
– acts as normal MIDI interface to any MIDI application
– supports up to 16 Roombas, one per MIDI channel.
– responds to MIDI notes 32-127 as tones on Roomba beeper,
– MIDI notes 32-127 play corresponding pitch, velocity is duration in 1/64ths-second increments
– MIDI note 24 turns vacuum motor on-n-off for bass drum fun
– MIDI note 25 blinks the LEDs, velocity is color of Power LED
– MIDI note 28 & 29 spins left or right, velocity is speed of spin
– can act as general multi-Roomba test system
– written in Java, but acts like Mac OS X application

To download:, for Mac OS X 10.3, aka Panther

And if you really want to look at the source…

Here’s what RoombaMidi looks like:

The about page:
roomba midi about

Here’s one example use:

revver version

Other recorded compositions are forthcoming….

(as always thanks to MikeK for helping with this)

 Posted by at 11:08 pm

  34 Responses to “RoombaMidi: Roomba as MIDI instrument”

  1. […] el enlace de Todbot encontrarás todas las especificaciones y características de esta aplicación. Cómo descargarla, […]

  2. Tod,
    I’m no programmer, but I am dying to teach my Roomba the 1812 overature and am a windows xp user. Any tips on how to do this?

  3. Hi Rob,
    That particular error is due to the RXTX Java serial library not being compiled for Intel Macs (which is what I assume you have). If you want to try to fix that issue, download the three files here:
    and place them inside the folder:
    (To open up as a folder, ctrl-click on it and do “Show Package Contents”)

    Additionally, it’s unclear if RoombaMidi will actually work anymore, as Apple has deprecated or removed many of the Mac-specific Java APIs, including the MIDI one, that RoombaMidi relied upon.

    However, you could always try RoombaMidi2 :
    which is a non-Java version of the same idea.

  4. Very cool. I wanna try, but I’m having trouble. I keep getting this….

    Uncaught exception in main method: java.lang.RuntimeException: Error inside Serial.listPorts()

    Any ideas? I’m using Mac OSX.

  5. […] Roomba has a piezo beeper that can play tunes. You?ve heard it. And its motors make noise. Why not put them under MIDI control. So here is […]

  6. Hi Rich, Thanks. I don’t know what happened, but toggling themes fixed it. I upgraded WordPress on it recently, maybe there’s some new weirdness there.

  7. Todd,

    In case you don’t know your Hacking Roomba website is blank when accessed.


  8. Won’t Work on my Windows PC.

  9. […] RoombaMIDI can be used to play any song with the fidelity of an old monophonic cell phone ringer or a really old video game, and even the dustiest floors are no match for this robotic muse. The Mac-only MIDI software can control a legion of 16 RoombaMIDI at one time, which disturbs and excites me. Surely a RoombaMIDI orchestra is in the works, and I can’t wait! […]

  10. Hey, this is a great hack!

    I thought I’d pass along an idea. Unfortunately I’ve lost the source code, but back when I was doing J2ME development for my cell phone, I came up with a way to get “simulated polyphonic sound” on a monophonic instrument (in my case, my cell phone). Basically the approach was to use the JMusic library to write a little conversion tool. The tool would time slice a MIDI sequence into 1/64th intervals and then round robin through all active voices as it processed the sequence one note or chord at a time. In other words, a C major chord played for 1/4 note would get turned into C, E, and G played over and over again 16 times in rapid succession. Your brain is tricked into hearing chords (that waver a bit in timbre like an old telephone ringer). It doesn’t work as well obviously when the song you’re playing has a lot of very short interval notes (like real fast 32nd notes and trills), but it still works tolerably well–it doesn’t mangle the song to the point that you can’t tell what you’re hearing.

    I wish I still had the code for that thing, but I looked all over the place and I can’t remember what I did with it. It only took me a day or two to throw it together though–it was pretty simple. It’s based on an old idea I saw implemented with an Apple II computer back in the 80s. (If you remember, Apple II just came with a piezo speaker, so someone had rigged up a way to get polyphonic sound out of it using essentially this same technique.)

    I thought I’d pass along that idea to you. You could use the same approach with your Roomba to get simulated polyphonic sound. You’d feed in a normal multichannel polyphonic MIDI sequence, and you’d get a single channel “simulated polyphonic” sequence that you could feed to the Roomba. If you put a separate Roomba on each of your 16 channels, and ran a deep multitrack sequence through your “JMusic demultiplexer”, you could probably get the sound of 64 to 128 Roombas playing at once–it’d be like a symphony of Roombas! You could go on tour as the


  11. very nice blog, congratulations…

  12. good

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>