<High Level Design>
Our initial goals were to make an echo for the guitar. However, we instantly fell into problems. To make an echo effect we would need enough memory to store the previous past audio samples. So we went to the drawing board to consider the feasibility of our soon to exist cool echo machine. We figured that we wanted to sample at 44.1kHz or cd-quality (why would we reduce ourselves to anything less). So it turns out that sampling at 44.1kHz or 44,100 samples per second using a 1 byte resolution we would need 44,100 bytes per second! Ok, so how would we accomplish this? It turns out that none of the AVR micro controllers in lab have this much memory. One possible solution at the time was to use the 8515 micro controller which had 32Kb of memory. Hence if we would satisfy ourselves by sampling at 32kHz we were set! Ok, this didn’t work out either. The 8515 does have 32kBytes of external addressable SRAM but it does not have an ADC (analog to digital converter) and even worse the external memory uses 2 ports and 2 pins for addressing and memory IO. This meant a couple of things. It meant that we would use an external ADC and it had to be serially connected to the MCU. Of course the fact that we did not have serial ADC in the lab available and that if indeed we would get it in on time and pull everything off we would not have any more ports available to do a cool LCD display couldn’t make things worse. We took a step back and reanalyzed the problem. What was so cool about an echo anyway?
We sat down and thought about other ideas and came up with the guitar effects synthesizer. If we could build a circuit that could make more than one effect and the user had the freedom to switch among a list of effects and change their parameters we would be blessed. And this is what we set out to do.
We quickly figured that our main constraint was memory. We had to pick guitar effects that were computationally simple and memory efficient. We initially set out to create the reverb effect. Later on we ended with a total of four effects. The list of effects we decided to implement where the following: Reverb, Distortion, Tremolo, and Echo (more on this later).
We used the Mega32 micro controller because it had 2Kb of memory and internal ADC. We decided to sample the sound signal at a rate of 6kHz. (Ok, so we lowered our expectations a tad from the latter sampling rate of 44.1kHz). At this sampling rate and with 2kb of SRAM we would be able to hold about a third of a second in our buffer. Would this be enough? It was. We were capable of building a circuit which had two user inputs (button0 and button1) and a LCD display. When the user presses button0 the LCD displays a guitar effect. The user can keep pressing button0 and cycling through all the effects including a "No effect" effect which basically just passes the guitar signal untouched. Once the user has selected a effect he can press button1 and change the effect properties to a list of pre-set values. That is the user can select the Distortion effect and then select by pressing button1 the amount of Distortion he or she desires. Below a is a list of all the following effects with their pre-set values and a brief description of them.
For definitions of the effects please refer to the Software Design page.
PRE-SET PROPERTIES: Church, Auditorium, Large Room, Reverse*
* The property names refer to the sound the guitar makes when played. That is, when playing in Reverb/Church mode the sound (if recorded) of the guitar sounds like if it was recorded in a huge Church as oppose to a small studio recording room. Refer to the Results page to listen to the effects!
PRE-SET PROPERTIES: High, Medium, Low, None
PRE-SET PROPERTIES: Fast, Medium, Slow, Very Slow*
*These property names refer to the frequency of the Tremolo. Refer to the Results page to listen to the effects! These frequency variations are clearly heard in the sound sample.
PRE-SET PROPERTIES: None
EFFECT: No Effect
PRE-SET PROPERTIES: None