This is a collection of projects that use an Arduino to perform digital signal processing (DSP) on audio signals. By reading only 8 bits of an incoming analog signal and sending 8 parallel bits of information to an off-board DAC, it’s possible to sample, process, and output audio near 44.1kHz with an Arduino Uno.
This Arduino-powered vocal effects box pitch shifts and distorts incoming audio signals to produce a wide variety of vocal effects. It samples an incoming microphone signal at a rate of about 40 kHz, manipulates the audio digitally, and then outputs 8 bit audio at 40 kHz through an R2R resistor ladder DAC. To minimize the amount of computation required by the Arduino, I used a technique called granular synthesis to process the incoming signal. Essentially, as audio comes into the Arduino it gets cut up and stored as small (millisecond or microsecond sized) samples called "grains." These grains are then individually manipulated and played back; they may be lengthened or shortened, stretched or compressed, played back in reverse, copied several times, or mixed with other grains. You can hear a (somewhat nightmare-inducing) audio sample from the effects box below. Download the .wav file here. The whole project is documented on Instructables. with parts lists, schematics, code, and step by step build instructions.
An experiment pushing the limits of the Arduino Uno's memory. The glitchbox is an Arduino-powered, sample-based drum machine used for live audio sequencing. The buttons on the front of the instrument play back nine audio samples stored in memory. A switch on top records, quantizes, and loops sequences of these samples. Once a sequence is recorded, additional samples may be layered and automatically looped on top. Recorded sequences may also be temporarily muted or cleared and rerecorded. Two knobs on top of the instrument control volume and tempo. Complete build documentation can be found on Instructables
Information about generating 44.1kHz stereo audio with an 8 bit dual output DAC IC. Includes code and circuits for generating binaural beats and panning between left and right channels. Find it on Instructables.
As a follow up to my Arduino Audio Input tutorial, I wrote a sketch that analyzes a signal coming into the Arduino's analog input and determines the fundamental frequency. The code uses a sampling rate of 38.5kHz and is generalized for arbitrary waveshapes. I've also included code for setting up an LED clipping indicator and attack detection. Find it on Instructables.
An Instructable documenting how to amplify and bias an audio signal so that it can be sampled by one of the Arduino's analog input pins. Includes code for manually setting the Arduino's ADC for a sampling rate of up to 38.5kHz at 8-bit precision. Used in my Arduino vocal effects box and Arduino frequency detection projects. Find it on Instructables.
An Instructable explaining how to set up a simple 8 bit R2R DAC on pins 0-7 of an Arduino (PORTD). This DAC is used in many of my projects including the glitchbox, waveform generator, and vocal effects box. Includes code for sampling rates of up to 40 kHz using interrupts. Find it on Instructables.