In January 1996 I visited STEIM (Studio voor Electro-Instrumentale Muziek) in Amsterdam. STEIM technicians and programmers develop unique general-purpose tools for live performance, which they invite artists to build into unique instruments.

I went to STEIM to play with their SensorLab, a complex system for interfacing a computer to the outside world, using MIDI for communication. I experimented with arrays of photocells and switches and eventually decided to build them into a portable, playable enclosure. In STEIM's basement I found a large piece of sheet aluminum and traced out two large triangles. I cut them out with a bandsaw and found some cylindrical spacers to separate them by about an inch. The bottom of the triangle has a third piece of aluminum between the first two. Along either side I cut a rectangle to fit five square buttons.

I wired up six photoresistors and the ten buttons to a D-25 connector which I also mounted on one side. The button arrays are attached by screws and the photocells I mounted with velcro so I could adjust their position. For a light source at the apex I looked for a small, bright bulb. The best solution I came up with was a Maglite-type bulb, and I wound up making a velcro arrangement to hold a Maglite shaft between the triangles on one side, with wires extending to the bulb mounted at the apex.

The D-connector was connected to the SensorLab with a short, thick cable, and the SensorLab was programmed in its own language, Spider, to detect changing voltages from the photocells as well as button presses, and convert them into MIDI note-on messages.

This arrangement worked very well but when I left STEIM and took my lightHarp with me I had no SensorLab to plug it into. They are very expensive and almost impossible to find anyway, as STEIM only made one limited production run and are completely sold out.

However, another thing I took with me to STEIM and experimented with there was a Parallax BASIC Stamp II. I figured out how to get reliable MIDI output (and unreliable MIDI input), and imagined interfacing the lightHarp to the Stamp. The RCTIME command was obviously too slow for any use in a musical instrument, but stealing the Stamp application note for interfacing the ADC9809 analog to digital converter, I added one thing, an eight-channel multiplexer chip CD4051BCN, to read the six photocells rapidly in succession. The entire project uses seven Stamp pins: three for controlling the multiplexer, three for the ADC, and one for MIDI output. The BS2 is mounted in a blue plastic box which has a D-connector for attachment to the harp, and MIDI cable extending from it on the other side.

The software continuously selects channels one to six of the multiplexer and reads the voltage with the ADC chip. The eight-bit result is compared to a threshold value. If it's lower, the Stamp sends a MIDI note-on message and sets a flag which isn't reset until the light level rises above the threshold again. The responsiveness of this arrangement is very good -- I can really "pluck" the photocells like strings. I almost never use this directly connected to a MIDI instrument but instead process the lightHarp MIDI output through more of my own software running on a Macintosh.

Here is another picture of the lightharp, along with schematic diagram and BS2 code listing. If you don't know much about MIDI here is an introduction and a reference of MIDI message values.


After I made the lightharp, I wanted a general-purpose voltage to MIDI converter which I could use with any simple variable resistors. I found a 16-channel multiplexer chip, the MC14067, and built it with a Basic Stamp II into a green plastic lunchbox. The lunchbox has mini phone jacks for plugging in resistors, a MIDI jack, and a 9 pin serial connector for reprogramming the Stamp if I need to for a special project. There is also a Macintosh-style serial connector so I can send serial data out from the Stamp. In addition there is a DC power jack and a microswitch to turn the Stamp on and off. The box uses eight Stamp pins -- one more than the lightHarp since I need four pins instead of three to select the multiplexer channel.

I have used the lunchbox quite often for performing and for installations, connecting an array of photocells or thermistors. The photo above shows eight photocells arranged across a bar, plugged into to the lunchbox, MIDI output of which is going through a MIDI fader controller to a rack of sound generators and signal processors (again, via a Macintosh computer, which you don't see).

The photo to the left shows me performing with the same basic setup, at STEIM in Amsterdam in July 1996. For this piece one of the photocells was a trigger to load a bank of samples, and the other seven photocells triggered algorithmic playback of those samples -- that is, interrupting the light would start a little "composition" based on simple rules appropriate to the current bank of sounds (handled by software running on the Mac, written in the Formula language). In addition to the sampled sounds I was playing a noisy DSP feedback loop instrument using MIDI faders to change parameters.

The green lunchbox sends out MIDI quite differently from the lightHarp. Instead of working with a threshold and note-on messages, the lunchbox is constantly reading the results of 5 volts sent out and returned through whatever resistors are plugged in. For each resistor, it compares the latest reading with the previous one and if the value has changed it sends the new value out as a MIDI continuous controller message. Each resistor input has its own continuous controller number (from 20 to 35) and the messages are all sent on MIDI channel 1. So if 16 resistors are plugged in and they're all changing simultaneously there is quite a flood of MIDI data. It would be possible to plug this directly into some instrument that was suitably programmed to respond to these MIDI controllers but as with the lightHarp I usually have my own software running on a Macintosh receiving the data and doing some more specific work on it.

You can see another photo of the lunchbox, as well as schematic and code listing, here.