Since there have been products released based on similar concepts I've decided to share my final year college capstone design project with you guys. Basically give you guys a slight insight in what I have done in the past and potentially what projects you could see from me in the future when I have the time, resources (money/workspace/tools)

I will be posting it in the formal format of the report we submitted at the end of our project term.

1 • Abstract

2 • Technical Descriptions
-2.0 • Hardware
-2.1 • Software

3 • Block Diagrams
-3.0 • Hardware
-3.1 • Software

4 • Schematics & Layout
-4.0 • Overview
-4.1 • PIC18F4550
-4.2 • External Trigger
-4.3 • Layout

5 • Validation & Testing
-5.0 • Overview
-5.1 • System Tests
-5.2 • User Tests
-5.3 • Functional Tests
-5.4 • Performance Tests
-5.5 • Safety Tests
6 • Budget
-6.0 • Overview
-6.1 • Costs
-6.2 • Final Budget

7 • Discussions
-7.0 • Hardware
-7.1 • Software

8 • Conclusions

9 • Glossary
10 • Bibliography

11 • Pictures

11 • Pictures Continued

Intellectual property of AutoGuitar Solutions:
Matt Ellig
Sam Kobrynovich
Shawn Campbell

1 • Abstract

The process of creating guitar tablature is time consuming, tedious, and simply not ideal for today’s musicians. When writing music, if a guitarist has to stop what they’re doing to jot down ideas or their groundbreaking new riffs, the creative process is halted. This would be repeated numerous times over the course of writing an entire song. The AGS AutoTabber package is designed to improve upon the shortcomings of traditional tabbing methods. The hardware portion, a typical electric bass guitar, has additional components added that keep track of the notes being played by the guitarist. This hardware is connected to its software portion, run on a PC under a Windows environment, via a USB 2.0 cable. Through this interface, the hardware is able to send the notes played to the software. The software, from the notes it receives, is able to automatically generate both guitar tablature and musical notation, in real time. With the AutoTabber by AGS, stopping to update a tablature file with new information is no longer a worry. By simply plugging in the guitar and running the software, the guitarist is free to let the creative juices flow.

2 • Technical descriptions

2.0 • Hardware
2.0.1 • Overview
All functions of the AutoTabber hardware are controlled by the PIC18F4550 microcontroller. The existing signal from the bass guitar’s pickup is used as an external trigger to the PIC, which begins the process of data acquisition, analysis, and transfer. The entire hardware component is powered via USB.

Figure 1.0 • PIC18F4550 Schematic (without fret, string or strum inputs)

Figure 1.0 shows the basic PIC18F4550 schematic, without external inputs connected (fret, string, external trigger). This component is the heart of the AutoTabber hardware.

2.0.2 • External Trigger
The electric bass guitar used in the current version of the AutoTabber uses two magnetic pickups to create an electrical signal. This signal is used by the amplifier to which the guitar is connected, to generate the amplified sound of the strings of the bass vibrating when played. This signal is also used by the AutoTabber hardware, as an external trigger to the PIC microcontroller.
When a string on the bass guitar is strummed, it vibrates for a short period of time before gradually coming to rest again. Likewise, the signal generated by the magnetic pickup will oscillate – strongly at first, then gradually ending. Therefore, this signal is at its peak when the string is first played. It is off this peak value that the PIC microcontroller is triggered.

Since the PIC microcontroller cannot register the low voltage of the magnetic pickup signal, it therefore needs to be amplified. This is accomplished through the use of an LM358N Low Power Dual Operational Amplifier. The amplifier circuit is configured as non-inverting, with a gain of approximately 100. This amplifier is able to be powered by a single source, making it ideal for use in a circuit where no negative source is available. The configuration of the LM358N is shown in Figure 1.1.

Figure 1.1 • LM358N Schematic

The amplified pickup signal is then compared to a reference voltage, to produce an output only when the pickup signal is at, or close to, its peak value. This is accomplished by an LM393N Low Power, Low Offset Voltage Dual Comparator. For the analog input, the LM393N creates a digital output, based on its comparison. Since the peak value of the signal produced by the pickup varies based on how hard the string is strummed, a specific value cannot be measured and used for comparison. The comparison voltage used instead is +3.0V, controlled by the value of the potentiometer (R4 in Figure 1.2). All voltages on the input higher than this value will produce a +5V output from the comparator. The configuration of the LM393N is shown in Figure 1.2.

Figure 1.2 • LM393N Schematic

However, the output of the LM393N alone cannot be used to trigger the PIC microcontroller. As the input (analog) signal to the LM393N oscillates, its output (digital) changes from +5V to 0V (digital 1 and 0), and back again. As long as the input level is above the voltage range mentioned above, the LM393N outputs a digital HIGH (1). To compensate for this, a 555 timer is used as a mono-stable multivibrator. For the multiple (greater than 3) pulses of the LM393N output, the 555 circuit generates from one to three pulses, based on how hard the guitarist strums. Since the 555 is normally on, the input from the LM393 is inverted through a 7404 inverter. The configuration of the 555 circuit is shown in Figure 1.3.

Figure 1.3 • 555 Mono-stable Multivibrator Schematic

The final pulse generated by the 555 circuit is used as the trigger for the PIC microcontroller to begin its data acquisition, analysis and transfer processes.

2.0.3 • Data Acquisition & Analysis

Figure 1.4 • Keyboard Matrix Schematic (without connections to PIC18F4550)

Figure 1.4 represents the strings and fret bars of the bass guitar, which act as a keyboard matrix, controlled by the PIC18F4550. Each of the twenty frets and four strings (E, A, D, G) are attached to ports of the PIC. The connections to the ports from the fret inputs are taken after the diode and before the resistor (not shown in Figure 1.4). In the PIC software, the strings are set as outputs, and the frets as inputs. In its initialization phase, the PIC sets the four output ports to a digital HIGH (+5V), thereby setting the four strings HIGH. When any of these four strings is pressed to a fret, the string makes contact with the fret bar, and a digital HIGH can also be read on that fret’s input port. In this way, the PIC will determine the note played by the guitarist. When no contact is made, pull-down resistors are used to make the value at the input ports LOW (0V), to avoid having floating inputs to the PIC.
Until the PIC microcontroller receives its external trigger, it waits, only performing the tasks necessary to maintain the USB connection with the PC. When it receives the trigger, the PIC begins with acquiring the data from its inputs. Scanning from the lowest fret (1) input to the highest (20), the PIC looks for the first non-zero value. Since pressing a fret may also cause the string to make contact with the next lowest fret bar on the neck, the PIC then checks if the next fret to the one found is also a non-zero value. In this way, the PIC determines which fret the user has played, from 1 to 20. If no non-zero value is found on any of the input ports, the PIC assumes the guitarist has strummed what is referred to as an ‘open string,’ and stores the fret value as 0.

Unless the fret value is 0, the PIC then must determine which string the guitarist has strummed. At this point, all four of the strings are set LOW. Starting with the first string (E), and moving to the last (G), each is, in turn, made HIGH in an attempt to recreate the non-zero value on the same fret input as was previously determined. In this way, the PIC determines which string was played, and now holds the information needed to calculate the note played.

Notes played range from 0 to 80 – four per fret, corresponding to the four possible strings, as well as the ‘open’ note (0). For example, a note played on the first fret with the fourth string (G) would be note number 4, a note played on the second fret with the first string (E) would be note number 5, and so on. Using the fret and string information previously acquired, the PIC is able to calculate this note value and prepare to send it to the software. The following formulas determine the value of the note played:

2.0.4 • Data Transfer
When the PIC microcontroller first receives power via the USB cable, its initial process involves setting up a connection with the PC. Through its software, it establishes a virtual serial connection, and appears in Windows as being connected to a new COM (communications) port. Data sent by the PIC is sent as serial data, through this established virtual COM port.

Once the PIC has determined the note played by the guitarist (from 0 to 80), this value is then converted to an arbitrarily assigned hex value, and stored in a buffer. When data transfer is ready, this single byte of the buffer is transmitted to the AutoTabber software.

After data has been transferred, a small delay waits for the external trigger to be low for a certain time (at least 5 ‘no operation’ cycles) before allowing more data to be sent. This delay compensates for the fact that the 555 circuit is still able to produce multiple pulses if the guitarist strums hard enough on the strings.

2.1 • Software

2.1.1 • Overview
The AutoTabber software contains all the functions and coding that are required to handle the information received from the hardware, decode it, and display the tablature and musical notation to the screen. It calculates the duration of each note by a timer (run by the metronome) that tracks the arrival time of that note and the next one, subtracting the difference to get the duration.

When data capture is started (see section 2.1.4 on how to start data capture), the software waits for a byte of data to be received, and timestamps it. It then takes this ASCII character and converts it to the proper note, using a lookup table. After another note has arrived, and the previous note’s duration has been calculated, the software determines where in the bar/measure it will appear, and displays it. This continues until the user stops data capture.

2.1.2 • Menu (File)

Figure 2.0 • Menu (File) Options

The Menu (File) listing shown in Figure 2.1 gives the user 5 options relating to manipulation of the file they are currently in. File → New lets the user create a new/blank page to start their musical creation from scratch. File → Open allows the user to open up an existing file that they have saved, with the unique .AGS/.ags file extension. When a file is opened, the software reverts to the last (most current) page of notes, to allow the user to continue from where they last left off. File → Save and File → Save As allow the user to save whatever they have captured in the unique .AGS/ags file format, so that it may be opened and used later on without risk of losing their work. Finally, File → Exit allows the user to shut down the AutoTabber software. This is a necessary menu item, as standard Minimize, Maximize and Exit buttons are not present in the upper right of the software window.

2.1.3 • Menu (Edit)

Figure 2.1 • Menu (Edit) options

The Menu (Edit) listing shown in Figure 2.1 gives the user options to select the Metronome duration or the Serial Port Number. The first possible selection is the Metronome, which is broken down into two more options: Beats Per Bar and Beats Per Unit. The Beats Per Bar option allows the user to select from a list box of values ranging from 2 to 6, and the Beats Per Unit option allows the user to select a value of 4 or 8.

Setting these options will change the time signature of the file (see Figure 1.3). Below the Metronome is the Serial Port Number. From this menu, the user is able to select from available serial ports to allow the program to communicate to the port to which the AutoTabber bass guitar is connected.

2.1.4 • Display (Side Bar)

Figure 2.2 • Side Bar Display

The Side Bar is displayed in the far left of the AutoTabber software window. The collection of items it holds can be seen in Figure 2.2. The Side Bar contains all the important information that a musician would need while playing their guitar, and is always present in the window.

The Metronome consists of an image box. This image box is white when the software is not capturing data, or between beats. When capturing data, this image box is red on the first beat of a bar, and black on all other beats. The current beat number is displayed in the center of the box, when capturing data. The metronome produces an audible ticking noise in time with the changing color of the image box.

Below the metronome are two buttons, Start and Stop, used for controlling the metronome itself, as well as the live data capture. If the user would like to change the tempo, controlled by the ‘-‘ and ‘+’ buttons below the label ‘Tempo,’ they must first ensure the metronome and live data capture are halted, by pressing Stop. The tempo controls how fast or slow the speed of the metronome is – this is displayed below the heading ‘Beats Per Min.’

The time signature (see section 2.1.3 for how to change time signature) is displayed below the tempo for the user to see. The Page Number list box is displayed last, allowing the user to see what page they are on, and to move between pages of captured data.

2.1.5 • Display (Music Area)

Figure 2.3 • Music Display Area

The Music Display Area is where the tablature and musical notation is displayed on the screen. All the note information that was received via the virtual COM port is displayed to the screen in this area as tablature, and directly below it, musical notation. The four strings of the bass are shown (labeled from top to bottom as GDAE, as per standard tablature notation). Below the tablature lines, using the exact same spacing, are the lines representing the musical staff. It is in this area that the guitarist is able to see what they play in both tablature and musical notation, in almost real time.

3 • Block diagrams

3.0 • Hardware

3.0.1 • Overview

Figure 3.0 • Hardware Overview Flowchart

Figure 3.0 shows the basic functionality of the hardware portion of the AutoTabber. When a strum signal is received via the external trigger, the PIC microcontroller begins a process of data acquisition, analysis and transfer, before again waiting for its external trigger.

3.0.2 • Main PIC Program

Figure 3.1 • Main PIC Program Flowchart

Figure 3.1 shows the process behind the main PIC program routine. When a strum is received, a subroutine is called to acquire the note data. If an error occurred, data transfer is skipped, and the main routine again waits for its external trigger. Otherwise, when the USB connection is clear for data transfer, the single byte note information is transferred to the PC. If data transfer is not ready, the data is not sent (since only this portion of the PIC program is transferring data to the PC, it is safe to assume that transfer will be available at this point). After transfer is complete, a delay routine forces the external trigger to stay low for at least 5 ‘no operation’ cycles before another strum is accepted. A full listing of the PIC software is available in appendix 1 (Not available on the forums).

3.0.3 • Note Calculation Subroutine

Figure 3.2 • Note Calculation Subroutine Flowchart

Figure 3.2 shows the process behind the data acquisition and note calculation subroutine. When first called by the PIC’s main software routine, this subroutine searches all twenty fret input ports for a non-zero value. A non-zero value on the fret input ports indicates that a string has been pressed to the fret bar – this fret is therefore assumed to be the one the guitarist is playing. Since pressing a fret may also cause the string to make contact with the next lowest fret bar on the neck, the PIC then checks if the next fret to the one found is also a non-zero value. In this way, the PIC determines which fret the user has played, from 1 to 20. If no non-zero value is found on any of the input ports, the PIC assumes the guitarist has strummed what is referred to as an open string, and stores the fret value as 0.

Now that the software holds the fret number, it only needs the string number to be able to calculate the note played (from 0 to 80). All strings are turned LOW for the purposes of the next step: a second subroutine, which is called to determine which of the four strings of the bass guitar the user has played. When that information is returned by the second subroutine, the PIC is able to calculate the note played and return it to the main program routine for transfer. At this point, all strings are turned HIGH in preparation for the next time this subroutine is called.

3.0.4 • String Play Subroutine

Figure 3.3 • String Play Subroutine Flowchart

Figure 3.3 shows the process behind determining which string was played by the user. This subroutine is called by the note calculation subroutine, after it has determined which fret the guitarist has played. The fret number is passed to this subroutine, as well as a string number (from 1 to 4, for E to G). This subroutine then sets the string passed HIGH, and re-scans the fret number passed, checking for a non-zero. If the non-zero is read again, the function returns 1, indicating that this string was indeed the one played. Otherwise, the function resets the string passed LOW and returns 0. In this case, the note calculation subroutine will call the string play subroutine again with a different string number, until the string played is found.

3.1 • Software

3.1.1 • Overview

Figure 4.0 • Main Software Flowchart

Figure 4.0 shows the basic functionality of the AutoTabber software. Once the program has been loaded, the user must select the Time Signature and Tempo. After this is done, they must select the Serial Port Number in order for the software to be able to receive any data from the bass guitar. The software then waits for the Start button to be pressed. Once the Start button has been pressed, the Metronome begins ticking and the program waits for data to be received, looping back onto itself until this occurs. When data has been received, the software performs the tasks of converting the data into tablature and musical notation, and then proceeds to displaying the data to the screen. This entire process is repeated until the user stops the live capture.

3.1.2 • Metronome Subroutine

Figure 4.1 • Metronome Subroutine Flowchart

Figure 4.1 shows the function of the metronome subroutine. The metronome awaits the press of the Start button in order for it to begin. Once the Start button has been pressed, the metronome starts, as well as a system timer, whose duration (when it ticks) has been set by the tempo. The subroutine then checks to see if the timer has ticked or not, and if it hasn’t, it waits for a tick to occur. When the tick happens, the subroutine increments both the timer counter (which is used to simulate a metronome tick) and the timestamp (which is used to let the system know at what time notes have arrived). The timer is then checked to see if it is the first beat of a bar. If this is the case, it will flash the metronome image box red; otherwise, it checks to see if it is a regular beat. In this case, the metronome image box will flash black.

3.1.3 • Display Data Subroutine

Figure 4.2 • Display Data Subroutine Flowchart

Figure 4.2 shows the function of the display data subroutine. This function waits for data to be received, before proceeding to convert the data into its corresponding fret value. By checking a lookup table, the subroutine also determines the musical note value, and stores both it and the fret value into their corresponding arrays. Simultaneously, the program calculates the duration of the previous note using the metronome’s time stamping, subtracting the arrival time of the previous note from the current note and storing that into another array. Once that is complete, it checks to see what the duration of the note now is, and decides what kind of musical note it will display. If the note also has a fret value, it will display that as well, otherwise it will be shown as a rest. After that, the subroutine checks to see if the note will fit into the current bar/measure. If it does not, it will split the note duration and again check which note to display. If the note does fit, it will display the note to the screen as well as the tablature. Finally, it will go back to waiting for data to be received and continue this process all over again, until live data capture is stopped.

4 • Schematics & Layout

4.0 • Overview

A full schematic is attached to this report following the end of section 4. This schematic contains the basic PIC18F4550 circuit shown in Figure 1.0, the external trigger circuit shown in Figure 1.5, and the keyboard matrix connections from the bass, shown in Figure 1.4.

Important to the AutoTabber’s specifications, but not shown in the schematics, are 100nF capacitors connected from each IC’s VCC pin to GND. These serve the purpose of eliminating digital noise in the circuit. This noise would feed back to the magnetic pickup and create distortion in the signal of the electric bass guitar when played through an amplifier.

4.1 • PIC18F4550

Figure 1.0 • PIC18F4550 Schematic (without fret, string or strum inputs)

Figure 1.0 shows the basic connections for the PIC18F4550. Missing are the external inputs from the bass: the strings, frets and magnetic pickup signal.

4.1.1 • Master Clear & Clock
Pin 1 of the PIC microcontroller is the master clear (MCLR) (this signal is a NOT). This pin is pulled HIGH through a 10kΩ resistor. An output LED on this pin shows the power status of the PIC. If pin 1 is pulled LOW (by pressing the Reset pushbutton), the PIC will reset, and its program will restart.

A 20MHz oscillator is connected to pins 13 and 14 of the PIC microcontroller. Pin 14 supplies the clock output, and the signal generated by the oscillator is sent to pin 13 to provide a clock for the PIC.

4.1.2 • USB Connection & Bootloader
Pins 23 and 24 of the PIC18F4550 are attached to a USB connector. When the USB cable is connected, these pins (D- and D+) provide the means for the PIC to establish and maintain a connection with the PC, as well as transfer data. Since all the circuitry in the AutoTabber is powered via USB (not specifically shown in Figure 1.0), the connection to the PC is also essential for any part of the circuit to function.

A bootloader program on the PIC18F4550 allows for quick, simple programming of the microcontroller via its USB connection. The bootloader is stored in memory, with any additional programming stored after it. The PIC is specifically told, through its additional programming, to begin running anything stored after the bootloader in memory when it receives power. By pressing and holding the pushbutton connected to pin 37, therefore pulling that pin LOW, and then pressing the Reset pushbutton attached to pin 1, the PIC is forced to begin running from its first memory location, which holds the bootloader program. In this way, the PIC is able to be reprogrammed quickly and easily, with additional bootloader software on the PC. This function and additional software is not available to the user, but remains in the current design of the AutoTabber for use by the AGS hardware team.

4.2 • External Trigger

Figure 1.5 • External Trigger Schematic

Figure 1.5 shows the entire configuration for generating the external trigger to the PIC microcontroller.

4.2.1 • LM358N
The LM358N Low Power Dual Operational Amplifier is used to amplify the magnetic pickup signal coming from the electric bass guitar. The gain of the amplifier can be determined with the following formula:

Substituting for the values shown in Figure 1.5 above (10Ω for R1, 1kΩ for R2), the gain is calculated to be 101.

4.2.2 • 555 Circuit
The 555 circuit is configured to act as a mono-stable multivibrator. The output of the 555 circuit goes HIGH for a length of time, t, based on the values of R5 and C2 (shown in Figure 1.5). The time of the pulse produced by the 555 circuit can be determined with the following formula:

Substituting for the values shown in Figure 1.5 (12kΩ for R5, 47µF for C2), the output pulse time is calculated to be 564 milliseconds. This pulse is the trigger for the PIC microcontroller to begin the process of data acquisition, analysis and transfer. Only one byte of data (one note) will be sent by the PIC during that 564 millisecond period. This trigger must then remain low for a certain amount of time, determined by a software delay in the PIC programming, before the PIC will accept another trigger to send data.

4.3 • Layout

Figure 5.0 • Board Layout

Figure 5.0 shows the constructed layout of the AutoTabber hardware. Inputs from the frets are connected below the board (not visible in Figure 5.0). The magnetic pickup signal, four string connections (E, A, D, G) and the four USB connections (V+, GND, D+, D-) are connected into an open socket, and underneath the board to their required pins. 100nF capacitors seen near each chip are connected to each VCC pin and then to GND, to remove any digital noise that would feed back to the magnetic pickup.

5 • Validation & Testing

5.0 • Overview

Set during the development phase of the AutoTabber, certain specifications and requirements were determined by the AGS design team that the final product must meet in order to successfully meet expectations for the project.

5.1 • System Tests

5.1.1 • Automatic Tabbing • PASS
The conformance requirement for the Automatic Tabbing test was: “The AutoTabber shall automatically create guitar tablature and musical notation based on user input at bass guitar.”

To test this, while the bass guitar was connected to the PC, with the software running, a tester played notes on the bass and the software was observed to be automatically displaying these notes as tablature and musical notation.

5.2 • User Tests

5.2.1 • Bass Guitar Standard Operation • PASS
The conformance requirement for the Bass Guitar Standard Operation test was: “Bass guitar shall be able to be hooked up to an amplifier for audio playback.”

To test this, a tester connected the bass guitar to an amplifier, and ensured that audio playback occurred when playing notes.

5.2.2 • Bass Guitar Playability • PASS
The conformance requirement for the Bass Guitar Playability test was: “Wiring or additional components shall not interfere with playability of bass guitar.”

To test this, a tester played the bass guitar with all wiring and components connected, and ensured that they did not interfere with the ability to play the guitar.

5.2.3 • Software Note Display • PASS
The conformance requirement for the Software Note Display test was: “Software shall display tablature on the computer screen without noticeable delay.”

To test this, while the bass guitar was connected to the PC, with the software running, a tester played notes on the bass and the delay between play and note appearing was observed. The delay between notes appearing on the screen and the time they are played was observed to be very minimal (milliseconds), but varying, as the display method for all notes is based on the next note received.

5.2.4 • Software in Windows Environment • PASS
The conformance requirement for the Software in Windows Environment test was: “Software shall run in a Windows environment.”

To test this, a tester started the software program while in a Windows environment and ensured it ran properly.

5.2.5 • Save • PASS
The conformance requirement for the Save test was: “Software shall have the ability to save files.”

To test this, a tester started the software program and attempted to save input captured from the bass guitar. The tester was able to save the captured input.

5.2.6 • Open • PASS
The conformance requirement for the Open test was: “Software shall have the ability to open files.”

To test this, a tester started the software program and attempted to open previously captured input from the bass guitar. The tester was able to open the file.

5.2.7 • Edit • FAIL
The conformance requirement for the Edit test was: “Software shall have the ability to edit files.”

To test this, a tester started the software program and attempted to edit previously captured input from the bass guitar. As the software does not have the ability to edit captured input, this test failed.

5.2.8 • Metronome • PASS
The conformance requirement for the Metronome test was: “Software shall keep track of time in a song.”

To test this, a tester started the software program, started capturing input from the bass guitar, and ensured the software’s metronome was keeping correct track of time.

5.3 • Functional Tests

5.3.1 • Keyboard Matrix • PASS
The conformance requirement for the Keyboard Matrix test was: “The bass guitar shall have a keyboard matrix circuit to determine fret and string play.”

To test this, a tester ensured the keyboard matrix circuit was connected, played notes on the bass guitar, and ensured the notes were being captured properly by the PIC.

5.3.2 • USB Interface • PASS
The conformance requirement for the USB Interface test was: “The bass guitar shall use a USB interface.”

To test this, a tester ensured the USB circuit and cable were connected, and played notes on the bass guitar, then ensuring the captured data was sent to the PC.

5.4 • Performance Tests

5.4.1 • Sound Distortion • PASS
The conformance requirement for the Sound Distortion test was: “Sound of bass guitar shall not be distorted by wiring or additional components.”

To test this, a tester connected the bass guitar to both PC and an amplifier, played the bass guitar, and ensured there was no distortion present in the output of the amplifier.

5.4.2 • Signal Distortion • PASS
The conformance requirement for the Signal Distortion test was: “USB signal must not be distorted.”

To test this, a tester connected the bass guitar to the PC, played notes on the bass, and ensured the notes captured and sent were the same as the ones received by the PC.

5.5 • Safety Tests

5.5.1 • Electrocution/Shock Safety • PASS
The conformance requirement for the Electrocution/Shock Safety test was: “Shall not pose threat of shock or electrocution to user.”

To test this, a user ensured all components were properly covered (if applicable) and grounded.

5.5.2 • Wiring and Component Serviceability • PASS
The conformance requirement for the Wiring and Component Serviceability test was: “Wiring and additional components shall not be serviceable by non-certified persons.”

To test this, a tester ensured all wiring and components were properly covered (if applicable).

6 • Budget

6.0 • Overview

The original budget set aside for this project was as follows:
Bass Guitar • $150.00
Personal • $300.00
Tool Room • $225.00

TOTAL • $675.00

6.1 • Costs
The cost for the components and items in the AutoTabber was as follows

Not all components and items above were used in the final product. Some items and components are extra, or were used in various prototyping and testing phases of the AutoTabber.

6.2 • Final Budget

The AutoTabber project was $402.40 under budget.

7 • Discussions

7.0 • Hardware

7.0.1 • Design
The hardware portion of the AutoTabber project went through two different design phases. The original idea for the hardware was to gut an existing electric bass guitar, and replace any internal hardware used for audio playback through an amp, with our own hardware. In this way, the instrument would have become simply one used for writing music, which just isn’t ideal. An all-in-one package that could be used as a normal guitar as well as with the software was a better choice. Also, this original idea proposed to hollow out the neck of the bass for wiring to travel through. With the small size of the neck of the guitar, this was a dangerous proposition. A mistake could mean ruining a perfectly good bass guitar. It was decided that the wiring would travel along the back of the neck to avoid damaging the instrument.

Originally, buttons were to replace the fret bars of the bass guitar, and in that way capture input as the user played. Since this, too, had the potential to cause damage to the neck, another method of acquiring data was needed. Since both the strings and the fret bars of the bass guitar were metal, they were ideal for use as a keyboard matrix. This method of data acquisition is used in the final product.

7.0.2 • Problems
Two major problems were encountered by the hardware design team over the development of the AutoTabber hardware. To get the strings and fret bars to act as a keyboard matrix, none of them could have continuity with another. Unfortunately, the strings are held in a metal bridge. To eliminate continuity between these strings and the bridge, and therefore each other, several methods were attempted. First, heat shrink tubing was used over the ends of the strings that made contact with the bridge. However, the tension of the strings caused them to break through the flimsy heat shrink. Next, the ends of the strings were coated in rubber cement. This too, however, was too weak for the pressure of the strings. Many strings were unwound or snapped during this problem phase. A myriad of items were used to finally conquer this problem. Plastic washers stop the metal nut on the end of the string from contacting the bridge, and electrical tape and heat shrink prevent the string from doing the same.

The second major problem for the hardware design team was getting the PIC18F4550 programmed. To program the PIC with the USB bootloader firmware, MPLAB and the MPLAB ICD-2 programmer were selected, as they were the most readily available option. However, when the ICD-2 programmer was available to the design team, they were unable to get MPLAB to recognize the PIC microcontroller. It was eventually determined that the wrong programming circuit was being used by the team member in charge of programming the PIC. With the correct circuit, MPLAB detected the PIC, and the bootloader was able to be programmed.

7.0.3 • Future
There are a few limitations to the hardware that, with more time and resources, could be improved upon. Since the keyboard matrix will only detect one note played at a time, the user of the AutoTabber cannot play chords. For a bass guitar, this is less of a problem, since it is very rare to play chords as a bass guitarist. Also, playing techniques like hammer-on’s, pull-off’s, slides, bends, etc, cannot be detected by the hardware. With more time, a different approach could be taken to overcome this limitation.

Having the components and wiring mounted on the outside of the bass guitar was a limitation made necessary by lack of resources. If the AutoTabber were to become a product produced by a major company, for instance a guitar manufacturer, such a company would have the resources to mount the components and wiring for the AutoTabber inside the guitar. This would be the most ideal location for the AutoTabber hardware. All the user would see would be the USB plug on the end of their guitar, near the standard phono plug.

7.1 • Software

7.1.1 • Design
The programming language that was chosen by the software design team for the AutoTabber software was C# (read as C sharp), for several reasons. First of all, the software design team already had a brief introduction to the C# language. Because C# is a C-based language, the learning curve to use it was not overly steep.

C# has the ability to handle system objects behind the scenes, without the worry of the programmer. Two system objects were used in the AutoTabber software: a system timer, used to keep track of time for the metronome and time stamping, and the serial port system object, which gave the ability to receive data over the serial port without having to worry about any extra handling. Any drawing to the screen is also handled behind the scenes by C#, something that would otherwise be several more lines of code to perform in another language like C++ (read as C plus plus).

C# essentially made programming the software easier, in a sense of less redundant and more compact code.

7.1.2 • Problems
There were several problems that occurred during the programming of the AutoTabber software. The first was the decision of how to display additional notes after the screen was filled up. Initially, it was decided to use a scroll bar and scroll down when more notes needed to be displayed on the screen. This idea didn’t work, since there was no easy way to cause the Music Display Area to dynamically increase vertically when it needed to display more notes.

Added to this first problem was getting the Music Display Area to scroll down as more notes were added, so that the user could see the newest data. Whenever it did scroll down, notes and the lines for the staff/tablature appeared multiple times. Any possible solution to this problem would have required a major overhaul of the display functions, and time was limited. This was overcome instead by having the software display different page numbers – basically, different parts of the music at one time. It was easier to get the software to dynamically create new pages than it was to get it to scroll down properly.

Another problem was synching and setting up the agreed upon byte value so that the software could correctly decode the value the hardware was sending it. Once it was agreed upon by the software and hardware design teams that only one byte would be sent, in ASCII, the software was able to correctly decode the data it was receiving.

The last major problem was splitting notes, and keeping the duration of each bar/measure correct. When the guitarist plays a note, that note’s duration is calculated and it is displayed on the screen. However, this originally lead to having a whole note and a half note in the same bar/measure (for example), which is inaccurate if the time signature is 4/4 (four beats per bar with the quarter note being one beat). To fix this, a function was created to count the duration of each bar. If the counter in the function was greater than a predetermined value (for 4/4 it is 16), it would call another function to split the note. The note splitting function looked to see what the counter was at and what the bar duration would be, and then split the note to fit properly into the bar/measure.

7.1.3 • Future
There were originally a lot more features planned for the software portion of the AutoTabber. However, due to time constraints and setbacks with other problems, these could not be implemented.

One feature that was planned to be implemented was note ties. This would have allowed the guitarist to play a held note longer than one bar measure. A tie would have been added below the two split notes, linking them as one held note. This feature proved to be too difficult to implement with the time remaining for the project, but would be one to add in the future.

Another feature that would be added would allow the guitarist to select an ‘open string’ note, and change which string it belonged to. Since the hardware cannot determine which string was played for an ‘open’ note, the software currently displays the ‘0’ in the tab across all four strings, and a rest on the staff. With this feature, the user would be able to go back and edit the ‘open’ note to appear on the correct string, and the correct note would appear in the staff.

Additionally, editing for notes would have been implemented with more time. Adding playing techniques to notes such as hammer-on’s, pull-off’s, slides, bends, etc, would have been added. Since the hardware cannot determine such playing techniques, this feature would have allowed the guitarist to edit their captured data and add these techniques in.

8 • Conclusions

The goal of the AGS AutoTabber project was to improve upon current methods of creating guitar tablature, with an all-in-one hardware and software package. Despite certain limitations in the final product, the AutoTabber is successful in meeting the goal set out for it. Without having to stop playing, a guitarist can use the AutoTabber to write tablature or music quickly and easily. This project has proven the original concept is a viable one, and much more expansive than what is shown by this example. The AutoTabber concept could easily be implemented on other stringed instruments, not necessarily just a bass guitar. Different options in the software could allow users to switch to the appropriate instrument, updating the look of the tablature based on which was being used (for example, standard bass tablature has only four lines for the four strings; standard guitar tablature has six lines for the six strings).

9 • Glossary

AGS - AutoGuitar Solutions

AutoTabber - Hardware and software package used to automatically generate guitar tablature.

bend - Stringed instrument playing technique.

C - General-purpose programming language. See ‘programming language.’

C# - Object-oriented programming language. See ‘programming language.’

C++ - Object-oriented programming language. See ‘programming language.’

chip - Electronic equipment fabricated to carry out an electronic function.

chord - A combination of any three or more notes played simultaneously. See ‘note.’

fret - Raised metal strip on the neck of a stringed instrument, like a guitar.

hammer-on - Stringed instrument playing technique.

microcontroller - A functional computer system on a chip, used to control a device.

note - A notation representing the pitch and duration of a musical sound.

PIC - See ‘microcontroller.’

PIC18F4550    Microcontroller - used to control all operations of the hardware. See ‘microcontroller.’

pickup - Transducer that captures mechanical vibrations.

programming language - A language used for programming computers.

pull-off - Stringed instrument playing technique.

riff - Repeated chord progression. See ‘chord.’

slide - Stringed instrument playing technique.

tabbing - The method of creating tablature. See ‘tablature.’

tab - See ‘tablature.’

tablature - A method for transcribing notes played on a guitar. Also referred to as ‘tab.’ See ‘note.’

USB - Universal Serial Bus standard.

10 • Bibliography

Taylor Guitars, “Glossary,” [Online]. Available:    Owner Resources | Taylor Guitars [Accessed:    September 11, 2008].

Wiktionary, “bass guitar,” 15 August 2008, [Online]. Available:    bass guitar - Wiktionary [Accessed: September 11, 2008].

GuitarNuts, “How Magnetic Pickups Work,” 2008, [Online]. Available: - How Magnetic Pickups Work [Accessed: April 21, 2009]

The following images of the project were taking a few weeks before official completion

Wow.. This is an amazing job, well done!
I know from my own personal experiences when playing the guitar, I'll do something that sounded awesome and can rarely duplicate it again.. hahaha.

Very Impressive!

Well, the box can be half of it's size and some cable clutter are not pretty, but maybe that get improved over time  ;D However I do wonder, since bass guitar have four strings, what happened to the last one?

And when the software let the editing to work? 🙂  Still, it looks good and hopefully it will work good too - I would solder the components to own PCB to make things smaller and mainly vibration-protected. I did not believe sockets when placed on things that do vibrate.

Thanks, both of you.

This project was my college capstone project, completed back in April 2009 and I am just sharing what our final report was. This has not been touched since it was "completed." and there are no plans to improve on it at this time (though I have learned a lot in the past four years and technology has advanced to where there are retail versions out that work on frequency analysis). It was a proof of concept prototype.

The fourth string had broken, we did not include any full body pictures of the guitar in our report as we had a physical demonstration of it too, to show it worked.

At some point I plan to put up my university capstone project, which is a reflow soldering oven using a toaster oven as the soldering oven and an Arduino + Windows GUI to control the solder profile/oven elements.

  • 17
  • 6699