Poor Man's Theremin

January 28th, 2003 by Don Marti in

Here's how you can play music with your wireless network card.
Your rating: None Average: 5 (2 votes)

If you're interested in gaining some experience playing the theremin but don't want to spend a lot of money or build the kit, try the “Poor Man's Theremin” (PMT), written by Seth David Schoen.

The PMT turns a laptop computer with an 802.11b card into a theremin-like instrument, using the signal strength reported by the card to control the pitch of a note. To try it, first compile this C program, called ttone, using the command cc -o ttone -lm ttone.c.

Listing 1: ttone.c
#include <math.h>
#include <linux/kd.h>
const int A = 440;
const float r = 1.05946;
int pitch(int base, int observed){
    return (int) A * pow(r, (observed-base));
    }
int main(int argc, char *argv[]){
    int base, observed;
    if (strcmp("off", argv[1])){
        base = atoi(argv[1]);
        observed = atoi(argv[2]);
        ioctl(0, KIOCSOUND, 1190000 / pitch(base, observed) );
    } else {
        ioctl(0, KIOCSOUND, 0);
    };
}

Put the ttone executable in a directory that's in your PATH.

Now run the following shell script, called pmt.sh, and move into range of an 802.11b access point. You can change the pitch by moving closer to or further away from the access point or by moving your hand over the 802.11b antenna in a theremin-player-like manner.

Listing 2: pmt.sh
#!/bin/sh
# Poor Man's Theremin
m=100
oldQ=foo
[ $1 ] && m=$1
while :
do
Q=$(iwconfig 2</dev/null | grep Link.Quality | cut -d: -f2 | cut -d/ -f1)
if [ $oldQ != $Q ]
then
    ./ttone $m $Q
    fi
    oldQ=$Q
    done

The Poor Man's Theremin does not have the volume control of a proper theremin, and the pitch changes in discrete steps instead of continuously. Implementing these features is left as an exercise for the reader.

Don Marti is editor in chief of Linux Journal.

__________________________


Special Magazine Offer -- Free Gift with Subscription
Receive a free digital copy of Linux Journal's System Administration Special Edition as well as instant online access to current and past issues. CLICK HERE for offer

Linux Journal: delivering readers the advice and inspiration they need to get the most out of their Linux systems since 1994.

Post new comment

Please note that comments may not appear immediately, so there is no need to repost your comment.
The content of this field is kept private and will not be shown publicly.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <pre> <ul> <ol> <li> <dl> <dt> <dd> <i> <b>
  • Lines and paragraphs break automatically.

More information about formatting options

Newsletter

Each week Linux Journal editors will tell you what's hot in the world of Linux. You will receive late breaking news, technical tips and tricks, and links to in-depth stories featured on www.linuxjournal.com.
Sign up for our Email Newsletter

Tech Tip Videos

From the Magazine

December 2009, #188

If last month's Infrastrucuture issue was too "big" for you then try on this month's Embedded issue. Find out how to use Player for programming mobile robots, build a humidity controller for your root cellar, find out how to reduce the boot time of your embedded system, and if you're new to embedded systems find out the basics that go into one. You can also read about the Beagle Board, the Mesh Potato and a spate of other interestingly named items. And along with our regular columns don't miss our new monthly column: Economy Size Geek.







Read this issue