PREPARATION FOR CREATING A MIDI INSTRUMENT John T. Rine ======Objective====== The object of this project is to develop a MIDI instrument that interfaces with a computer. The computer will receive signals from the instrument, which may have its own controller, and respond to the signals from the instrument by playing sounds.\\ ======Materials/Reading/Prerequisites====== ^Description^Quantity^ |Arduino Mega2560 (resident on the guitar)|1| |USB cable to connect the guitar (Arduino) to the computer|1| |Set of guitar strings or solid steel wire|1 set| |Frets or large metal staples|12| |Plywood for the guitar body|1 sheet| |Wire to connect strings, frets, and play command switches to the Arduino|1| |Potentiometer for the whammy bar (possibly)|1| ======Background====== In my HPC Systems and Networking course, we began work on the Orca project. The Orca project is an exercise in socket programming to send data to, and receive data from with remote computers. When the Orca project is finished, it will be a set of client server applications that will be used to create a set of computers that will play a musical score. The computers will communicate across a network.\\ \\ The Orca project peeked my interest in MIDI as I am interested in playing guitar. I have day-dreamed about creating an electronic guitar for a long time.\\ When I was in the electronics program a year or so ago, a fellow student showed me an application on his i-Phone. The applications was a virtual guitar and it sounded AWSOME! To play the guitar, the user simply frets the virtual strings and then strums them.\\ I spoke with my HPC Systems and Networking Instructor about the application and whether or not it used MIDI to make the sounds. He told me that the sounds themselves are based on samples and that samples can be introduced into a soundbank. He said he thought that the application was infact using MIDI but using certain samples of guitar sounds. I also spoke with my HPC 0/HPC2/Computer Organization instructor who showed me the Garageband application on his iPad. This application allowed the user not only to do what the iPhone ap did, but also to bend strings! WOW!\\ \\ It doesn't take a rocket scientist to figure out that if and iPhone/iPad ap can do it, I should be able to do it using a computer, a set of sensors and possibly a controller between the instrument and the computer. Bending string may be hard to impossible; the iPhone and iPad use a touchscreen that has high resolution which allows the strings to bend and he notes to follow. I once hard an electronic guitar that did not allow string bending; playing the blues was a bitch-ya gotta make the guitar cry. The guitar neck is a natural switch matrix as there are metal frets with metal strings going across the strings. Regarding string bending, I thought about potentiometers with springs and pulleys on the end of each string. I don't know if that will work. I may have to settle for no bending, either that or get a guitar shaped touchscreen.\\ ======Procedure====== **1. Assemble the guitar**\\ Using the wood, guitar strings or wire, frets or staples, connector, wire, Arduino Mega, and possibly a potentiometer, build the guitar (these instructions assume no bending of strings-but possibly a whammy bar).\\ \\ **2. Write the Arduino application**\\ Write the Arduino application. Arduino has a MIDI library for sending and receiving MIDI messages.\\ \\ **3. Using Java, write the MIDI guitar player application.**\\ * Download and install the Java JDK. * Using the Java APIs and Java tutorials, write the MIDI receiver application. This application will receive MIDI messages from the Arduino and then play notes. \\ **4. Connect everything together and troubleshoot it.**\\ ======References====== * Arduino home: http://www.arduino.cc/ * Arduino hardware: http://www.arduino.cc/en/Main/Hardware * Arduino MIDI Tutorial: http://arduino.cc/en/Tutorial/Midi * The Arduino MIDI Library: http://www.arduino.cc/playground/Main/MIDILibrary * The Arduino MIDI extended reference: http://arduinomidilib.sourceforge.net/class_m_i_d_i___class.html * MIDI communication: http://www.tigoe.net/pcomp/stamp/stamp-midi.shtml * MIDI basics: http://www.blueink.com/CLASS/physcom1/simplemidiexample.htm * MIDI Communications: http://www.tigoe.net/pcomp/code/communication/midi * Java JDK: http://www.oracle.com/technetwork/java/javase/downloads/index.html * Java tutorials: http://download.oracle.com/javase/tutorial/ * Java APIs: http://download.oracle.com/javase/7/docs/api/ * Javax MIDI API: http://download.oracle.com/javase/7/docs/api/javax/sound/midi/package-summary.html * Serial MIDI: http://spikenzielabs.com/SpikenzieLabs/Serial_MIDI.html