Introduction
Digital audio effects processors are used mainly by musicians and sound engineers to add special effects to sound recordings and/or live sound performances. They are also used in top-end HiFi systems to simulate the characteristics of discos, halls, stadiums, etc. and to add quality to recordings.
I did my final year project for my Electronic Engineering course at the University of Natal, Durban, in the second half of '96. It was a real-time digital audio effects processor using the desktop PC as the signal processor. I also worked on a dedicated, stand-alone digital delay unit, based on the Intel 8031 microcontroller, although it was never completed.
Audio Effects
The effects created by digital audio effects processors include chorus, flanging, reverberation, pitch shifting and distortion. Check out my effects description page for more information.
When trying to build an effects processor, be it a multi-effects processor or a dedicated processor, it is important to consider the hardware implementation as well as the software implementation of the system. The two halves of the system are inter-related, and a poor choice of hardware implementation will lead to an unsuccessful system.
Hardware Implementation
On the hardware level, there is a choice between implementation on a stand-alone unit comprising an analog-to-digital converter (ADC), a signal processor, and a digital-to-analog converter (DAC); implementation on a digital signal processing (DSP) evaluation board (effectively a ready-made stand-alone system); or implementation on the widely used and well established personal computer (PC). Check out my hardware implementation page for more information on the hardware.
Software Implementation
On the software level, various algorithms exist to implement the effects. However, as I discovered, these are either a closely-guarded secret or patented, etc. Not much information is readily available on these algorithms and many of them were formulated by myself. I have put up some effects algorithms with C++ source code.
Some software implementation considerations are the use of DMA for processor-independent data transfer, timer interrupt service routines (ISRs) to achieve accurate sampling rates, and the use of buffers (circular buffers, etc.).
For implementation on the PC, I used a software implementation structure that uses a circular buffer for the output whereby the processor writes it's output ahead of the point in the buffer that is currently being output. The output is handled by a timer Interrupt Service Routine (ISR). If the output catches up to the point in the buffer that is being written to, then the processing is not happening fast enough (this situation is easy to detect). For the input, I used DMA to transfer the data from the sound card to an internal buffer.
