The purpose of this site is to provide details about my upcoming midi guitar project.
This project was inspired by the MK1 guitar from fridgebuzzz electronics. Unlike them I want my MIDI guitar to be playable exactly like a normal guitar(with a few added bonuses).
Unlike a normal guitar this instrument won't have any strings, it will be entirely digital. That means there is no strings to vibrate, instead all the events that the guitar picks up with buttons/sensors (fret pressed/string plucked) are transfered to the computer, converted to midi and later sent to a synth that produces any kind of sound imaginable.
Since there are no strings, each fret is instead a sensing area. I need 6 strings each of 19 frets, so 114 sensing areas.
I looked through various options in detecting where a finger is on a fret. Resistive sensing didn't allow me to have multitouch(multiple fingers sensing different frets), the capacitative sensing was too hard to matrix, and the led sensing, even though was cool did not work well when other light in the room interfiered with it. I recently settled to using normal push buttons; I dismissed these at first because they would not allow me to properly sense when someone "bends" a string, also they might wear out fairly quickly.
The plan is to glue these buttons directly on the wood of the fretboard, more details and pictures can be found on the frets subfolder.
Well... since there are no strings this one is hard. I will probably do the same thing as MK1 is doing, so one long area of a resistive touch pad for each string. All you have to do to pick/strum is run a finger along the PCB.
Musical Instrument Digital Interface is a way to store/transfer music between electronic devices in another way, unlike audio waveforms. Instead of sending the audio pulses MIDI sends just the note signals, conserving space and making it a lot easier to work with. This is sort of like the difference between vector images and raster images. You can find out more information about MIDI on wikipedia.
There will be an Atmel ATMEGA MCU in the guitar somewhere with the purpose to read all the fret/buttons and string events, and will not bother to process it onboard to midi(less extendable this way) but will instead send the events to the computer through a serial port. The computer will then run an application(which is almost finished) that will interpret those events and output a JACK MIDI stream.
You can find some schematics that I dump from time to time in the schematics subfolder.
This instrument can therefore be played like a normal guitar, while it outputs midi. That means that the guitar can be used as an input for a score editing application, or a synthesizer which would be able to play any type of instrument(ex. play the guitar but it will sound like a bunch of violins).
This is again inspired by the MK1 guitar, please watch their videos on a good demo of this.
Basically, instead of pressing a fret to make just 1 string change pitch, the frets can be used as other methods of input, in this case it will act like you are holding down a chord. So imagine you are just pressing the 1st fret on the 6th string, strum and you hear a G major playing.
This can be help in playing songs with a lot of chords.
This mode could have the user just plucking one string, but adjusting the pitch automatically. So the player might look like he's playing, but the software would do all the work for him
This might not be wanted in the music world because it could be one form of cheating(like lip synching) but less extreme forms of this would be useful for beginners.
The program on the PC that will be communicating to the guitar microcontroller is called guitarseq, the code is written in C, managed by GIT and documented in Doxygen
The program can be downloaded freely, please email me for bug reports and feature requests(as long as the code allows it easily).
To compile the main app you need libjack-dev, build-essential and doxygen, go in the main directory and type make
Since the physical guitar is not ready and highly improbable that someone will have it soon I made an emulator that outputs the same kind of events but using the keyboard. To compile you need libx11-dev, go in the emulated folder and type make
Once you get everything compiled run "make runx" in the root folder to open the emulated keyboard input and guitarseq.
Proceed to connect the midi output from guitarseq to a synth. A black window will appear, make sure it is focudes when playing.
F1-F12 will be frets for the first string, play first string with enter.
1-8 will be frets for the 5th string, right shift is the plucking.
QWERTYUIO are frets for power strings(first 3 strings), play with right control.
Other keys include BNM,./ for alternate string plucking, and the pipe/backslash key is used to strum all strings at once.
Pressing page down will activate chords mode. Press a fret in the 6th string then strum.
Stuff from the etc folder are used to configure notes, tuning, chords, chord mappings and other misc stuff. Just make sure you follow the existing format.
You can get all my work from my github repository.
To clone the repository use: git clone https://amstan@github.com/amstan/guitar.git
.
These are a few questions that I have toward guitar players. If you feel like you have an answer to this please email me, it would assist me in developing this project.
Do you think the input methods(buttons for frets and resistive surfaces for strings) are adequate? Do you have any better/cheaper ideas to implement that were not mentioned already?
What other guitar modes would be beneficial (see features section)?
What are good guitar sounding synths for jack? Since I don't have strings anymore my guitar doesn't sound like a guitar unless I have software that emulates the sound.
I would like to thank my friend Andrew for assisting me with portions for this projects, as with other projects.
My friend Christian helped me with some general music theory and midi facts.