Design Decisions Involved

IR vs Visible Laser Beam
Again at first we always wanted people to be able to see the string. At first we thought that IR beam is visible (doh 100x). The problems with IR are easily recognized: 1) You can't see it. 2) IR Laser is very hard to find. Usually, commercial laser comes in visible spectrum of light, such as laser pointers (which we used). Some exception use is for CD-ROM reading where they are using UV Laser, but again, if you can't see it how are you going to debug it?

Single vs Multithread
Polling is best done with single threading. Problem with single threading a.k.a DOS mode, is simple: you can't do anything while this thread is running. This is not what we want. We want user to have full control of their computer even when this program is running. That's why multithread its used in here. Since the note assigned to each "fret" is user-determined, we want to use multithread so user can change the settings on the fly without restarting the program each time they want to change it.


Some amazed K-12 kids were trying our guitar, while Soer (left),
Adam (2nd to the right), and me (right) waiting for more visitors

Buffered vs Non-Buffered Interface
We choose buffered interface because of our fear that the data will get lost if it came in a very fast sequence. Please note that due to the 4 bits interface limitation, we can only get a data for a string at a time. This means you can't pluck all strings at the same time (see Future Developments for details). Unfortunately, the fear was proven to be true. In multithreading OS like Windows 9x, the  polling speed is greatly reduced, because the thread must share it's valuable processor time with other threads. The side effect of buffered interface is that sometimes you can hear the sound played a few seconds lagging the event when string is plucked (Note: One expo visitor asked, "Wow, it couldn't keep up with my hand?")

MS DirectX vs OPL FM programming vs Windows MIDI API
First one is not used because I dont have a clean, crisp sample of guitar sound.
Second one is not used because the quality is not acceptable (with simple programming).
The last one is used because it's easy and sounds pretty good on my SB Live!.
Can't get any easier than this, eh ?