University: University of Illinois at Urbana-Champaign
Team Members (with year of graduation):
Faculty Advisers:
Email Address:
Submission Language
English
Title: MIDI Controlled Slide Guitar
Description: Our project is a robotic, single-stringed, slide guitar-like instrument which responds to MIDI input in real time. A motorized slide moves a long the string to control its pitch, while a motorized wheel strikes and damps the string.
Products
National Instruments products:
Other products:
The Challenge
We wanted to build a musical instrument that would respond to MIDI input quickly enough that it could be played in real time. Additionally, one of our group members owns an Electric Wind Instrument, which can be used as a MIDI wind controller, so we wanted our instrument to respond well to the range of expression possible with a wind controller. Therefore, our instrument needed to be able to produce smooth, controlled changes in volume and pitch.
The Solution
Our project uses a single guitar string with motorized parts to play music. A metal bar pushes down on the string, and it is motorized to move along the length of the string and control the instrument's pitch. At the other end of the instrument, a wheel with two guitar picks rotates to strike the string. It can also push up against the string without striking it to stop the string from vibrating. A magnetic pickup converts the string vibrations to an electric signal, which we sample at 44.1 kHz. We then apply a digital distortion effect to the audio data to make it sound more like an electric guitar.
To make the instrument respond well to wind controllers, we use an envelope follower to determine the amplitude of the string's vibration. We then rescale the signal to the volume given by the wind controller, allowing a performer to increase and decrease the instrument's volume even though the string vibrations decay at a constant rate. However, when the string is not vibrating this technique will only amplify random noise, so we stop rescaling the signal once the amplitude of the string's vibration is very small.
For motor control, we use optical encoders to determine the positions of the motors. When we turn on the instrument, it turns both motors on with very little power. The pitch slide moves to the end of the guitar neck and the picking wheel rotates until one pick is pressed against the string. Once a motor's position stops changing for a short while, we turn it off and reset the encoder position to 0. This calibrates the motor control so that each motor always starts from the same position. We then use PID controllers to move the pitch slide and picking wheel to the right positions. MIDI data tells us what pitch the instrument play and when it should play a note, so we rotate the picking wheel 180° with each note, and we use linear interpolation with a lookup table to convert pitches to slide positions. When a note is released, we rotate the picking wheel to press a pick into the string momentarily, then return it to have a small offset from the string.
We chose to use a NI sbRIO to control our project as some of our group members had prior experience using LabVIEW. Using LabVIEW made developing the software components of our project far simpler than it would have been with a traditional language, as it is well suited to controls and signal processing. The built-in libraries allowed us to easily implement PID control, and when we could not find a built-in function for any complex task, we were usually able to find code on the NI website to use as references. The ability to analyze and debug our software using VIs' front panels and wire probes allowed us to easily diagnose problems, and once we had fixed them we were able to compile and reload the software in less than a minute. These features allowed us to rapidly develop our software and to tune it in real time. Finally, LabVIEW's FPGA toolkit allowed us to design all of our I/O and audio processing software using the same system as with processor code. While compile times were long on our personal computers, LabVIEW made writing FPGA code much more intuitive than with HDL or its variants.
Level of completion: fully functional
Time to build: we estimate that each group member spent about 170 hours in research and development for our project. Additionally, the university machine shop spent about 40 hours building the mechanical components of the project.
Additional revisions that could be made: