Music Mouse, Part I

This post is part of a series of notes and exercises for a summer camp on making musical instruments with Arduino and Pure Data.

Our final instrument is inspired by the work of composer Laurie Spiegel. In particular, we will recreate her instrument the Music Mouse. This software was released in the 1980s. In the manual for this software, Spiegel addresses the concerns that some musicians may have about technology:

I firmly believe that logic, when used well, does not conflict with intuition, emotion, or other aspects of music which are often considered contrary to it. Rather than constraining musicality, logical structures can serve to support, extend, and amplify our ability to express and embody the undefinable qualities of aesthetic meaning which we are forever trying to capture.

These same ideas apply to us. We use machines to carry out our dreams! We are not interested in reducing our humanity in any way.

Music Mouse

To get a feel for what we’ll be doing in this exercise, play Tero Parviainen’s implementation of the Music Mouse.

The Music Mouse allows the musician to traverse a two-dimensional landscape. Move on one axis to produce a melody, move on the other to produce harmony. By default, the harmony is played in the form of major chords.


To allow musicians to walk a two-dimensional space, we will use a joystick. Our circuit looks something like this:

The joystick has five pins. The ground and voltage pins behave the same as they did with our other components. The VRX and VRY pins are both analog and they report the direction in which the joystick is pushed. The joystick can also be pushed down, and the SW pin reports the state of this push button.

Build your circuit. You probably don’t need a breadboard.


Let’s write the simplest possible Arduino program to test our circuit. Follow these steps:

  • In setup, prepare pins A0, A1, and 5 for INPUT and set up the serial port.
  • In loop, read the three pins and print the results. Read A0 and A1 with analogRead. Read pin 5 with digitalRead.
  • Print a blank link after the three numbers so you can more easily read the output.
  • Add a slight delay to slow down the stream of output.

Upload your code. You should see numbers fly in the Serial Monitor. Make sure each axis and the push button work.


Leave a Reply

Your email address will not be published. Required fields are marked *