The WAVES project is a project that I started with a friend while we were in college. The original thought was to simply connect a simple D/A Converter (digital-to-analog) to the computer, and to test it by creating a simple program to output a waveform. We started by simply creating a square-wave, then a sawtooth-wave, and finally a sine-wave. From there, we created a fun little program to combine various harmonics and amplitudes, and the program provided us with hours of entertainment, playing with different sounds and tone qualities. Unfortunately, that program has been lost, and I only have small segments of the original source code. I'm sure I could recreate the program but the original hardware was built on an ancient 8-bit ISA card, and the ISA bus doesn't even exist on most modern computers.
One large disappointment we had in the first version was the inability to effectively change frequencies. The program could step through the table defining the waveform at single, double, or tripple rates, which would give some variations in tones. The base frequency was calculated from the sample rate (44.1KHz), divided by the length of the data table (256 words), for a base frequency of 172Hz. By stepping through the sample table at double the rate, or triple the rate, we could produce tones at 345Hz and 517Hz, which was still fine, for those frequencies, but to play a song, many frequencies between those rates would be needed. At the time, we were both approaching the end of our degrees, so time was a rare commodity, and we couldn't spend that time on the project anymore. (After a while, we both graduated, but my friend moved away, leaving the whole concept in my lap.)
It didn't take long for me to return to college to begin work on my Master's Degree. Eventually, the time came to decide on, and create my capstone project. The problem of the WAVES project continued to sit, unresolved, so I thought it would be a good choice to return to and use for my capstone. So I did.
One other goal I had for the new version of WAVES was, I wanted to build an embedded system so I would not be dependant on the ISA bus or anything that would depend on a PC-based platform. This way, the system could be connected to any approrpriate device. One thought was to be able to control it using a MIDI interface - as if it were the voice section of a synthesizer... just no keyboard. As a result, I spent a lot of time researching different Digital Signal Processor (DSP) chips. I contacted lots of different manufacturers, and although I looked at many different DSPs, the only company that was willing to share information (and books and samples) was Analog Devices. The family of processors that they send me information on was their ADSP-2100 family, and I selected the ADSP-2105 based on size, speed, power requirements, and simplicity, hence the name, "WAVES-21."
I often debate how much information to share about WAVES-21, because there are a couple of features that were created that I have never seen in any other manufaturer's devices, even years later. However, I will say that not only was I able to find a way of producing very specific frequencies/tones that did not have the restrictions mentioned above, but I was able to produce 8 "voices." (WAVES could only produce a single voice.) WAVES-21's processor was actually only 25% faster than the processor hosting the original WAVES, and I probably could have put 12 voices on the system if I wanted to, but 8 is just such a nice computer number!
Over the past few years, I have played around with the idea of building a new version. WAVES-97 got killed in 1997 when I got a new job, as did WAVES-2003. While teaching, I have spent time rebuilding a new motherboard, still based around the ADSP-2100 family (the ADSP-2101 is a slightly better chip than the ADSP-2105, although a small bit more expensive). At this point, the main board seems to be working well, and a second board (handling all the analog interfaces) is ready to be tested; and as soon as I get the power supply rebuilt (after using my finger for a shorting block accidentally).