Results


Usability was one of our key focuses. We didn’t want to have to reprogram the board every time it started up. Also, while the menu interface contains a lot of options and tunable parameters, it has a lot of visual cues to aid in use. The red pointer on the left side of the menu shows users what line in the menu they have selected, and the four buttons allow the user to easily cycle through the menu and select the parameter they wish to adjust. By including three separate knobs, the three different parameters could be adjusted simultaneously, giving the user the flexibility to easily create a number of different sounds.

One of the key features that we achieved in terms of usability is the processing of UART/MIDI signals. Different MIDI controllers send a lot of extraneous data that is not relevant to this device. Also, when starting up the device or switching between MIDI inputs, some packets may be not be received correctly. Our chip needed to be able to sort through these messages and not cause an error or overload the UART buffer. Once we found a way to clear the UART error flag and process messages safely, the MIDI signal could be interrupted or the source could be changed without having to reset the device.

We also kept pushing the idea that the system should be enclosed in the box. This allows us to not have to worry about disrupting connections or breaking the circuits. It also helps clarify the product for the user, where the only way they can interact with the circuit are the external buttons, knobs, and ports for cables. The size of the holes and the shapes of the connectors prevent confusion as to what cables go where.

The synthesizer performed quite well in terms of speed and concurrency. Firstly, the response time was excellent, and it seemed as if MIDI input signals were processed and played out through the audio output almost instantaneously. Even when playing quickly, each note could easily be heard. The many conditions that might result in an error were handled appropriately so that the synthesizer was never stuck on a single MIDI command that prevented the device from functioning.

The device performed smoothly with an incredible amount user interactivity, but because the focus of the project was so heavily based on usability, there were a few flaws in the performance. The MIDI decoding into notes was smooth, but there were a few issues. The effects worked flawlessly except for a slight issue in the duty cycle modulation effect. In roughly the first and last eighth in the range of rotation in the effect knob, the duty cycle caused slight detuning of the signal (roughly one to three quarter tones). This occurred because in the DDS design, varying phase increments are used to produce different frequencies from the same wave tables, and since duty cycle modulation involves adjusting the increment, large adjustments can cause errors. The phase moves too quickly through the short half of the table, and significant number of the table entries end up getting skipped in both halves. The skipped entries in the second half of the table result in a quicker return to the beginning of the table, speeding up the frequency. This effect is less present in lower frequencies because the program moves through the table more slowly.

The most notable of the issues had to do with the knobs used to simultaneously tune three different parameters in the menu. Though the buffering of each knob was successfully, there was an issue that spanned across the three knobs that occasionally counteracted this functionality. Because the PIC32 only contains a single 10-bit analog-to-digital converter, the three knobs have to be sequentially red by this device. The knobs values were all read from the same buffer register, so occasionally values from one knob would bleed over to another knob. Though the short pulse of a different value is only a slight issue, the larger problem is that the selected parameter value would then change to the current reading from the knob rather than returning to the previous value. This causes the unwanted latching of values, and an example can be seen in the video where the waveform jumps unexpectedly from the sine waveform to the noise waveform.

Conclusions


In the design of our project, the main focus was containing the entire device in a single package. In accordance with the IEEE Code of Ethics, this minimizes the risk of damaging the device or any of its users during everyday use. Some of the code we used was adapted from the code and libraries used in Lab 2 of the course, so we made sure to credit the authors of the source we adapted our code from. We created much of the code, though, and while we are using a MIDI protocol, there is no patent or terms of use for it. We included additional circuits such as the opto-isolator to ensure that our synthesizer would not only prevent damage to itself, but also any controllers plugged into it. This device is meant to be a product that would be completely independent from any MIDI controller, so we have not not included the cost of any controller in budget calculations. Also, since we intend to keep the synthesizer intact after the semester ends, we need to account for replacing the Microstick II and TFT display for the class. In designing this synthesizer, we took inspiration from various synthesizers and computer programs that exist on the market. We did not specifically reverse-engineer any particular product, but instead we have noted aspects in each that we have seen to be successful and have designed our product around those successful qualities.

There were only a few issues with the device, but there are a number of solutions to fix those errors. Two better approaches to duty cycle modulation would have been to either increase both the length of the wave tables and the sampling frequency or to create separate waveforms for each possible duty cycle value. For the knob ADC errors, a better approach that would be used in future iterations would have been to utilize the ability to scan across multiple analog inputs and pass each knob reading into an independent buffer. In addition to these bug fixes, we would include more effects like echo, digital filtering, and distortion, which were left out of the design due to time constraints. Still though, this synthesizer was widely successful in meeting our expectations. Not only were we able to create a product that could be used easily by a musician in many different settings, but we were also able to design a flexible product that could interact with any MIDI controller. The interactive menu makes it easy to see the many different options and parameters that can be adjusted, and the modularity of each effect gives the user the freedom to create many different interesting sounds.